xref: /netbsd-src/external/bsd/nsd/dist/configparser.c (revision 9fb66d812c00ebfb445c0b47dea128f32aa6fe96)
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