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