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