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