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