1 /* A Bison parser, made by GNU Bison 3.0.5. */ 2 3 /* Bison implementation for Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. 6 7 This program is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 /* As a special exception, you may create a larger work that contains 21 part or all of the Bison parser skeleton and distribute that work 22 under terms of your choice, so long as that work isn't itself a 23 parser generator using the skeleton or a modified version thereof 24 as a parser skeleton. Alternatively, if you modify or redistribute 25 the parser skeleton itself, you may (at your option) remove this 26 special exception, which will cause the skeleton and the resulting 27 Bison output files to be licensed under the GNU General Public 28 License without this special exception. 29 30 This special exception was added by the Free Software Foundation in 31 version 2.2 of Bison. */ 32 33 /* C LALR(1) parser skeleton written by Richard Stallman, by 34 simplifying the original so-called "semantic" parser. */ 35 36 /* All symbols defined below should begin with yy or YY, to avoid 37 infringing on user name space. This should be done even for local 38 variables, as they might otherwise be expanded by user macros. 39 There are some unavoidable exceptions within include files to 40 define necessary library symbols; they are noted "INFRINGES ON 41 USER NAME SPACE" below. */ 42 43 /* Identify Bison output. */ 44 #define YYBISON 1 45 46 /* Bison version. */ 47 #define YYBISON_VERSION "3.0.5" 48 49 /* Skeleton name. */ 50 #define YYSKELETON_NAME "yacc.c" 51 52 /* Pure parsers. */ 53 #define YYPURE 0 54 55 /* Push parsers. */ 56 #define YYPUSH 0 57 58 /* Pull parsers. */ 59 #define YYPULL 1 60 61 62 63 64 /* Copy the first part of user declarations. */ 65 #line 10 "configparser.y" /* yacc.c:339 */ 66 67 #include "config.h" 68 69 #include <assert.h> 70 #include <errno.h> 71 #include <stdio.h> 72 #include <string.h> 73 74 #include "options.h" 75 #include "util.h" 76 #include "dname.h" 77 #include "tsig.h" 78 #include "rrl.h" 79 #include "configyyrename.h" 80 81 int yylex(void); 82 83 #ifdef __cplusplus 84 extern "C" 85 #endif 86 87 /* these need to be global, otherwise they cannot be used inside yacc */ 88 extern config_parser_state_type *cfg_parser; 89 90 static void append_acl(struct acl_options **list, struct acl_options *acl); 91 92 #line 93 "configparser.c" /* yacc.c:339 */ 93 94 # ifndef YY_NULLPTR 95 # if defined __cplusplus && 201103L <= __cplusplus 96 # define YY_NULLPTR nullptr 97 # else 98 # define YY_NULLPTR 0 99 # endif 100 # endif 101 102 /* Enabling verbose error messages. */ 103 #ifdef YYERROR_VERBOSE 104 # undef YYERROR_VERBOSE 105 # define YYERROR_VERBOSE 1 106 #else 107 # define YYERROR_VERBOSE 0 108 #endif 109 110 /* In a future release of Bison, this section will be replaced 111 by #include "configparser.h". */ 112 #ifndef YY_YY_CONFIGPARSER_H_INCLUDED 113 # define YY_YY_CONFIGPARSER_H_INCLUDED 114 /* Debug traces. */ 115 #ifndef YYDEBUG 116 # define YYDEBUG 0 117 #endif 118 #if YYDEBUG 119 extern int yydebug; 120 #endif 121 122 /* Token type. */ 123 #ifndef YYTOKENTYPE 124 # define YYTOKENTYPE 125 enum yytokentype 126 { 127 STRING = 258, 128 VAR_SERVER = 259, 129 VAR_SERVER_COUNT = 260, 130 VAR_IP_ADDRESS = 261, 131 VAR_IP_TRANSPARENT = 262, 132 VAR_IP_FREEBIND = 263, 133 VAR_REUSEPORT = 264, 134 VAR_SEND_BUFFER_SIZE = 265, 135 VAR_RECEIVE_BUFFER_SIZE = 266, 136 VAR_DEBUG_MODE = 267, 137 VAR_IP4_ONLY = 268, 138 VAR_IP6_ONLY = 269, 139 VAR_DO_IP4 = 270, 140 VAR_DO_IP6 = 271, 141 VAR_PORT = 272, 142 VAR_USE_SYSTEMD = 273, 143 VAR_VERBOSITY = 274, 144 VAR_USERNAME = 275, 145 VAR_CHROOT = 276, 146 VAR_ZONESDIR = 277, 147 VAR_ZONELISTFILE = 278, 148 VAR_DATABASE = 279, 149 VAR_LOGFILE = 280, 150 VAR_PIDFILE = 281, 151 VAR_DIFFFILE = 282, 152 VAR_XFRDFILE = 283, 153 VAR_XFRDIR = 284, 154 VAR_HIDE_VERSION = 285, 155 VAR_HIDE_IDENTITY = 286, 156 VAR_VERSION = 287, 157 VAR_IDENTITY = 288, 158 VAR_NSID = 289, 159 VAR_TCP_COUNT = 290, 160 VAR_TCP_REJECT_OVERFLOW = 291, 161 VAR_TCP_QUERY_COUNT = 292, 162 VAR_TCP_TIMEOUT = 293, 163 VAR_TCP_MSS = 294, 164 VAR_OUTGOING_TCP_MSS = 295, 165 VAR_IPV4_EDNS_SIZE = 296, 166 VAR_IPV6_EDNS_SIZE = 297, 167 VAR_STATISTICS = 298, 168 VAR_XFRD_RELOAD_TIMEOUT = 299, 169 VAR_LOG_TIME_ASCII = 300, 170 VAR_ROUND_ROBIN = 301, 171 VAR_MINIMAL_RESPONSES = 302, 172 VAR_CONFINE_TO_ZONE = 303, 173 VAR_REFUSE_ANY = 304, 174 VAR_ZONEFILES_CHECK = 305, 175 VAR_ZONEFILES_WRITE = 306, 176 VAR_RRL_SIZE = 307, 177 VAR_RRL_RATELIMIT = 308, 178 VAR_RRL_SLIP = 309, 179 VAR_RRL_IPV4_PREFIX_LENGTH = 310, 180 VAR_RRL_IPV6_PREFIX_LENGTH = 311, 181 VAR_RRL_WHITELIST_RATELIMIT = 312, 182 VAR_TLS_SERVICE_KEY = 313, 183 VAR_TLS_SERVICE_PEM = 314, 184 VAR_TLS_SERVICE_OCSP = 315, 185 VAR_TLS_PORT = 316, 186 VAR_DNSTAP = 317, 187 VAR_DNSTAP_ENABLE = 318, 188 VAR_DNSTAP_SOCKET_PATH = 319, 189 VAR_DNSTAP_SEND_IDENTITY = 320, 190 VAR_DNSTAP_SEND_VERSION = 321, 191 VAR_DNSTAP_IDENTITY = 322, 192 VAR_DNSTAP_VERSION = 323, 193 VAR_DNSTAP_LOG_AUTH_QUERY_MESSAGES = 324, 194 VAR_DNSTAP_LOG_AUTH_RESPONSE_MESSAGES = 325, 195 VAR_REMOTE_CONTROL = 326, 196 VAR_CONTROL_ENABLE = 327, 197 VAR_CONTROL_INTERFACE = 328, 198 VAR_CONTROL_PORT = 329, 199 VAR_SERVER_KEY_FILE = 330, 200 VAR_SERVER_CERT_FILE = 331, 201 VAR_CONTROL_KEY_FILE = 332, 202 VAR_CONTROL_CERT_FILE = 333, 203 VAR_KEY = 334, 204 VAR_ALGORITHM = 335, 205 VAR_SECRET = 336, 206 VAR_PATTERN = 337, 207 VAR_NAME = 338, 208 VAR_ZONEFILE = 339, 209 VAR_NOTIFY = 340, 210 VAR_PROVIDE_XFR = 341, 211 VAR_AXFR = 342, 212 VAR_UDP = 343, 213 VAR_NOTIFY_RETRY = 344, 214 VAR_ALLOW_NOTIFY = 345, 215 VAR_REQUEST_XFR = 346, 216 VAR_ALLOW_AXFR_FALLBACK = 347, 217 VAR_OUTGOING_INTERFACE = 348, 218 VAR_MAX_REFRESH_TIME = 349, 219 VAR_MIN_REFRESH_TIME = 350, 220 VAR_MAX_RETRY_TIME = 351, 221 VAR_MIN_RETRY_TIME = 352, 222 VAR_MULTI_MASTER_CHECK = 353, 223 VAR_SIZE_LIMIT_XFR = 354, 224 VAR_ZONESTATS = 355, 225 VAR_INCLUDE_PATTERN = 356, 226 VAR_ZONE = 357, 227 VAR_RRL_WHITELIST = 358 228 }; 229 #endif 230 /* Tokens. */ 231 #define STRING 258 232 #define VAR_SERVER 259 233 #define VAR_SERVER_COUNT 260 234 #define VAR_IP_ADDRESS 261 235 #define VAR_IP_TRANSPARENT 262 236 #define VAR_IP_FREEBIND 263 237 #define VAR_REUSEPORT 264 238 #define VAR_SEND_BUFFER_SIZE 265 239 #define VAR_RECEIVE_BUFFER_SIZE 266 240 #define VAR_DEBUG_MODE 267 241 #define VAR_IP4_ONLY 268 242 #define VAR_IP6_ONLY 269 243 #define VAR_DO_IP4 270 244 #define VAR_DO_IP6 271 245 #define VAR_PORT 272 246 #define VAR_USE_SYSTEMD 273 247 #define VAR_VERBOSITY 274 248 #define VAR_USERNAME 275 249 #define VAR_CHROOT 276 250 #define VAR_ZONESDIR 277 251 #define VAR_ZONELISTFILE 278 252 #define VAR_DATABASE 279 253 #define VAR_LOGFILE 280 254 #define VAR_PIDFILE 281 255 #define VAR_DIFFFILE 282 256 #define VAR_XFRDFILE 283 257 #define VAR_XFRDIR 284 258 #define VAR_HIDE_VERSION 285 259 #define VAR_HIDE_IDENTITY 286 260 #define VAR_VERSION 287 261 #define VAR_IDENTITY 288 262 #define VAR_NSID 289 263 #define VAR_TCP_COUNT 290 264 #define VAR_TCP_REJECT_OVERFLOW 291 265 #define VAR_TCP_QUERY_COUNT 292 266 #define VAR_TCP_TIMEOUT 293 267 #define VAR_TCP_MSS 294 268 #define VAR_OUTGOING_TCP_MSS 295 269 #define VAR_IPV4_EDNS_SIZE 296 270 #define VAR_IPV6_EDNS_SIZE 297 271 #define VAR_STATISTICS 298 272 #define VAR_XFRD_RELOAD_TIMEOUT 299 273 #define VAR_LOG_TIME_ASCII 300 274 #define VAR_ROUND_ROBIN 301 275 #define VAR_MINIMAL_RESPONSES 302 276 #define VAR_CONFINE_TO_ZONE 303 277 #define VAR_REFUSE_ANY 304 278 #define VAR_ZONEFILES_CHECK 305 279 #define VAR_ZONEFILES_WRITE 306 280 #define VAR_RRL_SIZE 307 281 #define VAR_RRL_RATELIMIT 308 282 #define VAR_RRL_SLIP 309 283 #define VAR_RRL_IPV4_PREFIX_LENGTH 310 284 #define VAR_RRL_IPV6_PREFIX_LENGTH 311 285 #define VAR_RRL_WHITELIST_RATELIMIT 312 286 #define VAR_TLS_SERVICE_KEY 313 287 #define VAR_TLS_SERVICE_PEM 314 288 #define VAR_TLS_SERVICE_OCSP 315 289 #define VAR_TLS_PORT 316 290 #define VAR_DNSTAP 317 291 #define VAR_DNSTAP_ENABLE 318 292 #define VAR_DNSTAP_SOCKET_PATH 319 293 #define VAR_DNSTAP_SEND_IDENTITY 320 294 #define VAR_DNSTAP_SEND_VERSION 321 295 #define VAR_DNSTAP_IDENTITY 322 296 #define VAR_DNSTAP_VERSION 323 297 #define VAR_DNSTAP_LOG_AUTH_QUERY_MESSAGES 324 298 #define VAR_DNSTAP_LOG_AUTH_RESPONSE_MESSAGES 325 299 #define VAR_REMOTE_CONTROL 326 300 #define VAR_CONTROL_ENABLE 327 301 #define VAR_CONTROL_INTERFACE 328 302 #define VAR_CONTROL_PORT 329 303 #define VAR_SERVER_KEY_FILE 330 304 #define VAR_SERVER_CERT_FILE 331 305 #define VAR_CONTROL_KEY_FILE 332 306 #define VAR_CONTROL_CERT_FILE 333 307 #define VAR_KEY 334 308 #define VAR_ALGORITHM 335 309 #define VAR_SECRET 336 310 #define VAR_PATTERN 337 311 #define VAR_NAME 338 312 #define VAR_ZONEFILE 339 313 #define VAR_NOTIFY 340 314 #define VAR_PROVIDE_XFR 341 315 #define VAR_AXFR 342 316 #define VAR_UDP 343 317 #define VAR_NOTIFY_RETRY 344 318 #define VAR_ALLOW_NOTIFY 345 319 #define VAR_REQUEST_XFR 346 320 #define VAR_ALLOW_AXFR_FALLBACK 347 321 #define VAR_OUTGOING_INTERFACE 348 322 #define VAR_MAX_REFRESH_TIME 349 323 #define VAR_MIN_REFRESH_TIME 350 324 #define VAR_MAX_RETRY_TIME 351 325 #define VAR_MIN_RETRY_TIME 352 326 #define VAR_MULTI_MASTER_CHECK 353 327 #define VAR_SIZE_LIMIT_XFR 354 328 #define VAR_ZONESTATS 355 329 #define VAR_INCLUDE_PATTERN 356 330 #define VAR_ZONE 357 331 #define VAR_RRL_WHITELIST 358 332 333 /* Value type. */ 334 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 335 336 union YYSTYPE 337 { 338 #line 37 "configparser.y" /* yacc.c:355 */ 339 340 char *str; 341 long long llng; 342 int bln; 343 struct ip_address_option *ip; 344 345 #line 346 "configparser.c" /* yacc.c:355 */ 346 }; 347 348 typedef union YYSTYPE YYSTYPE; 349 # define YYSTYPE_IS_TRIVIAL 1 350 # define YYSTYPE_IS_DECLARED 1 351 #endif 352 353 354 extern YYSTYPE yylval; 355 356 int yyparse (void); 357 358 #endif /* !YY_YY_CONFIGPARSER_H_INCLUDED */ 359 360 /* Copy the second part of user declarations. */ 361 362 #line 363 "configparser.c" /* yacc.c:358 */ 363 364 #ifdef short 365 # undef short 366 #endif 367 368 #ifdef YYTYPE_UINT8 369 typedef YYTYPE_UINT8 yytype_uint8; 370 #else 371 typedef unsigned char yytype_uint8; 372 #endif 373 374 #ifdef YYTYPE_INT8 375 typedef YYTYPE_INT8 yytype_int8; 376 #else 377 typedef signed char yytype_int8; 378 #endif 379 380 #ifdef YYTYPE_UINT16 381 typedef YYTYPE_UINT16 yytype_uint16; 382 #else 383 typedef unsigned short int yytype_uint16; 384 #endif 385 386 #ifdef YYTYPE_INT16 387 typedef YYTYPE_INT16 yytype_int16; 388 #else 389 typedef short int yytype_int16; 390 #endif 391 392 #ifndef YYSIZE_T 393 # ifdef __SIZE_TYPE__ 394 # define YYSIZE_T __SIZE_TYPE__ 395 # elif defined size_t 396 # define YYSIZE_T size_t 397 # elif ! defined YYSIZE_T 398 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 399 # define YYSIZE_T size_t 400 # else 401 # define YYSIZE_T unsigned int 402 # endif 403 #endif 404 405 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 406 407 #ifndef YY_ 408 # if defined YYENABLE_NLS && YYENABLE_NLS 409 # if ENABLE_NLS 410 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 411 # define YY_(Msgid) dgettext ("bison-runtime", Msgid) 412 # endif 413 # endif 414 # ifndef YY_ 415 # define YY_(Msgid) Msgid 416 # endif 417 #endif 418 419 #ifndef YY_ATTRIBUTE 420 # if (defined __GNUC__ \ 421 && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ 422 || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C 423 # define YY_ATTRIBUTE(Spec) __attribute__(Spec) 424 # else 425 # define YY_ATTRIBUTE(Spec) /* empty */ 426 # endif 427 #endif 428 429 #ifndef YY_ATTRIBUTE_PURE 430 # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) 431 #endif 432 433 #ifndef YY_ATTRIBUTE_UNUSED 434 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) 435 #endif 436 437 #if !defined _Noreturn \ 438 && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) 439 # if defined _MSC_VER && 1200 <= _MSC_VER 440 # define _Noreturn __declspec (noreturn) 441 # else 442 # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) 443 # endif 444 #endif 445 446 /* Suppress unused-variable warnings by "using" E. */ 447 #if ! defined lint || defined __GNUC__ 448 # define YYUSE(E) ((void) (E)) 449 #else 450 # define YYUSE(E) /* empty */ 451 #endif 452 453 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ 454 /* Suppress an incorrect diagnostic about yylval being uninitialized. */ 455 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 456 _Pragma ("GCC diagnostic push") \ 457 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ 458 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 459 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 460 _Pragma ("GCC diagnostic pop") 461 #else 462 # define YY_INITIAL_VALUE(Value) Value 463 #endif 464 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 465 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 466 # define YY_IGNORE_MAYBE_UNINITIALIZED_END 467 #endif 468 #ifndef YY_INITIAL_VALUE 469 # define YY_INITIAL_VALUE(Value) /* Nothing. */ 470 #endif 471 472 473 #if ! defined yyoverflow || YYERROR_VERBOSE 474 475 /* The parser invokes alloca or malloc; define the necessary symbols. */ 476 477 # ifdef YYSTACK_USE_ALLOCA 478 # if YYSTACK_USE_ALLOCA 479 # ifdef __GNUC__ 480 # define YYSTACK_ALLOC __builtin_alloca 481 # elif defined __BUILTIN_VA_ARG_INCR 482 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 483 # elif defined _AIX 484 # define YYSTACK_ALLOC __alloca 485 # elif defined _MSC_VER 486 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 487 # define alloca _alloca 488 # else 489 # define YYSTACK_ALLOC alloca 490 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS 491 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 492 /* Use EXIT_SUCCESS as a witness for stdlib.h. */ 493 # ifndef EXIT_SUCCESS 494 # define EXIT_SUCCESS 0 495 # endif 496 # endif 497 # endif 498 # endif 499 # endif 500 501 # ifdef YYSTACK_ALLOC 502 /* Pacify GCC's 'empty if-body' warning. */ 503 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 504 # ifndef YYSTACK_ALLOC_MAXIMUM 505 /* The OS might guarantee only one guard page at the bottom of the stack, 506 and a page size can be as small as 4096 bytes. So we cannot safely 507 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 508 to allow for a few compiler-allocated temporary stack slots. */ 509 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 510 # endif 511 # else 512 # define YYSTACK_ALLOC YYMALLOC 513 # define YYSTACK_FREE YYFREE 514 # ifndef YYSTACK_ALLOC_MAXIMUM 515 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 516 # endif 517 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ 518 && ! ((defined YYMALLOC || defined malloc) \ 519 && (defined YYFREE || defined free))) 520 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 521 # ifndef EXIT_SUCCESS 522 # define EXIT_SUCCESS 0 523 # endif 524 # endif 525 # ifndef YYMALLOC 526 # define YYMALLOC malloc 527 # if ! defined malloc && ! defined EXIT_SUCCESS 528 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 529 # endif 530 # endif 531 # ifndef YYFREE 532 # define YYFREE free 533 # if ! defined free && ! defined EXIT_SUCCESS 534 void free (void *); /* INFRINGES ON USER NAME SPACE */ 535 # endif 536 # endif 537 # endif 538 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 539 540 541 #if (! defined yyoverflow \ 542 && (! defined __cplusplus \ 543 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 544 545 /* A type that is properly aligned for any stack member. */ 546 union yyalloc 547 { 548 yytype_int16 yyss_alloc; 549 YYSTYPE yyvs_alloc; 550 }; 551 552 /* The size of the maximum gap between one aligned stack and the next. */ 553 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 554 555 /* The size of an array large to enough to hold all stacks, each with 556 N elements. */ 557 # define YYSTACK_BYTES(N) \ 558 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 559 + YYSTACK_GAP_MAXIMUM) 560 561 # define YYCOPY_NEEDED 1 562 563 /* Relocate STACK from its old location to the new one. The 564 local variables YYSIZE and YYSTACKSIZE give the old and new number of 565 elements in the stack, and YYPTR gives the new location of the 566 stack. Advance YYPTR to a properly aligned location for the next 567 stack. */ 568 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 569 do \ 570 { \ 571 YYSIZE_T yynewbytes; \ 572 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 573 Stack = &yyptr->Stack_alloc; \ 574 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 575 yyptr += yynewbytes / sizeof (*yyptr); \ 576 } \ 577 while (0) 578 579 #endif 580 581 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED 582 /* Copy COUNT objects from SRC to DST. The source and destination do 583 not overlap. */ 584 # ifndef YYCOPY 585 # if defined __GNUC__ && 1 < __GNUC__ 586 # define YYCOPY(Dst, Src, Count) \ 587 __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) 588 # else 589 # define YYCOPY(Dst, Src, Count) \ 590 do \ 591 { \ 592 YYSIZE_T yyi; \ 593 for (yyi = 0; yyi < (Count); yyi++) \ 594 (Dst)[yyi] = (Src)[yyi]; \ 595 } \ 596 while (0) 597 # endif 598 # endif 599 #endif /* !YYCOPY_NEEDED */ 600 601 /* YYFINAL -- State number of the termination state. */ 602 #define YYFINAL 2 603 /* YYLAST -- Last index in YYTABLE. */ 604 #define YYLAST 266 605 606 /* YYNTOKENS -- Number of terminals. */ 607 #define YYNTOKENS 104 608 /* YYNNTS -- Number of nonterminals. */ 609 #define YYNNTS 28 610 /* YYNRULES -- Number of rules. */ 611 #define YYNRULES 131 612 /* YYNSTATES -- Number of states. */ 613 #define YYNSTATES 234 614 615 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned 616 by yylex, with out-of-bounds checking. */ 617 #define YYUNDEFTOK 2 618 #define YYMAXUTOK 358 619 620 #define YYTRANSLATE(YYX) \ 621 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 622 623 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM 624 as returned by yylex, without out-of-bounds checking. */ 625 static const yytype_uint8 yytranslate[] = 626 { 627 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 628 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 629 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 630 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 631 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 632 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 633 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 634 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 635 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 636 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 637 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 638 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 639 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 640 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 641 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 642 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 643 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 644 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 645 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 646 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 647 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 648 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 649 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 650 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 651 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 652 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 653 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 654 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 655 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 656 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 657 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 658 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 659 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 660 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 661 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 662 95, 96, 97, 98, 99, 100, 101, 102, 103 663 }; 664 665 #if YYDEBUG 666 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ 667 static const yytype_uint16 yyrline[] = 668 { 669 0, 163, 163, 165, 168, 169, 170, 171, 172, 173, 670 176, 179, 179, 182, 192, 200, 202, 204, 206, 208, 671 210, 212, 214, 216, 218, 220, 222, 224, 233, 235, 672 237, 267, 269, 277, 279, 281, 283, 285, 287, 289, 673 291, 293, 300, 302, 304, 306, 308, 310, 312, 314, 674 316, 318, 320, 322, 332, 338, 344, 354, 364, 370, 675 372, 374, 379, 384, 389, 391, 393, 395, 397, 399, 676 409, 412, 412, 415, 417, 419, 421, 423, 425, 427, 677 429, 434, 437, 437, 440, 442, 452, 460, 462, 464, 678 466, 472, 471, 496, 496, 499, 511, 519, 538, 537, 679 562, 562, 565, 578, 582, 581, 598, 598, 601, 608, 680 611, 617, 619, 621, 629, 631, 633, 642, 652, 662, 681 667, 676, 681, 686, 691, 696, 701, 706, 711, 718, 682 727, 749 683 }; 684 #endif 685 686 #if YYDEBUG || YYERROR_VERBOSE || 0 687 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 688 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 689 static const char *const yytname[] = 690 { 691 "$end", "error", "$undefined", "STRING", "VAR_SERVER", 692 "VAR_SERVER_COUNT", "VAR_IP_ADDRESS", "VAR_IP_TRANSPARENT", 693 "VAR_IP_FREEBIND", "VAR_REUSEPORT", "VAR_SEND_BUFFER_SIZE", 694 "VAR_RECEIVE_BUFFER_SIZE", "VAR_DEBUG_MODE", "VAR_IP4_ONLY", 695 "VAR_IP6_ONLY", "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PORT", 696 "VAR_USE_SYSTEMD", "VAR_VERBOSITY", "VAR_USERNAME", "VAR_CHROOT", 697 "VAR_ZONESDIR", "VAR_ZONELISTFILE", "VAR_DATABASE", "VAR_LOGFILE", 698 "VAR_PIDFILE", "VAR_DIFFFILE", "VAR_XFRDFILE", "VAR_XFRDIR", 699 "VAR_HIDE_VERSION", "VAR_HIDE_IDENTITY", "VAR_VERSION", "VAR_IDENTITY", 700 "VAR_NSID", "VAR_TCP_COUNT", "VAR_TCP_REJECT_OVERFLOW", 701 "VAR_TCP_QUERY_COUNT", "VAR_TCP_TIMEOUT", "VAR_TCP_MSS", 702 "VAR_OUTGOING_TCP_MSS", "VAR_IPV4_EDNS_SIZE", "VAR_IPV6_EDNS_SIZE", 703 "VAR_STATISTICS", "VAR_XFRD_RELOAD_TIMEOUT", "VAR_LOG_TIME_ASCII", 704 "VAR_ROUND_ROBIN", "VAR_MINIMAL_RESPONSES", "VAR_CONFINE_TO_ZONE", 705 "VAR_REFUSE_ANY", "VAR_ZONEFILES_CHECK", "VAR_ZONEFILES_WRITE", 706 "VAR_RRL_SIZE", "VAR_RRL_RATELIMIT", "VAR_RRL_SLIP", 707 "VAR_RRL_IPV4_PREFIX_LENGTH", "VAR_RRL_IPV6_PREFIX_LENGTH", 708 "VAR_RRL_WHITELIST_RATELIMIT", "VAR_TLS_SERVICE_KEY", 709 "VAR_TLS_SERVICE_PEM", "VAR_TLS_SERVICE_OCSP", "VAR_TLS_PORT", 710 "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", 711 "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", 712 "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", 713 "VAR_DNSTAP_LOG_AUTH_QUERY_MESSAGES", 714 "VAR_DNSTAP_LOG_AUTH_RESPONSE_MESSAGES", "VAR_REMOTE_CONTROL", 715 "VAR_CONTROL_ENABLE", "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", 716 "VAR_SERVER_KEY_FILE", "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", 717 "VAR_CONTROL_CERT_FILE", "VAR_KEY", "VAR_ALGORITHM", "VAR_SECRET", 718 "VAR_PATTERN", "VAR_NAME", "VAR_ZONEFILE", "VAR_NOTIFY", 719 "VAR_PROVIDE_XFR", "VAR_AXFR", "VAR_UDP", "VAR_NOTIFY_RETRY", 720 "VAR_ALLOW_NOTIFY", "VAR_REQUEST_XFR", "VAR_ALLOW_AXFR_FALLBACK", 721 "VAR_OUTGOING_INTERFACE", "VAR_MAX_REFRESH_TIME", "VAR_MIN_REFRESH_TIME", 722 "VAR_MAX_RETRY_TIME", "VAR_MIN_RETRY_TIME", "VAR_MULTI_MASTER_CHECK", 723 "VAR_SIZE_LIMIT_XFR", "VAR_ZONESTATS", "VAR_INCLUDE_PATTERN", "VAR_ZONE", 724 "VAR_RRL_WHITELIST", "$accept", "blocks", "block", "server", 725 "server_block", "server_option", "dnstap", "dnstap_block", 726 "dnstap_option", "remote_control", "remote_control_block", 727 "remote_control_option", "key", "$@1", "key_block", "key_option", "zone", 728 "$@2", "zone_block", "zone_option", "pattern", "$@3", "pattern_block", 729 "pattern_option", "pattern_or_zone_option", "ip_address", "number", 730 "boolean", YY_NULLPTR 731 }; 732 #endif 733 734 # ifdef YYPRINT 735 /* YYTOKNUM[NUM] -- (External) token number corresponding to the 736 (internal) symbol number NUM (which must be that of a token). */ 737 static const yytype_uint16 yytoknum[] = 738 { 739 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 740 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 741 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 742 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 743 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 744 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 745 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 746 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 747 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 748 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 749 355, 356, 357, 358 750 }; 751 # endif 752 753 #define YYPACT_NINF -52 754 755 #define yypact_value_is_default(Yystate) \ 756 (!!((Yystate) == (-52))) 757 758 #define YYTABLE_NINF -1 759 760 #define yytable_value_is_error(Yytable_value) \ 761 0 762 763 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 764 STATE-NUM. */ 765 static const yytype_int16 yypact[] = 766 { 767 -52, 20, -52, -52, -52, -52, -52, -52, -52, -52, 768 -52, -52, -52, -52, -52, -52, 205, -51, -43, -52, 769 -52, -52, -1, 0, 6, 6, 6, -1, -1, 6, 770 6, 6, 6, 6, -1, 6, -1, 18, 22, 23, 771 24, 33, 44, 46, 48, 50, 51, 6, 6, 53, 772 56, 57, -1, 6, -1, -1, -1, -1, -1, -1, 773 -1, -1, 6, 6, 6, 6, 6, 6, -1, -1, 774 -1, -1, -1, -1, -1, 60, 62, 63, -1, -52, 775 6, 64, 6, 6, 66, 75, 6, 6, -52, 6, 776 0, -1, 76, 77, 78, 80, -52, -35, 34, 55, 777 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 778 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 779 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 780 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 781 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 782 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 783 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 784 -52, -52, -52, -52, -52, 89, 90, 94, -52, 95, 785 97, 98, 100, -1, 101, 8, 6, 102, -1, -1, 786 -1, -1, 6, -1, 103, 105, 106, -52, -52, 107, 787 -52, -52, -52, -52, -52, -52, -52, 108, 109, -52, 788 110, 111, 112, 113, -52, -52, -52, -52, -52, -52, 789 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 790 118, 133, -52, -52 791 }; 792 793 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. 794 Performed when YYTABLE does not specify something else to do. Zero 795 means the default is an error. */ 796 static const yytype_uint8 yydefact[] = 797 { 798 2, 0, 1, 12, 72, 83, 91, 104, 98, 3, 799 4, 5, 6, 7, 9, 8, 10, 70, 81, 94, 800 107, 101, 0, 0, 0, 0, 0, 0, 0, 0, 801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 806 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 807 0, 0, 0, 0, 0, 0, 82, 92, 105, 99, 808 130, 14, 129, 13, 131, 15, 16, 42, 17, 18, 809 19, 23, 24, 25, 26, 41, 20, 52, 45, 44, 810 46, 47, 27, 31, 40, 48, 49, 50, 21, 22, 811 29, 28, 30, 32, 33, 34, 35, 36, 37, 38, 812 39, 43, 51, 61, 62, 63, 64, 65, 59, 60, 813 53, 54, 55, 56, 57, 58, 66, 68, 67, 69, 814 73, 74, 75, 76, 77, 78, 79, 80, 84, 85, 815 86, 87, 88, 89, 90, 0, 0, 0, 93, 0, 816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 817 0, 0, 0, 0, 0, 0, 0, 106, 109, 0, 818 100, 103, 96, 97, 95, 108, 111, 0, 0, 124, 819 0, 0, 0, 0, 123, 122, 125, 126, 127, 128, 820 114, 113, 112, 115, 110, 102, 120, 121, 119, 116, 821 0, 0, 117, 118 822 }; 823 824 /* YYPGOTO[NTERM-NUM]. */ 825 static const yytype_int8 yypgoto[] = 826 { 827 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 828 -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 829 -52, -52, -52, -52, 43, 67, 16, -25 830 }; 831 832 /* YYDEFGOTO[NTERM-NUM]. */ 833 static const yytype_int16 yydefgoto[] = 834 { 835 -1, 1, 9, 10, 16, 79, 11, 17, 88, 12, 836 18, 96, 13, 19, 97, 178, 14, 21, 99, 200, 837 15, 20, 98, 197, 198, 103, 101, 105 838 }; 839 840 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If 841 positive, shift that token. If negative, reduce the rule whose 842 number is the opposite. If YYTABLE_NINF, syntax error. */ 843 static const yytype_uint8 yytable[] = 844 { 845 106, 107, 100, 102, 110, 111, 112, 113, 114, 104, 846 116, 211, 80, 81, 82, 83, 84, 85, 86, 87, 847 2, 118, 128, 129, 3, 119, 120, 121, 134, 89, 848 90, 91, 92, 93, 94, 95, 122, 143, 144, 145, 849 146, 147, 148, 108, 109, 175, 176, 123, 177, 124, 850 115, 125, 117, 126, 127, 160, 130, 162, 163, 131, 851 132, 166, 167, 156, 168, 157, 158, 161, 133, 164, 852 135, 136, 137, 138, 139, 140, 141, 142, 165, 171, 853 172, 173, 4, 174, 149, 150, 151, 152, 153, 154, 854 155, 5, 202, 203, 159, 212, 213, 204, 205, 6, 855 206, 207, 7, 208, 210, 215, 222, 170, 223, 224, 856 225, 226, 227, 228, 229, 230, 231, 179, 180, 181, 857 182, 232, 8, 183, 184, 185, 186, 187, 188, 189, 858 190, 191, 192, 193, 194, 195, 233, 196, 199, 180, 859 181, 182, 201, 0, 183, 184, 185, 186, 187, 188, 860 189, 190, 191, 192, 193, 194, 195, 169, 196, 0, 861 0, 214, 0, 0, 0, 0, 0, 220, 0, 0, 862 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 863 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 865 0, 0, 0, 0, 216, 217, 218, 219, 0, 221, 866 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 867 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 868 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 869 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 870 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 871 72, 73, 74, 75, 76, 77, 78 872 }; 873 874 static const yytype_int16 yycheck[] = 875 { 876 25, 26, 3, 3, 29, 30, 31, 32, 33, 3, 877 35, 3, 63, 64, 65, 66, 67, 68, 69, 70, 878 0, 3, 47, 48, 4, 3, 3, 3, 53, 72, 879 73, 74, 75, 76, 77, 78, 3, 62, 63, 64, 880 65, 66, 67, 27, 28, 80, 81, 3, 83, 3, 881 34, 3, 36, 3, 3, 80, 3, 82, 83, 3, 882 3, 86, 87, 3, 89, 3, 3, 3, 52, 3, 883 54, 55, 56, 57, 58, 59, 60, 61, 3, 3, 884 3, 3, 62, 3, 68, 69, 70, 71, 72, 73, 885 74, 71, 3, 3, 78, 87, 88, 3, 3, 79, 886 3, 3, 82, 3, 3, 3, 3, 91, 3, 3, 887 3, 3, 3, 3, 3, 3, 3, 83, 84, 85, 888 86, 3, 102, 89, 90, 91, 92, 93, 94, 95, 889 96, 97, 98, 99, 100, 101, 3, 103, 83, 84, 890 85, 86, 99, -1, 89, 90, 91, 92, 93, 94, 891 95, 96, 97, 98, 99, 100, 101, 90, 103, -1, 892 -1, 186, -1, -1, -1, -1, -1, 192, -1, -1, 893 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 894 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 895 -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, 896 -1, -1, -1, -1, 188, 189, 190, 191, -1, 193, 897 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 898 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 899 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 900 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 901 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 902 55, 56, 57, 58, 59, 60, 61 903 }; 904 905 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 906 symbol of state STATE-NUM. */ 907 static const yytype_uint8 yystos[] = 908 { 909 0, 105, 0, 4, 62, 71, 79, 82, 102, 106, 910 107, 110, 113, 116, 120, 124, 108, 111, 114, 117, 911 125, 121, 5, 6, 7, 8, 9, 10, 11, 12, 912 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 913 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 914 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 915 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 916 53, 54, 55, 56, 57, 58, 59, 60, 61, 109, 917 63, 64, 65, 66, 67, 68, 69, 70, 112, 72, 918 73, 74, 75, 76, 77, 78, 115, 118, 126, 122, 919 3, 130, 3, 129, 3, 131, 131, 131, 130, 130, 920 131, 131, 131, 131, 131, 130, 131, 130, 3, 3, 921 3, 3, 3, 3, 3, 3, 3, 3, 131, 131, 922 3, 3, 3, 130, 131, 130, 130, 130, 130, 130, 923 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 924 130, 130, 130, 130, 130, 130, 3, 3, 3, 130, 925 131, 3, 131, 131, 3, 3, 131, 131, 131, 129, 926 130, 3, 3, 3, 3, 80, 81, 83, 119, 83, 927 84, 85, 86, 89, 90, 91, 92, 93, 94, 95, 928 96, 97, 98, 99, 100, 101, 103, 127, 128, 83, 929 123, 128, 3, 3, 3, 3, 3, 3, 3, 130, 930 3, 3, 87, 88, 131, 3, 130, 130, 130, 130, 931 131, 130, 3, 3, 3, 3, 3, 3, 3, 3, 932 3, 3, 3, 3 933 }; 934 935 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 936 static const yytype_uint8 yyr1[] = 937 { 938 0, 104, 105, 105, 106, 106, 106, 106, 106, 106, 939 107, 108, 108, 109, 109, 109, 109, 109, 109, 109, 940 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 941 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 942 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 943 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 944 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 945 110, 111, 111, 112, 112, 112, 112, 112, 112, 112, 946 112, 113, 114, 114, 115, 115, 115, 115, 115, 115, 947 115, 117, 116, 118, 118, 119, 119, 119, 121, 120, 948 122, 122, 123, 123, 125, 124, 126, 126, 127, 127, 949 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 950 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 951 130, 131 952 }; 953 954 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ 955 static const yytype_uint8 yyr2[] = 956 { 957 0, 2, 0, 2, 1, 1, 1, 1, 1, 1, 958 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 959 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 960 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 961 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 962 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 963 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 964 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 965 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 966 2, 0, 3, 2, 0, 2, 2, 2, 0, 3, 967 2, 0, 2, 1, 0, 3, 2, 0, 2, 1, 968 2, 2, 2, 2, 2, 2, 3, 4, 4, 3, 969 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 970 1, 1 971 }; 972 973 974 #define yyerrok (yyerrstatus = 0) 975 #define yyclearin (yychar = YYEMPTY) 976 #define YYEMPTY (-2) 977 #define YYEOF 0 978 979 #define YYACCEPT goto yyacceptlab 980 #define YYABORT goto yyabortlab 981 #define YYERROR goto yyerrorlab 982 983 984 #define YYRECOVERING() (!!yyerrstatus) 985 986 #define YYBACKUP(Token, Value) \ 987 do \ 988 if (yychar == YYEMPTY) \ 989 { \ 990 yychar = (Token); \ 991 yylval = (Value); \ 992 YYPOPSTACK (yylen); \ 993 yystate = *yyssp; \ 994 goto yybackup; \ 995 } \ 996 else \ 997 { \ 998 yyerror (YY_("syntax error: cannot back up")); \ 999 YYERROR; \ 1000 } \ 1001 while (0) 1002 1003 /* Error token number */ 1004 #define YYTERROR 1 1005 #define YYERRCODE 256 1006 1007 1008 1009 /* Enable debugging if requested. */ 1010 #if YYDEBUG 1011 1012 # ifndef YYFPRINTF 1013 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 1014 # define YYFPRINTF fprintf 1015 # endif 1016 1017 # define YYDPRINTF(Args) \ 1018 do { \ 1019 if (yydebug) \ 1020 YYFPRINTF Args; \ 1021 } while (0) 1022 1023 /* This macro is provided for backward compatibility. */ 1024 #ifndef YY_LOCATION_PRINT 1025 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 1026 #endif 1027 1028 1029 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 1030 do { \ 1031 if (yydebug) \ 1032 { \ 1033 YYFPRINTF (stderr, "%s ", Title); \ 1034 yy_symbol_print (stderr, \ 1035 Type, Value); \ 1036 YYFPRINTF (stderr, "\n"); \ 1037 } \ 1038 } while (0) 1039 1040 1041 /*----------------------------------------. 1042 | Print this symbol's value on YYOUTPUT. | 1043 `----------------------------------------*/ 1044 1045 static void 1046 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1047 { 1048 FILE *yyo = yyoutput; 1049 YYUSE (yyo); 1050 if (!yyvaluep) 1051 return; 1052 # ifdef YYPRINT 1053 if (yytype < YYNTOKENS) 1054 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 1055 # endif 1056 YYUSE (yytype); 1057 } 1058 1059 1060 /*--------------------------------. 1061 | Print this symbol on YYOUTPUT. | 1062 `--------------------------------*/ 1063 1064 static void 1065 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1066 { 1067 YYFPRINTF (yyoutput, "%s %s (", 1068 yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); 1069 1070 yy_symbol_value_print (yyoutput, yytype, yyvaluep); 1071 YYFPRINTF (yyoutput, ")"); 1072 } 1073 1074 /*------------------------------------------------------------------. 1075 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 1076 | TOP (included). | 1077 `------------------------------------------------------------------*/ 1078 1079 static void 1080 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 1081 { 1082 YYFPRINTF (stderr, "Stack now"); 1083 for (; yybottom <= yytop; yybottom++) 1084 { 1085 int yybot = *yybottom; 1086 YYFPRINTF (stderr, " %d", yybot); 1087 } 1088 YYFPRINTF (stderr, "\n"); 1089 } 1090 1091 # define YY_STACK_PRINT(Bottom, Top) \ 1092 do { \ 1093 if (yydebug) \ 1094 yy_stack_print ((Bottom), (Top)); \ 1095 } while (0) 1096 1097 1098 /*------------------------------------------------. 1099 | Report that the YYRULE is going to be reduced. | 1100 `------------------------------------------------*/ 1101 1102 static void 1103 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) 1104 { 1105 unsigned long int yylno = yyrline[yyrule]; 1106 int yynrhs = yyr2[yyrule]; 1107 int yyi; 1108 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 1109 yyrule - 1, yylno); 1110 /* The symbols being reduced. */ 1111 for (yyi = 0; yyi < yynrhs; yyi++) 1112 { 1113 YYFPRINTF (stderr, " $%d = ", yyi + 1); 1114 yy_symbol_print (stderr, 1115 yystos[yyssp[yyi + 1 - yynrhs]], 1116 &(yyvsp[(yyi + 1) - (yynrhs)]) 1117 ); 1118 YYFPRINTF (stderr, "\n"); 1119 } 1120 } 1121 1122 # define YY_REDUCE_PRINT(Rule) \ 1123 do { \ 1124 if (yydebug) \ 1125 yy_reduce_print (yyssp, yyvsp, Rule); \ 1126 } while (0) 1127 1128 /* Nonzero means print parse trace. It is left uninitialized so that 1129 multiple parsers can coexist. */ 1130 int yydebug; 1131 #else /* !YYDEBUG */ 1132 # define YYDPRINTF(Args) 1133 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 1134 # define YY_STACK_PRINT(Bottom, Top) 1135 # define YY_REDUCE_PRINT(Rule) 1136 #endif /* !YYDEBUG */ 1137 1138 1139 /* YYINITDEPTH -- initial size of the parser's stacks. */ 1140 #ifndef YYINITDEPTH 1141 # define YYINITDEPTH 200 1142 #endif 1143 1144 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 1145 if the built-in stack extension method is used). 1146 1147 Do not make this value too large; the results are undefined if 1148 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 1149 evaluated with infinite-precision integer arithmetic. */ 1150 1151 #ifndef YYMAXDEPTH 1152 # define YYMAXDEPTH 10000 1153 #endif 1154 1155 1156 #if YYERROR_VERBOSE 1157 1158 # ifndef yystrlen 1159 # if defined __GLIBC__ && defined _STRING_H 1160 # define yystrlen strlen 1161 # else 1162 /* Return the length of YYSTR. */ 1163 static YYSIZE_T 1164 yystrlen (const char *yystr) 1165 { 1166 YYSIZE_T yylen; 1167 for (yylen = 0; yystr[yylen]; yylen++) 1168 continue; 1169 return yylen; 1170 } 1171 # endif 1172 # endif 1173 1174 # ifndef yystpcpy 1175 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 1176 # define yystpcpy stpcpy 1177 # else 1178 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 1179 YYDEST. */ 1180 static char * 1181 yystpcpy (char *yydest, const char *yysrc) 1182 { 1183 char *yyd = yydest; 1184 const char *yys = yysrc; 1185 1186 while ((*yyd++ = *yys++) != '\0') 1187 continue; 1188 1189 return yyd - 1; 1190 } 1191 # endif 1192 # endif 1193 1194 # ifndef yytnamerr 1195 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 1196 quotes and backslashes, so that it's suitable for yyerror. The 1197 heuristic is that double-quoting is unnecessary unless the string 1198 contains an apostrophe, a comma, or backslash (other than 1199 backslash-backslash). YYSTR is taken from yytname. If YYRES is 1200 null, do not copy; instead, return the length of what the result 1201 would have been. */ 1202 static YYSIZE_T 1203 yytnamerr (char *yyres, const char *yystr) 1204 { 1205 if (*yystr == '"') 1206 { 1207 YYSIZE_T yyn = 0; 1208 char const *yyp = yystr; 1209 1210 for (;;) 1211 switch (*++yyp) 1212 { 1213 case '\'': 1214 case ',': 1215 goto do_not_strip_quotes; 1216 1217 case '\\': 1218 if (*++yyp != '\\') 1219 goto do_not_strip_quotes; 1220 /* Fall through. */ 1221 default: 1222 if (yyres) 1223 yyres[yyn] = *yyp; 1224 yyn++; 1225 break; 1226 1227 case '"': 1228 if (yyres) 1229 yyres[yyn] = '\0'; 1230 return yyn; 1231 } 1232 do_not_strip_quotes: ; 1233 } 1234 1235 if (! yyres) 1236 return yystrlen (yystr); 1237 1238 return yystpcpy (yyres, yystr) - yyres; 1239 } 1240 # endif 1241 1242 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 1243 about the unexpected token YYTOKEN for the state stack whose top is 1244 YYSSP. 1245 1246 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 1247 not large enough to hold the message. In that case, also set 1248 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 1249 required number of bytes is too large to store. */ 1250 static int 1251 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 1252 yytype_int16 *yyssp, int yytoken) 1253 { 1254 YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); 1255 YYSIZE_T yysize = yysize0; 1256 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 1257 /* Internationalized format string. */ 1258 const char *yyformat = YY_NULLPTR; 1259 /* Arguments of yyformat. */ 1260 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 1261 /* Number of reported tokens (one for the "unexpected", one per 1262 "expected"). */ 1263 int yycount = 0; 1264 1265 /* There are many possibilities here to consider: 1266 - If this state is a consistent state with a default action, then 1267 the only way this function was invoked is if the default action 1268 is an error action. In that case, don't check for expected 1269 tokens because there are none. 1270 - The only way there can be no lookahead present (in yychar) is if 1271 this state is a consistent state with a default action. Thus, 1272 detecting the absence of a lookahead is sufficient to determine 1273 that there is no unexpected or expected token to report. In that 1274 case, just report a simple "syntax error". 1275 - Don't assume there isn't a lookahead just because this state is a 1276 consistent state with a default action. There might have been a 1277 previous inconsistent state, consistent state with a non-default 1278 action, or user semantic action that manipulated yychar. 1279 - Of course, the expected token list depends on states to have 1280 correct lookahead information, and it depends on the parser not 1281 to perform extra reductions after fetching a lookahead from the 1282 scanner and before detecting a syntax error. Thus, state merging 1283 (from LALR or IELR) and default reductions corrupt the expected 1284 token list. However, the list is correct for canonical LR with 1285 one exception: it will still contain any token that will not be 1286 accepted due to an error action in a later state. 1287 */ 1288 if (yytoken != YYEMPTY) 1289 { 1290 int yyn = yypact[*yyssp]; 1291 yyarg[yycount++] = yytname[yytoken]; 1292 if (!yypact_value_is_default (yyn)) 1293 { 1294 /* Start YYX at -YYN if negative to avoid negative indexes in 1295 YYCHECK. In other words, skip the first -YYN actions for 1296 this state because they are default actions. */ 1297 int yyxbegin = yyn < 0 ? -yyn : 0; 1298 /* Stay within bounds of both yycheck and yytname. */ 1299 int yychecklim = YYLAST - yyn + 1; 1300 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 1301 int yyx; 1302 1303 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 1304 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 1305 && !yytable_value_is_error (yytable[yyx + yyn])) 1306 { 1307 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 1308 { 1309 yycount = 1; 1310 yysize = yysize0; 1311 break; 1312 } 1313 yyarg[yycount++] = yytname[yyx]; 1314 { 1315 YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); 1316 if (! (yysize <= yysize1 1317 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1318 return 2; 1319 yysize = yysize1; 1320 } 1321 } 1322 } 1323 } 1324 1325 switch (yycount) 1326 { 1327 # define YYCASE_(N, S) \ 1328 case N: \ 1329 yyformat = S; \ 1330 break 1331 default: /* Avoid compiler warnings. */ 1332 YYCASE_(0, YY_("syntax error")); 1333 YYCASE_(1, YY_("syntax error, unexpected %s")); 1334 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 1335 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 1336 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 1337 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 1338 # undef YYCASE_ 1339 } 1340 1341 { 1342 YYSIZE_T yysize1 = yysize + yystrlen (yyformat); 1343 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1344 return 2; 1345 yysize = yysize1; 1346 } 1347 1348 if (*yymsg_alloc < yysize) 1349 { 1350 *yymsg_alloc = 2 * yysize; 1351 if (! (yysize <= *yymsg_alloc 1352 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 1353 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 1354 return 1; 1355 } 1356 1357 /* Avoid sprintf, as that infringes on the user's name space. 1358 Don't have undefined behavior even if the translation 1359 produced a string with the wrong number of "%s"s. */ 1360 { 1361 char *yyp = *yymsg; 1362 int yyi = 0; 1363 while ((*yyp = *yyformat) != '\0') 1364 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 1365 { 1366 yyp += yytnamerr (yyp, yyarg[yyi++]); 1367 yyformat += 2; 1368 } 1369 else 1370 { 1371 yyp++; 1372 yyformat++; 1373 } 1374 } 1375 return 0; 1376 } 1377 #endif /* YYERROR_VERBOSE */ 1378 1379 /*-----------------------------------------------. 1380 | Release the memory associated to this symbol. | 1381 `-----------------------------------------------*/ 1382 1383 static void 1384 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) 1385 { 1386 YYUSE (yyvaluep); 1387 if (!yymsg) 1388 yymsg = "Deleting"; 1389 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 1390 1391 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1392 YYUSE (yytype); 1393 YY_IGNORE_MAYBE_UNINITIALIZED_END 1394 } 1395 1396 1397 1398 1399 /* The lookahead symbol. */ 1400 int yychar; 1401 1402 /* The semantic value of the lookahead symbol. */ 1403 YYSTYPE yylval; 1404 /* Number of syntax errors so far. */ 1405 int yynerrs; 1406 1407 1408 /*----------. 1409 | yyparse. | 1410 `----------*/ 1411 1412 int 1413 yyparse (void) 1414 { 1415 int yystate; 1416 /* Number of tokens to shift before error messages enabled. */ 1417 int yyerrstatus; 1418 1419 /* The stacks and their tools: 1420 'yyss': related to states. 1421 'yyvs': related to semantic values. 1422 1423 Refer to the stacks through separate pointers, to allow yyoverflow 1424 to reallocate them elsewhere. */ 1425 1426 /* The state stack. */ 1427 yytype_int16 yyssa[YYINITDEPTH]; 1428 yytype_int16 *yyss; 1429 yytype_int16 *yyssp; 1430 1431 /* The semantic value stack. */ 1432 YYSTYPE yyvsa[YYINITDEPTH]; 1433 YYSTYPE *yyvs; 1434 YYSTYPE *yyvsp; 1435 1436 YYSIZE_T yystacksize; 1437 1438 int yyn; 1439 int yyresult; 1440 /* Lookahead token as an internal (translated) token number. */ 1441 int yytoken = 0; 1442 /* The variables used to return semantic value and location from the 1443 action routines. */ 1444 YYSTYPE yyval; 1445 1446 #if YYERROR_VERBOSE 1447 /* Buffer for error messages, and its allocated size. */ 1448 char yymsgbuf[128]; 1449 char *yymsg = yymsgbuf; 1450 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 1451 #endif 1452 1453 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 1454 1455 /* The number of symbols on the RHS of the reduced rule. 1456 Keep to zero when no symbol should be popped. */ 1457 int yylen = 0; 1458 1459 yyssp = yyss = yyssa; 1460 yyvsp = yyvs = yyvsa; 1461 yystacksize = YYINITDEPTH; 1462 1463 YYDPRINTF ((stderr, "Starting parse\n")); 1464 1465 yystate = 0; 1466 yyerrstatus = 0; 1467 yynerrs = 0; 1468 yychar = YYEMPTY; /* Cause a token to be read. */ 1469 goto yysetstate; 1470 1471 /*------------------------------------------------------------. 1472 | yynewstate -- Push a new state, which is found in yystate. | 1473 `------------------------------------------------------------*/ 1474 yynewstate: 1475 /* In all cases, when you get here, the value and location stacks 1476 have just been pushed. So pushing a state here evens the stacks. */ 1477 yyssp++; 1478 1479 yysetstate: 1480 *yyssp = yystate; 1481 1482 if (yyss + yystacksize - 1 <= yyssp) 1483 { 1484 /* Get the current used size of the three stacks, in elements. */ 1485 YYSIZE_T yysize = yyssp - yyss + 1; 1486 1487 #ifdef yyoverflow 1488 { 1489 /* Give user a chance to reallocate the stack. Use copies of 1490 these so that the &'s don't force the real ones into 1491 memory. */ 1492 YYSTYPE *yyvs1 = yyvs; 1493 yytype_int16 *yyss1 = yyss; 1494 1495 /* Each stack pointer address is followed by the size of the 1496 data in use in that stack, in bytes. This used to be a 1497 conditional around just the two extra args, but that might 1498 be undefined if yyoverflow is a macro. */ 1499 yyoverflow (YY_("memory exhausted"), 1500 &yyss1, yysize * sizeof (*yyssp), 1501 &yyvs1, yysize * sizeof (*yyvsp), 1502 &yystacksize); 1503 1504 yyss = yyss1; 1505 yyvs = yyvs1; 1506 } 1507 #else /* no yyoverflow */ 1508 # ifndef YYSTACK_RELOCATE 1509 goto yyexhaustedlab; 1510 # else 1511 /* Extend the stack our own way. */ 1512 if (YYMAXDEPTH <= yystacksize) 1513 goto yyexhaustedlab; 1514 yystacksize *= 2; 1515 if (YYMAXDEPTH < yystacksize) 1516 yystacksize = YYMAXDEPTH; 1517 1518 { 1519 yytype_int16 *yyss1 = yyss; 1520 union yyalloc *yyptr = 1521 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1522 if (! yyptr) 1523 goto yyexhaustedlab; 1524 YYSTACK_RELOCATE (yyss_alloc, yyss); 1525 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 1526 # undef YYSTACK_RELOCATE 1527 if (yyss1 != yyssa) 1528 YYSTACK_FREE (yyss1); 1529 } 1530 # endif 1531 #endif /* no yyoverflow */ 1532 1533 yyssp = yyss + yysize - 1; 1534 yyvsp = yyvs + yysize - 1; 1535 1536 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 1537 (unsigned long int) yystacksize)); 1538 1539 if (yyss + yystacksize - 1 <= yyssp) 1540 YYABORT; 1541 } 1542 1543 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 1544 1545 if (yystate == YYFINAL) 1546 YYACCEPT; 1547 1548 goto yybackup; 1549 1550 /*-----------. 1551 | yybackup. | 1552 `-----------*/ 1553 yybackup: 1554 1555 /* Do appropriate processing given the current state. Read a 1556 lookahead token if we need one and don't already have one. */ 1557 1558 /* First try to decide what to do without reference to lookahead token. */ 1559 yyn = yypact[yystate]; 1560 if (yypact_value_is_default (yyn)) 1561 goto yydefault; 1562 1563 /* Not known => get a lookahead token if don't already have one. */ 1564 1565 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 1566 if (yychar == YYEMPTY) 1567 { 1568 YYDPRINTF ((stderr, "Reading a token: ")); 1569 yychar = yylex (); 1570 } 1571 1572 if (yychar <= YYEOF) 1573 { 1574 yychar = yytoken = YYEOF; 1575 YYDPRINTF ((stderr, "Now at end of input.\n")); 1576 } 1577 else 1578 { 1579 yytoken = YYTRANSLATE (yychar); 1580 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 1581 } 1582 1583 /* If the proper action on seeing token YYTOKEN is to reduce or to 1584 detect an error, take that action. */ 1585 yyn += yytoken; 1586 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 1587 goto yydefault; 1588 yyn = yytable[yyn]; 1589 if (yyn <= 0) 1590 { 1591 if (yytable_value_is_error (yyn)) 1592 goto yyerrlab; 1593 yyn = -yyn; 1594 goto yyreduce; 1595 } 1596 1597 /* Count tokens shifted since error; after three, turn off error 1598 status. */ 1599 if (yyerrstatus) 1600 yyerrstatus--; 1601 1602 /* Shift the lookahead token. */ 1603 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 1604 1605 /* Discard the shifted token. */ 1606 yychar = YYEMPTY; 1607 1608 yystate = yyn; 1609 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1610 *++yyvsp = yylval; 1611 YY_IGNORE_MAYBE_UNINITIALIZED_END 1612 1613 goto yynewstate; 1614 1615 1616 /*-----------------------------------------------------------. 1617 | yydefault -- do the default action for the current state. | 1618 `-----------------------------------------------------------*/ 1619 yydefault: 1620 yyn = yydefact[yystate]; 1621 if (yyn == 0) 1622 goto yyerrlab; 1623 goto yyreduce; 1624 1625 1626 /*-----------------------------. 1627 | yyreduce -- Do a reduction. | 1628 `-----------------------------*/ 1629 yyreduce: 1630 /* yyn is the number of a rule to reduce with. */ 1631 yylen = yyr2[yyn]; 1632 1633 /* If YYLEN is nonzero, implement the default value of the action: 1634 '$$ = $1'. 1635 1636 Otherwise, the following line sets YYVAL to garbage. 1637 This behavior is undocumented and Bison 1638 users should not rely upon it. Assigning to YYVAL 1639 unconditionally makes the parser a bit smaller, and it avoids a 1640 GCC warning that YYVAL may be used uninitialized. */ 1641 yyval = yyvsp[1-yylen]; 1642 1643 1644 YY_REDUCE_PRINT (yyn); 1645 switch (yyn) 1646 { 1647 case 13: 1648 #line 183 "configparser.y" /* yacc.c:1648 */ 1649 { 1650 struct ip_address_option *ip = cfg_parser->opt->ip_addresses; 1651 if(ip == NULL) { 1652 cfg_parser->opt->ip_addresses = (yyvsp[0].ip); 1653 } else { 1654 while(ip->next) { ip = ip->next; } 1655 ip->next = (yyvsp[0].ip); 1656 } 1657 } 1658 #line 1659 "configparser.c" /* yacc.c:1648 */ 1659 break; 1660 1661 case 14: 1662 #line 193 "configparser.y" /* yacc.c:1648 */ 1663 { 1664 if ((yyvsp[0].llng) > 0) { 1665 cfg_parser->opt->server_count = (int)(yyvsp[0].llng); 1666 } else { 1667 yyerror("expected a number greater than zero"); 1668 } 1669 } 1670 #line 1671 "configparser.c" /* yacc.c:1648 */ 1671 break; 1672 1673 case 15: 1674 #line 201 "configparser.y" /* yacc.c:1648 */ 1675 { cfg_parser->opt->ip_transparent = (int)(yyvsp[0].bln); } 1676 #line 1677 "configparser.c" /* yacc.c:1648 */ 1677 break; 1678 1679 case 16: 1680 #line 203 "configparser.y" /* yacc.c:1648 */ 1681 { cfg_parser->opt->ip_freebind = (yyvsp[0].bln); } 1682 #line 1683 "configparser.c" /* yacc.c:1648 */ 1683 break; 1684 1685 case 17: 1686 #line 205 "configparser.y" /* yacc.c:1648 */ 1687 { cfg_parser->opt->send_buffer_size = (int)(yyvsp[0].llng); } 1688 #line 1689 "configparser.c" /* yacc.c:1648 */ 1689 break; 1690 1691 case 18: 1692 #line 207 "configparser.y" /* yacc.c:1648 */ 1693 { cfg_parser->opt->receive_buffer_size = (int)(yyvsp[0].llng); } 1694 #line 1695 "configparser.c" /* yacc.c:1648 */ 1695 break; 1696 1697 case 19: 1698 #line 209 "configparser.y" /* yacc.c:1648 */ 1699 { cfg_parser->opt->debug_mode = (yyvsp[0].bln); } 1700 #line 1701 "configparser.c" /* yacc.c:1648 */ 1701 break; 1702 1703 case 20: 1704 #line 211 "configparser.y" /* yacc.c:1648 */ 1705 { /* ignored, deprecated */ } 1706 #line 1707 "configparser.c" /* yacc.c:1648 */ 1707 break; 1708 1709 case 21: 1710 #line 213 "configparser.y" /* yacc.c:1648 */ 1711 { cfg_parser->opt->hide_version = (yyvsp[0].bln); } 1712 #line 1713 "configparser.c" /* yacc.c:1648 */ 1713 break; 1714 1715 case 22: 1716 #line 215 "configparser.y" /* yacc.c:1648 */ 1717 { cfg_parser->opt->hide_identity = (yyvsp[0].bln); } 1718 #line 1719 "configparser.c" /* yacc.c:1648 */ 1719 break; 1720 1721 case 23: 1722 #line 217 "configparser.y" /* yacc.c:1648 */ 1723 { if((yyvsp[0].bln)) { cfg_parser->opt->do_ip4 = 1; cfg_parser->opt->do_ip6 = 0; } } 1724 #line 1725 "configparser.c" /* yacc.c:1648 */ 1725 break; 1726 1727 case 24: 1728 #line 219 "configparser.y" /* yacc.c:1648 */ 1729 { if((yyvsp[0].bln)) { cfg_parser->opt->do_ip4 = 0; cfg_parser->opt->do_ip6 = 1; } } 1730 #line 1731 "configparser.c" /* yacc.c:1648 */ 1731 break; 1732 1733 case 25: 1734 #line 221 "configparser.y" /* yacc.c:1648 */ 1735 { cfg_parser->opt->do_ip4 = (yyvsp[0].bln); } 1736 #line 1737 "configparser.c" /* yacc.c:1648 */ 1737 break; 1738 1739 case 26: 1740 #line 223 "configparser.y" /* yacc.c:1648 */ 1741 { cfg_parser->opt->do_ip6 = (yyvsp[0].bln); } 1742 #line 1743 "configparser.c" /* yacc.c:1648 */ 1743 break; 1744 1745 case 27: 1746 #line 225 "configparser.y" /* yacc.c:1648 */ 1747 { 1748 cfg_parser->opt->database = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 1749 if(cfg_parser->opt->database[0] == 0 && 1750 cfg_parser->opt->zonefiles_write == 0) 1751 { 1752 cfg_parser->opt->zonefiles_write = ZONEFILES_WRITE_INTERVAL; 1753 } 1754 } 1755 #line 1756 "configparser.c" /* yacc.c:1648 */ 1756 break; 1757 1758 case 28: 1759 #line 234 "configparser.y" /* yacc.c:1648 */ 1760 { cfg_parser->opt->identity = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1761 #line 1762 "configparser.c" /* yacc.c:1648 */ 1762 break; 1763 1764 case 29: 1765 #line 236 "configparser.y" /* yacc.c:1648 */ 1766 { cfg_parser->opt->version = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1767 #line 1768 "configparser.c" /* yacc.c:1648 */ 1768 break; 1769 1770 case 30: 1771 #line 238 "configparser.y" /* yacc.c:1648 */ 1772 { 1773 unsigned char* nsid = 0; 1774 size_t nsid_len = strlen((yyvsp[0].str)); 1775 1776 if (strncasecmp((yyvsp[0].str), "ascii_", 6) == 0) { 1777 nsid_len -= 6; /* discard "ascii_" */ 1778 if(nsid_len < 65535) { 1779 cfg_parser->opt->nsid = region_alloc(cfg_parser->opt->region, nsid_len*2+1); 1780 hex_ntop((uint8_t*)(yyvsp[0].str)+6, nsid_len, (char*)cfg_parser->opt->nsid, nsid_len*2+1); 1781 } else { 1782 yyerror("NSID too long"); 1783 } 1784 } else if (nsid_len % 2 != 0) { 1785 yyerror("the NSID must be a hex string of an even length."); 1786 } else { 1787 nsid_len = nsid_len / 2; 1788 if(nsid_len < 65535) { 1789 nsid = xalloc(nsid_len); 1790 if (hex_pton((yyvsp[0].str), nsid, nsid_len) == -1) { 1791 yyerror("hex string cannot be parsed in NSID."); 1792 } else { 1793 cfg_parser->opt->nsid = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 1794 } 1795 free(nsid); 1796 } else { 1797 yyerror("NSID too long"); 1798 } 1799 } 1800 } 1801 #line 1802 "configparser.c" /* yacc.c:1648 */ 1802 break; 1803 1804 case 31: 1805 #line 268 "configparser.y" /* yacc.c:1648 */ 1806 { cfg_parser->opt->logfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1807 #line 1808 "configparser.c" /* yacc.c:1648 */ 1808 break; 1809 1810 case 32: 1811 #line 270 "configparser.y" /* yacc.c:1648 */ 1812 { 1813 if ((yyvsp[0].llng) > 0) { 1814 cfg_parser->opt->tcp_count = (int)(yyvsp[0].llng); 1815 } else { 1816 yyerror("expected a number greater than zero"); 1817 } 1818 } 1819 #line 1820 "configparser.c" /* yacc.c:1648 */ 1820 break; 1821 1822 case 33: 1823 #line 278 "configparser.y" /* yacc.c:1648 */ 1824 { cfg_parser->opt->tcp_reject_overflow = (yyvsp[0].bln); } 1825 #line 1826 "configparser.c" /* yacc.c:1648 */ 1826 break; 1827 1828 case 34: 1829 #line 280 "configparser.y" /* yacc.c:1648 */ 1830 { cfg_parser->opt->tcp_query_count = (int)(yyvsp[0].llng); } 1831 #line 1832 "configparser.c" /* yacc.c:1648 */ 1832 break; 1833 1834 case 35: 1835 #line 282 "configparser.y" /* yacc.c:1648 */ 1836 { cfg_parser->opt->tcp_timeout = (int)(yyvsp[0].llng); } 1837 #line 1838 "configparser.c" /* yacc.c:1648 */ 1838 break; 1839 1840 case 36: 1841 #line 284 "configparser.y" /* yacc.c:1648 */ 1842 { cfg_parser->opt->tcp_mss = (int)(yyvsp[0].llng); } 1843 #line 1844 "configparser.c" /* yacc.c:1648 */ 1844 break; 1845 1846 case 37: 1847 #line 286 "configparser.y" /* yacc.c:1648 */ 1848 { cfg_parser->opt->outgoing_tcp_mss = (int)(yyvsp[0].llng); } 1849 #line 1850 "configparser.c" /* yacc.c:1648 */ 1850 break; 1851 1852 case 38: 1853 #line 288 "configparser.y" /* yacc.c:1648 */ 1854 { cfg_parser->opt->ipv4_edns_size = (size_t)(yyvsp[0].llng); } 1855 #line 1856 "configparser.c" /* yacc.c:1648 */ 1856 break; 1857 1858 case 39: 1859 #line 290 "configparser.y" /* yacc.c:1648 */ 1860 { cfg_parser->opt->ipv6_edns_size = (size_t)(yyvsp[0].llng); } 1861 #line 1862 "configparser.c" /* yacc.c:1648 */ 1862 break; 1863 1864 case 40: 1865 #line 292 "configparser.y" /* yacc.c:1648 */ 1866 { cfg_parser->opt->pidfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1867 #line 1868 "configparser.c" /* yacc.c:1648 */ 1868 break; 1869 1870 case 41: 1871 #line 294 "configparser.y" /* yacc.c:1648 */ 1872 { 1873 /* port number, stored as a string */ 1874 char buf[16]; 1875 (void)snprintf(buf, sizeof(buf), "%lld", (yyvsp[0].llng)); 1876 cfg_parser->opt->port = region_strdup(cfg_parser->opt->region, buf); 1877 } 1878 #line 1879 "configparser.c" /* yacc.c:1648 */ 1879 break; 1880 1881 case 42: 1882 #line 301 "configparser.y" /* yacc.c:1648 */ 1883 { cfg_parser->opt->reuseport = (yyvsp[0].bln); } 1884 #line 1885 "configparser.c" /* yacc.c:1648 */ 1885 break; 1886 1887 case 43: 1888 #line 303 "configparser.y" /* yacc.c:1648 */ 1889 { cfg_parser->opt->statistics = (int)(yyvsp[0].llng); } 1890 #line 1891 "configparser.c" /* yacc.c:1648 */ 1891 break; 1892 1893 case 44: 1894 #line 305 "configparser.y" /* yacc.c:1648 */ 1895 { cfg_parser->opt->chroot = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1896 #line 1897 "configparser.c" /* yacc.c:1648 */ 1897 break; 1898 1899 case 45: 1900 #line 307 "configparser.y" /* yacc.c:1648 */ 1901 { cfg_parser->opt->username = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1902 #line 1903 "configparser.c" /* yacc.c:1648 */ 1903 break; 1904 1905 case 46: 1906 #line 309 "configparser.y" /* yacc.c:1648 */ 1907 { cfg_parser->opt->zonesdir = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1908 #line 1909 "configparser.c" /* yacc.c:1648 */ 1909 break; 1910 1911 case 47: 1912 #line 311 "configparser.y" /* yacc.c:1648 */ 1913 { cfg_parser->opt->zonelistfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1914 #line 1915 "configparser.c" /* yacc.c:1648 */ 1915 break; 1916 1917 case 48: 1918 #line 313 "configparser.y" /* yacc.c:1648 */ 1919 { /* ignored, deprecated */ } 1920 #line 1921 "configparser.c" /* yacc.c:1648 */ 1921 break; 1922 1923 case 49: 1924 #line 315 "configparser.y" /* yacc.c:1648 */ 1925 { cfg_parser->opt->xfrdfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1926 #line 1927 "configparser.c" /* yacc.c:1648 */ 1927 break; 1928 1929 case 50: 1930 #line 317 "configparser.y" /* yacc.c:1648 */ 1931 { cfg_parser->opt->xfrdir = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 1932 #line 1933 "configparser.c" /* yacc.c:1648 */ 1933 break; 1934 1935 case 51: 1936 #line 319 "configparser.y" /* yacc.c:1648 */ 1937 { cfg_parser->opt->xfrd_reload_timeout = (int)(yyvsp[0].llng); } 1938 #line 1939 "configparser.c" /* yacc.c:1648 */ 1939 break; 1940 1941 case 52: 1942 #line 321 "configparser.y" /* yacc.c:1648 */ 1943 { cfg_parser->opt->verbosity = (int)(yyvsp[0].llng); } 1944 #line 1945 "configparser.c" /* yacc.c:1648 */ 1945 break; 1946 1947 case 53: 1948 #line 323 "configparser.y" /* yacc.c:1648 */ 1949 { 1950 #ifdef RATELIMIT 1951 if ((yyvsp[0].llng) > 0) { 1952 cfg_parser->opt->rrl_size = (size_t)(yyvsp[0].llng); 1953 } else { 1954 yyerror("expected a number greater than zero"); 1955 } 1956 #endif 1957 } 1958 #line 1959 "configparser.c" /* yacc.c:1648 */ 1959 break; 1960 1961 case 54: 1962 #line 333 "configparser.y" /* yacc.c:1648 */ 1963 { 1964 #ifdef RATELIMIT 1965 cfg_parser->opt->rrl_ratelimit = (size_t)(yyvsp[0].llng); 1966 #endif 1967 } 1968 #line 1969 "configparser.c" /* yacc.c:1648 */ 1969 break; 1970 1971 case 55: 1972 #line 339 "configparser.y" /* yacc.c:1648 */ 1973 { 1974 #ifdef RATELIMIT 1975 cfg_parser->opt->rrl_slip = (size_t)(yyvsp[0].llng); 1976 #endif 1977 } 1978 #line 1979 "configparser.c" /* yacc.c:1648 */ 1979 break; 1980 1981 case 56: 1982 #line 345 "configparser.y" /* yacc.c:1648 */ 1983 { 1984 #ifdef RATELIMIT 1985 if ((yyvsp[0].llng) > 32) { 1986 yyerror("invalid IPv4 prefix length"); 1987 } else { 1988 cfg_parser->opt->rrl_ipv4_prefix_length = (size_t)(yyvsp[0].llng); 1989 } 1990 #endif 1991 } 1992 #line 1993 "configparser.c" /* yacc.c:1648 */ 1993 break; 1994 1995 case 57: 1996 #line 355 "configparser.y" /* yacc.c:1648 */ 1997 { 1998 #ifdef RATELIMIT 1999 if ((yyvsp[0].llng) > 64) { 2000 yyerror("invalid IPv6 prefix length"); 2001 } else { 2002 cfg_parser->opt->rrl_ipv6_prefix_length = (size_t)(yyvsp[0].llng); 2003 } 2004 #endif 2005 } 2006 #line 2007 "configparser.c" /* yacc.c:1648 */ 2007 break; 2008 2009 case 58: 2010 #line 365 "configparser.y" /* yacc.c:1648 */ 2011 { 2012 #ifdef RATELIMIT 2013 cfg_parser->opt->rrl_whitelist_ratelimit = (size_t)(yyvsp[0].llng); 2014 #endif 2015 } 2016 #line 2017 "configparser.c" /* yacc.c:1648 */ 2017 break; 2018 2019 case 59: 2020 #line 371 "configparser.y" /* yacc.c:1648 */ 2021 { cfg_parser->opt->zonefiles_check = (yyvsp[0].bln); } 2022 #line 2023 "configparser.c" /* yacc.c:1648 */ 2023 break; 2024 2025 case 60: 2026 #line 373 "configparser.y" /* yacc.c:1648 */ 2027 { cfg_parser->opt->zonefiles_write = (int)(yyvsp[0].llng); } 2028 #line 2029 "configparser.c" /* yacc.c:1648 */ 2029 break; 2030 2031 case 61: 2032 #line 375 "configparser.y" /* yacc.c:1648 */ 2033 { 2034 cfg_parser->opt->log_time_ascii = (yyvsp[0].bln); 2035 log_time_asc = cfg_parser->opt->log_time_ascii; 2036 } 2037 #line 2038 "configparser.c" /* yacc.c:1648 */ 2038 break; 2039 2040 case 62: 2041 #line 380 "configparser.y" /* yacc.c:1648 */ 2042 { 2043 cfg_parser->opt->round_robin = (yyvsp[0].bln); 2044 round_robin = cfg_parser->opt->round_robin; 2045 } 2046 #line 2047 "configparser.c" /* yacc.c:1648 */ 2047 break; 2048 2049 case 63: 2050 #line 385 "configparser.y" /* yacc.c:1648 */ 2051 { 2052 cfg_parser->opt->minimal_responses = (yyvsp[0].bln); 2053 minimal_responses = cfg_parser->opt->minimal_responses; 2054 } 2055 #line 2056 "configparser.c" /* yacc.c:1648 */ 2056 break; 2057 2058 case 64: 2059 #line 390 "configparser.y" /* yacc.c:1648 */ 2060 { cfg_parser->opt->confine_to_zone = (yyvsp[0].bln); } 2061 #line 2062 "configparser.c" /* yacc.c:1648 */ 2062 break; 2063 2064 case 65: 2065 #line 392 "configparser.y" /* yacc.c:1648 */ 2066 { cfg_parser->opt->refuse_any = (yyvsp[0].bln); } 2067 #line 2068 "configparser.c" /* yacc.c:1648 */ 2068 break; 2069 2070 case 66: 2071 #line 394 "configparser.y" /* yacc.c:1648 */ 2072 { cfg_parser->opt->tls_service_key = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2073 #line 2074 "configparser.c" /* yacc.c:1648 */ 2074 break; 2075 2076 case 67: 2077 #line 396 "configparser.y" /* yacc.c:1648 */ 2078 { cfg_parser->opt->tls_service_ocsp = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2079 #line 2080 "configparser.c" /* yacc.c:1648 */ 2080 break; 2081 2082 case 68: 2083 #line 398 "configparser.y" /* yacc.c:1648 */ 2084 { cfg_parser->opt->tls_service_pem = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2085 #line 2086 "configparser.c" /* yacc.c:1648 */ 2086 break; 2087 2088 case 69: 2089 #line 400 "configparser.y" /* yacc.c:1648 */ 2090 { 2091 /* port number, stored as string */ 2092 char buf[16]; 2093 (void)snprintf(buf, sizeof(buf), "%lld", (yyvsp[0].llng)); 2094 cfg_parser->opt->tls_port = region_strdup(cfg_parser->opt->region, buf); 2095 } 2096 #line 2097 "configparser.c" /* yacc.c:1648 */ 2097 break; 2098 2099 case 73: 2100 #line 416 "configparser.y" /* yacc.c:1648 */ 2101 { cfg_parser->opt->dnstap_enable = (yyvsp[0].bln); } 2102 #line 2103 "configparser.c" /* yacc.c:1648 */ 2103 break; 2104 2105 case 74: 2106 #line 418 "configparser.y" /* yacc.c:1648 */ 2107 { cfg_parser->opt->dnstap_socket_path = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2108 #line 2109 "configparser.c" /* yacc.c:1648 */ 2109 break; 2110 2111 case 75: 2112 #line 420 "configparser.y" /* yacc.c:1648 */ 2113 { cfg_parser->opt->dnstap_send_identity = (yyvsp[0].bln); } 2114 #line 2115 "configparser.c" /* yacc.c:1648 */ 2115 break; 2116 2117 case 76: 2118 #line 422 "configparser.y" /* yacc.c:1648 */ 2119 { cfg_parser->opt->dnstap_send_version = (yyvsp[0].bln); } 2120 #line 2121 "configparser.c" /* yacc.c:1648 */ 2121 break; 2122 2123 case 77: 2124 #line 424 "configparser.y" /* yacc.c:1648 */ 2125 { cfg_parser->opt->dnstap_identity = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2126 #line 2127 "configparser.c" /* yacc.c:1648 */ 2127 break; 2128 2129 case 78: 2130 #line 426 "configparser.y" /* yacc.c:1648 */ 2131 { cfg_parser->opt->dnstap_version = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2132 #line 2133 "configparser.c" /* yacc.c:1648 */ 2133 break; 2134 2135 case 79: 2136 #line 428 "configparser.y" /* yacc.c:1648 */ 2137 { cfg_parser->opt->dnstap_log_auth_query_messages = (yyvsp[0].bln); } 2138 #line 2139 "configparser.c" /* yacc.c:1648 */ 2139 break; 2140 2141 case 80: 2142 #line 430 "configparser.y" /* yacc.c:1648 */ 2143 { cfg_parser->opt->dnstap_log_auth_response_messages = (yyvsp[0].bln); } 2144 #line 2145 "configparser.c" /* yacc.c:1648 */ 2145 break; 2146 2147 case 84: 2148 #line 441 "configparser.y" /* yacc.c:1648 */ 2149 { cfg_parser->opt->control_enable = (yyvsp[0].bln); } 2150 #line 2151 "configparser.c" /* yacc.c:1648 */ 2151 break; 2152 2153 case 85: 2154 #line 443 "configparser.y" /* yacc.c:1648 */ 2155 { 2156 struct ip_address_option *ip = cfg_parser->opt->control_interface; 2157 if(ip == NULL) { 2158 cfg_parser->opt->control_interface = (yyvsp[0].ip); 2159 } else { 2160 while(ip->next != NULL) { ip = ip->next; } 2161 ip->next = (yyvsp[0].ip); 2162 } 2163 } 2164 #line 2165 "configparser.c" /* yacc.c:1648 */ 2165 break; 2166 2167 case 86: 2168 #line 453 "configparser.y" /* yacc.c:1648 */ 2169 { 2170 if((yyvsp[0].llng) == 0) { 2171 yyerror("control port number expected"); 2172 } else { 2173 cfg_parser->opt->control_port = (int)(yyvsp[0].llng); 2174 } 2175 } 2176 #line 2177 "configparser.c" /* yacc.c:1648 */ 2177 break; 2178 2179 case 87: 2180 #line 461 "configparser.y" /* yacc.c:1648 */ 2181 { cfg_parser->opt->server_key_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2182 #line 2183 "configparser.c" /* yacc.c:1648 */ 2183 break; 2184 2185 case 88: 2186 #line 463 "configparser.y" /* yacc.c:1648 */ 2187 { cfg_parser->opt->server_cert_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2188 #line 2189 "configparser.c" /* yacc.c:1648 */ 2189 break; 2190 2191 case 89: 2192 #line 465 "configparser.y" /* yacc.c:1648 */ 2193 { cfg_parser->opt->control_key_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2194 #line 2195 "configparser.c" /* yacc.c:1648 */ 2195 break; 2196 2197 case 90: 2198 #line 467 "configparser.y" /* yacc.c:1648 */ 2199 { cfg_parser->opt->control_cert_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2200 #line 2201 "configparser.c" /* yacc.c:1648 */ 2201 break; 2202 2203 case 91: 2204 #line 472 "configparser.y" /* yacc.c:1648 */ 2205 { 2206 key_options_type *key = key_options_create(cfg_parser->opt->region); 2207 key->algorithm = region_strdup(cfg_parser->opt->region, "sha256"); 2208 assert(cfg_parser->key == NULL); 2209 cfg_parser->key = key; 2210 } 2211 #line 2212 "configparser.c" /* yacc.c:1648 */ 2212 break; 2213 2214 case 92: 2215 #line 479 "configparser.y" /* yacc.c:1648 */ 2216 { 2217 struct key_options *key = cfg_parser->key; 2218 if(key->name == NULL) { 2219 yyerror("tsig key has no name"); 2220 } else if(key->algorithm == NULL) { 2221 yyerror("tsig key %s has no algorithm", key->name); 2222 } else if(key->secret == NULL) { 2223 yyerror("tsig key %s has no secret blob", key->name); 2224 } else if(key_options_find(cfg_parser->opt, key->name)) { 2225 yyerror("duplicate tsig key %s", key->name); 2226 } else { 2227 key_options_insert(cfg_parser->opt, key); 2228 cfg_parser->key = NULL; 2229 } 2230 } 2231 #line 2232 "configparser.c" /* yacc.c:1648 */ 2232 break; 2233 2234 case 95: 2235 #line 500 "configparser.y" /* yacc.c:1648 */ 2236 { 2237 dname_type *dname; 2238 2239 dname = (dname_type *)dname_parse(cfg_parser->opt->region, (yyvsp[0].str)); 2240 cfg_parser->key->name = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 2241 if(dname == NULL) { 2242 yyerror("bad tsig key name %s", (yyvsp[0].str)); 2243 } else { 2244 region_recycle(cfg_parser->opt->region, dname, dname_total_size(dname)); 2245 } 2246 } 2247 #line 2248 "configparser.c" /* yacc.c:1648 */ 2248 break; 2249 2250 case 96: 2251 #line 512 "configparser.y" /* yacc.c:1648 */ 2252 { 2253 if(tsig_get_algorithm_by_name((yyvsp[0].str)) == NULL) { 2254 yyerror("bad tsig key algorithm %s", (yyvsp[0].str)); 2255 } else { 2256 cfg_parser->key->algorithm = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 2257 } 2258 } 2259 #line 2260 "configparser.c" /* yacc.c:1648 */ 2260 break; 2261 2262 case 97: 2263 #line 520 "configparser.y" /* yacc.c:1648 */ 2264 { 2265 uint8_t data[16384]; 2266 int size; 2267 2268 cfg_parser->key->secret = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 2269 size = b64_pton((yyvsp[0].str), data, sizeof(data)); 2270 if(size == -1) { 2271 yyerror("cannot base64 decode tsig secret %s", 2272 cfg_parser->key->name? 2273 cfg_parser->key->name:""); 2274 } else if(size != 0) { 2275 memset(data, 0xdd, size); /* wipe secret */ 2276 } 2277 } 2278 #line 2279 "configparser.c" /* yacc.c:1648 */ 2279 break; 2280 2281 case 98: 2282 #line 538 "configparser.y" /* yacc.c:1648 */ 2283 { 2284 assert(cfg_parser->pattern == NULL); 2285 assert(cfg_parser->zone == NULL); 2286 cfg_parser->zone = zone_options_create(cfg_parser->opt->region); 2287 cfg_parser->zone->part_of_config = 1; 2288 cfg_parser->zone->pattern = cfg_parser->pattern = 2289 pattern_options_create(cfg_parser->opt->region); 2290 cfg_parser->zone->pattern->implicit = 1; 2291 } 2292 #line 2293 "configparser.c" /* yacc.c:1648 */ 2293 break; 2294 2295 case 99: 2296 #line 548 "configparser.y" /* yacc.c:1648 */ 2297 { 2298 assert(cfg_parser->zone != NULL); 2299 if(cfg_parser->zone->name == NULL) { 2300 yyerror("zone has no name"); 2301 } else if(!nsd_options_insert_zone(cfg_parser->opt, cfg_parser->zone)) { 2302 yyerror("duplicate zone %s", cfg_parser->zone->name); 2303 } else if(!nsd_options_insert_pattern(cfg_parser->opt, cfg_parser->zone->pattern)) { 2304 yyerror("duplicate pattern %s", cfg_parser->zone->pattern->pname); 2305 } 2306 cfg_parser->pattern = NULL; 2307 cfg_parser->zone = NULL; 2308 } 2309 #line 2310 "configparser.c" /* yacc.c:1648 */ 2310 break; 2311 2312 case 102: 2313 #line 566 "configparser.y" /* yacc.c:1648 */ 2314 { 2315 const char *marker = PATTERN_IMPLICIT_MARKER; 2316 char *pname = region_alloc(cfg_parser->opt->region, strlen((yyvsp[0].str)) + strlen(marker) + 1); 2317 memmove(pname, marker, strlen(marker)); 2318 memmove(pname + strlen(marker), (yyvsp[0].str), strlen((yyvsp[0].str)) + 1); 2319 cfg_parser->zone->pattern->pname = pname; 2320 cfg_parser->zone->name = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 2321 if(pattern_options_find(cfg_parser->opt, pname)) { 2322 yyerror("zone %s cannot be created because implicit pattern %s " 2323 "already exists", (yyvsp[0].str), pname); 2324 } 2325 } 2326 #line 2327 "configparser.c" /* yacc.c:1648 */ 2327 break; 2328 2329 case 104: 2330 #line 582 "configparser.y" /* yacc.c:1648 */ 2331 { 2332 assert(cfg_parser->pattern == NULL); 2333 cfg_parser->pattern = pattern_options_create(cfg_parser->opt->region); 2334 } 2335 #line 2336 "configparser.c" /* yacc.c:1648 */ 2336 break; 2337 2338 case 105: 2339 #line 587 "configparser.y" /* yacc.c:1648 */ 2340 { 2341 pattern_options_type *pattern = cfg_parser->pattern; 2342 if(pattern->pname == NULL) { 2343 yyerror("pattern has no name"); 2344 } else if(!nsd_options_insert_pattern(cfg_parser->opt, pattern)) { 2345 yyerror("duplicate pattern %s", pattern->pname); 2346 } 2347 cfg_parser->pattern = NULL; 2348 } 2349 #line 2350 "configparser.c" /* yacc.c:1648 */ 2350 break; 2351 2352 case 108: 2353 #line 602 "configparser.y" /* yacc.c:1648 */ 2354 { 2355 if(strchr((yyvsp[0].str), ' ')) { 2356 yyerror("space is not allowed in pattern name: '%s'", (yyvsp[0].str)); 2357 } 2358 cfg_parser->pattern->pname = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 2359 } 2360 #line 2361 "configparser.c" /* yacc.c:1648 */ 2361 break; 2362 2363 case 110: 2364 #line 612 "configparser.y" /* yacc.c:1648 */ 2365 { 2366 #ifdef RATELIMIT 2367 cfg_parser->pattern->rrl_whitelist |= rrlstr2type((yyvsp[0].str)); 2368 #endif 2369 } 2370 #line 2371 "configparser.c" /* yacc.c:1648 */ 2371 break; 2372 2373 case 111: 2374 #line 618 "configparser.y" /* yacc.c:1648 */ 2375 { cfg_parser->pattern->zonefile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2376 #line 2377 "configparser.c" /* yacc.c:1648 */ 2377 break; 2378 2379 case 112: 2380 #line 620 "configparser.y" /* yacc.c:1648 */ 2381 { cfg_parser->pattern->zonestats = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); } 2382 #line 2383 "configparser.c" /* yacc.c:1648 */ 2383 break; 2384 2385 case 113: 2386 #line 622 "configparser.y" /* yacc.c:1648 */ 2387 { 2388 if((yyvsp[0].llng) > 0) { 2389 cfg_parser->pattern->size_limit_xfr = (int)(yyvsp[0].llng); 2390 } else { 2391 yyerror("expected a number greater than zero"); 2392 } 2393 } 2394 #line 2395 "configparser.c" /* yacc.c:1648 */ 2395 break; 2396 2397 case 114: 2398 #line 630 "configparser.y" /* yacc.c:1648 */ 2399 { cfg_parser->pattern->multi_master_check = (int)(yyvsp[0].bln); } 2400 #line 2401 "configparser.c" /* yacc.c:1648 */ 2401 break; 2402 2403 case 115: 2404 #line 632 "configparser.y" /* yacc.c:1648 */ 2405 { config_apply_pattern(cfg_parser->pattern, (yyvsp[0].str)); } 2406 #line 2407 "configparser.c" /* yacc.c:1648 */ 2407 break; 2408 2409 case 116: 2410 #line 634 "configparser.y" /* yacc.c:1648 */ 2411 { 2412 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str)); 2413 if(acl->blocked) 2414 yyerror("blocked address used for request-xfr"); 2415 if(acl->rangetype != acl_range_single) 2416 yyerror("address range used for request-xfr"); 2417 append_acl(&cfg_parser->pattern->request_xfr, acl); 2418 } 2419 #line 2420 "configparser.c" /* yacc.c:1648 */ 2420 break; 2421 2422 case 117: 2423 #line 643 "configparser.y" /* yacc.c:1648 */ 2424 { 2425 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str)); 2426 acl->use_axfr_only = 1; 2427 if(acl->blocked) 2428 yyerror("blocked address used for request-xfr"); 2429 if(acl->rangetype != acl_range_single) 2430 yyerror("address range used for request-xfr"); 2431 append_acl(&cfg_parser->pattern->request_xfr, acl); 2432 } 2433 #line 2434 "configparser.c" /* yacc.c:1648 */ 2434 break; 2435 2436 case 118: 2437 #line 653 "configparser.y" /* yacc.c:1648 */ 2438 { 2439 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str)); 2440 acl->allow_udp = 1; 2441 if(acl->blocked) 2442 yyerror("blocked address used for request-xfr"); 2443 if(acl->rangetype != acl_range_single) 2444 yyerror("address range used for request-xfr"); 2445 append_acl(&cfg_parser->pattern->request_xfr, acl); 2446 } 2447 #line 2448 "configparser.c" /* yacc.c:1648 */ 2448 break; 2449 2450 case 119: 2451 #line 663 "configparser.y" /* yacc.c:1648 */ 2452 { 2453 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str)); 2454 append_acl(&cfg_parser->pattern->allow_notify, acl); 2455 } 2456 #line 2457 "configparser.c" /* yacc.c:1648 */ 2457 break; 2458 2459 case 120: 2460 #line 668 "configparser.y" /* yacc.c:1648 */ 2461 { 2462 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str)); 2463 if(acl->blocked) 2464 yyerror("blocked address used for notify"); 2465 if(acl->rangetype != acl_range_single) 2466 yyerror("address range used for notify"); 2467 append_acl(&cfg_parser->pattern->notify, acl); 2468 } 2469 #line 2470 "configparser.c" /* yacc.c:1648 */ 2470 break; 2471 2472 case 121: 2473 #line 677 "configparser.y" /* yacc.c:1648 */ 2474 { 2475 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str)); 2476 append_acl(&cfg_parser->pattern->provide_xfr, acl); 2477 } 2478 #line 2479 "configparser.c" /* yacc.c:1648 */ 2479 break; 2480 2481 case 122: 2482 #line 682 "configparser.y" /* yacc.c:1648 */ 2483 { 2484 acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[0].str), "NOKEY"); 2485 append_acl(&cfg_parser->pattern->outgoing_interface, acl); 2486 } 2487 #line 2488 "configparser.c" /* yacc.c:1648 */ 2488 break; 2489 2490 case 123: 2491 #line 687 "configparser.y" /* yacc.c:1648 */ 2492 { 2493 cfg_parser->pattern->allow_axfr_fallback = (yyvsp[0].bln); 2494 cfg_parser->pattern->allow_axfr_fallback_is_default = 0; 2495 } 2496 #line 2497 "configparser.c" /* yacc.c:1648 */ 2497 break; 2498 2499 case 124: 2500 #line 692 "configparser.y" /* yacc.c:1648 */ 2501 { 2502 cfg_parser->pattern->notify_retry = (yyvsp[0].llng); 2503 cfg_parser->pattern->notify_retry_is_default = 0; 2504 } 2505 #line 2506 "configparser.c" /* yacc.c:1648 */ 2506 break; 2507 2508 case 125: 2509 #line 697 "configparser.y" /* yacc.c:1648 */ 2510 { 2511 cfg_parser->pattern->max_refresh_time = (yyvsp[0].llng); 2512 cfg_parser->pattern->max_refresh_time_is_default = 0; 2513 } 2514 #line 2515 "configparser.c" /* yacc.c:1648 */ 2515 break; 2516 2517 case 126: 2518 #line 702 "configparser.y" /* yacc.c:1648 */ 2519 { 2520 cfg_parser->pattern->min_refresh_time = (yyvsp[0].llng); 2521 cfg_parser->pattern->min_refresh_time_is_default = 0; 2522 } 2523 #line 2524 "configparser.c" /* yacc.c:1648 */ 2524 break; 2525 2526 case 127: 2527 #line 707 "configparser.y" /* yacc.c:1648 */ 2528 { 2529 cfg_parser->pattern->max_retry_time = (yyvsp[0].llng); 2530 cfg_parser->pattern->max_retry_time_is_default = 0; 2531 } 2532 #line 2533 "configparser.c" /* yacc.c:1648 */ 2533 break; 2534 2535 case 128: 2536 #line 712 "configparser.y" /* yacc.c:1648 */ 2537 { 2538 cfg_parser->pattern->min_retry_time = (yyvsp[0].llng); 2539 cfg_parser->pattern->min_retry_time_is_default = 0; 2540 } 2541 #line 2542 "configparser.c" /* yacc.c:1648 */ 2542 break; 2543 2544 case 129: 2545 #line 719 "configparser.y" /* yacc.c:1648 */ 2546 { 2547 struct ip_address_option *ip = region_alloc_zero( 2548 cfg_parser->opt->region, sizeof(*ip)); 2549 ip->address = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); 2550 (yyval.ip) = ip; 2551 } 2552 #line 2553 "configparser.c" /* yacc.c:1648 */ 2553 break; 2554 2555 case 130: 2556 #line 728 "configparser.y" /* yacc.c:1648 */ 2557 { 2558 /* ensure string consists entirely of digits */ 2559 const char *str = (yyvsp[0].str); 2560 size_t pos = 0; 2561 while(str[pos] >= '0' && str[pos] <= '9') { 2562 pos++; 2563 } 2564 2565 (yyval.llng) = 0; 2566 if(pos > 0 && str[pos] == '\0') { 2567 int err = errno; 2568 errno = 0; 2569 (yyval.llng) = strtoll(str, NULL, 10); 2570 errno = err; 2571 } else { 2572 yyerror("expected a number"); 2573 YYABORT; /* trigger a parser error */ 2574 } 2575 } 2576 #line 2577 "configparser.c" /* yacc.c:1648 */ 2577 break; 2578 2579 case 131: 2580 #line 750 "configparser.y" /* yacc.c:1648 */ 2581 { 2582 (yyval.bln) = 0; 2583 if(strcmp((yyvsp[0].str), "yes") == 0) { 2584 (yyval.bln) = 1; 2585 } else if(strcmp((yyvsp[0].str), "no") == 0) { 2586 (yyval.bln) = 0; 2587 } else { 2588 yyerror("expected yes or no"); 2589 YYABORT; /* trigger a parser error */ 2590 } 2591 } 2592 #line 2593 "configparser.c" /* yacc.c:1648 */ 2593 break; 2594 2595 2596 #line 2597 "configparser.c" /* yacc.c:1648 */ 2597 default: break; 2598 } 2599 /* User semantic actions sometimes alter yychar, and that requires 2600 that yytoken be updated with the new translation. We take the 2601 approach of translating immediately before every use of yytoken. 2602 One alternative is translating here after every semantic action, 2603 but that translation would be missed if the semantic action invokes 2604 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 2605 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 2606 incorrect destructor might then be invoked immediately. In the 2607 case of YYERROR or YYBACKUP, subsequent parser actions might lead 2608 to an incorrect destructor call or verbose syntax error message 2609 before the lookahead is translated. */ 2610 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 2611 2612 YYPOPSTACK (yylen); 2613 yylen = 0; 2614 YY_STACK_PRINT (yyss, yyssp); 2615 2616 *++yyvsp = yyval; 2617 2618 /* Now 'shift' the result of the reduction. Determine what state 2619 that goes to, based on the state we popped back to and the rule 2620 number reduced by. */ 2621 2622 yyn = yyr1[yyn]; 2623 2624 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 2625 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 2626 yystate = yytable[yystate]; 2627 else 2628 yystate = yydefgoto[yyn - YYNTOKENS]; 2629 2630 goto yynewstate; 2631 2632 2633 /*--------------------------------------. 2634 | yyerrlab -- here on detecting error. | 2635 `--------------------------------------*/ 2636 yyerrlab: 2637 /* Make sure we have latest lookahead translation. See comments at 2638 user semantic actions for why this is necessary. */ 2639 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 2640 2641 /* If not already recovering from an error, report this error. */ 2642 if (!yyerrstatus) 2643 { 2644 ++yynerrs; 2645 #if ! YYERROR_VERBOSE 2646 yyerror (YY_("syntax error")); 2647 #else 2648 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 2649 yyssp, yytoken) 2650 { 2651 char const *yymsgp = YY_("syntax error"); 2652 int yysyntax_error_status; 2653 yysyntax_error_status = YYSYNTAX_ERROR; 2654 if (yysyntax_error_status == 0) 2655 yymsgp = yymsg; 2656 else if (yysyntax_error_status == 1) 2657 { 2658 if (yymsg != yymsgbuf) 2659 YYSTACK_FREE (yymsg); 2660 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 2661 if (!yymsg) 2662 { 2663 yymsg = yymsgbuf; 2664 yymsg_alloc = sizeof yymsgbuf; 2665 yysyntax_error_status = 2; 2666 } 2667 else 2668 { 2669 yysyntax_error_status = YYSYNTAX_ERROR; 2670 yymsgp = yymsg; 2671 } 2672 } 2673 yyerror (yymsgp); 2674 if (yysyntax_error_status == 2) 2675 goto yyexhaustedlab; 2676 } 2677 # undef YYSYNTAX_ERROR 2678 #endif 2679 } 2680 2681 2682 2683 if (yyerrstatus == 3) 2684 { 2685 /* If just tried and failed to reuse lookahead token after an 2686 error, discard it. */ 2687 2688 if (yychar <= YYEOF) 2689 { 2690 /* Return failure if at end of input. */ 2691 if (yychar == YYEOF) 2692 YYABORT; 2693 } 2694 else 2695 { 2696 yydestruct ("Error: discarding", 2697 yytoken, &yylval); 2698 yychar = YYEMPTY; 2699 } 2700 } 2701 2702 /* Else will try to reuse lookahead token after shifting the error 2703 token. */ 2704 goto yyerrlab1; 2705 2706 2707 /*---------------------------------------------------. 2708 | yyerrorlab -- error raised explicitly by YYERROR. | 2709 `---------------------------------------------------*/ 2710 yyerrorlab: 2711 2712 /* Pacify compilers like GCC when the user code never invokes 2713 YYERROR and the label yyerrorlab therefore never appears in user 2714 code. */ 2715 if (/*CONSTCOND*/ 0) 2716 goto yyerrorlab; 2717 2718 /* Do not reclaim the symbols of the rule whose action triggered 2719 this YYERROR. */ 2720 YYPOPSTACK (yylen); 2721 yylen = 0; 2722 YY_STACK_PRINT (yyss, yyssp); 2723 yystate = *yyssp; 2724 goto yyerrlab1; 2725 2726 2727 /*-------------------------------------------------------------. 2728 | yyerrlab1 -- common code for both syntax error and YYERROR. | 2729 `-------------------------------------------------------------*/ 2730 yyerrlab1: 2731 yyerrstatus = 3; /* Each real token shifted decrements this. */ 2732 2733 for (;;) 2734 { 2735 yyn = yypact[yystate]; 2736 if (!yypact_value_is_default (yyn)) 2737 { 2738 yyn += YYTERROR; 2739 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 2740 { 2741 yyn = yytable[yyn]; 2742 if (0 < yyn) 2743 break; 2744 } 2745 } 2746 2747 /* Pop the current state because it cannot handle the error token. */ 2748 if (yyssp == yyss) 2749 YYABORT; 2750 2751 2752 yydestruct ("Error: popping", 2753 yystos[yystate], yyvsp); 2754 YYPOPSTACK (1); 2755 yystate = *yyssp; 2756 YY_STACK_PRINT (yyss, yyssp); 2757 } 2758 2759 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 2760 *++yyvsp = yylval; 2761 YY_IGNORE_MAYBE_UNINITIALIZED_END 2762 2763 2764 /* Shift the error token. */ 2765 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 2766 2767 yystate = yyn; 2768 goto yynewstate; 2769 2770 2771 /*-------------------------------------. 2772 | yyacceptlab -- YYACCEPT comes here. | 2773 `-------------------------------------*/ 2774 yyacceptlab: 2775 yyresult = 0; 2776 goto yyreturn; 2777 2778 /*-----------------------------------. 2779 | yyabortlab -- YYABORT comes here. | 2780 `-----------------------------------*/ 2781 yyabortlab: 2782 yyresult = 1; 2783 goto yyreturn; 2784 2785 #if !defined yyoverflow || YYERROR_VERBOSE 2786 /*-------------------------------------------------. 2787 | yyexhaustedlab -- memory exhaustion comes here. | 2788 `-------------------------------------------------*/ 2789 yyexhaustedlab: 2790 yyerror (YY_("memory exhausted")); 2791 yyresult = 2; 2792 /* Fall through. */ 2793 #endif 2794 2795 yyreturn: 2796 if (yychar != YYEMPTY) 2797 { 2798 /* Make sure we have latest lookahead translation. See comments at 2799 user semantic actions for why this is necessary. */ 2800 yytoken = YYTRANSLATE (yychar); 2801 yydestruct ("Cleanup: discarding lookahead", 2802 yytoken, &yylval); 2803 } 2804 /* Do not reclaim the symbols of the rule whose action triggered 2805 this YYABORT or YYACCEPT. */ 2806 YYPOPSTACK (yylen); 2807 YY_STACK_PRINT (yyss, yyssp); 2808 while (yyssp != yyss) 2809 { 2810 yydestruct ("Cleanup: popping", 2811 yystos[*yyssp], yyvsp); 2812 YYPOPSTACK (1); 2813 } 2814 #ifndef yyoverflow 2815 if (yyss != yyssa) 2816 YYSTACK_FREE (yyss); 2817 #endif 2818 #if YYERROR_VERBOSE 2819 if (yymsg != yymsgbuf) 2820 YYSTACK_FREE (yymsg); 2821 #endif 2822 return yyresult; 2823 } 2824 #line 762 "configparser.y" /* yacc.c:1907 */ 2825 2826 2827 static void 2828 append_acl(struct acl_options **list, struct acl_options *acl) 2829 { 2830 assert(list != NULL); 2831 2832 if(*list == NULL) { 2833 *list = acl; 2834 } else { 2835 struct acl_options *tail = *list; 2836 while(tail->next != NULL) 2837 tail = tail->next; 2838 tail->next = acl; 2839 } 2840 } 2841 2842