]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - util/configparser.c
Vendor import of Unbound 1.13.0.
[FreeBSD/FreeBSD.git] / util / configparser.c
1 /* A Bison parser, made by GNU Bison 3.4.1.  */
2
3 /* Bison implementation for Yacc-like parsers in C
4
5    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
6    Inc.
7
8    This program is free software: you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation, either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 /* As a special exception, you may create a larger work that contains
22    part or all of the Bison parser skeleton and distribute that work
23    under terms of your choice, so long as that work isn't itself a
24    parser generator using the skeleton or a modified version thereof
25    as a parser skeleton.  Alternatively, if you modify or redistribute
26    the parser skeleton itself, you may (at your option) remove this
27    special exception, which will cause the skeleton and the resulting
28    Bison output files to be licensed under the GNU General Public
29    License without this special exception.
30
31    This special exception was added by the Free Software Foundation in
32    version 2.2 of Bison.  */
33
34 /* C LALR(1) parser skeleton written by Richard Stallman, by
35    simplifying the original so-called "semantic" parser.  */
36
37 /* All symbols defined below should begin with yy or YY, to avoid
38    infringing on user name space.  This should be done even for local
39    variables, as they might otherwise be expanded by user macros.
40    There are some unavoidable exceptions within include files to
41    define necessary library symbols; they are noted "INFRINGES ON
42    USER NAME SPACE" below.  */
43
44 /* Undocumented macros, especially those whose name start with YY_,
45    are private implementation details.  Do not rely on them.  */
46
47 /* Identify Bison output.  */
48 #define YYBISON 1
49
50 /* Bison version.  */
51 #define YYBISON_VERSION "3.4.1"
52
53 /* Skeleton name.  */
54 #define YYSKELETON_NAME "yacc.c"
55
56 /* Pure parsers.  */
57 #define YYPURE 0
58
59 /* Push parsers.  */
60 #define YYPUSH 0
61
62 /* Pull parsers.  */
63 #define YYPULL 1
64
65
66
67
68 /* First part of user prologue.  */
69 #line 38 "util/configparser.y"
70
71 #include "config.h"
72
73 #include <stdarg.h>
74 #include <stdio.h>
75 #include <string.h>
76 #include <stdlib.h>
77 #include <assert.h>
78
79 #include "util/configyyrename.h"
80 #include "util/config_file.h"
81 #include "util/net_help.h"
82
83 int ub_c_lex(void);
84 void ub_c_error(const char *message);
85
86 static void validate_respip_action(const char* action);
87
88 /* these need to be global, otherwise they cannot be used inside yacc */
89 extern struct config_parser_state* 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 "util/configparser.c"
99
100 # ifndef YY_NULLPTR
101 #  if defined __cplusplus
102 #   if 201103L <= __cplusplus
103 #    define YY_NULLPTR nullptr
104 #   else
105 #    define YY_NULLPTR 0
106 #   endif
107 #  else
108 #   define YY_NULLPTR ((void*)0)
109 #  endif
110 # endif
111
112 /* Enabling verbose error messages.  */
113 #ifdef YYERROR_VERBOSE
114 # undef YYERROR_VERBOSE
115 # define YYERROR_VERBOSE 1
116 #else
117 # define YYERROR_VERBOSE 0
118 #endif
119
120 /* Use api.header.include to #include this header
121    instead of duplicating it here.  */
122 #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
123 # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
124 /* Debug traces.  */
125 #ifndef YYDEBUG
126 # define YYDEBUG 0
127 #endif
128 #if YYDEBUG
129 extern int yydebug;
130 #endif
131
132 /* Token type.  */
133 #ifndef YYTOKENTYPE
134 # define YYTOKENTYPE
135   enum yytokentype
136   {
137     SPACE = 258,
138     LETTER = 259,
139     NEWLINE = 260,
140     COMMENT = 261,
141     COLON = 262,
142     ANY = 263,
143     ZONESTR = 264,
144     STRING_ARG = 265,
145     VAR_FORCE_TOPLEVEL = 266,
146     VAR_SERVER = 267,
147     VAR_VERBOSITY = 268,
148     VAR_NUM_THREADS = 269,
149     VAR_PORT = 270,
150     VAR_OUTGOING_RANGE = 271,
151     VAR_INTERFACE = 272,
152     VAR_PREFER_IP4 = 273,
153     VAR_DO_IP4 = 274,
154     VAR_DO_IP6 = 275,
155     VAR_PREFER_IP6 = 276,
156     VAR_DO_UDP = 277,
157     VAR_DO_TCP = 278,
158     VAR_TCP_MSS = 279,
159     VAR_OUTGOING_TCP_MSS = 280,
160     VAR_TCP_IDLE_TIMEOUT = 281,
161     VAR_EDNS_TCP_KEEPALIVE = 282,
162     VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283,
163     VAR_CHROOT = 284,
164     VAR_USERNAME = 285,
165     VAR_DIRECTORY = 286,
166     VAR_LOGFILE = 287,
167     VAR_PIDFILE = 288,
168     VAR_MSG_CACHE_SIZE = 289,
169     VAR_MSG_CACHE_SLABS = 290,
170     VAR_NUM_QUERIES_PER_THREAD = 291,
171     VAR_RRSET_CACHE_SIZE = 292,
172     VAR_RRSET_CACHE_SLABS = 293,
173     VAR_OUTGOING_NUM_TCP = 294,
174     VAR_INFRA_HOST_TTL = 295,
175     VAR_INFRA_LAME_TTL = 296,
176     VAR_INFRA_CACHE_SLABS = 297,
177     VAR_INFRA_CACHE_NUMHOSTS = 298,
178     VAR_INFRA_CACHE_LAME_SIZE = 299,
179     VAR_NAME = 300,
180     VAR_STUB_ZONE = 301,
181     VAR_STUB_HOST = 302,
182     VAR_STUB_ADDR = 303,
183     VAR_TARGET_FETCH_POLICY = 304,
184     VAR_HARDEN_SHORT_BUFSIZE = 305,
185     VAR_HARDEN_LARGE_QUERIES = 306,
186     VAR_FORWARD_ZONE = 307,
187     VAR_FORWARD_HOST = 308,
188     VAR_FORWARD_ADDR = 309,
189     VAR_DO_NOT_QUERY_ADDRESS = 310,
190     VAR_HIDE_IDENTITY = 311,
191     VAR_HIDE_VERSION = 312,
192     VAR_IDENTITY = 313,
193     VAR_VERSION = 314,
194     VAR_HARDEN_GLUE = 315,
195     VAR_MODULE_CONF = 316,
196     VAR_TRUST_ANCHOR_FILE = 317,
197     VAR_TRUST_ANCHOR = 318,
198     VAR_VAL_OVERRIDE_DATE = 319,
199     VAR_BOGUS_TTL = 320,
200     VAR_VAL_CLEAN_ADDITIONAL = 321,
201     VAR_VAL_PERMISSIVE_MODE = 322,
202     VAR_INCOMING_NUM_TCP = 323,
203     VAR_MSG_BUFFER_SIZE = 324,
204     VAR_KEY_CACHE_SIZE = 325,
205     VAR_KEY_CACHE_SLABS = 326,
206     VAR_TRUSTED_KEYS_FILE = 327,
207     VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328,
208     VAR_USE_SYSLOG = 329,
209     VAR_OUTGOING_INTERFACE = 330,
210     VAR_ROOT_HINTS = 331,
211     VAR_DO_NOT_QUERY_LOCALHOST = 332,
212     VAR_CACHE_MAX_TTL = 333,
213     VAR_HARDEN_DNSSEC_STRIPPED = 334,
214     VAR_ACCESS_CONTROL = 335,
215     VAR_LOCAL_ZONE = 336,
216     VAR_LOCAL_DATA = 337,
217     VAR_INTERFACE_AUTOMATIC = 338,
218     VAR_STATISTICS_INTERVAL = 339,
219     VAR_DO_DAEMONIZE = 340,
220     VAR_USE_CAPS_FOR_ID = 341,
221     VAR_STATISTICS_CUMULATIVE = 342,
222     VAR_OUTGOING_PORT_PERMIT = 343,
223     VAR_OUTGOING_PORT_AVOID = 344,
224     VAR_DLV_ANCHOR_FILE = 345,
225     VAR_DLV_ANCHOR = 346,
226     VAR_NEG_CACHE_SIZE = 347,
227     VAR_HARDEN_REFERRAL_PATH = 348,
228     VAR_PRIVATE_ADDRESS = 349,
229     VAR_PRIVATE_DOMAIN = 350,
230     VAR_REMOTE_CONTROL = 351,
231     VAR_CONTROL_ENABLE = 352,
232     VAR_CONTROL_INTERFACE = 353,
233     VAR_CONTROL_PORT = 354,
234     VAR_SERVER_KEY_FILE = 355,
235     VAR_SERVER_CERT_FILE = 356,
236     VAR_CONTROL_KEY_FILE = 357,
237     VAR_CONTROL_CERT_FILE = 358,
238     VAR_CONTROL_USE_CERT = 359,
239     VAR_EXTENDED_STATISTICS = 360,
240     VAR_LOCAL_DATA_PTR = 361,
241     VAR_JOSTLE_TIMEOUT = 362,
242     VAR_STUB_PRIME = 363,
243     VAR_UNWANTED_REPLY_THRESHOLD = 364,
244     VAR_LOG_TIME_ASCII = 365,
245     VAR_DOMAIN_INSECURE = 366,
246     VAR_PYTHON = 367,
247     VAR_PYTHON_SCRIPT = 368,
248     VAR_VAL_SIG_SKEW_MIN = 369,
249     VAR_VAL_SIG_SKEW_MAX = 370,
250     VAR_CACHE_MIN_TTL = 371,
251     VAR_VAL_LOG_LEVEL = 372,
252     VAR_AUTO_TRUST_ANCHOR_FILE = 373,
253     VAR_KEEP_MISSING = 374,
254     VAR_ADD_HOLDDOWN = 375,
255     VAR_DEL_HOLDDOWN = 376,
256     VAR_SO_RCVBUF = 377,
257     VAR_EDNS_BUFFER_SIZE = 378,
258     VAR_PREFETCH = 379,
259     VAR_PREFETCH_KEY = 380,
260     VAR_SO_SNDBUF = 381,
261     VAR_SO_REUSEPORT = 382,
262     VAR_HARDEN_BELOW_NXDOMAIN = 383,
263     VAR_IGNORE_CD_FLAG = 384,
264     VAR_LOG_QUERIES = 385,
265     VAR_LOG_REPLIES = 386,
266     VAR_LOG_LOCAL_ACTIONS = 387,
267     VAR_TCP_UPSTREAM = 388,
268     VAR_SSL_UPSTREAM = 389,
269     VAR_SSL_SERVICE_KEY = 390,
270     VAR_SSL_SERVICE_PEM = 391,
271     VAR_SSL_PORT = 392,
272     VAR_FORWARD_FIRST = 393,
273     VAR_STUB_SSL_UPSTREAM = 394,
274     VAR_FORWARD_SSL_UPSTREAM = 395,
275     VAR_TLS_CERT_BUNDLE = 396,
276     VAR_HTTPS_PORT = 397,
277     VAR_HTTP_ENDPOINT = 398,
278     VAR_HTTP_MAX_STREAMS = 399,
279     VAR_HTTP_QUERY_BUFFER_SIZE = 400,
280     VAR_HTTP_RESPONSE_BUFFER_SIZE = 401,
281     VAR_HTTP_NODELAY = 402,
282     VAR_HTTP_NOTLS_DOWNSTREAM = 403,
283     VAR_STUB_FIRST = 404,
284     VAR_MINIMAL_RESPONSES = 405,
285     VAR_RRSET_ROUNDROBIN = 406,
286     VAR_MAX_UDP_SIZE = 407,
287     VAR_DELAY_CLOSE = 408,
288     VAR_UDP_CONNECT = 409,
289     VAR_UNBLOCK_LAN_ZONES = 410,
290     VAR_INSECURE_LAN_ZONES = 411,
291     VAR_INFRA_CACHE_MIN_RTT = 412,
292     VAR_INFRA_KEEP_PROBING = 413,
293     VAR_DNS64_PREFIX = 414,
294     VAR_DNS64_SYNTHALL = 415,
295     VAR_DNS64_IGNORE_AAAA = 416,
296     VAR_DNSTAP = 417,
297     VAR_DNSTAP_ENABLE = 418,
298     VAR_DNSTAP_SOCKET_PATH = 419,
299     VAR_DNSTAP_IP = 420,
300     VAR_DNSTAP_TLS = 421,
301     VAR_DNSTAP_TLS_SERVER_NAME = 422,
302     VAR_DNSTAP_TLS_CERT_BUNDLE = 423,
303     VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424,
304     VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425,
305     VAR_DNSTAP_SEND_IDENTITY = 426,
306     VAR_DNSTAP_SEND_VERSION = 427,
307     VAR_DNSTAP_BIDIRECTIONAL = 428,
308     VAR_DNSTAP_IDENTITY = 429,
309     VAR_DNSTAP_VERSION = 430,
310     VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431,
311     VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432,
312     VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433,
313     VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434,
314     VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435,
315     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436,
316     VAR_RESPONSE_IP_TAG = 437,
317     VAR_RESPONSE_IP = 438,
318     VAR_RESPONSE_IP_DATA = 439,
319     VAR_HARDEN_ALGO_DOWNGRADE = 440,
320     VAR_IP_TRANSPARENT = 441,
321     VAR_IP_DSCP = 442,
322     VAR_DISABLE_DNSSEC_LAME_CHECK = 443,
323     VAR_IP_RATELIMIT = 444,
324     VAR_IP_RATELIMIT_SLABS = 445,
325     VAR_IP_RATELIMIT_SIZE = 446,
326     VAR_RATELIMIT = 447,
327     VAR_RATELIMIT_SLABS = 448,
328     VAR_RATELIMIT_SIZE = 449,
329     VAR_RATELIMIT_FOR_DOMAIN = 450,
330     VAR_RATELIMIT_BELOW_DOMAIN = 451,
331     VAR_IP_RATELIMIT_FACTOR = 452,
332     VAR_RATELIMIT_FACTOR = 453,
333     VAR_SEND_CLIENT_SUBNET = 454,
334     VAR_CLIENT_SUBNET_ZONE = 455,
335     VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456,
336     VAR_CLIENT_SUBNET_OPCODE = 457,
337     VAR_MAX_CLIENT_SUBNET_IPV4 = 458,
338     VAR_MAX_CLIENT_SUBNET_IPV6 = 459,
339     VAR_MIN_CLIENT_SUBNET_IPV4 = 460,
340     VAR_MIN_CLIENT_SUBNET_IPV6 = 461,
341     VAR_MAX_ECS_TREE_SIZE_IPV4 = 462,
342     VAR_MAX_ECS_TREE_SIZE_IPV6 = 463,
343     VAR_CAPS_WHITELIST = 464,
344     VAR_CACHE_MAX_NEGATIVE_TTL = 465,
345     VAR_PERMIT_SMALL_HOLDDOWN = 466,
346     VAR_QNAME_MINIMISATION = 467,
347     VAR_QNAME_MINIMISATION_STRICT = 468,
348     VAR_IP_FREEBIND = 469,
349     VAR_DEFINE_TAG = 470,
350     VAR_LOCAL_ZONE_TAG = 471,
351     VAR_ACCESS_CONTROL_TAG = 472,
352     VAR_LOCAL_ZONE_OVERRIDE = 473,
353     VAR_ACCESS_CONTROL_TAG_ACTION = 474,
354     VAR_ACCESS_CONTROL_TAG_DATA = 475,
355     VAR_VIEW = 476,
356     VAR_ACCESS_CONTROL_VIEW = 477,
357     VAR_VIEW_FIRST = 478,
358     VAR_SERVE_EXPIRED = 479,
359     VAR_SERVE_EXPIRED_TTL = 480,
360     VAR_SERVE_EXPIRED_TTL_RESET = 481,
361     VAR_SERVE_EXPIRED_REPLY_TTL = 482,
362     VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483,
363     VAR_FAKE_DSA = 484,
364     VAR_FAKE_SHA1 = 485,
365     VAR_LOG_IDENTITY = 486,
366     VAR_HIDE_TRUSTANCHOR = 487,
367     VAR_TRUST_ANCHOR_SIGNALING = 488,
368     VAR_AGGRESSIVE_NSEC = 489,
369     VAR_USE_SYSTEMD = 490,
370     VAR_SHM_ENABLE = 491,
371     VAR_SHM_KEY = 492,
372     VAR_ROOT_KEY_SENTINEL = 493,
373     VAR_DNSCRYPT = 494,
374     VAR_DNSCRYPT_ENABLE = 495,
375     VAR_DNSCRYPT_PORT = 496,
376     VAR_DNSCRYPT_PROVIDER = 497,
377     VAR_DNSCRYPT_SECRET_KEY = 498,
378     VAR_DNSCRYPT_PROVIDER_CERT = 499,
379     VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 500,
380     VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 501,
381     VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 502,
382     VAR_DNSCRYPT_NONCE_CACHE_SIZE = 503,
383     VAR_DNSCRYPT_NONCE_CACHE_SLABS = 504,
384     VAR_IPSECMOD_ENABLED = 505,
385     VAR_IPSECMOD_HOOK = 506,
386     VAR_IPSECMOD_IGNORE_BOGUS = 507,
387     VAR_IPSECMOD_MAX_TTL = 508,
388     VAR_IPSECMOD_WHITELIST = 509,
389     VAR_IPSECMOD_STRICT = 510,
390     VAR_CACHEDB = 511,
391     VAR_CACHEDB_BACKEND = 512,
392     VAR_CACHEDB_SECRETSEED = 513,
393     VAR_CACHEDB_REDISHOST = 514,
394     VAR_CACHEDB_REDISPORT = 515,
395     VAR_CACHEDB_REDISTIMEOUT = 516,
396     VAR_CACHEDB_REDISEXPIRERECORDS = 517,
397     VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 518,
398     VAR_FOR_UPSTREAM = 519,
399     VAR_AUTH_ZONE = 520,
400     VAR_ZONEFILE = 521,
401     VAR_MASTER = 522,
402     VAR_URL = 523,
403     VAR_FOR_DOWNSTREAM = 524,
404     VAR_FALLBACK_ENABLED = 525,
405     VAR_TLS_ADDITIONAL_PORT = 526,
406     VAR_LOW_RTT = 527,
407     VAR_LOW_RTT_PERMIL = 528,
408     VAR_FAST_SERVER_PERMIL = 529,
409     VAR_FAST_SERVER_NUM = 530,
410     VAR_ALLOW_NOTIFY = 531,
411     VAR_TLS_WIN_CERT = 532,
412     VAR_TCP_CONNECTION_LIMIT = 533,
413     VAR_FORWARD_NO_CACHE = 534,
414     VAR_STUB_NO_CACHE = 535,
415     VAR_LOG_SERVFAIL = 536,
416     VAR_DENY_ANY = 537,
417     VAR_UNKNOWN_SERVER_TIME_LIMIT = 538,
418     VAR_LOG_TAG_QUERYREPLY = 539,
419     VAR_STREAM_WAIT_SIZE = 540,
420     VAR_TLS_CIPHERS = 541,
421     VAR_TLS_CIPHERSUITES = 542,
422     VAR_TLS_USE_SNI = 543,
423     VAR_IPSET = 544,
424     VAR_IPSET_NAME_V4 = 545,
425     VAR_IPSET_NAME_V6 = 546,
426     VAR_TLS_SESSION_TICKET_KEYS = 547,
427     VAR_RPZ = 548,
428     VAR_TAGS = 549,
429     VAR_RPZ_ACTION_OVERRIDE = 550,
430     VAR_RPZ_CNAME_OVERRIDE = 551,
431     VAR_RPZ_LOG = 552,
432     VAR_RPZ_LOG_NAME = 553,
433     VAR_DYNLIB = 554,
434     VAR_DYNLIB_FILE = 555,
435     VAR_EDNS_CLIENT_STRING = 556,
436     VAR_EDNS_CLIENT_STRING_OPCODE = 557
437   };
438 #endif
439 /* Tokens.  */
440 #define SPACE 258
441 #define LETTER 259
442 #define NEWLINE 260
443 #define COMMENT 261
444 #define COLON 262
445 #define ANY 263
446 #define ZONESTR 264
447 #define STRING_ARG 265
448 #define VAR_FORCE_TOPLEVEL 266
449 #define VAR_SERVER 267
450 #define VAR_VERBOSITY 268
451 #define VAR_NUM_THREADS 269
452 #define VAR_PORT 270
453 #define VAR_OUTGOING_RANGE 271
454 #define VAR_INTERFACE 272
455 #define VAR_PREFER_IP4 273
456 #define VAR_DO_IP4 274
457 #define VAR_DO_IP6 275
458 #define VAR_PREFER_IP6 276
459 #define VAR_DO_UDP 277
460 #define VAR_DO_TCP 278
461 #define VAR_TCP_MSS 279
462 #define VAR_OUTGOING_TCP_MSS 280
463 #define VAR_TCP_IDLE_TIMEOUT 281
464 #define VAR_EDNS_TCP_KEEPALIVE 282
465 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283
466 #define VAR_CHROOT 284
467 #define VAR_USERNAME 285
468 #define VAR_DIRECTORY 286
469 #define VAR_LOGFILE 287
470 #define VAR_PIDFILE 288
471 #define VAR_MSG_CACHE_SIZE 289
472 #define VAR_MSG_CACHE_SLABS 290
473 #define VAR_NUM_QUERIES_PER_THREAD 291
474 #define VAR_RRSET_CACHE_SIZE 292
475 #define VAR_RRSET_CACHE_SLABS 293
476 #define VAR_OUTGOING_NUM_TCP 294
477 #define VAR_INFRA_HOST_TTL 295
478 #define VAR_INFRA_LAME_TTL 296
479 #define VAR_INFRA_CACHE_SLABS 297
480 #define VAR_INFRA_CACHE_NUMHOSTS 298
481 #define VAR_INFRA_CACHE_LAME_SIZE 299
482 #define VAR_NAME 300
483 #define VAR_STUB_ZONE 301
484 #define VAR_STUB_HOST 302
485 #define VAR_STUB_ADDR 303
486 #define VAR_TARGET_FETCH_POLICY 304
487 #define VAR_HARDEN_SHORT_BUFSIZE 305
488 #define VAR_HARDEN_LARGE_QUERIES 306
489 #define VAR_FORWARD_ZONE 307
490 #define VAR_FORWARD_HOST 308
491 #define VAR_FORWARD_ADDR 309
492 #define VAR_DO_NOT_QUERY_ADDRESS 310
493 #define VAR_HIDE_IDENTITY 311
494 #define VAR_HIDE_VERSION 312
495 #define VAR_IDENTITY 313
496 #define VAR_VERSION 314
497 #define VAR_HARDEN_GLUE 315
498 #define VAR_MODULE_CONF 316
499 #define VAR_TRUST_ANCHOR_FILE 317
500 #define VAR_TRUST_ANCHOR 318
501 #define VAR_VAL_OVERRIDE_DATE 319
502 #define VAR_BOGUS_TTL 320
503 #define VAR_VAL_CLEAN_ADDITIONAL 321
504 #define VAR_VAL_PERMISSIVE_MODE 322
505 #define VAR_INCOMING_NUM_TCP 323
506 #define VAR_MSG_BUFFER_SIZE 324
507 #define VAR_KEY_CACHE_SIZE 325
508 #define VAR_KEY_CACHE_SLABS 326
509 #define VAR_TRUSTED_KEYS_FILE 327
510 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328
511 #define VAR_USE_SYSLOG 329
512 #define VAR_OUTGOING_INTERFACE 330
513 #define VAR_ROOT_HINTS 331
514 #define VAR_DO_NOT_QUERY_LOCALHOST 332
515 #define VAR_CACHE_MAX_TTL 333
516 #define VAR_HARDEN_DNSSEC_STRIPPED 334
517 #define VAR_ACCESS_CONTROL 335
518 #define VAR_LOCAL_ZONE 336
519 #define VAR_LOCAL_DATA 337
520 #define VAR_INTERFACE_AUTOMATIC 338
521 #define VAR_STATISTICS_INTERVAL 339
522 #define VAR_DO_DAEMONIZE 340
523 #define VAR_USE_CAPS_FOR_ID 341
524 #define VAR_STATISTICS_CUMULATIVE 342
525 #define VAR_OUTGOING_PORT_PERMIT 343
526 #define VAR_OUTGOING_PORT_AVOID 344
527 #define VAR_DLV_ANCHOR_FILE 345
528 #define VAR_DLV_ANCHOR 346
529 #define VAR_NEG_CACHE_SIZE 347
530 #define VAR_HARDEN_REFERRAL_PATH 348
531 #define VAR_PRIVATE_ADDRESS 349
532 #define VAR_PRIVATE_DOMAIN 350
533 #define VAR_REMOTE_CONTROL 351
534 #define VAR_CONTROL_ENABLE 352
535 #define VAR_CONTROL_INTERFACE 353
536 #define VAR_CONTROL_PORT 354
537 #define VAR_SERVER_KEY_FILE 355
538 #define VAR_SERVER_CERT_FILE 356
539 #define VAR_CONTROL_KEY_FILE 357
540 #define VAR_CONTROL_CERT_FILE 358
541 #define VAR_CONTROL_USE_CERT 359
542 #define VAR_EXTENDED_STATISTICS 360
543 #define VAR_LOCAL_DATA_PTR 361
544 #define VAR_JOSTLE_TIMEOUT 362
545 #define VAR_STUB_PRIME 363
546 #define VAR_UNWANTED_REPLY_THRESHOLD 364
547 #define VAR_LOG_TIME_ASCII 365
548 #define VAR_DOMAIN_INSECURE 366
549 #define VAR_PYTHON 367
550 #define VAR_PYTHON_SCRIPT 368
551 #define VAR_VAL_SIG_SKEW_MIN 369
552 #define VAR_VAL_SIG_SKEW_MAX 370
553 #define VAR_CACHE_MIN_TTL 371
554 #define VAR_VAL_LOG_LEVEL 372
555 #define VAR_AUTO_TRUST_ANCHOR_FILE 373
556 #define VAR_KEEP_MISSING 374
557 #define VAR_ADD_HOLDDOWN 375
558 #define VAR_DEL_HOLDDOWN 376
559 #define VAR_SO_RCVBUF 377
560 #define VAR_EDNS_BUFFER_SIZE 378
561 #define VAR_PREFETCH 379
562 #define VAR_PREFETCH_KEY 380
563 #define VAR_SO_SNDBUF 381
564 #define VAR_SO_REUSEPORT 382
565 #define VAR_HARDEN_BELOW_NXDOMAIN 383
566 #define VAR_IGNORE_CD_FLAG 384
567 #define VAR_LOG_QUERIES 385
568 #define VAR_LOG_REPLIES 386
569 #define VAR_LOG_LOCAL_ACTIONS 387
570 #define VAR_TCP_UPSTREAM 388
571 #define VAR_SSL_UPSTREAM 389
572 #define VAR_SSL_SERVICE_KEY 390
573 #define VAR_SSL_SERVICE_PEM 391
574 #define VAR_SSL_PORT 392
575 #define VAR_FORWARD_FIRST 393
576 #define VAR_STUB_SSL_UPSTREAM 394
577 #define VAR_FORWARD_SSL_UPSTREAM 395
578 #define VAR_TLS_CERT_BUNDLE 396
579 #define VAR_HTTPS_PORT 397
580 #define VAR_HTTP_ENDPOINT 398
581 #define VAR_HTTP_MAX_STREAMS 399
582 #define VAR_HTTP_QUERY_BUFFER_SIZE 400
583 #define VAR_HTTP_RESPONSE_BUFFER_SIZE 401
584 #define VAR_HTTP_NODELAY 402
585 #define VAR_HTTP_NOTLS_DOWNSTREAM 403
586 #define VAR_STUB_FIRST 404
587 #define VAR_MINIMAL_RESPONSES 405
588 #define VAR_RRSET_ROUNDROBIN 406
589 #define VAR_MAX_UDP_SIZE 407
590 #define VAR_DELAY_CLOSE 408
591 #define VAR_UDP_CONNECT 409
592 #define VAR_UNBLOCK_LAN_ZONES 410
593 #define VAR_INSECURE_LAN_ZONES 411
594 #define VAR_INFRA_CACHE_MIN_RTT 412
595 #define VAR_INFRA_KEEP_PROBING 413
596 #define VAR_DNS64_PREFIX 414
597 #define VAR_DNS64_SYNTHALL 415
598 #define VAR_DNS64_IGNORE_AAAA 416
599 #define VAR_DNSTAP 417
600 #define VAR_DNSTAP_ENABLE 418
601 #define VAR_DNSTAP_SOCKET_PATH 419
602 #define VAR_DNSTAP_IP 420
603 #define VAR_DNSTAP_TLS 421
604 #define VAR_DNSTAP_TLS_SERVER_NAME 422
605 #define VAR_DNSTAP_TLS_CERT_BUNDLE 423
606 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424
607 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425
608 #define VAR_DNSTAP_SEND_IDENTITY 426
609 #define VAR_DNSTAP_SEND_VERSION 427
610 #define VAR_DNSTAP_BIDIRECTIONAL 428
611 #define VAR_DNSTAP_IDENTITY 429
612 #define VAR_DNSTAP_VERSION 430
613 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431
614 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432
615 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433
616 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434
617 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435
618 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436
619 #define VAR_RESPONSE_IP_TAG 437
620 #define VAR_RESPONSE_IP 438
621 #define VAR_RESPONSE_IP_DATA 439
622 #define VAR_HARDEN_ALGO_DOWNGRADE 440
623 #define VAR_IP_TRANSPARENT 441
624 #define VAR_IP_DSCP 442
625 #define VAR_DISABLE_DNSSEC_LAME_CHECK 443
626 #define VAR_IP_RATELIMIT 444
627 #define VAR_IP_RATELIMIT_SLABS 445
628 #define VAR_IP_RATELIMIT_SIZE 446
629 #define VAR_RATELIMIT 447
630 #define VAR_RATELIMIT_SLABS 448
631 #define VAR_RATELIMIT_SIZE 449
632 #define VAR_RATELIMIT_FOR_DOMAIN 450
633 #define VAR_RATELIMIT_BELOW_DOMAIN 451
634 #define VAR_IP_RATELIMIT_FACTOR 452
635 #define VAR_RATELIMIT_FACTOR 453
636 #define VAR_SEND_CLIENT_SUBNET 454
637 #define VAR_CLIENT_SUBNET_ZONE 455
638 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456
639 #define VAR_CLIENT_SUBNET_OPCODE 457
640 #define VAR_MAX_CLIENT_SUBNET_IPV4 458
641 #define VAR_MAX_CLIENT_SUBNET_IPV6 459
642 #define VAR_MIN_CLIENT_SUBNET_IPV4 460
643 #define VAR_MIN_CLIENT_SUBNET_IPV6 461
644 #define VAR_MAX_ECS_TREE_SIZE_IPV4 462
645 #define VAR_MAX_ECS_TREE_SIZE_IPV6 463
646 #define VAR_CAPS_WHITELIST 464
647 #define VAR_CACHE_MAX_NEGATIVE_TTL 465
648 #define VAR_PERMIT_SMALL_HOLDDOWN 466
649 #define VAR_QNAME_MINIMISATION 467
650 #define VAR_QNAME_MINIMISATION_STRICT 468
651 #define VAR_IP_FREEBIND 469
652 #define VAR_DEFINE_TAG 470
653 #define VAR_LOCAL_ZONE_TAG 471
654 #define VAR_ACCESS_CONTROL_TAG 472
655 #define VAR_LOCAL_ZONE_OVERRIDE 473
656 #define VAR_ACCESS_CONTROL_TAG_ACTION 474
657 #define VAR_ACCESS_CONTROL_TAG_DATA 475
658 #define VAR_VIEW 476
659 #define VAR_ACCESS_CONTROL_VIEW 477
660 #define VAR_VIEW_FIRST 478
661 #define VAR_SERVE_EXPIRED 479
662 #define VAR_SERVE_EXPIRED_TTL 480
663 #define VAR_SERVE_EXPIRED_TTL_RESET 481
664 #define VAR_SERVE_EXPIRED_REPLY_TTL 482
665 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483
666 #define VAR_FAKE_DSA 484
667 #define VAR_FAKE_SHA1 485
668 #define VAR_LOG_IDENTITY 486
669 #define VAR_HIDE_TRUSTANCHOR 487
670 #define VAR_TRUST_ANCHOR_SIGNALING 488
671 #define VAR_AGGRESSIVE_NSEC 489
672 #define VAR_USE_SYSTEMD 490
673 #define VAR_SHM_ENABLE 491
674 #define VAR_SHM_KEY 492
675 #define VAR_ROOT_KEY_SENTINEL 493
676 #define VAR_DNSCRYPT 494
677 #define VAR_DNSCRYPT_ENABLE 495
678 #define VAR_DNSCRYPT_PORT 496
679 #define VAR_DNSCRYPT_PROVIDER 497
680 #define VAR_DNSCRYPT_SECRET_KEY 498
681 #define VAR_DNSCRYPT_PROVIDER_CERT 499
682 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 500
683 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 501
684 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 502
685 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 503
686 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 504
687 #define VAR_IPSECMOD_ENABLED 505
688 #define VAR_IPSECMOD_HOOK 506
689 #define VAR_IPSECMOD_IGNORE_BOGUS 507
690 #define VAR_IPSECMOD_MAX_TTL 508
691 #define VAR_IPSECMOD_WHITELIST 509
692 #define VAR_IPSECMOD_STRICT 510
693 #define VAR_CACHEDB 511
694 #define VAR_CACHEDB_BACKEND 512
695 #define VAR_CACHEDB_SECRETSEED 513
696 #define VAR_CACHEDB_REDISHOST 514
697 #define VAR_CACHEDB_REDISPORT 515
698 #define VAR_CACHEDB_REDISTIMEOUT 516
699 #define VAR_CACHEDB_REDISEXPIRERECORDS 517
700 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 518
701 #define VAR_FOR_UPSTREAM 519
702 #define VAR_AUTH_ZONE 520
703 #define VAR_ZONEFILE 521
704 #define VAR_MASTER 522
705 #define VAR_URL 523
706 #define VAR_FOR_DOWNSTREAM 524
707 #define VAR_FALLBACK_ENABLED 525
708 #define VAR_TLS_ADDITIONAL_PORT 526
709 #define VAR_LOW_RTT 527
710 #define VAR_LOW_RTT_PERMIL 528
711 #define VAR_FAST_SERVER_PERMIL 529
712 #define VAR_FAST_SERVER_NUM 530
713 #define VAR_ALLOW_NOTIFY 531
714 #define VAR_TLS_WIN_CERT 532
715 #define VAR_TCP_CONNECTION_LIMIT 533
716 #define VAR_FORWARD_NO_CACHE 534
717 #define VAR_STUB_NO_CACHE 535
718 #define VAR_LOG_SERVFAIL 536
719 #define VAR_DENY_ANY 537
720 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 538
721 #define VAR_LOG_TAG_QUERYREPLY 539
722 #define VAR_STREAM_WAIT_SIZE 540
723 #define VAR_TLS_CIPHERS 541
724 #define VAR_TLS_CIPHERSUITES 542
725 #define VAR_TLS_USE_SNI 543
726 #define VAR_IPSET 544
727 #define VAR_IPSET_NAME_V4 545
728 #define VAR_IPSET_NAME_V6 546
729 #define VAR_TLS_SESSION_TICKET_KEYS 547
730 #define VAR_RPZ 548
731 #define VAR_TAGS 549
732 #define VAR_RPZ_ACTION_OVERRIDE 550
733 #define VAR_RPZ_CNAME_OVERRIDE 551
734 #define VAR_RPZ_LOG 552
735 #define VAR_RPZ_LOG_NAME 553
736 #define VAR_DYNLIB 554
737 #define VAR_DYNLIB_FILE 555
738 #define VAR_EDNS_CLIENT_STRING 556
739 #define VAR_EDNS_CLIENT_STRING_OPCODE 557
740
741 /* Value type.  */
742 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
743 union YYSTYPE
744 {
745 #line 66 "util/configparser.y"
746
747         char*   str;
748
749 #line 750 "util/configparser.c"
750
751 };
752 typedef union YYSTYPE YYSTYPE;
753 # define YYSTYPE_IS_TRIVIAL 1
754 # define YYSTYPE_IS_DECLARED 1
755 #endif
756
757
758 extern YYSTYPE yylval;
759
760 int yyparse (void);
761
762 #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
763
764
765
766 #ifdef short
767 # undef short
768 #endif
769
770 #ifdef YYTYPE_UINT8
771 typedef YYTYPE_UINT8 yytype_uint8;
772 #else
773 typedef unsigned char yytype_uint8;
774 #endif
775
776 #ifdef YYTYPE_INT8
777 typedef YYTYPE_INT8 yytype_int8;
778 #else
779 typedef signed char yytype_int8;
780 #endif
781
782 #ifdef YYTYPE_UINT16
783 typedef YYTYPE_UINT16 yytype_uint16;
784 #else
785 typedef unsigned short yytype_uint16;
786 #endif
787
788 #ifdef YYTYPE_INT16
789 typedef YYTYPE_INT16 yytype_int16;
790 #else
791 typedef short yytype_int16;
792 #endif
793
794 #ifndef YYSIZE_T
795 # ifdef __SIZE_TYPE__
796 #  define YYSIZE_T __SIZE_TYPE__
797 # elif defined size_t
798 #  define YYSIZE_T size_t
799 # elif ! defined YYSIZE_T
800 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
801 #  define YYSIZE_T size_t
802 # else
803 #  define YYSIZE_T unsigned
804 # endif
805 #endif
806
807 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
808
809 #ifndef YY_
810 # if defined YYENABLE_NLS && YYENABLE_NLS
811 #  if ENABLE_NLS
812 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
813 #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
814 #  endif
815 # endif
816 # ifndef YY_
817 #  define YY_(Msgid) Msgid
818 # endif
819 #endif
820
821 #ifndef YY_ATTRIBUTE
822 # if (defined __GNUC__                                               \
823       && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
824      || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
825 #  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
826 # else
827 #  define YY_ATTRIBUTE(Spec) /* empty */
828 # endif
829 #endif
830
831 #ifndef YY_ATTRIBUTE_PURE
832 # define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
833 #endif
834
835 #ifndef YY_ATTRIBUTE_UNUSED
836 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
837 #endif
838
839 /* Suppress unused-variable warnings by "using" E.  */
840 #if ! defined lint || defined __GNUC__
841 # define YYUSE(E) ((void) (E))
842 #else
843 # define YYUSE(E) /* empty */
844 #endif
845
846 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
847 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
848 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
849     _Pragma ("GCC diagnostic push") \
850     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
851     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
852 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
853     _Pragma ("GCC diagnostic pop")
854 #else
855 # define YY_INITIAL_VALUE(Value) Value
856 #endif
857 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
858 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
859 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
860 #endif
861 #ifndef YY_INITIAL_VALUE
862 # define YY_INITIAL_VALUE(Value) /* Nothing. */
863 #endif
864
865
866 #define YY_ASSERT(E) ((void) (0 && (E)))
867
868 #if ! defined yyoverflow || YYERROR_VERBOSE
869
870 /* The parser invokes alloca or malloc; define the necessary symbols.  */
871
872 # ifdef YYSTACK_USE_ALLOCA
873 #  if YYSTACK_USE_ALLOCA
874 #   ifdef __GNUC__
875 #    define YYSTACK_ALLOC __builtin_alloca
876 #   elif defined __BUILTIN_VA_ARG_INCR
877 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
878 #   elif defined _AIX
879 #    define YYSTACK_ALLOC __alloca
880 #   elif defined _MSC_VER
881 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
882 #    define alloca _alloca
883 #   else
884 #    define YYSTACK_ALLOC alloca
885 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
886 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
887       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
888 #     ifndef EXIT_SUCCESS
889 #      define EXIT_SUCCESS 0
890 #     endif
891 #    endif
892 #   endif
893 #  endif
894 # endif
895
896 # ifdef YYSTACK_ALLOC
897    /* Pacify GCC's 'empty if-body' warning.  */
898 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
899 #  ifndef YYSTACK_ALLOC_MAXIMUM
900     /* The OS might guarantee only one guard page at the bottom of the stack,
901        and a page size can be as small as 4096 bytes.  So we cannot safely
902        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
903        to allow for a few compiler-allocated temporary stack slots.  */
904 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
905 #  endif
906 # else
907 #  define YYSTACK_ALLOC YYMALLOC
908 #  define YYSTACK_FREE YYFREE
909 #  ifndef YYSTACK_ALLOC_MAXIMUM
910 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
911 #  endif
912 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
913        && ! ((defined YYMALLOC || defined malloc) \
914              && (defined YYFREE || defined free)))
915 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
916 #   ifndef EXIT_SUCCESS
917 #    define EXIT_SUCCESS 0
918 #   endif
919 #  endif
920 #  ifndef YYMALLOC
921 #   define YYMALLOC malloc
922 #   if ! defined malloc && ! defined EXIT_SUCCESS
923 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
924 #   endif
925 #  endif
926 #  ifndef YYFREE
927 #   define YYFREE free
928 #   if ! defined free && ! defined EXIT_SUCCESS
929 void free (void *); /* INFRINGES ON USER NAME SPACE */
930 #   endif
931 #  endif
932 # endif
933 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
934
935
936 #if (! defined yyoverflow \
937      && (! defined __cplusplus \
938          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
939
940 /* A type that is properly aligned for any stack member.  */
941 union yyalloc
942 {
943   yytype_int16 yyss_alloc;
944   YYSTYPE yyvs_alloc;
945 };
946
947 /* The size of the maximum gap between one aligned stack and the next.  */
948 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
949
950 /* The size of an array large to enough to hold all stacks, each with
951    N elements.  */
952 # define YYSTACK_BYTES(N) \
953      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
954       + YYSTACK_GAP_MAXIMUM)
955
956 # define YYCOPY_NEEDED 1
957
958 /* Relocate STACK from its old location to the new one.  The
959    local variables YYSIZE and YYSTACKSIZE give the old and new number of
960    elements in the stack, and YYPTR gives the new location of the
961    stack.  Advance YYPTR to a properly aligned location for the next
962    stack.  */
963 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
964     do                                                                  \
965       {                                                                 \
966         YYSIZE_T yynewbytes;                                            \
967         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
968         Stack = &yyptr->Stack_alloc;                                    \
969         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
970         yyptr += yynewbytes / sizeof (*yyptr);                          \
971       }                                                                 \
972     while (0)
973
974 #endif
975
976 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
977 /* Copy COUNT objects from SRC to DST.  The source and destination do
978    not overlap.  */
979 # ifndef YYCOPY
980 #  if defined __GNUC__ && 1 < __GNUC__
981 #   define YYCOPY(Dst, Src, Count) \
982       __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
983 #  else
984 #   define YYCOPY(Dst, Src, Count)              \
985       do                                        \
986         {                                       \
987           YYSIZE_T yyi;                         \
988           for (yyi = 0; yyi < (Count); yyi++)   \
989             (Dst)[yyi] = (Src)[yyi];            \
990         }                                       \
991       while (0)
992 #  endif
993 # endif
994 #endif /* !YYCOPY_NEEDED */
995
996 /* YYFINAL -- State number of the termination state.  */
997 #define YYFINAL  2
998 /* YYLAST -- Last index in YYTABLE.  */
999 #define YYLAST   641
1000
1001 /* YYNTOKENS -- Number of terminals.  */
1002 #define YYNTOKENS  303
1003 /* YYNNTS -- Number of nonterminals.  */
1004 #define YYNNTS  328
1005 /* YYNRULES -- Number of rules.  */
1006 #define YYNRULES  632
1007 /* YYNSTATES -- Number of states.  */
1008 #define YYNSTATES  939
1009
1010 #define YYUNDEFTOK  2
1011 #define YYMAXUTOK   557
1012
1013 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1014    as returned by yylex, with out-of-bounds checking.  */
1015 #define YYTRANSLATE(YYX)                                                \
1016   ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1017
1018 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1019    as returned by yylex.  */
1020 static const yytype_uint16 yytranslate[] =
1021 {
1022        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1023        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1024        2,     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,     2,
1029        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1030        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1031        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1032        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1033        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1034        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1035        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1036        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1037        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1038        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1039        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1040        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1041        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1042        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1043        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1044        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1045        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1046        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1047        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
1048        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
1049       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
1050       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
1051       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
1052       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
1053       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1054       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1055       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
1056       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
1057       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
1058      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
1059      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
1060      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
1061      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
1062      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
1063      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
1064      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
1065      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
1066      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
1067      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
1068      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
1069      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
1070      225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
1071      235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
1072      245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
1073      255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1074      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1075      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1076      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1077      295,   296,   297,   298,   299,   300,   301,   302
1078 };
1079
1080 #if YYDEBUG
1081   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
1082 static const yytype_uint16 yyrline[] =
1083 {
1084        0,   185,   185,   185,   186,   186,   187,   187,   188,   188,
1085      188,   189,   189,   190,   190,   191,   191,   192,   194,   200,
1086      205,   206,   207,   207,   207,   208,   208,   209,   209,   209,
1087      210,   210,   211,   211,   211,   212,   212,   213,   213,   213,
1088      214,   214,   214,   215,   215,   216,   216,   217,   217,   218,
1089      218,   219,   219,   220,   220,   221,   221,   222,   222,   223,
1090      223,   223,   224,   224,   224,   225,   225,   225,   226,   226,
1091      227,   227,   228,   228,   229,   229,   230,   230,   230,   231,
1092      231,   232,   232,   233,   233,   233,   234,   234,   235,   235,
1093      236,   236,   237,   237,   237,   238,   238,   239,   239,   240,
1094      240,   241,   241,   242,   242,   243,   243,   243,   244,   244,
1095      245,   245,   245,   246,   246,   246,   247,   247,   247,   248,
1096      248,   248,   248,   249,   250,   250,   250,   251,   251,   251,
1097      252,   252,   253,   253,   254,   254,   254,   255,   255,   255,
1098      256,   256,   257,   257,   257,   258,   258,   259,   259,   259,
1099      260,   260,   261,   261,   262,   262,   263,   264,   264,   265,
1100      265,   266,   266,   267,   268,   268,   269,   269,   270,   270,
1101      271,   271,   272,   272,   273,   273,   273,   274,   274,   275,
1102      275,   276,   276,   277,   277,   278,   278,   279,   279,   280,
1103      280,   280,   281,   281,   281,   282,   282,   282,   283,   283,
1104      284,   285,   285,   286,   286,   287,   287,   288,   288,   289,
1105      289,   289,   290,   290,   290,   291,   291,   291,   292,   292,
1106      293,   293,   294,   294,   295,   295,   296,   298,   310,   311,
1107      312,   312,   312,   312,   312,   313,   313,   315,   327,   328,
1108      329,   329,   329,   329,   330,   330,   332,   346,   347,   348,
1109      348,   348,   348,   349,   349,   349,   351,   368,   369,   370,
1110      370,   370,   370,   371,   371,   371,   372,   375,   394,   411,
1111      419,   429,   437,   454,   455,   456,   456,   456,   456,   456,
1112      457,   457,   457,   458,   458,   460,   469,   478,   489,   498,
1113      507,   516,   527,   536,   548,   562,   577,   588,   605,   622,
1114      639,   656,   671,   686,   699,   714,   723,   732,   741,   750,
1115      759,   768,   777,   786,   795,   804,   813,   822,   831,   840,
1116      853,   862,   875,   884,   893,   902,   909,   916,   925,   932,
1117      941,   949,   956,   963,   971,   980,   988,  1004,  1012,  1020,
1118     1028,  1036,  1044,  1053,  1062,  1076,  1085,  1094,  1103,  1112,
1119     1121,  1130,  1137,  1144,  1170,  1178,  1185,  1192,  1199,  1206,
1120     1214,  1222,  1230,  1237,  1248,  1259,  1266,  1275,  1284,  1293,
1121     1300,  1307,  1315,  1323,  1333,  1343,  1353,  1367,  1375,  1388,
1122     1399,  1407,  1420,  1429,  1438,  1447,  1456,  1466,  1476,  1484,
1123     1497,  1506,  1514,  1523,  1531,  1544,  1553,  1563,  1570,  1580,
1124     1590,  1600,  1610,  1620,  1630,  1640,  1650,  1657,  1664,  1671,
1125     1680,  1689,  1698,  1707,  1714,  1724,  1744,  1751,  1769,  1782,
1126     1795,  1804,  1813,  1822,  1831,  1841,  1851,  1862,  1871,  1880,
1127     1889,  1898,  1907,  1916,  1929,  1942,  1951,  1958,  1967,  1976,
1128     1985,  1994,  2002,  2015,  2023,  2064,  2071,  2086,  2096,  2106,
1129     2113,  2120,  2127,  2136,  2144,  2158,  2179,  2200,  2212,  2224,
1130     2236,  2245,  2266,  2276,  2285,  2293,  2301,  2314,  2327,  2342,
1131     2357,  2366,  2375,  2381,  2390,  2399,  2409,  2419,  2432,  2445,
1132     2457,  2471,  2483,  2497,  2506,  2518,  2528,  2535,  2542,  2551,
1133     2560,  2570,  2580,  2590,  2597,  2604,  2613,  2622,  2632,  2642,
1134     2649,  2656,  2663,  2671,  2681,  2691,  2701,  2711,  2750,  2760,
1135     2768,  2776,  2791,  2800,  2805,  2806,  2807,  2807,  2807,  2808,
1136     2808,  2808,  2809,  2809,  2811,  2821,  2830,  2837,  2844,  2851,
1137     2858,  2865,  2872,  2877,  2878,  2879,  2879,  2879,  2880,  2880,
1138     2880,  2881,  2882,  2882,  2883,  2883,  2884,  2884,  2885,  2886,
1139     2887,  2888,  2889,  2890,  2892,  2901,  2911,  2918,  2925,  2934,
1140     2941,  2948,  2955,  2962,  2971,  2980,  2987,  2994,  3004,  3014,
1141     3024,  3034,  3044,  3054,  3059,  3060,  3061,  3063,  3069,  3074,
1142     3075,  3076,  3078,  3084,  3094,  3101,  3110,  3118,  3123,  3124,
1143     3126,  3126,  3126,  3127,  3127,  3128,  3129,  3130,  3131,  3132,
1144     3134,  3144,  3153,  3160,  3169,  3176,  3185,  3193,  3206,  3214,
1145     3227,  3232,  3233,  3234,  3234,  3235,  3235,  3235,  3236,  3238,
1146     3250,  3262,  3274,  3289,  3302,  3315,  3326,  3331,  3332,  3333,
1147     3333,  3335,  3350
1148 };
1149 #endif
1150
1151 #if YYDEBUG || YYERROR_VERBOSE || 0
1152 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1153    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
1154 static const char *const yytname[] =
1155 {
1156   "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT",
1157   "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL",
1158   "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT",
1159   "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4",
1160   "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP",
1161   "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", "VAR_TCP_IDLE_TIMEOUT",
1162   "VAR_EDNS_TCP_KEEPALIVE", "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_CHROOT",
1163   "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
1164   "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS",
1165   "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE",
1166   "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL",
1167   "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS",
1168   "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME",
1169   "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR",
1170   "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE",
1171   "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST",
1172   "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY",
1173   "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE",
1174   "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR",
1175   "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL",
1176   "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
1177   "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
1178   "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
1179   "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
1180   "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL",
1181   "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC",
1182   "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID",
1183   "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT",
1184   "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR",
1185   "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS",
1186   "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
1187   "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
1188   "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
1189   "VAR_CONTROL_USE_CERT", "VAR_EXTENDED_STATISTICS", "VAR_LOCAL_DATA_PTR",
1190   "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME", "VAR_UNWANTED_REPLY_THRESHOLD",
1191   "VAR_LOG_TIME_ASCII", "VAR_DOMAIN_INSECURE", "VAR_PYTHON",
1192   "VAR_PYTHON_SCRIPT", "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX",
1193   "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE",
1194   "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN",
1195   "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH",
1196   "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT",
1197   "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES",
1198   "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM",
1199   "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM",
1200   "VAR_SSL_PORT", "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM",
1201   "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_HTTPS_PORT",
1202   "VAR_HTTP_ENDPOINT", "VAR_HTTP_MAX_STREAMS",
1203   "VAR_HTTP_QUERY_BUFFER_SIZE", "VAR_HTTP_RESPONSE_BUFFER_SIZE",
1204   "VAR_HTTP_NODELAY", "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST",
1205   "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE",
1206   "VAR_DELAY_CLOSE", "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES",
1207   "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT",
1208   "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
1209   "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
1210   "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS",
1211   "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE",
1212   "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE",
1213   "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION",
1214   "VAR_DNSTAP_BIDIRECTIONAL", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
1215   "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
1216   "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
1217   "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
1218   "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
1219   "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
1220   "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG",
1221   "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE",
1222   "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK",
1223   "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE",
1224   "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
1225   "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
1226   "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
1227   "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE",
1228   "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE",
1229   "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
1230   "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6",
1231   "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
1232   "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
1233   "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
1234   "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
1235   "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
1236   "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
1237   "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
1238   "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
1239   "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
1240   "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
1241   "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING",
1242   "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
1243   "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT",
1244   "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER",
1245   "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT",
1246   "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED",
1247   "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE",
1248   "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS",
1249   "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS",
1250   "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS",
1251   "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT",
1252   "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED",
1253   "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT",
1254   "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS",
1255   "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM",
1256   "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL",
1257   "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT",
1258   "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL",
1259   "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT",
1260   "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE",
1261   "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT",
1262   "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS",
1263   "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET",
1264   "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS",
1265   "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE",
1266   "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME",
1267   "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING",
1268   "VAR_EDNS_CLIENT_STRING_OPCODE", "$accept", "toplevelvars",
1269   "toplevelvar", "force_toplevel", "serverstart", "contents_server",
1270   "content_server", "stubstart", "contents_stub", "content_stub",
1271   "forwardstart", "contents_forward", "content_forward", "viewstart",
1272   "contents_view", "content_view", "authstart", "contents_auth",
1273   "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override",
1274   "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz",
1275   "server_num_threads", "server_verbosity", "server_statistics_interval",
1276   "server_statistics_cumulative", "server_extended_statistics",
1277   "server_shm_enable", "server_shm_key", "server_port",
1278   "server_send_client_subnet", "server_client_subnet_zone",
1279   "server_client_subnet_always_forward", "server_client_subnet_opcode",
1280   "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
1281   "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
1282   "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6",
1283   "server_interface", "server_outgoing_interface", "server_outgoing_range",
1284   "server_outgoing_port_permit", "server_outgoing_port_avoid",
1285   "server_outgoing_num_tcp", "server_incoming_num_tcp",
1286   "server_interface_automatic", "server_do_ip4", "server_do_ip6",
1287   "server_do_udp", "server_do_tcp", "server_prefer_ip4",
1288   "server_prefer_ip6", "server_tcp_mss", "server_outgoing_tcp_mss",
1289   "server_tcp_idle_timeout", "server_tcp_keepalive",
1290   "server_tcp_keepalive_timeout", "server_tcp_upstream",
1291   "server_udp_upstream_without_downstream", "server_ssl_upstream",
1292   "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port",
1293   "server_tls_cert_bundle", "server_tls_win_cert",
1294   "server_tls_additional_port", "server_tls_ciphers",
1295   "server_tls_ciphersuites", "server_tls_session_ticket_keys",
1296   "server_tls_use_sni", "server_https_port", "server_http_endpoint",
1297   "server_http_max_streams", "server_http_query_buffer_size",
1298   "server_http_response_buffer_size", "server_http_nodelay",
1299   "server_http_notls_downstream", "server_use_systemd",
1300   "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
1301   "server_log_queries", "server_log_replies", "server_log_tag_queryreply",
1302   "server_log_servfail", "server_log_local_actions", "server_chroot",
1303   "server_username", "server_directory", "server_logfile",
1304   "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
1305   "server_dlv_anchor", "server_auto_trust_anchor_file",
1306   "server_trust_anchor_file", "server_trusted_keys_file",
1307   "server_trust_anchor", "server_trust_anchor_signaling",
1308   "server_root_key_sentinel", "server_domain_insecure",
1309   "server_hide_identity", "server_hide_version", "server_hide_trustanchor",
1310   "server_identity", "server_version", "server_so_rcvbuf",
1311   "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
1312   "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size",
1313   "server_edns_buffer_size", "server_msg_buffer_size",
1314   "server_msg_cache_size", "server_msg_cache_slabs",
1315   "server_num_queries_per_thread", "server_jostle_timeout",
1316   "server_delay_close", "server_udp_connect", "server_unblock_lan_zones",
1317   "server_insecure_lan_zones", "server_rrset_cache_size",
1318   "server_rrset_cache_slabs", "server_infra_host_ttl",
1319   "server_infra_lame_ttl", "server_infra_cache_numhosts",
1320   "server_infra_cache_lame_size", "server_infra_cache_slabs",
1321   "server_infra_cache_min_rtt", "server_infra_keep_probing",
1322   "server_target_fetch_policy", "server_harden_short_bufsize",
1323   "server_harden_large_queries", "server_harden_glue",
1324   "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
1325   "server_harden_referral_path", "server_harden_algo_downgrade",
1326   "server_use_caps_for_id", "server_caps_whitelist",
1327   "server_private_address", "server_private_domain", "server_prefetch",
1328   "server_prefetch_key", "server_deny_any",
1329   "server_unwanted_reply_threshold", "server_do_not_query_address",
1330   "server_do_not_query_localhost", "server_access_control",
1331   "server_module_conf", "server_val_override_date",
1332   "server_val_sig_skew_min", "server_val_sig_skew_max",
1333   "server_cache_max_ttl", "server_cache_max_negative_ttl",
1334   "server_cache_min_ttl", "server_bogus_ttl",
1335   "server_val_clean_additional", "server_val_permissive_mode",
1336   "server_aggressive_nsec", "server_ignore_cd_flag",
1337   "server_serve_expired", "server_serve_expired_ttl",
1338   "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl",
1339   "server_serve_expired_client_timeout", "server_fake_dsa",
1340   "server_fake_sha1", "server_val_log_level",
1341   "server_val_nsec3_keysize_iterations", "server_add_holddown",
1342   "server_del_holddown", "server_keep_missing",
1343   "server_permit_small_holddown", "server_key_cache_size",
1344   "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
1345   "server_local_data", "server_local_data_ptr", "server_minimal_responses",
1346   "server_rrset_roundrobin", "server_unknown_server_time_limit",
1347   "server_max_udp_size", "server_dns64_prefix", "server_dns64_synthall",
1348   "server_dns64_ignore_aaaa", "server_define_tag", "server_local_zone_tag",
1349   "server_access_control_tag", "server_access_control_tag_action",
1350   "server_access_control_tag_data", "server_local_zone_override",
1351   "server_access_control_view", "server_response_ip_tag",
1352   "server_ip_ratelimit", "server_ratelimit", "server_ip_ratelimit_size",
1353   "server_ratelimit_size", "server_ip_ratelimit_slabs",
1354   "server_ratelimit_slabs", "server_ratelimit_for_domain",
1355   "server_ratelimit_below_domain", "server_ip_ratelimit_factor",
1356   "server_ratelimit_factor", "server_low_rtt", "server_fast_server_num",
1357   "server_fast_server_permil", "server_qname_minimisation",
1358   "server_qname_minimisation_strict", "server_ipsecmod_enabled",
1359   "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
1360   "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
1361   "server_ipsecmod_strict", "server_edns_client_string",
1362   "server_edns_client_string_opcode", "stub_name", "stub_host",
1363   "stub_addr", "stub_first", "stub_no_cache", "stub_ssl_upstream",
1364   "stub_prime", "forward_name", "forward_host", "forward_addr",
1365   "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name",
1366   "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
1367   "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled",
1368   "view_name", "view_local_zone", "view_response_ip",
1369   "view_response_ip_data", "view_local_data", "view_local_data_ptr",
1370   "view_first", "rcstart", "contents_rc", "content_rc",
1371   "rc_control_enable", "rc_control_port", "rc_control_interface",
1372   "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
1373   "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt",
1374   "content_dt", "dt_dnstap_enable", "dt_dnstap_bidirectional",
1375   "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls",
1376   "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle",
1377   "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file",
1378   "dt_dnstap_send_identity", "dt_dnstap_send_version",
1379   "dt_dnstap_identity", "dt_dnstap_version",
1380   "dt_dnstap_log_resolver_query_messages",
1381   "dt_dnstap_log_resolver_response_messages",
1382   "dt_dnstap_log_client_query_messages",
1383   "dt_dnstap_log_client_response_messages",
1384   "dt_dnstap_log_forwarder_query_messages",
1385   "dt_dnstap_log_forwarder_response_messages", "pythonstart",
1386   "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl",
1387   "content_dl", "dl_file", "server_disable_dnssec_lame_check",
1388   "server_log_identity", "server_response_ip", "server_response_ip_data",
1389   "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
1390   "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
1391   "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
1392   "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
1393   "dnsc_dnscrypt_shared_secret_cache_slabs",
1394   "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
1395   "cachedbstart", "contents_cachedb", "content_cachedb",
1396   "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host",
1397   "redis_server_port", "redis_timeout", "redis_expire_records",
1398   "server_tcp_connection_limit", "ipsetstart", "contents_ipset",
1399   "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
1400 };
1401 #endif
1402
1403 # ifdef YYPRINT
1404 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
1405    (internal) symbol number NUM (which must be that of a token).  */
1406 static const yytype_uint16 yytoknum[] =
1407 {
1408        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1409      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1410      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1411      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1412      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1413      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1414      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1415      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1416      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1417      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1418      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1419      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1420      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
1421      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
1422      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
1423      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
1424      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
1425      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
1426      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
1427      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
1428      455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
1429      465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
1430      475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
1431      485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
1432      495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
1433      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
1434      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
1435      525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
1436      535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
1437      545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
1438      555,   556,   557
1439 };
1440 # endif
1441
1442 #define YYPACT_NINF -291
1443
1444 #define yypact_value_is_default(Yystate) \
1445   (!!((Yystate) == (-291)))
1446
1447 #define YYTABLE_NINF -1
1448
1449 #define yytable_value_is_error(Yytable_value) \
1450   0
1451
1452   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1453      STATE-NUM.  */
1454 static const yytype_int16 yypact[] =
1455 {
1456     -291,     0,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1457     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1458     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1459     -291,  -291,   287,   -42,   -38,   -43,   -21,   -44,   -11,   -96,
1460     -109,  -290,  -215,  -240,  -282,     3,     4,    13,    25,    26,
1461       27,    30,    31,    32,    33,    34,    35,    37,    38,    39,
1462       40,    41,    43,    44,    45,    46,    47,    48,    49,    50,
1463       51,    52,    54,    55,    84,    85,    88,    89,    91,    93,
1464       94,    95,    96,    98,    99,   100,   101,   103,   104,   105,
1465      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
1466      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
1467      126,   127,   128,   129,   132,   133,   134,   135,   136,   137,
1468      138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
1469      148,   149,   150,   151,   153,   154,   155,   156,   157,   158,
1470      159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
1471      169,   171,   172,   173,   174,   175,   176,   177,   178,   179,
1472      180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
1473      190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
1474      200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
1475      210,   215,   216,   217,   218,   219,   220,   221,   223,   224,
1476      225,   226,   227,   230,   232,   234,   247,   248,   249,   250,
1477      251,   252,   253,   254,   256,   257,   258,   259,   260,   261,
1478      262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
1479      272,   273,   274,   275,   276,   277,   278,   280,   281,   282,
1480      284,   285,   286,   288,   322,   323,   324,   325,   329,   330,
1481     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1482     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1483     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1484     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1485     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1486     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1487     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1488     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1489     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1490     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1491     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1492     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1493     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1494     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1495     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1496     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1497     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1498     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1499     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1500     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1501     -291,  -291,  -291,  -291,  -291,  -291,   331,   373,   374,   375,
1502      376,   377,   378,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1503     -291,   379,   380,   381,   385,   389,   390,  -291,  -291,  -291,
1504     -291,  -291,  -291,  -291,   415,   416,   417,   426,   439,   440,
1505      441,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,   442,
1506      443,   444,   445,   446,   447,   448,   449,  -291,  -291,  -291,
1507     -291,  -291,  -291,  -291,  -291,  -291,   450,   451,   452,   453,
1508      454,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1509     -291,  -291,   455,   456,   457,   458,   498,   500,   516,   517,
1510     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,   518,
1511      519,   520,   521,   522,   523,   524,   525,   526,   533,   534,
1512      535,   536,   537,   538,   539,   541,   542,   543,  -291,  -291,
1513     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1514     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,   544,  -291,
1515     -291,   545,  -291,  -291,   546,   547,   550,   553,   556,   557,
1516      566,   567,   568,   570,  -291,  -291,  -291,  -291,  -291,  -291,
1517     -291,  -291,  -291,  -291,  -291,   571,   572,   573,   574,   575,
1518      576,  -291,  -291,  -291,  -291,  -291,  -291,  -291,   577,   580,
1519     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1520     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1521     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1522     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1523     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1524     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1525     -291,  -291,  -291,   581,   582,  -291,  -291,  -291,  -291,  -291,
1526     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1527     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1528     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1529     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1530     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1531     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,   583,
1532      584,   585,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1533     -291,  -291,   586,   587,  -291,  -291,  -291,  -291,  -291,  -291,
1534     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1535     -291,  -291,  -291,   588,   589,   590,   591,   592,   593,  -291,
1536     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1537     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1538     -291,  -291,  -291,  -291,  -291,  -291,   594,  -291,  -291,  -291,
1539     -291,  -291,  -291,  -291,  -291,  -291,   595,  -291,  -291,  -291,
1540     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1541     -291,  -291,   596,  -291,  -291,   597,   598,  -291,  -291,  -291,
1542     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1543     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1544     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1545     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1546     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1547     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1548     -291,  -291,  -291,  -291,  -291,  -291,  -291,   599,   600,   601,
1549     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291
1550 };
1551
1552   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1553      Performed when YYTABLE does not specify something else to do.  Zero
1554      means the default is an error.  */
1555 static const yytype_uint16 yydefact[] =
1556 {
1557        2,     0,     1,    18,    19,   227,   237,   513,   573,   532,
1558      246,   587,   610,   256,   626,   272,   578,     3,    17,    21,
1559      229,   239,   248,   258,   274,   515,   534,   575,   580,   589,
1560      612,   628,     4,     5,     6,    10,    14,    15,     8,     9,
1561        7,    16,    11,    12,    13,     0,     0,     0,     0,     0,
1562        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1563        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1564        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1565        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1566        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1567        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1568        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1569        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1570        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1571        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1572        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1573        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1574        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1575        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1576        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1577        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1578        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1579        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1580        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1581        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1582       20,    22,    23,    86,    89,    98,   195,   196,    24,   160,
1583      161,   162,   163,   164,   165,   166,   167,   168,   169,    37,
1584       77,    25,    90,    91,    48,    70,    85,    26,    27,    30,
1585       31,    28,    29,    32,    33,    34,    35,    36,   121,   207,
1586      122,   124,   125,   126,   209,   214,   210,   221,   222,   223,
1587      224,   127,   128,   129,   130,   131,   132,   133,   191,    87,
1588       76,   102,   119,   120,   219,   216,   123,    38,    39,    40,
1589       41,    42,    78,    92,    93,   108,    64,    74,    65,   199,
1590      200,   103,    58,    59,   198,    60,    61,   112,   116,   137,
1591      147,   174,   150,   220,   113,    71,    43,    44,    45,   100,
1592      138,   139,   140,   141,    46,    47,    49,    50,    52,    53,
1593       51,   145,   151,    54,    55,    56,    62,    81,   117,    95,
1594      146,    88,   170,    96,    97,   114,   115,   217,   101,    57,
1595       79,    82,    63,    66,   104,   105,    80,   171,   106,    67,
1596       68,    69,   208,   118,   184,   185,   186,   187,   188,   189,
1597      197,   107,    75,   109,   110,   111,   172,    72,    73,    94,
1598       83,    84,    99,   134,   135,   218,   136,   142,   143,   144,
1599      175,   176,   178,   180,   181,   179,   182,   192,   148,   149,
1600      154,   155,   152,   153,   156,   157,   159,   158,   211,   213,
1601      212,   173,   183,   201,   203,   202,   204,   205,   206,   225,
1602      226,   177,   190,   193,   194,   215,     0,     0,     0,     0,
1603        0,     0,     0,   228,   230,   231,   232,   234,   235,   236,
1604      233,     0,     0,     0,     0,     0,     0,   238,   240,   241,
1605      242,   243,   244,   245,     0,     0,     0,     0,     0,     0,
1606        0,   247,   249,   250,   253,   254,   251,   255,   252,     0,
1607        0,     0,     0,     0,     0,     0,     0,   257,   259,   260,
1608      261,   262,   266,   263,   264,   265,     0,     0,     0,     0,
1609        0,   277,   281,   282,   283,   284,   273,   275,   276,   278,
1610      279,   280,     0,     0,     0,     0,     0,     0,     0,     0,
1611      514,   516,   518,   517,   523,   519,   520,   521,   522,     0,
1612        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1613        0,     0,     0,     0,     0,     0,     0,     0,   533,   535,
1614      537,   536,   538,   539,   540,   541,   542,   543,   544,   545,
1615      546,   547,   548,   549,   550,   551,   552,   553,     0,   574,
1616      576,     0,   579,   581,     0,     0,     0,     0,     0,     0,
1617        0,     0,     0,     0,   588,   590,   591,   592,   594,   595,
1618      593,   596,   597,   598,   599,     0,     0,     0,     0,     0,
1619        0,   611,   613,   614,   615,   616,   617,   618,     0,     0,
1620      627,   629,   630,   286,   285,   292,   305,   303,   315,   311,
1621      312,   316,   313,   314,   317,   318,   319,   320,   321,   351,
1622      352,   353,   354,   355,   380,   381,   382,   388,   389,   308,
1623      390,   391,   394,   392,   393,   397,   398,   399,   413,   366,
1624      367,   369,   370,   400,   416,   360,   362,   417,   423,   424,
1625      425,   309,   379,   441,   442,   361,   436,   344,   304,   356,
1626      414,   420,   401,     0,     0,   445,   310,   287,   343,   405,
1627      288,   306,   307,   357,   358,   443,   403,   407,   408,   289,
1628      446,   383,   412,   345,   365,   418,   419,   422,   435,   359,
1629      439,   437,   438,   371,   378,   409,   410,   372,   373,   402,
1630      427,   346,   347,   350,   322,   324,   325,   326,   327,   328,
1631      335,   336,   337,   338,   339,   340,   341,   447,   448,   450,
1632      384,   385,   386,   387,   395,   396,   451,   452,   453,     0,
1633        0,     0,   404,   374,   376,   583,   462,   466,   464,   463,
1634      467,   465,     0,     0,   470,   471,   293,   294,   295,   296,
1635      297,   298,   299,   300,   301,   302,   406,   421,   440,   475,
1636      476,   375,   454,     0,     0,     0,     0,     0,     0,   428,
1637      429,   430,   431,   432,   433,   434,   584,   368,   363,   426,
1638      342,   290,   291,   364,   477,   479,   478,   480,   481,   482,
1639      323,   330,   472,   474,   473,   329,     0,   349,   411,   449,
1640      348,   377,   331,   332,   334,   333,     0,   484,   485,   486,
1641      487,   491,   490,   488,   489,   492,   493,   494,   495,   497,
1642      496,   506,     0,   510,   511,     0,     0,   512,   498,   504,
1643      499,   500,   501,   503,   505,   502,   267,   268,   269,   270,
1644      271,   524,   526,   525,   528,   529,   530,   531,   527,   554,
1645      556,   557,   558,   559,   560,   561,   562,   563,   564,   555,
1646      565,   566,   567,   568,   569,   570,   571,   572,   577,   582,
1647      600,   601,   602,   605,   603,   604,   606,   607,   608,   609,
1648      619,   620,   621,   622,   623,   624,   631,   632,   415,   444,
1649      461,   585,   586,   468,   469,   455,   456,     0,     0,     0,
1650      460,   625,   483,   507,   508,   509,   459,   457,   458
1651 };
1652
1653   /* YYPGOTO[NTERM-NUM].  */
1654 static const yytype_int16 yypgoto[] =
1655 {
1656     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1657     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1658     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1659     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1660     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1661     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1662     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1663     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1664     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1665     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1666     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1667     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1668     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1669     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1670     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1671     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1672     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1673     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1674     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1675     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1676     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1677     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1678     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1679     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1680      578,   579,   602,   603,   604,  -291,  -291,  -291,  -291,  -291,
1681     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1682     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1683     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1684     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1685     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1686     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1687     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
1688     -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291
1689 };
1690
1691   /* YYDEFGOTO[NTERM-NUM].  */
1692 static const yytype_int16 yydefgoto[] =
1693 {
1694       -1,     1,    17,    18,    19,    32,   250,    20,    33,   463,
1695       21,    34,   477,    22,    35,   491,    23,    36,   507,   521,
1696      522,   523,   524,   525,    24,    37,   526,   251,   252,   253,
1697      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
1698      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
1699      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
1700      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
1701      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
1702      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
1703      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
1704      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
1705      334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
1706      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
1707      354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
1708      364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
1709      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
1710      384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
1711      394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
1712      404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
1713      414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
1714      424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
1715      434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
1716      444,   445,   446,   447,   448,   449,   450,   464,   465,   466,
1717      467,   468,   469,   470,   478,   479,   480,   481,   482,   483,
1718      508,   509,   510,   511,   512,   513,   514,   515,   492,   493,
1719      494,   495,   496,   497,   498,    25,    38,   540,   541,   542,
1720      543,   544,   545,   546,   547,   548,    26,    39,   568,   569,
1721      570,   571,   572,   573,   574,   575,   576,   577,   578,   579,
1722      580,   581,   582,   583,   584,   585,   586,   587,    27,    40,
1723      589,   590,    28,    41,   592,   593,   451,   452,   453,   454,
1724       29,    42,   604,   605,   606,   607,   608,   609,   610,   611,
1725      612,   613,   614,    30,    43,   621,   622,   623,   624,   625,
1726      626,   627,   455,    31,    44,   630,   631,   632
1727 };
1728
1729   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
1730      positive, shift that token.  If negative, reduce the rule whose
1731      number is the opposite.  If YYTABLE_NINF, syntax error.  */
1732 static const yytype_uint16 yytable[] =
1733 {
1734        2,   499,   484,   456,   588,   457,   458,   471,   628,   629,
1735      591,     3,     4,   633,   634,   472,   473,   615,   616,   617,
1736      618,   619,   620,   635,   499,   594,   595,   596,   597,   598,
1737      599,   600,   601,   602,   603,   636,   637,   638,   485,   486,
1738      639,   640,   641,   642,   643,   644,     5,   645,   646,   647,
1739      648,   649,     6,   650,   651,   652,   653,   654,   655,   656,
1740      657,   658,   659,   487,   660,   661,   459,   549,   550,   551,
1741      552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
1742      562,   563,   564,   565,   566,   567,   532,   533,   534,   535,
1743      536,   537,   538,   539,   662,   663,     7,   460,   664,   665,
1744      474,   666,   475,   667,   668,   669,   670,   461,   671,   672,
1745      673,   674,     8,   675,   676,   677,   678,   679,   680,   681,
1746      682,   683,   684,   685,   686,   687,   688,   689,   690,   691,
1747      692,   693,   694,   695,   696,   697,   698,   699,   700,   701,
1748      488,   489,   702,   703,   704,   705,   706,   707,   708,   709,
1749      710,   711,   712,   713,   714,   715,   716,   717,   718,   719,
1750      720,   721,     9,   722,   723,   724,   725,   726,   727,   728,
1751      729,   730,   731,   732,   733,   734,   735,   736,   737,   738,
1752      490,   739,   740,   741,   742,   743,   744,   745,   746,   747,
1753      748,   749,   750,   751,   752,   753,   754,   755,   756,   757,
1754      758,   759,   760,   761,   762,   763,   764,   765,   766,   767,
1755      768,   769,   770,   771,   772,   773,   774,   775,   776,   777,
1756      778,    10,   501,   502,   503,   779,   780,   781,   782,   783,
1757      784,   785,   506,   786,   787,   788,   789,   790,   462,    11,
1758      791,   476,   792,   500,   793,   501,   502,   503,   504,   505,
1759      516,   517,   518,   519,   520,   506,    12,   794,   795,   796,
1760      797,   798,   799,   800,   801,    13,   802,   803,   804,   805,
1761      806,   807,   808,   809,   810,   811,   812,   813,   814,   815,
1762      816,   817,   818,   819,   820,   821,   822,   823,   824,    14,
1763      825,   826,   827,    15,   828,   829,   830,     0,   831,    16,
1764       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
1765       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1766       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1767       75,    76,   832,   833,   834,   835,    77,    78,    79,   836,
1768      837,   838,    80,    81,    82,    83,    84,    85,    86,    87,
1769       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
1770       98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
1771      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
1772      118,   119,   120,   839,   840,   841,   842,   843,   844,   845,
1773      846,   847,   121,   122,   123,   848,   124,   125,   126,   849,
1774      850,   127,   128,   129,   130,   131,   132,   133,   134,   135,
1775      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
1776      146,   147,   148,   149,   150,   851,   852,   853,   151,   152,
1777      153,   154,   155,   156,   157,   158,   854,   159,   160,   161,
1778      162,   163,   164,   165,   166,   167,   168,   169,   170,   855,
1779      856,   857,   858,   859,   860,   861,   862,   863,   864,   865,
1780      866,   867,   868,   869,   870,   871,   872,   873,   874,   171,
1781      172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
1782      182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
1783      192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
1784      202,   203,   204,   205,   206,   207,   208,   209,   875,   210,
1785      876,   211,   212,   213,   214,   215,   216,   217,   218,   219,
1786      220,   221,   222,   223,   224,   225,   877,   878,   879,   880,
1787      881,   882,   883,   884,   885,   886,   887,   226,   227,   228,
1788      229,   230,   231,   888,   889,   890,   891,   892,   893,   894,
1789      232,   895,   896,   897,   898,   899,   900,   901,   233,   234,
1790      902,   235,   236,   903,   237,   238,   904,   905,   239,   240,
1791      241,   242,   243,   244,   245,   246,   906,   907,   908,   247,
1792      909,   910,   911,   912,   913,   914,   915,   916,   248,   249,
1793      917,   918,   919,   920,   921,   922,   923,   924,   925,   926,
1794      927,   928,   929,   930,   931,   932,   933,   934,   935,   936,
1795      937,   938,     0,     0,     0,   527,   528,     0,     0,     0,
1796        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1797        0,     0,     0,     0,     0,     0,     0,     0,     0,   529,
1798      530,   531
1799 };
1800
1801 static const yytype_int16 yycheck[] =
1802 {
1803        0,    45,    45,    45,   113,    47,    48,    45,   290,   291,
1804      300,    11,    12,    10,    10,    53,    54,   257,   258,   259,
1805      260,   261,   262,    10,    45,   240,   241,   242,   243,   244,
1806      245,   246,   247,   248,   249,    10,    10,    10,    81,    82,
1807       10,    10,    10,    10,    10,    10,    46,    10,    10,    10,
1808       10,    10,    52,    10,    10,    10,    10,    10,    10,    10,
1809       10,    10,    10,   106,    10,    10,   108,   163,   164,   165,
1810      166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
1811      176,   177,   178,   179,   180,   181,    97,    98,    99,   100,
1812      101,   102,   103,   104,    10,    10,    96,   139,    10,    10,
1813      138,    10,   140,    10,    10,    10,    10,   149,    10,    10,
1814       10,    10,   112,    10,    10,    10,    10,    10,    10,    10,
1815       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1816       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1817      183,   184,    10,    10,    10,    10,    10,    10,    10,    10,
1818       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1819       10,    10,   162,    10,    10,    10,    10,    10,    10,    10,
1820       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1821      223,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1822       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1823       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1824       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1825       10,   221,   266,   267,   268,    10,    10,    10,    10,    10,
1826       10,    10,   276,    10,    10,    10,    10,    10,   280,   239,
1827       10,   279,    10,   264,    10,   266,   267,   268,   269,   270,
1828      294,   295,   296,   297,   298,   276,   256,    10,    10,    10,
1829       10,    10,    10,    10,    10,   265,    10,    10,    10,    10,
1830       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1831       10,    10,    10,    10,    10,    10,    10,    10,    10,   289,
1832       10,    10,    10,   293,    10,    10,    10,    -1,    10,   299,
1833       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
1834       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
1835       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
1836       43,    44,    10,    10,    10,    10,    49,    50,    51,    10,
1837       10,    10,    55,    56,    57,    58,    59,    60,    61,    62,
1838       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
1839       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
1840       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
1841       93,    94,    95,    10,    10,    10,    10,    10,    10,    10,
1842       10,    10,   105,   106,   107,    10,   109,   110,   111,    10,
1843       10,   114,   115,   116,   117,   118,   119,   120,   121,   122,
1844      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
1845      133,   134,   135,   136,   137,    10,    10,    10,   141,   142,
1846      143,   144,   145,   146,   147,   148,    10,   150,   151,   152,
1847      153,   154,   155,   156,   157,   158,   159,   160,   161,    10,
1848       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1849       10,    10,    10,    10,    10,    10,    10,    10,    10,   182,
1850      183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
1851      193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
1852      203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
1853      213,   214,   215,   216,   217,   218,   219,   220,    10,   222,
1854       10,   224,   225,   226,   227,   228,   229,   230,   231,   232,
1855      233,   234,   235,   236,   237,   238,    10,    10,    10,    10,
1856       10,    10,    10,    10,    10,    10,    10,   250,   251,   252,
1857      253,   254,   255,    10,    10,    10,    10,    10,    10,    10,
1858      263,    10,    10,    10,    10,    10,    10,    10,   271,   272,
1859       10,   274,   275,    10,   277,   278,    10,    10,   281,   282,
1860      283,   284,   285,   286,   287,   288,    10,    10,    10,   292,
1861       10,    10,    10,    10,    10,    10,    10,    10,   301,   302,
1862       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1863       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1864       10,    10,    -1,    -1,    -1,    37,    37,    -1,    -1,    -1,
1865       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1866       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
1867       37,    37
1868 };
1869
1870   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1871      symbol of state STATE-NUM.  */
1872 static const yytype_uint16 yystos[] =
1873 {
1874        0,   304,     0,    11,    12,    46,    52,    96,   112,   162,
1875      221,   239,   256,   265,   289,   293,   299,   305,   306,   307,
1876      310,   313,   316,   319,   327,   558,   569,   591,   595,   603,
1877      616,   626,   308,   311,   314,   317,   320,   328,   559,   570,
1878      592,   596,   604,   617,   627,    13,    14,    15,    16,    17,
1879       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
1880       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
1881       38,    39,    40,    41,    42,    43,    44,    49,    50,    51,
1882       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1883       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1884       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
1885       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
1886       95,   105,   106,   107,   109,   110,   111,   114,   115,   116,
1887      117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
1888      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
1889      137,   141,   142,   143,   144,   145,   146,   147,   148,   150,
1890      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
1891      161,   182,   183,   184,   185,   186,   187,   188,   189,   190,
1892      191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
1893      201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
1894      211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
1895      222,   224,   225,   226,   227,   228,   229,   230,   231,   232,
1896      233,   234,   235,   236,   237,   238,   250,   251,   252,   253,
1897      254,   255,   263,   271,   272,   274,   275,   277,   278,   281,
1898      282,   283,   284,   285,   286,   287,   288,   292,   301,   302,
1899      309,   330,   331,   332,   333,   334,   335,   336,   337,   338,
1900      339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
1901      349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
1902      359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
1903      369,   370,   371,   372,   373,   374,   375,   376,   377,   378,
1904      379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
1905      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
1906      399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
1907      409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
1908      419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
1909      429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
1910      439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
1911      449,   450,   451,   452,   453,   454,   455,   456,   457,   458,
1912      459,   460,   461,   462,   463,   464,   465,   466,   467,   468,
1913      469,   470,   471,   472,   473,   474,   475,   476,   477,   478,
1914      479,   480,   481,   482,   483,   484,   485,   486,   487,   488,
1915      489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
1916      499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
1917      509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
1918      519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
1919      529,   599,   600,   601,   602,   625,    45,    47,    48,   108,
1920      139,   149,   280,   312,   530,   531,   532,   533,   534,   535,
1921      536,    45,    53,    54,   138,   140,   279,   315,   537,   538,
1922      539,   540,   541,   542,    45,    81,    82,   106,   183,   184,
1923      223,   318,   551,   552,   553,   554,   555,   556,   557,    45,
1924      264,   266,   267,   268,   269,   270,   276,   321,   543,   544,
1925      545,   546,   547,   548,   549,   550,   294,   295,   296,   297,
1926      298,   322,   323,   324,   325,   326,   329,   543,   544,   545,
1927      546,   547,    97,    98,    99,   100,   101,   102,   103,   104,
1928      560,   561,   562,   563,   564,   565,   566,   567,   568,   163,
1929      164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
1930      174,   175,   176,   177,   178,   179,   180,   181,   571,   572,
1931      573,   574,   575,   576,   577,   578,   579,   580,   581,   582,
1932      583,   584,   585,   586,   587,   588,   589,   590,   113,   593,
1933      594,   300,   597,   598,   240,   241,   242,   243,   244,   245,
1934      246,   247,   248,   249,   605,   606,   607,   608,   609,   610,
1935      611,   612,   613,   614,   615,   257,   258,   259,   260,   261,
1936      262,   618,   619,   620,   621,   622,   623,   624,   290,   291,
1937      628,   629,   630,    10,    10,    10,    10,    10,    10,    10,
1938       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1939       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1940       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1941       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1942       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1943       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1944       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1945       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1946       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1947       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1948       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1949       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1950       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1951       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1952       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1953       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1954       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1955       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1956       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1957       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1958       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1959       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1960       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1961       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1962       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1963       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1964       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1965       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1966       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
1967       10,    10,    10,    10,    10,    10,    10,    10,    10
1968 };
1969
1970   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
1971 static const yytype_uint16 yyr1[] =
1972 {
1973        0,   303,   304,   304,   305,   305,   305,   305,   305,   305,
1974      305,   305,   305,   305,   305,   305,   305,   305,   306,   307,
1975      308,   308,   309,   309,   309,   309,   309,   309,   309,   309,
1976      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1977      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1978      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1979      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1980      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1981      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1982      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1983      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1984      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1985      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1986      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1987      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1988      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1989      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1990      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1991      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1992      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1993      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1994      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
1995      309,   309,   309,   309,   309,   309,   309,   310,   311,   311,
1996      312,   312,   312,   312,   312,   312,   312,   313,   314,   314,
1997      315,   315,   315,   315,   315,   315,   316,   317,   317,   318,
1998      318,   318,   318,   318,   318,   318,   319,   320,   320,   321,
1999      321,   321,   321,   321,   321,   321,   321,   322,   323,   324,
2000      325,   326,   327,   328,   328,   329,   329,   329,   329,   329,
2001      329,   329,   329,   329,   329,   330,   331,   332,   333,   334,
2002      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
2003      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
2004      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
2005      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
2006      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
2007      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
2008      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
2009      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
2010      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
2011      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
2012      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
2013      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
2014      455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
2015      465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
2016      475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
2017      485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
2018      495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
2019      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
2020      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
2021      525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
2022      535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
2023      545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
2024      555,   556,   557,   558,   559,   559,   560,   560,   560,   560,
2025      560,   560,   560,   560,   561,   562,   563,   564,   565,   566,
2026      567,   568,   569,   570,   570,   571,   571,   571,   571,   571,
2027      571,   571,   571,   571,   571,   571,   571,   571,   571,   571,
2028      571,   571,   571,   571,   572,   573,   574,   575,   576,   577,
2029      578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
2030      588,   589,   590,   591,   592,   592,   593,   594,   595,   596,
2031      596,   597,   598,   599,   600,   601,   602,   603,   604,   604,
2032      605,   605,   605,   605,   605,   605,   605,   605,   605,   605,
2033      606,   607,   608,   609,   610,   611,   612,   613,   614,   615,
2034      616,   617,   617,   618,   618,   618,   618,   618,   618,   619,
2035      620,   621,   622,   623,   624,   625,   626,   627,   627,   628,
2036      628,   629,   630
2037 };
2038
2039   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
2040 static const yytype_uint8 yyr2[] =
2041 {
2042        0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
2043        2,     2,     2,     2,     2,     2,     2,     1,     1,     1,
2044        2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
2045        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2046        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2047        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2048        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2049        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2050        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2051        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2052        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2053        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2054        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2055        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2056        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2057        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2058        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2059        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2060        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2061        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2062        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2063        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2064        1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
2065        1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
2066        1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
2067        1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
2068        1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
2069        2,     2,     1,     2,     0,     1,     1,     1,     1,     1,
2070        1,     1,     1,     1,     1,     2,     2,     2,     2,     2,
2071        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2072        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2073        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2074        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2075        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2076        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2077        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2078        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2079        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2080        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2081        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2082        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2083        2,     2,     2,     2,     2,     3,     2,     2,     2,     2,
2084        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2085        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2086        2,     2,     2,     2,     3,     2,     2,     2,     2,     2,
2087        2,     2,     2,     2,     2,     3,     3,     4,     4,     4,
2088        3,     3,     2,     2,     2,     2,     2,     2,     3,     3,
2089        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2090        2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
2091        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2092        2,     2,     2,     2,     2,     2,     2,     3,     3,     3,
2093        2,     2,     2,     1,     2,     0,     1,     1,     1,     1,
2094        1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
2095        2,     2,     1,     2,     0,     1,     1,     1,     1,     1,
2096        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2097        1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
2098        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2099        2,     2,     2,     1,     2,     0,     1,     2,     1,     2,
2100        0,     1,     2,     2,     2,     3,     3,     1,     2,     0,
2101        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2102        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2103        1,     2,     0,     1,     1,     1,     1,     1,     1,     2,
2104        2,     2,     2,     2,     2,     3,     1,     2,     0,     1,
2105        1,     2,     2
2106 };
2107
2108
2109 #define yyerrok         (yyerrstatus = 0)
2110 #define yyclearin       (yychar = YYEMPTY)
2111 #define YYEMPTY         (-2)
2112 #define YYEOF           0
2113
2114 #define YYACCEPT        goto yyacceptlab
2115 #define YYABORT         goto yyabortlab
2116 #define YYERROR         goto yyerrorlab
2117
2118
2119 #define YYRECOVERING()  (!!yyerrstatus)
2120
2121 #define YYBACKUP(Token, Value)                                    \
2122   do                                                              \
2123     if (yychar == YYEMPTY)                                        \
2124       {                                                           \
2125         yychar = (Token);                                         \
2126         yylval = (Value);                                         \
2127         YYPOPSTACK (yylen);                                       \
2128         yystate = *yyssp;                                         \
2129         goto yybackup;                                            \
2130       }                                                           \
2131     else                                                          \
2132       {                                                           \
2133         yyerror (YY_("syntax error: cannot back up")); \
2134         YYERROR;                                                  \
2135       }                                                           \
2136   while (0)
2137
2138 /* Error token number */
2139 #define YYTERROR        1
2140 #define YYERRCODE       256
2141
2142
2143
2144 /* Enable debugging if requested.  */
2145 #if YYDEBUG
2146
2147 # ifndef YYFPRINTF
2148 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2149 #  define YYFPRINTF fprintf
2150 # endif
2151
2152 # define YYDPRINTF(Args)                        \
2153 do {                                            \
2154   if (yydebug)                                  \
2155     YYFPRINTF Args;                             \
2156 } while (0)
2157
2158 /* This macro is provided for backward compatibility. */
2159 #ifndef YY_LOCATION_PRINT
2160 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2161 #endif
2162
2163
2164 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
2165 do {                                                                      \
2166   if (yydebug)                                                            \
2167     {                                                                     \
2168       YYFPRINTF (stderr, "%s ", Title);                                   \
2169       yy_symbol_print (stderr,                                            \
2170                   Type, Value); \
2171       YYFPRINTF (stderr, "\n");                                           \
2172     }                                                                     \
2173 } while (0)
2174
2175
2176 /*-----------------------------------.
2177 | Print this symbol's value on YYO.  |
2178 `-----------------------------------*/
2179
2180 static void
2181 yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
2182 {
2183   FILE *yyoutput = yyo;
2184   YYUSE (yyoutput);
2185   if (!yyvaluep)
2186     return;
2187 # ifdef YYPRINT
2188   if (yytype < YYNTOKENS)
2189     YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
2190 # endif
2191   YYUSE (yytype);
2192 }
2193
2194
2195 /*---------------------------.
2196 | Print this symbol on YYO.  |
2197 `---------------------------*/
2198
2199 static void
2200 yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
2201 {
2202   YYFPRINTF (yyo, "%s %s (",
2203              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
2204
2205   yy_symbol_value_print (yyo, yytype, yyvaluep);
2206   YYFPRINTF (yyo, ")");
2207 }
2208
2209 /*------------------------------------------------------------------.
2210 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2211 | TOP (included).                                                   |
2212 `------------------------------------------------------------------*/
2213
2214 static void
2215 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
2216 {
2217   YYFPRINTF (stderr, "Stack now");
2218   for (; yybottom <= yytop; yybottom++)
2219     {
2220       int yybot = *yybottom;
2221       YYFPRINTF (stderr, " %d", yybot);
2222     }
2223   YYFPRINTF (stderr, "\n");
2224 }
2225
2226 # define YY_STACK_PRINT(Bottom, Top)                            \
2227 do {                                                            \
2228   if (yydebug)                                                  \
2229     yy_stack_print ((Bottom), (Top));                           \
2230 } while (0)
2231
2232
2233 /*------------------------------------------------.
2234 | Report that the YYRULE is going to be reduced.  |
2235 `------------------------------------------------*/
2236
2237 static void
2238 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
2239 {
2240   unsigned long yylno = yyrline[yyrule];
2241   int yynrhs = yyr2[yyrule];
2242   int yyi;
2243   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
2244              yyrule - 1, yylno);
2245   /* The symbols being reduced.  */
2246   for (yyi = 0; yyi < yynrhs; yyi++)
2247     {
2248       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
2249       yy_symbol_print (stderr,
2250                        yystos[yyssp[yyi + 1 - yynrhs]],
2251                        &yyvsp[(yyi + 1) - (yynrhs)]
2252                                               );
2253       YYFPRINTF (stderr, "\n");
2254     }
2255 }
2256
2257 # define YY_REDUCE_PRINT(Rule)          \
2258 do {                                    \
2259   if (yydebug)                          \
2260     yy_reduce_print (yyssp, yyvsp, Rule); \
2261 } while (0)
2262
2263 /* Nonzero means print parse trace.  It is left uninitialized so that
2264    multiple parsers can coexist.  */
2265 int yydebug;
2266 #else /* !YYDEBUG */
2267 # define YYDPRINTF(Args)
2268 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2269 # define YY_STACK_PRINT(Bottom, Top)
2270 # define YY_REDUCE_PRINT(Rule)
2271 #endif /* !YYDEBUG */
2272
2273
2274 /* YYINITDEPTH -- initial size of the parser's stacks.  */
2275 #ifndef YYINITDEPTH
2276 # define YYINITDEPTH 200
2277 #endif
2278
2279 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2280    if the built-in stack extension method is used).
2281
2282    Do not make this value too large; the results are undefined if
2283    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2284    evaluated with infinite-precision integer arithmetic.  */
2285
2286 #ifndef YYMAXDEPTH
2287 # define YYMAXDEPTH 10000
2288 #endif
2289
2290
2291 #if YYERROR_VERBOSE
2292
2293 # ifndef yystrlen
2294 #  if defined __GLIBC__ && defined _STRING_H
2295 #   define yystrlen strlen
2296 #  else
2297 /* Return the length of YYSTR.  */
2298 static YYSIZE_T
2299 yystrlen (const char *yystr)
2300 {
2301   YYSIZE_T yylen;
2302   for (yylen = 0; yystr[yylen]; yylen++)
2303     continue;
2304   return yylen;
2305 }
2306 #  endif
2307 # endif
2308
2309 # ifndef yystpcpy
2310 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2311 #   define yystpcpy stpcpy
2312 #  else
2313 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2314    YYDEST.  */
2315 static char *
2316 yystpcpy (char *yydest, const char *yysrc)
2317 {
2318   char *yyd = yydest;
2319   const char *yys = yysrc;
2320
2321   while ((*yyd++ = *yys++) != '\0')
2322     continue;
2323
2324   return yyd - 1;
2325 }
2326 #  endif
2327 # endif
2328
2329 # ifndef yytnamerr
2330 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2331    quotes and backslashes, so that it's suitable for yyerror.  The
2332    heuristic is that double-quoting is unnecessary unless the string
2333    contains an apostrophe, a comma, or backslash (other than
2334    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
2335    null, do not copy; instead, return the length of what the result
2336    would have been.  */
2337 static YYSIZE_T
2338 yytnamerr (char *yyres, const char *yystr)
2339 {
2340   if (*yystr == '"')
2341     {
2342       YYSIZE_T yyn = 0;
2343       char const *yyp = yystr;
2344
2345       for (;;)
2346         switch (*++yyp)
2347           {
2348           case '\'':
2349           case ',':
2350             goto do_not_strip_quotes;
2351
2352           case '\\':
2353             if (*++yyp != '\\')
2354               goto do_not_strip_quotes;
2355             else
2356               goto append;
2357
2358           append:
2359           default:
2360             if (yyres)
2361               yyres[yyn] = *yyp;
2362             yyn++;
2363             break;
2364
2365           case '"':
2366             if (yyres)
2367               yyres[yyn] = '\0';
2368             return yyn;
2369           }
2370     do_not_strip_quotes: ;
2371     }
2372
2373   if (! yyres)
2374     return yystrlen (yystr);
2375
2376   return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
2377 }
2378 # endif
2379
2380 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
2381    about the unexpected token YYTOKEN for the state stack whose top is
2382    YYSSP.
2383
2384    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
2385    not large enough to hold the message.  In that case, also set
2386    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
2387    required number of bytes is too large to store.  */
2388 static int
2389 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
2390                 yytype_int16 *yyssp, int yytoken)
2391 {
2392   YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
2393   YYSIZE_T yysize = yysize0;
2394   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
2395   /* Internationalized format string. */
2396   const char *yyformat = YY_NULLPTR;
2397   /* Arguments of yyformat. */
2398   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
2399   /* Number of reported tokens (one for the "unexpected", one per
2400      "expected"). */
2401   int yycount = 0;
2402
2403   /* There are many possibilities here to consider:
2404      - If this state is a consistent state with a default action, then
2405        the only way this function was invoked is if the default action
2406        is an error action.  In that case, don't check for expected
2407        tokens because there are none.
2408      - The only way there can be no lookahead present (in yychar) is if
2409        this state is a consistent state with a default action.  Thus,
2410        detecting the absence of a lookahead is sufficient to determine
2411        that there is no unexpected or expected token to report.  In that
2412        case, just report a simple "syntax error".
2413      - Don't assume there isn't a lookahead just because this state is a
2414        consistent state with a default action.  There might have been a
2415        previous inconsistent state, consistent state with a non-default
2416        action, or user semantic action that manipulated yychar.
2417      - Of course, the expected token list depends on states to have
2418        correct lookahead information, and it depends on the parser not
2419        to perform extra reductions after fetching a lookahead from the
2420        scanner and before detecting a syntax error.  Thus, state merging
2421        (from LALR or IELR) and default reductions corrupt the expected
2422        token list.  However, the list is correct for canonical LR with
2423        one exception: it will still contain any token that will not be
2424        accepted due to an error action in a later state.
2425   */
2426   if (yytoken != YYEMPTY)
2427     {
2428       int yyn = yypact[*yyssp];
2429       yyarg[yycount++] = yytname[yytoken];
2430       if (!yypact_value_is_default (yyn))
2431         {
2432           /* Start YYX at -YYN if negative to avoid negative indexes in
2433              YYCHECK.  In other words, skip the first -YYN actions for
2434              this state because they are default actions.  */
2435           int yyxbegin = yyn < 0 ? -yyn : 0;
2436           /* Stay within bounds of both yycheck and yytname.  */
2437           int yychecklim = YYLAST - yyn + 1;
2438           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2439           int yyx;
2440
2441           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2442             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
2443                 && !yytable_value_is_error (yytable[yyx + yyn]))
2444               {
2445                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
2446                   {
2447                     yycount = 1;
2448                     yysize = yysize0;
2449                     break;
2450                   }
2451                 yyarg[yycount++] = yytname[yyx];
2452                 {
2453                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
2454                   if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2455                     yysize = yysize1;
2456                   else
2457                     return 2;
2458                 }
2459               }
2460         }
2461     }
2462
2463   switch (yycount)
2464     {
2465 # define YYCASE_(N, S)                      \
2466       case N:                               \
2467         yyformat = S;                       \
2468       break
2469     default: /* Avoid compiler warnings. */
2470       YYCASE_(0, YY_("syntax error"));
2471       YYCASE_(1, YY_("syntax error, unexpected %s"));
2472       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2473       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2474       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2475       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2476 # undef YYCASE_
2477     }
2478
2479   {
2480     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
2481     if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2482       yysize = yysize1;
2483     else
2484       return 2;
2485   }
2486
2487   if (*yymsg_alloc < yysize)
2488     {
2489       *yymsg_alloc = 2 * yysize;
2490       if (! (yysize <= *yymsg_alloc
2491              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
2492         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
2493       return 1;
2494     }
2495
2496   /* Avoid sprintf, as that infringes on the user's name space.
2497      Don't have undefined behavior even if the translation
2498      produced a string with the wrong number of "%s"s.  */
2499   {
2500     char *yyp = *yymsg;
2501     int yyi = 0;
2502     while ((*yyp = *yyformat) != '\0')
2503       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
2504         {
2505           yyp += yytnamerr (yyp, yyarg[yyi++]);
2506           yyformat += 2;
2507         }
2508       else
2509         {
2510           yyp++;
2511           yyformat++;
2512         }
2513   }
2514   return 0;
2515 }
2516 #endif /* YYERROR_VERBOSE */
2517
2518 /*-----------------------------------------------.
2519 | Release the memory associated to this symbol.  |
2520 `-----------------------------------------------*/
2521
2522 static void
2523 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2524 {
2525   YYUSE (yyvaluep);
2526   if (!yymsg)
2527     yymsg = "Deleting";
2528   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2529
2530   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2531   YYUSE (yytype);
2532   YY_IGNORE_MAYBE_UNINITIALIZED_END
2533 }
2534
2535
2536
2537
2538 /* The lookahead symbol.  */
2539 int yychar;
2540
2541 /* The semantic value of the lookahead symbol.  */
2542 YYSTYPE yylval;
2543 /* Number of syntax errors so far.  */
2544 int yynerrs;
2545
2546
2547 /*----------.
2548 | yyparse.  |
2549 `----------*/
2550
2551 int
2552 yyparse (void)
2553 {
2554     int yystate;
2555     /* Number of tokens to shift before error messages enabled.  */
2556     int yyerrstatus;
2557
2558     /* The stacks and their tools:
2559        'yyss': related to states.
2560        'yyvs': related to semantic values.
2561
2562        Refer to the stacks through separate pointers, to allow yyoverflow
2563        to reallocate them elsewhere.  */
2564
2565     /* The state stack.  */
2566     yytype_int16 yyssa[YYINITDEPTH];
2567     yytype_int16 *yyss;
2568     yytype_int16 *yyssp;
2569
2570     /* The semantic value stack.  */
2571     YYSTYPE yyvsa[YYINITDEPTH];
2572     YYSTYPE *yyvs;
2573     YYSTYPE *yyvsp;
2574
2575     YYSIZE_T yystacksize;
2576
2577   int yyn;
2578   int yyresult;
2579   /* Lookahead token as an internal (translated) token number.  */
2580   int yytoken = 0;
2581   /* The variables used to return semantic value and location from the
2582      action routines.  */
2583   YYSTYPE yyval;
2584
2585 #if YYERROR_VERBOSE
2586   /* Buffer for error messages, and its allocated size.  */
2587   char yymsgbuf[128];
2588   char *yymsg = yymsgbuf;
2589   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
2590 #endif
2591
2592 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
2593
2594   /* The number of symbols on the RHS of the reduced rule.
2595      Keep to zero when no symbol should be popped.  */
2596   int yylen = 0;
2597
2598   yyssp = yyss = yyssa;
2599   yyvsp = yyvs = yyvsa;
2600   yystacksize = YYINITDEPTH;
2601
2602   YYDPRINTF ((stderr, "Starting parse\n"));
2603
2604   yystate = 0;
2605   yyerrstatus = 0;
2606   yynerrs = 0;
2607   yychar = YYEMPTY; /* Cause a token to be read.  */
2608   goto yysetstate;
2609
2610
2611 /*------------------------------------------------------------.
2612 | yynewstate -- push a new state, which is found in yystate.  |
2613 `------------------------------------------------------------*/
2614 yynewstate:
2615   /* In all cases, when you get here, the value and location stacks
2616      have just been pushed.  So pushing a state here evens the stacks.  */
2617   yyssp++;
2618
2619
2620 /*--------------------------------------------------------------------.
2621 | yynewstate -- set current state (the top of the stack) to yystate.  |
2622 `--------------------------------------------------------------------*/
2623 yysetstate:
2624   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2625   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
2626   *yyssp = (yytype_int16) yystate;
2627
2628   if (yyss + yystacksize - 1 <= yyssp)
2629 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2630     goto yyexhaustedlab;
2631 #else
2632     {
2633       /* Get the current used size of the three stacks, in elements.  */
2634       YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
2635
2636 # if defined yyoverflow
2637       {
2638         /* Give user a chance to reallocate the stack.  Use copies of
2639            these so that the &'s don't force the real ones into
2640            memory.  */
2641         YYSTYPE *yyvs1 = yyvs;
2642         yytype_int16 *yyss1 = yyss;
2643
2644         /* Each stack pointer address is followed by the size of the
2645            data in use in that stack, in bytes.  This used to be a
2646            conditional around just the two extra args, but that might
2647            be undefined if yyoverflow is a macro.  */
2648         yyoverflow (YY_("memory exhausted"),
2649                     &yyss1, yysize * sizeof (*yyssp),
2650                     &yyvs1, yysize * sizeof (*yyvsp),
2651                     &yystacksize);
2652         yyss = yyss1;
2653         yyvs = yyvs1;
2654       }
2655 # else /* defined YYSTACK_RELOCATE */
2656       /* Extend the stack our own way.  */
2657       if (YYMAXDEPTH <= yystacksize)
2658         goto yyexhaustedlab;
2659       yystacksize *= 2;
2660       if (YYMAXDEPTH < yystacksize)
2661         yystacksize = YYMAXDEPTH;
2662
2663       {
2664         yytype_int16 *yyss1 = yyss;
2665         union yyalloc *yyptr =
2666           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2667         if (! yyptr)
2668           goto yyexhaustedlab;
2669         YYSTACK_RELOCATE (yyss_alloc, yyss);
2670         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2671 # undef YYSTACK_RELOCATE
2672         if (yyss1 != yyssa)
2673           YYSTACK_FREE (yyss1);
2674       }
2675 # endif
2676
2677       yyssp = yyss + yysize - 1;
2678       yyvsp = yyvs + yysize - 1;
2679
2680       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2681                   (unsigned long) yystacksize));
2682
2683       if (yyss + yystacksize - 1 <= yyssp)
2684         YYABORT;
2685     }
2686 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2687
2688   if (yystate == YYFINAL)
2689     YYACCEPT;
2690
2691   goto yybackup;
2692
2693
2694 /*-----------.
2695 | yybackup.  |
2696 `-----------*/
2697 yybackup:
2698   /* Do appropriate processing given the current state.  Read a
2699      lookahead token if we need one and don't already have one.  */
2700
2701   /* First try to decide what to do without reference to lookahead token.  */
2702   yyn = yypact[yystate];
2703   if (yypact_value_is_default (yyn))
2704     goto yydefault;
2705
2706   /* Not known => get a lookahead token if don't already have one.  */
2707
2708   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
2709   if (yychar == YYEMPTY)
2710     {
2711       YYDPRINTF ((stderr, "Reading a token: "));
2712       yychar = yylex ();
2713     }
2714
2715   if (yychar <= YYEOF)
2716     {
2717       yychar = yytoken = YYEOF;
2718       YYDPRINTF ((stderr, "Now at end of input.\n"));
2719     }
2720   else
2721     {
2722       yytoken = YYTRANSLATE (yychar);
2723       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2724     }
2725
2726   /* If the proper action on seeing token YYTOKEN is to reduce or to
2727      detect an error, take that action.  */
2728   yyn += yytoken;
2729   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2730     goto yydefault;
2731   yyn = yytable[yyn];
2732   if (yyn <= 0)
2733     {
2734       if (yytable_value_is_error (yyn))
2735         goto yyerrlab;
2736       yyn = -yyn;
2737       goto yyreduce;
2738     }
2739
2740   /* Count tokens shifted since error; after three, turn off error
2741      status.  */
2742   if (yyerrstatus)
2743     yyerrstatus--;
2744
2745   /* Shift the lookahead token.  */
2746   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2747
2748   /* Discard the shifted token.  */
2749   yychar = YYEMPTY;
2750
2751   yystate = yyn;
2752   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2753   *++yyvsp = yylval;
2754   YY_IGNORE_MAYBE_UNINITIALIZED_END
2755   goto yynewstate;
2756
2757
2758 /*-----------------------------------------------------------.
2759 | yydefault -- do the default action for the current state.  |
2760 `-----------------------------------------------------------*/
2761 yydefault:
2762   yyn = yydefact[yystate];
2763   if (yyn == 0)
2764     goto yyerrlab;
2765   goto yyreduce;
2766
2767
2768 /*-----------------------------.
2769 | yyreduce -- do a reduction.  |
2770 `-----------------------------*/
2771 yyreduce:
2772   /* yyn is the number of a rule to reduce with.  */
2773   yylen = yyr2[yyn];
2774
2775   /* If YYLEN is nonzero, implement the default value of the action:
2776      '$$ = $1'.
2777
2778      Otherwise, the following line sets YYVAL to garbage.
2779      This behavior is undocumented and Bison
2780      users should not rely upon it.  Assigning to YYVAL
2781      unconditionally makes the parser a bit smaller, and it avoids a
2782      GCC warning that YYVAL may be used uninitialized.  */
2783   yyval = yyvsp[1-yylen];
2784
2785
2786   YY_REDUCE_PRINT (yyn);
2787   switch (yyn)
2788     {
2789   case 18:
2790 #line 195 "util/configparser.y"
2791     {
2792                 OUTYY(("\nP(force-toplevel)\n"));
2793         }
2794 #line 2795 "util/configparser.c"
2795     break;
2796
2797   case 19:
2798 #line 201 "util/configparser.y"
2799     { 
2800                 OUTYY(("\nP(server:)\n"));
2801         }
2802 #line 2803 "util/configparser.c"
2803     break;
2804
2805   case 227:
2806 #line 299 "util/configparser.y"
2807     {
2808                 struct config_stub* s;
2809                 OUTYY(("\nP(stub_zone:)\n")); 
2810                 s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
2811                 if(s) {
2812                         s->next = cfg_parser->cfg->stubs;
2813                         cfg_parser->cfg->stubs = s;
2814                 } else 
2815                         yyerror("out of memory");
2816         }
2817 #line 2818 "util/configparser.c"
2818     break;
2819
2820   case 237:
2821 #line 316 "util/configparser.y"
2822     {
2823                 struct config_stub* s;
2824                 OUTYY(("\nP(forward_zone:)\n")); 
2825                 s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
2826                 if(s) {
2827                         s->next = cfg_parser->cfg->forwards;
2828                         cfg_parser->cfg->forwards = s;
2829                 } else 
2830                         yyerror("out of memory");
2831         }
2832 #line 2833 "util/configparser.c"
2833     break;
2834
2835   case 246:
2836 #line 333 "util/configparser.y"
2837     {
2838                 struct config_view* s;
2839                 OUTYY(("\nP(view:)\n")); 
2840                 s = (struct config_view*)calloc(1, sizeof(struct config_view));
2841                 if(s) {
2842                         s->next = cfg_parser->cfg->views;
2843                         if(s->next && !s->next->name)
2844                                 yyerror("view without name");
2845                         cfg_parser->cfg->views = s;
2846                 } else 
2847                         yyerror("out of memory");
2848         }
2849 #line 2850 "util/configparser.c"
2850     break;
2851
2852   case 256:
2853 #line 352 "util/configparser.y"
2854     {
2855                 struct config_auth* s;
2856                 OUTYY(("\nP(auth_zone:)\n")); 
2857                 s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
2858                 if(s) {
2859                         s->next = cfg_parser->cfg->auths;
2860                         cfg_parser->cfg->auths = s;
2861                         /* defaults for auth zone */
2862                         s->for_downstream = 1;
2863                         s->for_upstream = 1;
2864                         s->fallback_enabled = 0;
2865                         s->isrpz = 0;
2866                 } else 
2867                         yyerror("out of memory");
2868         }
2869 #line 2870 "util/configparser.c"
2870     break;
2871
2872   case 267:
2873 #line 376 "util/configparser.y"
2874     {
2875                 uint8_t* bitlist;
2876                 size_t len = 0;
2877                 OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
2878                 bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
2879                         &len);
2880                 free((yyvsp[0].str));
2881                 if(!bitlist) {
2882                         yyerror("could not parse tags, (define-tag them first)");
2883                 }
2884                 if(bitlist) {
2885                         cfg_parser->cfg->auths->rpz_taglist = bitlist;
2886                         cfg_parser->cfg->auths->rpz_taglistlen = len;
2887
2888                 }
2889         }
2890 #line 2891 "util/configparser.c"
2891     break;
2892
2893   case 268:
2894 #line 395 "util/configparser.y"
2895     {
2896                 OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
2897                 if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
2898                    strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 &&
2899                    strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) {
2900                         yyerror("rpz-action-override action: expected nxdomain, "
2901                                 "nodata, passthru, drop, cname or disabled");
2902                         free((yyvsp[0].str));
2903                         cfg_parser->cfg->auths->rpz_action_override = NULL;
2904                 }
2905                 else {
2906                         cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
2907                 }
2908         }
2909 #line 2910 "util/configparser.c"
2910     break;
2911
2912   case 269:
2913 #line 412 "util/configparser.y"
2914     {
2915                 OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
2916                 free(cfg_parser->cfg->auths->rpz_cname);
2917                 cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
2918         }
2919 #line 2920 "util/configparser.c"
2920     break;
2921
2922   case 270:
2923 #line 420 "util/configparser.y"
2924     {
2925                 OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
2926                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
2927                         yyerror("expected yes or no.");
2928                 else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
2929                 free((yyvsp[0].str));
2930         }
2931 #line 2932 "util/configparser.c"
2932     break;
2933
2934   case 271:
2935 #line 430 "util/configparser.y"
2936     {
2937                 OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
2938                 free(cfg_parser->cfg->auths->rpz_log_name);
2939                 cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
2940         }
2941 #line 2942 "util/configparser.c"
2942     break;
2943
2944   case 272:
2945 #line 438 "util/configparser.y"
2946     {
2947                 struct config_auth* s;
2948                 OUTYY(("\nP(rpz:)\n")); 
2949                 s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
2950                 if(s) {
2951                         s->next = cfg_parser->cfg->auths;
2952                         cfg_parser->cfg->auths = s;
2953                         /* defaults for RPZ auth zone */
2954                         s->for_downstream = 0;
2955                         s->for_upstream = 0;
2956                         s->fallback_enabled = 0;
2957                         s->isrpz = 1;
2958                 } else 
2959                         yyerror("out of memory");
2960         }
2961 #line 2962 "util/configparser.c"
2962     break;
2963
2964   case 285:
2965 #line 461 "util/configparser.y"
2966     { 
2967                 OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); 
2968                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2969                         yyerror("number expected");
2970                 else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
2971                 free((yyvsp[0].str));
2972         }
2973 #line 2974 "util/configparser.c"
2974     break;
2975
2976   case 286:
2977 #line 470 "util/configparser.y"
2978     { 
2979                 OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); 
2980                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2981                         yyerror("number expected");
2982                 else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
2983                 free((yyvsp[0].str));
2984         }
2985 #line 2986 "util/configparser.c"
2986     break;
2987
2988   case 287:
2989 #line 479 "util/configparser.y"
2990     { 
2991                 OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); 
2992                 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
2993                         cfg_parser->cfg->stat_interval = 0;
2994                 else if(atoi((yyvsp[0].str)) == 0)
2995                         yyerror("number expected");
2996                 else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
2997                 free((yyvsp[0].str));
2998         }
2999 #line 3000 "util/configparser.c"
3000     break;
3001
3002   case 288:
3003 #line 490 "util/configparser.y"
3004     {
3005                 OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
3006                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3007                         yyerror("expected yes or no.");
3008                 else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
3009                 free((yyvsp[0].str));
3010         }
3011 #line 3012 "util/configparser.c"
3012     break;
3013
3014   case 289:
3015 #line 499 "util/configparser.y"
3016     {
3017                 OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
3018                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3019                         yyerror("expected yes or no.");
3020                 else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
3021                 free((yyvsp[0].str));
3022         }
3023 #line 3024 "util/configparser.c"
3024     break;
3025
3026   case 290:
3027 #line 508 "util/configparser.y"
3028     {
3029                 OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
3030                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3031                         yyerror("expected yes or no.");
3032                 else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
3033                 free((yyvsp[0].str));
3034         }
3035 #line 3036 "util/configparser.c"
3036     break;
3037
3038   case 291:
3039 #line 517 "util/configparser.y"
3040     { 
3041                 OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); 
3042                 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3043                         cfg_parser->cfg->shm_key = 0;
3044                 else if(atoi((yyvsp[0].str)) == 0)
3045                         yyerror("number expected");
3046                 else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
3047                 free((yyvsp[0].str));
3048         }
3049 #line 3050 "util/configparser.c"
3050     break;
3051
3052   case 292:
3053 #line 528 "util/configparser.y"
3054     {
3055                 OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
3056                 if(atoi((yyvsp[0].str)) == 0)
3057                         yyerror("port number expected");
3058                 else cfg_parser->cfg->port = atoi((yyvsp[0].str));
3059                 free((yyvsp[0].str));
3060         }
3061 #line 3062 "util/configparser.c"
3062     break;
3063
3064   case 293:
3065 #line 537 "util/configparser.y"
3066     {
3067         #ifdef CLIENT_SUBNET
3068                 OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
3069                 if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
3070                         fatal_exit("out of memory adding client-subnet");
3071         #else
3072                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3073                 free((yyvsp[0].str));
3074         #endif
3075         }
3076 #line 3077 "util/configparser.c"
3077     break;
3078
3079   case 294:
3080 #line 549 "util/configparser.y"
3081     {
3082         #ifdef CLIENT_SUBNET
3083                 OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
3084                 if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
3085                         (yyvsp[0].str)))
3086                         fatal_exit("out of memory adding client-subnet-zone");
3087         #else
3088                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3089                 free((yyvsp[0].str));
3090         #endif
3091         }
3092 #line 3093 "util/configparser.c"
3093     break;
3094
3095   case 295:
3096 #line 563 "util/configparser.y"
3097     {
3098         #ifdef CLIENT_SUBNET
3099                 OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
3100                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3101                         yyerror("expected yes or no.");
3102                 else
3103                         cfg_parser->cfg->client_subnet_always_forward =
3104                                 (strcmp((yyvsp[0].str), "yes")==0);
3105         #else
3106                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3107         #endif
3108                 free((yyvsp[0].str));
3109         }
3110 #line 3111 "util/configparser.c"
3111     break;
3112
3113   case 296:
3114 #line 578 "util/configparser.y"
3115     {
3116         #ifdef CLIENT_SUBNET
3117                 OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
3118                 OUTYY(("P(Deprecated option, ignoring)\n"));
3119         #else
3120                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3121         #endif
3122                 free((yyvsp[0].str));
3123         }
3124 #line 3125 "util/configparser.c"
3125     break;
3126
3127   case 297:
3128 #line 589 "util/configparser.y"
3129     {
3130         #ifdef CLIENT_SUBNET
3131                 OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3132                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3133                         yyerror("IPv4 subnet length expected");
3134                 else if (atoi((yyvsp[0].str)) > 32)
3135                         cfg_parser->cfg->max_client_subnet_ipv4 = 32;
3136                 else if (atoi((yyvsp[0].str)) < 0)
3137                         cfg_parser->cfg->max_client_subnet_ipv4 = 0;
3138                 else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3139         #else
3140                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3141         #endif
3142                 free((yyvsp[0].str));
3143         }
3144 #line 3145 "util/configparser.c"
3145     break;
3146
3147   case 298:
3148 #line 606 "util/configparser.y"
3149     {
3150         #ifdef CLIENT_SUBNET
3151                 OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3152                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3153                         yyerror("Ipv6 subnet length expected");
3154                 else if (atoi((yyvsp[0].str)) > 128)
3155                         cfg_parser->cfg->max_client_subnet_ipv6 = 128;
3156                 else if (atoi((yyvsp[0].str)) < 0)
3157                         cfg_parser->cfg->max_client_subnet_ipv6 = 0;
3158                 else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3159         #else
3160                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3161         #endif
3162                 free((yyvsp[0].str));
3163         }
3164 #line 3165 "util/configparser.c"
3165     break;
3166
3167   case 299:
3168 #line 623 "util/configparser.y"
3169     {
3170         #ifdef CLIENT_SUBNET
3171                 OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3172                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3173                         yyerror("IPv4 subnet length expected");
3174                 else if (atoi((yyvsp[0].str)) > 32)
3175                         cfg_parser->cfg->min_client_subnet_ipv4 = 32;
3176                 else if (atoi((yyvsp[0].str)) < 0)
3177                         cfg_parser->cfg->min_client_subnet_ipv4 = 0;
3178                 else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3179         #else
3180                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3181         #endif
3182                 free((yyvsp[0].str));
3183         }
3184 #line 3185 "util/configparser.c"
3185     break;
3186
3187   case 300:
3188 #line 640 "util/configparser.y"
3189     {
3190         #ifdef CLIENT_SUBNET
3191                 OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3192                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3193                         yyerror("Ipv6 subnet length expected");
3194                 else if (atoi((yyvsp[0].str)) > 128)
3195                         cfg_parser->cfg->min_client_subnet_ipv6 = 128;
3196                 else if (atoi((yyvsp[0].str)) < 0)
3197                         cfg_parser->cfg->min_client_subnet_ipv6 = 0;
3198                 else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3199         #else
3200                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3201         #endif
3202                 free((yyvsp[0].str));
3203         }
3204 #line 3205 "util/configparser.c"
3205     break;
3206
3207   case 301:
3208 #line 657 "util/configparser.y"
3209     {
3210         #ifdef CLIENT_SUBNET
3211                 OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
3212                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3213                         yyerror("IPv4 ECS tree size expected");
3214                 else if (atoi((yyvsp[0].str)) < 0)
3215                         cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
3216                 else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str));
3217         #else
3218                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3219         #endif
3220                 free((yyvsp[0].str));
3221         }
3222 #line 3223 "util/configparser.c"
3223     break;
3224
3225   case 302:
3226 #line 672 "util/configparser.y"
3227     {
3228         #ifdef CLIENT_SUBNET
3229                 OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
3230                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3231                         yyerror("IPv6 ECS tree size expected");
3232                 else if (atoi((yyvsp[0].str)) < 0)
3233                         cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
3234                 else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str));
3235         #else
3236                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3237         #endif
3238                 free((yyvsp[0].str));
3239         }
3240 #line 3241 "util/configparser.c"
3241     break;
3242
3243   case 303:
3244 #line 687 "util/configparser.y"
3245     {
3246                 OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
3247                 if(cfg_parser->cfg->num_ifs == 0)
3248                         cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
3249                 else    cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
3250                                 (cfg_parser->cfg->num_ifs+1)*sizeof(char*));
3251                 if(!cfg_parser->cfg->ifs)
3252                         yyerror("out of memory");
3253                 else
3254                         cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
3255         }
3256 #line 3257 "util/configparser.c"
3257     break;
3258
3259   case 304:
3260 #line 700 "util/configparser.y"
3261     {
3262                 OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
3263                 if(cfg_parser->cfg->num_out_ifs == 0)
3264                         cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
3265                 else    cfg_parser->cfg->out_ifs = realloc(
3266                         cfg_parser->cfg->out_ifs, 
3267                         (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
3268                 if(!cfg_parser->cfg->out_ifs)
3269                         yyerror("out of memory");
3270                 else
3271                         cfg_parser->cfg->out_ifs[
3272                                 cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
3273         }
3274 #line 3275 "util/configparser.c"
3275     break;
3276
3277   case 305:
3278 #line 715 "util/configparser.y"
3279     {
3280                 OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
3281                 if(atoi((yyvsp[0].str)) == 0)
3282                         yyerror("number expected");
3283                 else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
3284                 free((yyvsp[0].str));
3285         }
3286 #line 3287 "util/configparser.c"
3287     break;
3288
3289   case 306:
3290 #line 724 "util/configparser.y"
3291     {
3292                 OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
3293                 if(!cfg_mark_ports((yyvsp[0].str), 1, 
3294                         cfg_parser->cfg->outgoing_avail_ports, 65536))
3295                         yyerror("port number or range (\"low-high\") expected");
3296                 free((yyvsp[0].str));
3297         }
3298 #line 3299 "util/configparser.c"
3299     break;
3300
3301   case 307:
3302 #line 733 "util/configparser.y"
3303     {
3304                 OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
3305                 if(!cfg_mark_ports((yyvsp[0].str), 0, 
3306                         cfg_parser->cfg->outgoing_avail_ports, 65536))
3307                         yyerror("port number or range (\"low-high\") expected");
3308                 free((yyvsp[0].str));
3309         }
3310 #line 3311 "util/configparser.c"
3311     break;
3312
3313   case 308:
3314 #line 742 "util/configparser.y"
3315     {
3316                 OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
3317                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3318                         yyerror("number expected");
3319                 else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
3320                 free((yyvsp[0].str));
3321         }
3322 #line 3323 "util/configparser.c"
3323     break;
3324
3325   case 309:
3326 #line 751 "util/configparser.y"
3327     {
3328                 OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
3329                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3330                         yyerror("number expected");
3331                 else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
3332                 free((yyvsp[0].str));
3333         }
3334 #line 3335 "util/configparser.c"
3335     break;
3336
3337   case 310:
3338 #line 760 "util/configparser.y"
3339     {
3340                 OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
3341                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3342                         yyerror("expected yes or no.");
3343                 else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
3344                 free((yyvsp[0].str));
3345         }
3346 #line 3347 "util/configparser.c"
3347     break;
3348
3349   case 311:
3350 #line 769 "util/configparser.y"
3351     {
3352                 OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
3353                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3354                         yyerror("expected yes or no.");
3355                 else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3356                 free((yyvsp[0].str));
3357         }
3358 #line 3359 "util/configparser.c"
3359     break;
3360
3361   case 312:
3362 #line 778 "util/configparser.y"
3363     {
3364                 OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
3365                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3366                         yyerror("expected yes or no.");
3367                 else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
3368                 free((yyvsp[0].str));
3369         }
3370 #line 3371 "util/configparser.c"
3371     break;
3372
3373   case 313:
3374 #line 787 "util/configparser.y"
3375     {
3376                 OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
3377                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3378                         yyerror("expected yes or no.");
3379                 else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
3380                 free((yyvsp[0].str));
3381         }
3382 #line 3383 "util/configparser.c"
3383     break;
3384
3385   case 314:
3386 #line 796 "util/configparser.y"
3387     {
3388                 OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
3389                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3390                         yyerror("expected yes or no.");
3391                 else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
3392                 free((yyvsp[0].str));
3393         }
3394 #line 3395 "util/configparser.c"
3395     break;
3396
3397   case 315:
3398 #line 805 "util/configparser.y"
3399     {
3400                 OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
3401                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3402                         yyerror("expected yes or no.");
3403                 else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3404                 free((yyvsp[0].str));
3405         }
3406 #line 3407 "util/configparser.c"
3407     break;
3408
3409   case 316:
3410 #line 814 "util/configparser.y"
3411     {
3412                 OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
3413                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3414                         yyerror("expected yes or no.");
3415                 else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
3416                 free((yyvsp[0].str));
3417         }
3418 #line 3419 "util/configparser.c"
3419     break;
3420
3421   case 317:
3422 #line 823 "util/configparser.y"
3423     {
3424                 OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
3425                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3426                         yyerror("number expected");
3427                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
3428                 free((yyvsp[0].str));
3429         }
3430 #line 3431 "util/configparser.c"
3431     break;
3432
3433   case 318:
3434 #line 832 "util/configparser.y"
3435     {
3436                 OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
3437                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3438                         yyerror("number expected");
3439                 else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
3440                 free((yyvsp[0].str));
3441         }
3442 #line 3443 "util/configparser.c"
3443     break;
3444
3445   case 319:
3446 #line 841 "util/configparser.y"
3447     {
3448                 OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
3449                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3450                         yyerror("number expected");
3451                 else if (atoi((yyvsp[0].str)) > 120000)
3452                         cfg_parser->cfg->tcp_idle_timeout = 120000;
3453                 else if (atoi((yyvsp[0].str)) < 1)
3454                         cfg_parser->cfg->tcp_idle_timeout = 1;
3455                 else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
3456                 free((yyvsp[0].str));
3457         }
3458 #line 3459 "util/configparser.c"
3459     break;
3460
3461   case 320:
3462 #line 854 "util/configparser.y"
3463     {
3464                 OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
3465                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3466                         yyerror("expected yes or no.");
3467                 else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
3468                 free((yyvsp[0].str));
3469         }
3470 #line 3471 "util/configparser.c"
3471     break;
3472
3473   case 321:
3474 #line 863 "util/configparser.y"
3475     {
3476                 OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
3477                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3478                         yyerror("number expected");
3479                 else if (atoi((yyvsp[0].str)) > 6553500)
3480                         cfg_parser->cfg->tcp_keepalive_timeout = 6553500;
3481                 else if (atoi((yyvsp[0].str)) < 1)
3482                         cfg_parser->cfg->tcp_keepalive_timeout = 0;
3483                 else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
3484                 free((yyvsp[0].str));
3485         }
3486 #line 3487 "util/configparser.c"
3487     break;
3488
3489   case 322:
3490 #line 876 "util/configparser.y"
3491     {
3492                 OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
3493                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3494                         yyerror("expected yes or no.");
3495                 else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
3496                 free((yyvsp[0].str));
3497         }
3498 #line 3499 "util/configparser.c"
3499     break;
3500
3501   case 323:
3502 #line 885 "util/configparser.y"
3503     {
3504                 OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
3505                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3506                         yyerror("expected yes or no.");
3507                 else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
3508                 free((yyvsp[0].str));
3509         }
3510 #line 3511 "util/configparser.c"
3511     break;
3512
3513   case 324:
3514 #line 894 "util/configparser.y"
3515     {
3516                 OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
3517                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3518                         yyerror("expected yes or no.");
3519                 else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
3520                 free((yyvsp[0].str));
3521         }
3522 #line 3523 "util/configparser.c"
3523     break;
3524
3525   case 325:
3526 #line 903 "util/configparser.y"
3527     {
3528                 OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
3529                 free(cfg_parser->cfg->ssl_service_key);
3530                 cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
3531         }
3532 #line 3533 "util/configparser.c"
3533     break;
3534
3535   case 326:
3536 #line 910 "util/configparser.y"
3537     {
3538                 OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
3539                 free(cfg_parser->cfg->ssl_service_pem);
3540                 cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
3541         }
3542 #line 3543 "util/configparser.c"
3543     break;
3544
3545   case 327:
3546 #line 917 "util/configparser.y"
3547     {
3548                 OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
3549                 if(atoi((yyvsp[0].str)) == 0)
3550                         yyerror("port number expected");
3551                 else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
3552                 free((yyvsp[0].str));
3553         }
3554 #line 3555 "util/configparser.c"
3555     break;
3556
3557   case 328:
3558 #line 926 "util/configparser.y"
3559     {
3560                 OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
3561                 free(cfg_parser->cfg->tls_cert_bundle);
3562                 cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
3563         }
3564 #line 3565 "util/configparser.c"
3565     break;
3566
3567   case 329:
3568 #line 933 "util/configparser.y"
3569     {
3570                 OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
3571                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3572                         yyerror("expected yes or no.");
3573                 else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
3574                 free((yyvsp[0].str));
3575         }
3576 #line 3577 "util/configparser.c"
3577     break;
3578
3579   case 330:
3580 #line 942 "util/configparser.y"
3581     {
3582                 OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
3583                 if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
3584                         (yyvsp[0].str)))
3585                         yyerror("out of memory");
3586         }
3587 #line 3588 "util/configparser.c"
3588     break;
3589
3590   case 331:
3591 #line 950 "util/configparser.y"
3592     {
3593                 OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
3594                 free(cfg_parser->cfg->tls_ciphers);
3595                 cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
3596         }
3597 #line 3598 "util/configparser.c"
3598     break;
3599
3600   case 332:
3601 #line 957 "util/configparser.y"
3602     {
3603                 OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
3604                 free(cfg_parser->cfg->tls_ciphersuites);
3605                 cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
3606         }
3607 #line 3608 "util/configparser.c"
3608     break;
3609
3610   case 333:
3611 #line 964 "util/configparser.y"
3612     {
3613                 OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
3614                 if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
3615                         (yyvsp[0].str)))
3616                         yyerror("out of memory");
3617         }
3618 #line 3619 "util/configparser.c"
3619     break;
3620
3621   case 334:
3622 #line 972 "util/configparser.y"
3623     {
3624                 OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
3625                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3626                         yyerror("expected yes or no.");
3627                 else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
3628                 free((yyvsp[0].str));
3629         }
3630 #line 3631 "util/configparser.c"
3631     break;
3632
3633   case 335:
3634 #line 981 "util/configparser.y"
3635     {
3636                 OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
3637                 if(atoi((yyvsp[0].str)) == 0)
3638                         yyerror("port number expected");
3639                 else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
3640                 free((yyvsp[0].str));
3641         }
3642 #line 3643 "util/configparser.c"
3643     break;
3644
3645   case 336:
3646 #line 989 "util/configparser.y"
3647     {
3648                 OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
3649                 free(cfg_parser->cfg->http_endpoint);
3650                 if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') {
3651                         cfg_parser->cfg->http_endpoint = malloc(strlen((yyvsp[0].str))+2);
3652                         if(!cfg_parser->cfg->http_endpoint)
3653                                 yyerror("out of memory");
3654                         cfg_parser->cfg->http_endpoint[0] = '/';
3655                         memmove(cfg_parser->cfg->http_endpoint+1, (yyvsp[0].str),
3656                                 strlen((yyvsp[0].str))+1);
3657                         free((yyvsp[0].str));
3658                 } else {
3659                         cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
3660                 }
3661         }
3662 #line 3663 "util/configparser.c"
3663     break;
3664
3665   case 337:
3666 #line 1005 "util/configparser.y"
3667     {
3668                 OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
3669                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3670                         yyerror("number expected");
3671                 else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
3672                 free((yyvsp[0].str));
3673         }
3674 #line 3675 "util/configparser.c"
3675     break;
3676
3677   case 338:
3678 #line 1013 "util/configparser.y"
3679     {
3680                 OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
3681                 if(!cfg_parse_memsize((yyvsp[0].str),
3682                         &cfg_parser->cfg->http_query_buffer_size))
3683                         yyerror("memory size expected");
3684                 free((yyvsp[0].str));
3685         }
3686 #line 3687 "util/configparser.c"
3687     break;
3688
3689   case 339:
3690 #line 1021 "util/configparser.y"
3691     {
3692                 OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
3693                 if(!cfg_parse_memsize((yyvsp[0].str),
3694                         &cfg_parser->cfg->http_response_buffer_size))
3695                         yyerror("memory size expected");
3696                 free((yyvsp[0].str));
3697         }
3698 #line 3699 "util/configparser.c"
3699     break;
3700
3701   case 340:
3702 #line 1029 "util/configparser.y"
3703     {
3704                 OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
3705                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3706                         yyerror("expected yes or no.");
3707                 else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
3708                 free((yyvsp[0].str));
3709         }
3710 #line 3711 "util/configparser.c"
3711     break;
3712
3713   case 341:
3714 #line 1037 "util/configparser.y"
3715     {
3716                 OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
3717                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3718                         yyerror("expected yes or no.");
3719                 else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
3720                 free((yyvsp[0].str));
3721         }
3722 #line 3723 "util/configparser.c"
3723     break;
3724
3725   case 342:
3726 #line 1045 "util/configparser.y"
3727     {
3728                 OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
3729                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3730                         yyerror("expected yes or no.");
3731                 else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
3732                 free((yyvsp[0].str));
3733         }
3734 #line 3735 "util/configparser.c"
3735     break;
3736
3737   case 343:
3738 #line 1054 "util/configparser.y"
3739     {
3740                 OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
3741                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3742                         yyerror("expected yes or no.");
3743                 else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
3744                 free((yyvsp[0].str));
3745         }
3746 #line 3747 "util/configparser.c"
3747     break;
3748
3749   case 344:
3750 #line 1063 "util/configparser.y"
3751     {
3752                 OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
3753                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3754                         yyerror("expected yes or no.");
3755                 else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0);
3756 #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
3757                 if(strcmp((yyvsp[0].str), "yes") == 0)
3758                         yyerror("no syslog services are available. "
3759                                 "(reconfigure and compile to add)");
3760 #endif
3761                 free((yyvsp[0].str));
3762         }
3763 #line 3764 "util/configparser.c"
3764     break;
3765
3766   case 345:
3767 #line 1077 "util/configparser.y"
3768     {
3769                 OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
3770                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3771                         yyerror("expected yes or no.");
3772                 else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
3773                 free((yyvsp[0].str));
3774         }
3775 #line 3776 "util/configparser.c"
3776     break;
3777
3778   case 346:
3779 #line 1086 "util/configparser.y"
3780     {
3781                 OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
3782                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3783                         yyerror("expected yes or no.");
3784                 else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
3785                 free((yyvsp[0].str));
3786         }
3787 #line 3788 "util/configparser.c"
3788     break;
3789
3790   case 347:
3791 #line 1095 "util/configparser.y"
3792     {
3793         OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
3794         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3795                 yyerror("expected yes or no.");
3796         else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
3797         free((yyvsp[0].str));
3798   }
3799 #line 3800 "util/configparser.c"
3800     break;
3801
3802   case 348:
3803 #line 1104 "util/configparser.y"
3804     {
3805         OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
3806         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3807                 yyerror("expected yes or no.");
3808         else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
3809         free((yyvsp[0].str));
3810   }
3811 #line 3812 "util/configparser.c"
3812     break;
3813
3814   case 349:
3815 #line 1113 "util/configparser.y"
3816     {
3817                 OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
3818                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3819                         yyerror("expected yes or no.");
3820                 else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
3821                 free((yyvsp[0].str));
3822         }
3823 #line 3824 "util/configparser.c"
3824     break;
3825
3826   case 350:
3827 #line 1122 "util/configparser.y"
3828     {
3829         OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
3830         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3831                 yyerror("expected yes or no.");
3832         else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
3833         free((yyvsp[0].str));
3834   }
3835 #line 3836 "util/configparser.c"
3836     break;
3837
3838   case 351:
3839 #line 1131 "util/configparser.y"
3840     {
3841                 OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
3842                 free(cfg_parser->cfg->chrootdir);
3843                 cfg_parser->cfg->chrootdir = (yyvsp[0].str);
3844         }
3845 #line 3846 "util/configparser.c"
3846     break;
3847
3848   case 352:
3849 #line 1138 "util/configparser.y"
3850     {
3851                 OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
3852                 free(cfg_parser->cfg->username);
3853                 cfg_parser->cfg->username = (yyvsp[0].str);
3854         }
3855 #line 3856 "util/configparser.c"
3856     break;
3857
3858   case 353:
3859 #line 1145 "util/configparser.y"
3860     {
3861                 OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
3862                 free(cfg_parser->cfg->directory);
3863                 cfg_parser->cfg->directory = (yyvsp[0].str);
3864                 /* change there right away for includes relative to this */
3865                 if((yyvsp[0].str)[0]) {
3866                         char* d;
3867 #ifdef UB_ON_WINDOWS
3868                         w_config_adjust_directory(cfg_parser->cfg);
3869 #endif
3870                         d = cfg_parser->cfg->directory;
3871                         /* adjust directory if we have already chroot,
3872                          * like, we reread after sighup */
3873                         if(cfg_parser->chroot && cfg_parser->chroot[0] &&
3874                                 strncmp(d, cfg_parser->chroot, strlen(
3875                                 cfg_parser->chroot)) == 0)
3876                                 d += strlen(cfg_parser->chroot);
3877                         if(d[0]) {
3878                             if(chdir(d))
3879                                 log_err("cannot chdir to directory: %s (%s)",
3880                                         d, strerror(errno));
3881                         }
3882                 }
3883         }
3884 #line 3885 "util/configparser.c"
3885     break;
3886
3887   case 354:
3888 #line 1171 "util/configparser.y"
3889     {
3890                 OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
3891                 free(cfg_parser->cfg->logfile);
3892                 cfg_parser->cfg->logfile = (yyvsp[0].str);
3893                 cfg_parser->cfg->use_syslog = 0;
3894         }
3895 #line 3896 "util/configparser.c"
3896     break;
3897
3898   case 355:
3899 #line 1179 "util/configparser.y"
3900     {
3901                 OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
3902                 free(cfg_parser->cfg->pidfile);
3903                 cfg_parser->cfg->pidfile = (yyvsp[0].str);
3904         }
3905 #line 3906 "util/configparser.c"
3906     break;
3907
3908   case 356:
3909 #line 1186 "util/configparser.y"
3910     {
3911                 OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
3912                 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
3913                         yyerror("out of memory");
3914         }
3915 #line 3916 "util/configparser.c"
3916     break;
3917
3918   case 357:
3919 #line 1193 "util/configparser.y"
3920     {
3921                 OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
3922                 log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
3923                 free((yyvsp[0].str));
3924         }
3925 #line 3926 "util/configparser.c"
3926     break;
3927
3928   case 358:
3929 #line 1200 "util/configparser.y"
3930     {
3931                 OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
3932                 log_warn("option dlv-anchor ignored: DLV is decommissioned");
3933                 free((yyvsp[0].str));
3934         }
3935 #line 3936 "util/configparser.c"
3936     break;
3937
3938   case 359:
3939 #line 1207 "util/configparser.y"
3940     {
3941                 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
3942                 if(!cfg_strlist_insert(&cfg_parser->cfg->
3943                         auto_trust_anchor_file_list, (yyvsp[0].str)))
3944                         yyerror("out of memory");
3945         }
3946 #line 3947 "util/configparser.c"
3947     break;
3948
3949   case 360:
3950 #line 1215 "util/configparser.y"
3951     {
3952                 OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
3953                 if(!cfg_strlist_insert(&cfg_parser->cfg->
3954                         trust_anchor_file_list, (yyvsp[0].str)))
3955                         yyerror("out of memory");
3956         }
3957 #line 3958 "util/configparser.c"
3958     break;
3959
3960   case 361:
3961 #line 1223 "util/configparser.y"
3962     {
3963                 OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
3964                 if(!cfg_strlist_insert(&cfg_parser->cfg->
3965                         trusted_keys_file_list, (yyvsp[0].str)))
3966                         yyerror("out of memory");
3967         }
3968 #line 3969 "util/configparser.c"
3969     break;
3970
3971   case 362:
3972 #line 1231 "util/configparser.y"
3973     {
3974                 OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
3975                 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
3976                         yyerror("out of memory");
3977         }
3978 #line 3979 "util/configparser.c"
3979     break;
3980
3981   case 363:
3982 #line 1238 "util/configparser.y"
3983     {
3984                 OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
3985                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3986                         yyerror("expected yes or no.");
3987                 else
3988                         cfg_parser->cfg->trust_anchor_signaling =
3989                                 (strcmp((yyvsp[0].str), "yes")==0);
3990                 free((yyvsp[0].str));
3991         }
3992 #line 3993 "util/configparser.c"
3993     break;
3994
3995   case 364:
3996 #line 1249 "util/configparser.y"
3997     {
3998                 OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
3999                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4000                         yyerror("expected yes or no.");
4001                 else
4002                         cfg_parser->cfg->root_key_sentinel =
4003                                 (strcmp((yyvsp[0].str), "yes")==0);
4004                 free((yyvsp[0].str));
4005         }
4006 #line 4007 "util/configparser.c"
4007     break;
4008
4009   case 365:
4010 #line 1260 "util/configparser.y"
4011     {
4012                 OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
4013                 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
4014                         yyerror("out of memory");
4015         }
4016 #line 4017 "util/configparser.c"
4017     break;
4018
4019   case 366:
4020 #line 1267 "util/configparser.y"
4021     {
4022                 OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
4023                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4024                         yyerror("expected yes or no.");
4025                 else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
4026                 free((yyvsp[0].str));
4027         }
4028 #line 4029 "util/configparser.c"
4029     break;
4030
4031   case 367:
4032 #line 1276 "util/configparser.y"
4033     {
4034                 OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
4035                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4036                         yyerror("expected yes or no.");
4037                 else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
4038                 free((yyvsp[0].str));
4039         }
4040 #line 4041 "util/configparser.c"
4041     break;
4042
4043   case 368:
4044 #line 1285 "util/configparser.y"
4045     {
4046                 OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
4047                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4048                         yyerror("expected yes or no.");
4049                 else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
4050                 free((yyvsp[0].str));
4051         }
4052 #line 4053 "util/configparser.c"
4053     break;
4054
4055   case 369:
4056 #line 1294 "util/configparser.y"
4057     {
4058                 OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
4059                 free(cfg_parser->cfg->identity);
4060                 cfg_parser->cfg->identity = (yyvsp[0].str);
4061         }
4062 #line 4063 "util/configparser.c"
4063     break;
4064
4065   case 370:
4066 #line 1301 "util/configparser.y"
4067     {
4068                 OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
4069                 free(cfg_parser->cfg->version);
4070                 cfg_parser->cfg->version = (yyvsp[0].str);
4071         }
4072 #line 4073 "util/configparser.c"
4073     break;
4074
4075   case 371:
4076 #line 1308 "util/configparser.y"
4077     {
4078                 OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
4079                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
4080                         yyerror("buffer size expected");
4081                 free((yyvsp[0].str));
4082         }
4083 #line 4084 "util/configparser.c"
4084     break;
4085
4086   case 372:
4087 #line 1316 "util/configparser.y"
4088     {
4089                 OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
4090                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
4091                         yyerror("buffer size expected");
4092                 free((yyvsp[0].str));
4093         }
4094 #line 4095 "util/configparser.c"
4095     break;
4096
4097   case 373:
4098 #line 1324 "util/configparser.y"
4099     {
4100         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
4101         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4102             yyerror("expected yes or no.");
4103         else cfg_parser->cfg->so_reuseport =
4104             (strcmp((yyvsp[0].str), "yes")==0);
4105         free((yyvsp[0].str));
4106     }
4107 #line 4108 "util/configparser.c"
4108     break;
4109
4110   case 374:
4111 #line 1334 "util/configparser.y"
4112     {
4113         OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
4114         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4115             yyerror("expected yes or no.");
4116         else cfg_parser->cfg->ip_transparent =
4117             (strcmp((yyvsp[0].str), "yes")==0);
4118         free((yyvsp[0].str));
4119     }
4120 #line 4121 "util/configparser.c"
4121     break;
4122
4123   case 375:
4124 #line 1344 "util/configparser.y"
4125     {
4126         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
4127         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4128             yyerror("expected yes or no.");
4129         else cfg_parser->cfg->ip_freebind =
4130             (strcmp((yyvsp[0].str), "yes")==0);
4131         free((yyvsp[0].str));
4132     }
4133 #line 4134 "util/configparser.c"
4134     break;
4135
4136   case 376:
4137 #line 1354 "util/configparser.y"
4138     {
4139                 OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
4140                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4141                         yyerror("number expected");
4142                 else if (atoi((yyvsp[0].str)) > 63)
4143                         yyerror("value too large (max 63)");
4144                 else if (atoi((yyvsp[0].str)) < 0)
4145                         yyerror("value too small (min 0)");
4146                 else
4147                         cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
4148                 free((yyvsp[0].str));
4149         }
4150 #line 4151 "util/configparser.c"
4151     break;
4152
4153   case 377:
4154 #line 1368 "util/configparser.y"
4155     {
4156                 OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
4157                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
4158                         yyerror("memory size expected");
4159                 free((yyvsp[0].str));
4160         }
4161 #line 4162 "util/configparser.c"
4162     break;
4163
4164   case 378:
4165 #line 1376 "util/configparser.y"
4166     {
4167                 OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
4168                 if(atoi((yyvsp[0].str)) == 0)
4169                         yyerror("number expected");
4170                 else if (atoi((yyvsp[0].str)) < 12)
4171                         yyerror("edns buffer size too small");
4172                 else if (atoi((yyvsp[0].str)) > 65535)
4173                         cfg_parser->cfg->edns_buffer_size = 65535;
4174                 else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
4175                 free((yyvsp[0].str));
4176         }
4177 #line 4178 "util/configparser.c"
4178     break;
4179
4180   case 379:
4181 #line 1389 "util/configparser.y"
4182     {
4183                 OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
4184                 if(atoi((yyvsp[0].str)) == 0)
4185                         yyerror("number expected");
4186                 else if (atoi((yyvsp[0].str)) < 4096)
4187                         yyerror("message buffer size too small (use 4096)");
4188                 else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
4189                 free((yyvsp[0].str));
4190         }
4191 #line 4192 "util/configparser.c"
4192     break;
4193
4194   case 380:
4195 #line 1400 "util/configparser.y"
4196     {
4197                 OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
4198                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
4199                         yyerror("memory size expected");
4200                 free((yyvsp[0].str));
4201         }
4202 #line 4203 "util/configparser.c"
4203     break;
4204
4205   case 381:
4206 #line 1408 "util/configparser.y"
4207     {
4208                 OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
4209                 if(atoi((yyvsp[0].str)) == 0)
4210                         yyerror("number expected");
4211                 else {
4212                         cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
4213                         if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
4214                                 yyerror("must be a power of 2");
4215                 }
4216                 free((yyvsp[0].str));
4217         }
4218 #line 4219 "util/configparser.c"
4219     break;
4220
4221   case 382:
4222 #line 1421 "util/configparser.y"
4223     {
4224                 OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
4225                 if(atoi((yyvsp[0].str)) == 0)
4226                         yyerror("number expected");
4227                 else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
4228                 free((yyvsp[0].str));
4229         }
4230 #line 4231 "util/configparser.c"
4231     break;
4232
4233   case 383:
4234 #line 1430 "util/configparser.y"
4235     {
4236                 OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
4237                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4238                         yyerror("number expected");
4239                 else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
4240                 free((yyvsp[0].str));
4241         }
4242 #line 4243 "util/configparser.c"
4243     break;
4244
4245   case 384:
4246 #line 1439 "util/configparser.y"
4247     {
4248                 OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
4249                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4250                         yyerror("number expected");
4251                 else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
4252                 free((yyvsp[0].str));
4253         }
4254 #line 4255 "util/configparser.c"
4255     break;
4256
4257   case 385:
4258 #line 1448 "util/configparser.y"
4259     {
4260                 OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
4261                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4262                         yyerror("expected yes or no.");
4263                 else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
4264                 free((yyvsp[0].str));
4265         }
4266 #line 4267 "util/configparser.c"
4267     break;
4268
4269   case 386:
4270 #line 1457 "util/configparser.y"
4271     {
4272                 OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
4273                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4274                         yyerror("expected yes or no.");
4275                 else cfg_parser->cfg->unblock_lan_zones = 
4276                         (strcmp((yyvsp[0].str), "yes")==0);
4277                 free((yyvsp[0].str));
4278         }
4279 #line 4280 "util/configparser.c"
4280     break;
4281
4282   case 387:
4283 #line 1467 "util/configparser.y"
4284     {
4285                 OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
4286                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4287                         yyerror("expected yes or no.");
4288                 else cfg_parser->cfg->insecure_lan_zones = 
4289                         (strcmp((yyvsp[0].str), "yes")==0);
4290                 free((yyvsp[0].str));
4291         }
4292 #line 4293 "util/configparser.c"
4293     break;
4294
4295   case 388:
4296 #line 1477 "util/configparser.y"
4297     {
4298                 OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
4299                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
4300                         yyerror("memory size expected");
4301                 free((yyvsp[0].str));
4302         }
4303 #line 4304 "util/configparser.c"
4304     break;
4305
4306   case 389:
4307 #line 1485 "util/configparser.y"
4308     {
4309                 OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
4310                 if(atoi((yyvsp[0].str)) == 0)
4311                         yyerror("number expected");
4312                 else {
4313                         cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
4314                         if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
4315                                 yyerror("must be a power of 2");
4316                 }
4317                 free((yyvsp[0].str));
4318         }
4319 #line 4320 "util/configparser.c"
4320     break;
4321
4322   case 390:
4323 #line 1498 "util/configparser.y"
4324     {
4325                 OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
4326                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4327                         yyerror("number expected");
4328                 else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
4329                 free((yyvsp[0].str));
4330         }
4331 #line 4332 "util/configparser.c"
4332     break;
4333
4334   case 391:
4335 #line 1507 "util/configparser.y"
4336     {
4337                 OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
4338                 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
4339                         "removed, use infra-host-ttl)", (yyvsp[0].str));
4340                 free((yyvsp[0].str));
4341         }
4342 #line 4343 "util/configparser.c"
4343     break;
4344
4345   case 392:
4346 #line 1515 "util/configparser.y"
4347     {
4348                 OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
4349                 if(atoi((yyvsp[0].str)) == 0)
4350                         yyerror("number expected");
4351                 else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
4352                 free((yyvsp[0].str));
4353         }
4354 #line 4355 "util/configparser.c"
4355     break;
4356
4357   case 393:
4358 #line 1524 "util/configparser.y"
4359     {
4360                 OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
4361                 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
4362                         "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
4363                 free((yyvsp[0].str));
4364         }
4365 #line 4366 "util/configparser.c"
4366     break;
4367
4368   case 394:
4369 #line 1532 "util/configparser.y"
4370     {
4371                 OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
4372                 if(atoi((yyvsp[0].str)) == 0)
4373                         yyerror("number expected");
4374                 else {
4375                         cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
4376                         if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
4377                                 yyerror("must be a power of 2");
4378                 }
4379                 free((yyvsp[0].str));
4380         }
4381 #line 4382 "util/configparser.c"
4382     break;
4383
4384   case 395:
4385 #line 1545 "util/configparser.y"
4386     {
4387                 OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
4388                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4389                         yyerror("number expected");
4390                 else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
4391                 free((yyvsp[0].str));
4392         }
4393 #line 4394 "util/configparser.c"
4394     break;
4395
4396   case 396:
4397 #line 1554 "util/configparser.y"
4398     {
4399                 OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
4400                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4401                         yyerror("expected yes or no.");
4402                 else cfg_parser->cfg->infra_keep_probing =
4403                         (strcmp((yyvsp[0].str), "yes")==0);
4404                 free((yyvsp[0].str));
4405         }
4406 #line 4407 "util/configparser.c"
4407     break;
4408
4409   case 397:
4410 #line 1564 "util/configparser.y"
4411     {
4412                 OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
4413                 free(cfg_parser->cfg->target_fetch_policy);
4414                 cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
4415         }
4416 #line 4417 "util/configparser.c"
4417     break;
4418
4419   case 398:
4420 #line 1571 "util/configparser.y"
4421     {
4422                 OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
4423                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4424                         yyerror("expected yes or no.");
4425                 else cfg_parser->cfg->harden_short_bufsize = 
4426                         (strcmp((yyvsp[0].str), "yes")==0);
4427                 free((yyvsp[0].str));
4428         }
4429 #line 4430 "util/configparser.c"
4430     break;
4431
4432   case 399:
4433 #line 1581 "util/configparser.y"
4434     {
4435                 OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
4436                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4437                         yyerror("expected yes or no.");
4438                 else cfg_parser->cfg->harden_large_queries = 
4439                         (strcmp((yyvsp[0].str), "yes")==0);
4440                 free((yyvsp[0].str));
4441         }
4442 #line 4443 "util/configparser.c"
4443     break;
4444
4445   case 400:
4446 #line 1591 "util/configparser.y"
4447     {
4448                 OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
4449                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4450                         yyerror("expected yes or no.");
4451                 else cfg_parser->cfg->harden_glue = 
4452                         (strcmp((yyvsp[0].str), "yes")==0);
4453                 free((yyvsp[0].str));
4454         }
4455 #line 4456 "util/configparser.c"
4456     break;
4457
4458   case 401:
4459 #line 1601 "util/configparser.y"
4460     {
4461                 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
4462                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4463                         yyerror("expected yes or no.");
4464                 else cfg_parser->cfg->harden_dnssec_stripped = 
4465                         (strcmp((yyvsp[0].str), "yes")==0);
4466                 free((yyvsp[0].str));
4467         }
4468 #line 4469 "util/configparser.c"
4469     break;
4470
4471   case 402:
4472 #line 1611 "util/configparser.y"
4473     {
4474                 OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
4475                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4476                         yyerror("expected yes or no.");
4477                 else cfg_parser->cfg->harden_below_nxdomain = 
4478                         (strcmp((yyvsp[0].str), "yes")==0);
4479                 free((yyvsp[0].str));
4480         }
4481 #line 4482 "util/configparser.c"
4482     break;
4483
4484   case 403:
4485 #line 1621 "util/configparser.y"
4486     {
4487                 OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
4488                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4489                         yyerror("expected yes or no.");
4490                 else cfg_parser->cfg->harden_referral_path = 
4491                         (strcmp((yyvsp[0].str), "yes")==0);
4492                 free((yyvsp[0].str));
4493         }
4494 #line 4495 "util/configparser.c"
4495     break;
4496
4497   case 404:
4498 #line 1631 "util/configparser.y"
4499     {
4500                 OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
4501                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4502                         yyerror("expected yes or no.");
4503                 else cfg_parser->cfg->harden_algo_downgrade = 
4504                         (strcmp((yyvsp[0].str), "yes")==0);
4505                 free((yyvsp[0].str));
4506         }
4507 #line 4508 "util/configparser.c"
4508     break;
4509
4510   case 405:
4511 #line 1641 "util/configparser.y"
4512     {
4513                 OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
4514                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4515                         yyerror("expected yes or no.");
4516                 else cfg_parser->cfg->use_caps_bits_for_id = 
4517                         (strcmp((yyvsp[0].str), "yes")==0);
4518                 free((yyvsp[0].str));
4519         }
4520 #line 4521 "util/configparser.c"
4521     break;
4522
4523   case 406:
4524 #line 1651 "util/configparser.y"
4525     {
4526                 OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
4527                 if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
4528                         yyerror("out of memory");
4529         }
4530 #line 4531 "util/configparser.c"
4531     break;
4532
4533   case 407:
4534 #line 1658 "util/configparser.y"
4535     {
4536                 OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
4537                 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
4538                         yyerror("out of memory");
4539         }
4540 #line 4541 "util/configparser.c"
4541     break;
4542
4543   case 408:
4544 #line 1665 "util/configparser.y"
4545     {
4546                 OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
4547                 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
4548                         yyerror("out of memory");
4549         }
4550 #line 4551 "util/configparser.c"
4551     break;
4552
4553   case 409:
4554 #line 1672 "util/configparser.y"
4555     {
4556                 OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
4557                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4558                         yyerror("expected yes or no.");
4559                 else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
4560                 free((yyvsp[0].str));
4561         }
4562 #line 4563 "util/configparser.c"
4563     break;
4564
4565   case 410:
4566 #line 1681 "util/configparser.y"
4567     {
4568                 OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
4569                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4570                         yyerror("expected yes or no.");
4571                 else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
4572                 free((yyvsp[0].str));
4573         }
4574 #line 4575 "util/configparser.c"
4575     break;
4576
4577   case 411:
4578 #line 1690 "util/configparser.y"
4579     {
4580                 OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
4581                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4582                         yyerror("expected yes or no.");
4583                 else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
4584                 free((yyvsp[0].str));
4585         }
4586 #line 4587 "util/configparser.c"
4587     break;
4588
4589   case 412:
4590 #line 1699 "util/configparser.y"
4591     {
4592                 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
4593                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4594                         yyerror("number expected");
4595                 else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
4596                 free((yyvsp[0].str));
4597         }
4598 #line 4599 "util/configparser.c"
4599     break;
4600
4601   case 413:
4602 #line 1708 "util/configparser.y"
4603     {
4604                 OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
4605                 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
4606                         yyerror("out of memory");
4607         }
4608 #line 4609 "util/configparser.c"
4609     break;
4610
4611   case 414:
4612 #line 1715 "util/configparser.y"
4613     {
4614                 OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
4615                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4616                         yyerror("expected yes or no.");
4617                 else cfg_parser->cfg->donotquery_localhost = 
4618                         (strcmp((yyvsp[0].str), "yes")==0);
4619                 free((yyvsp[0].str));
4620         }
4621 #line 4622 "util/configparser.c"
4622     break;
4623
4624   case 415:
4625 #line 1725 "util/configparser.y"
4626     {
4627                 OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
4628                 if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
4629                         strcmp((yyvsp[0].str), "deny_non_local")!=0 &&
4630                         strcmp((yyvsp[0].str), "refuse_non_local")!=0 &&
4631                         strcmp((yyvsp[0].str), "allow_setrd")!=0 && 
4632                         strcmp((yyvsp[0].str), "allow")!=0 && 
4633                         strcmp((yyvsp[0].str), "allow_snoop")!=0) {
4634                         yyerror("expected deny, refuse, deny_non_local, "
4635                                 "refuse_non_local, allow, allow_setrd or "
4636                                 "allow_snoop in access control action");
4637                         free((yyvsp[-1].str));
4638                         free((yyvsp[0].str));
4639                 } else {
4640                         if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
4641                                 fatal_exit("out of memory adding acl");
4642                 }
4643         }
4644 #line 4645 "util/configparser.c"
4645     break;
4646
4647   case 416:
4648 #line 1745 "util/configparser.y"
4649     {
4650                 OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
4651                 free(cfg_parser->cfg->module_conf);
4652                 cfg_parser->cfg->module_conf = (yyvsp[0].str);
4653         }
4654 #line 4655 "util/configparser.c"
4655     break;
4656
4657   case 417:
4658 #line 1752 "util/configparser.y"
4659     {
4660                 OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
4661                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
4662                         cfg_parser->cfg->val_date_override = 0;
4663                 } else if(strlen((yyvsp[0].str)) == 14) {
4664                         cfg_parser->cfg->val_date_override = 
4665                                 cfg_convert_timeval((yyvsp[0].str));
4666                         if(!cfg_parser->cfg->val_date_override)
4667                                 yyerror("bad date/time specification");
4668                 } else {
4669                         if(atoi((yyvsp[0].str)) == 0)
4670                                 yyerror("number expected");
4671                         cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str));
4672                 }
4673                 free((yyvsp[0].str));
4674         }
4675 #line 4676 "util/configparser.c"
4676     break;
4677
4678   case 418:
4679 #line 1770 "util/configparser.y"
4680     {
4681                 OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
4682                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
4683                         cfg_parser->cfg->val_sig_skew_min = 0;
4684                 } else {
4685                         cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str));
4686                         if(!cfg_parser->cfg->val_sig_skew_min)
4687                                 yyerror("number expected");
4688                 }
4689                 free((yyvsp[0].str));
4690         }
4691 #line 4692 "util/configparser.c"
4692     break;
4693
4694   case 419:
4695 #line 1783 "util/configparser.y"
4696     {
4697                 OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
4698                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
4699                         cfg_parser->cfg->val_sig_skew_max = 0;
4700                 } else {
4701                         cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str));
4702                         if(!cfg_parser->cfg->val_sig_skew_max)
4703                                 yyerror("number expected");
4704                 }
4705                 free((yyvsp[0].str));
4706         }
4707 #line 4708 "util/configparser.c"
4708     break;
4709
4710   case 420:
4711 #line 1796 "util/configparser.y"
4712     {
4713                 OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
4714                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4715                         yyerror("number expected");
4716                 else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
4717                 free((yyvsp[0].str));
4718         }
4719 #line 4720 "util/configparser.c"
4720     break;
4721
4722   case 421:
4723 #line 1805 "util/configparser.y"
4724     {
4725                 OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
4726                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4727                         yyerror("number expected");
4728                 else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
4729                 free((yyvsp[0].str));
4730         }
4731 #line 4732 "util/configparser.c"
4732     break;
4733
4734   case 422:
4735 #line 1814 "util/configparser.y"
4736     {
4737                 OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
4738                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4739                         yyerror("number expected");
4740                 else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
4741                 free((yyvsp[0].str));
4742         }
4743 #line 4744 "util/configparser.c"
4744     break;
4745
4746   case 423:
4747 #line 1823 "util/configparser.y"
4748     {
4749                 OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
4750                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4751                         yyerror("number expected");
4752                 else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
4753                 free((yyvsp[0].str));
4754         }
4755 #line 4756 "util/configparser.c"
4756     break;
4757
4758   case 424:
4759 #line 1832 "util/configparser.y"
4760     {
4761                 OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
4762                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4763                         yyerror("expected yes or no.");
4764                 else cfg_parser->cfg->val_clean_additional = 
4765                         (strcmp((yyvsp[0].str), "yes")==0);
4766                 free((yyvsp[0].str));
4767         }
4768 #line 4769 "util/configparser.c"
4769     break;
4770
4771   case 425:
4772 #line 1842 "util/configparser.y"
4773     {
4774                 OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
4775                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4776                         yyerror("expected yes or no.");
4777                 else cfg_parser->cfg->val_permissive_mode = 
4778                         (strcmp((yyvsp[0].str), "yes")==0);
4779                 free((yyvsp[0].str));
4780         }
4781 #line 4782 "util/configparser.c"
4782     break;
4783
4784   case 426:
4785 #line 1852 "util/configparser.y"
4786     {
4787                 OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
4788                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4789                         yyerror("expected yes or no.");
4790                 else
4791                         cfg_parser->cfg->aggressive_nsec =
4792                                 (strcmp((yyvsp[0].str), "yes")==0);
4793                 free((yyvsp[0].str));
4794         }
4795 #line 4796 "util/configparser.c"
4796     break;
4797
4798   case 427:
4799 #line 1863 "util/configparser.y"
4800     {
4801                 OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
4802                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4803                         yyerror("expected yes or no.");
4804                 else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
4805                 free((yyvsp[0].str));
4806         }
4807 #line 4808 "util/configparser.c"
4808     break;
4809
4810   case 428:
4811 #line 1872 "util/configparser.y"
4812     {
4813                 OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
4814                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4815                         yyerror("expected yes or no.");
4816                 else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
4817                 free((yyvsp[0].str));
4818         }
4819 #line 4820 "util/configparser.c"
4820     break;
4821
4822   case 429:
4823 #line 1881 "util/configparser.y"
4824     {
4825                 OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
4826                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4827                         yyerror("number expected");
4828                 else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
4829                 free((yyvsp[0].str));
4830         }
4831 #line 4832 "util/configparser.c"
4832     break;
4833
4834   case 430:
4835 #line 1890 "util/configparser.y"
4836     {
4837                 OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
4838                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4839                         yyerror("expected yes or no.");
4840                 else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
4841                 free((yyvsp[0].str));
4842         }
4843 #line 4844 "util/configparser.c"
4844     break;
4845
4846   case 431:
4847 #line 1899 "util/configparser.y"
4848     {
4849                 OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
4850                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4851                         yyerror("number expected");
4852                 else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
4853                 free((yyvsp[0].str));
4854         }
4855 #line 4856 "util/configparser.c"
4856     break;
4857
4858   case 432:
4859 #line 1908 "util/configparser.y"
4860     {
4861                 OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
4862                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4863                         yyerror("number expected");
4864                 else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
4865                 free((yyvsp[0].str));
4866         }
4867 #line 4868 "util/configparser.c"
4868     break;
4869
4870   case 433:
4871 #line 1917 "util/configparser.y"
4872     {
4873                 OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
4874                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4875                         yyerror("expected yes or no.");
4876 #if defined(HAVE_SSL) || defined(HAVE_NETTLE)
4877                 else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0);
4878                 if(fake_dsa)
4879                         log_warn("test option fake_dsa is enabled");
4880 #endif
4881                 free((yyvsp[0].str));
4882         }
4883 #line 4884 "util/configparser.c"
4884     break;
4885
4886   case 434:
4887 #line 1930 "util/configparser.y"
4888     {
4889                 OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
4890                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4891                         yyerror("expected yes or no.");
4892 #if defined(HAVE_SSL) || defined(HAVE_NETTLE)
4893                 else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0);
4894                 if(fake_sha1)
4895                         log_warn("test option fake_sha1 is enabled");
4896 #endif
4897                 free((yyvsp[0].str));
4898         }
4899 #line 4900 "util/configparser.c"
4900     break;
4901
4902   case 435:
4903 #line 1943 "util/configparser.y"
4904     {
4905                 OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
4906                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4907                         yyerror("number expected");
4908                 else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
4909                 free((yyvsp[0].str));
4910         }
4911 #line 4912 "util/configparser.c"
4912     break;
4913
4914   case 436:
4915 #line 1952 "util/configparser.y"
4916     {
4917                 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
4918                 free(cfg_parser->cfg->val_nsec3_key_iterations);
4919                 cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
4920         }
4921 #line 4922 "util/configparser.c"
4922     break;
4923
4924   case 437:
4925 #line 1959 "util/configparser.y"
4926     {
4927                 OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
4928                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4929                         yyerror("number expected");
4930                 else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
4931                 free((yyvsp[0].str));
4932         }
4933 #line 4934 "util/configparser.c"
4934     break;
4935
4936   case 438:
4937 #line 1968 "util/configparser.y"
4938     {
4939                 OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
4940                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4941                         yyerror("number expected");
4942                 else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
4943                 free((yyvsp[0].str));
4944         }
4945 #line 4946 "util/configparser.c"
4946     break;
4947
4948   case 439:
4949 #line 1977 "util/configparser.y"
4950     {
4951                 OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
4952                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4953                         yyerror("number expected");
4954                 else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
4955                 free((yyvsp[0].str));
4956         }
4957 #line 4958 "util/configparser.c"
4958     break;
4959
4960   case 440:
4961 #line 1986 "util/configparser.y"
4962     {
4963                 OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
4964                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4965                         yyerror("expected yes or no.");
4966                 else cfg_parser->cfg->permit_small_holddown =
4967                         (strcmp((yyvsp[0].str), "yes")==0);
4968                 free((yyvsp[0].str));
4969         }
4970 #line 4971 "util/configparser.c"
4971     break;
4972
4973   case 441:
4974 #line 1995 "util/configparser.y"
4975     {
4976                 OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
4977                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
4978                         yyerror("memory size expected");
4979                 free((yyvsp[0].str));
4980         }
4981 #line 4982 "util/configparser.c"
4982     break;
4983
4984   case 442:
4985 #line 2003 "util/configparser.y"
4986     {
4987                 OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
4988                 if(atoi((yyvsp[0].str)) == 0)
4989                         yyerror("number expected");
4990                 else {
4991                         cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
4992                         if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
4993                                 yyerror("must be a power of 2");
4994                 }
4995                 free((yyvsp[0].str));
4996         }
4997 #line 4998 "util/configparser.c"
4998     break;
4999
5000   case 443:
5001 #line 2016 "util/configparser.y"
5002     {
5003                 OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
5004                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
5005                         yyerror("memory size expected");
5006                 free((yyvsp[0].str));
5007         }
5008 #line 5009 "util/configparser.c"
5009     break;
5010
5011   case 444:
5012 #line 2024 "util/configparser.y"
5013     {
5014                 OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5015                 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
5016                    strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
5017                    strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
5018                    && strcmp((yyvsp[0].str), "typetransparent")!=0
5019                    && strcmp((yyvsp[0].str), "always_transparent")!=0
5020                    && strcmp((yyvsp[0].str), "always_refuse")!=0
5021                    && strcmp((yyvsp[0].str), "always_nxdomain")!=0
5022                    && strcmp((yyvsp[0].str), "noview")!=0
5023                    && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
5024                    && strcmp((yyvsp[0].str), "inform_redirect") != 0
5025                          && strcmp((yyvsp[0].str), "ipset") != 0) {
5026                         yyerror("local-zone type: expected static, deny, "
5027                                 "refuse, redirect, transparent, "
5028                                 "typetransparent, inform, inform_deny, "
5029                                 "inform_redirect, always_transparent, "
5030                                 "always_refuse, always_nxdomain, noview "
5031                                 ", nodefault or ipset");
5032                         free((yyvsp[-1].str));
5033                         free((yyvsp[0].str));
5034                 } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
5035                         if(!cfg_strlist_insert(&cfg_parser->cfg->
5036                                 local_zones_nodefault, (yyvsp[-1].str)))
5037                                 fatal_exit("out of memory adding local-zone");
5038                         free((yyvsp[0].str));
5039 #ifdef USE_IPSET
5040                 } else if(strcmp((yyvsp[0].str), "ipset")==0) {
5041                         if(!cfg_strlist_insert(&cfg_parser->cfg->
5042                                 local_zones_ipset, (yyvsp[-1].str)))
5043                                 fatal_exit("out of memory adding local-zone");
5044                         free((yyvsp[0].str));
5045 #endif
5046                 } else {
5047                         if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 
5048                                 (yyvsp[-1].str), (yyvsp[0].str)))
5049                                 fatal_exit("out of memory adding local-zone");
5050                 }
5051         }
5052 #line 5053 "util/configparser.c"
5053     break;
5054
5055   case 445:
5056 #line 2065 "util/configparser.y"
5057     {
5058                 OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
5059                 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
5060                         fatal_exit("out of memory adding local-data");
5061         }
5062 #line 5063 "util/configparser.c"
5063     break;
5064
5065   case 446:
5066 #line 2072 "util/configparser.y"
5067     {
5068                 char* ptr;
5069                 OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
5070                 ptr = cfg_ptr_reverse((yyvsp[0].str));
5071                 free((yyvsp[0].str));
5072                 if(ptr) {
5073                         if(!cfg_strlist_insert(&cfg_parser->cfg->
5074                                 local_data, ptr))
5075                                 fatal_exit("out of memory adding local-data");
5076                 } else {
5077                         yyerror("local-data-ptr could not be reversed");
5078                 }
5079         }
5080 #line 5081 "util/configparser.c"
5081     break;
5082
5083   case 447:
5084 #line 2087 "util/configparser.y"
5085     {
5086                 OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
5087                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5088                         yyerror("expected yes or no.");
5089                 else cfg_parser->cfg->minimal_responses =
5090                         (strcmp((yyvsp[0].str), "yes")==0);
5091                 free((yyvsp[0].str));
5092         }
5093 #line 5094 "util/configparser.c"
5094     break;
5095
5096   case 448:
5097 #line 2097 "util/configparser.y"
5098     {
5099                 OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
5100                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5101                         yyerror("expected yes or no.");
5102                 else cfg_parser->cfg->rrset_roundrobin =
5103                         (strcmp((yyvsp[0].str), "yes")==0);
5104                 free((yyvsp[0].str));
5105         }
5106 #line 5107 "util/configparser.c"
5107     break;
5108
5109   case 449:
5110 #line 2107 "util/configparser.y"
5111     {
5112                 OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
5113                 cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
5114                 free((yyvsp[0].str));
5115         }
5116 #line 5117 "util/configparser.c"
5117     break;
5118
5119   case 450:
5120 #line 2114 "util/configparser.y"
5121     {
5122                 OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
5123                 cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
5124                 free((yyvsp[0].str));
5125         }
5126 #line 5127 "util/configparser.c"
5127     break;
5128
5129   case 451:
5130 #line 2121 "util/configparser.y"
5131     {
5132                 OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
5133                 free(cfg_parser->cfg->dns64_prefix);
5134                 cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
5135         }
5136 #line 5137 "util/configparser.c"
5137     break;
5138
5139   case 452:
5140 #line 2128 "util/configparser.y"
5141     {
5142                 OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
5143                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5144                         yyerror("expected yes or no.");
5145                 else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
5146                 free((yyvsp[0].str));
5147         }
5148 #line 5149 "util/configparser.c"
5149     break;
5150
5151   case 453:
5152 #line 2137 "util/configparser.y"
5153     {
5154                 OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
5155                 if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
5156                         (yyvsp[0].str)))
5157                         fatal_exit("out of memory adding dns64-ignore-aaaa");
5158         }
5159 #line 5160 "util/configparser.c"
5160     break;
5161
5162   case 454:
5163 #line 2145 "util/configparser.y"
5164     {
5165                 char* p, *s = (yyvsp[0].str);
5166                 OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
5167                 while((p=strsep(&s, " \t\n")) != NULL) {
5168                         if(*p) {
5169                                 if(!config_add_tag(cfg_parser->cfg, p))
5170                                         yyerror("could not define-tag, "
5171                                                 "out of memory");
5172                         }
5173                 }
5174                 free((yyvsp[0].str));
5175         }
5176 #line 5177 "util/configparser.c"
5177     break;
5178
5179   case 455:
5180 #line 2159 "util/configparser.y"
5181     {
5182                 size_t len = 0;
5183                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5184                         &len);
5185                 free((yyvsp[0].str));
5186                 OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
5187                 if(!bitlist) {
5188                         yyerror("could not parse tags, (define-tag them first)");
5189                         free((yyvsp[-1].str));
5190                 }
5191                 if(bitlist) {
5192                         if(!cfg_strbytelist_insert(
5193                                 &cfg_parser->cfg->local_zone_tags,
5194                                 (yyvsp[-1].str), bitlist, len)) {
5195                                 yyerror("out of memory");
5196                                 free((yyvsp[-1].str));
5197                         }
5198                 }
5199         }
5200 #line 5201 "util/configparser.c"
5201     break;
5202
5203   case 456:
5204 #line 2180 "util/configparser.y"
5205     {
5206                 size_t len = 0;
5207                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5208                         &len);
5209                 free((yyvsp[0].str));
5210                 OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
5211                 if(!bitlist) {
5212                         yyerror("could not parse tags, (define-tag them first)");
5213                         free((yyvsp[-1].str));
5214                 }
5215                 if(bitlist) {
5216                         if(!cfg_strbytelist_insert(
5217                                 &cfg_parser->cfg->acl_tags,
5218                                 (yyvsp[-1].str), bitlist, len)) {
5219                                 yyerror("out of memory");
5220                                 free((yyvsp[-1].str));
5221                         }
5222                 }
5223         }
5224 #line 5225 "util/configparser.c"
5225     break;
5226
5227   case 457:
5228 #line 2201 "util/configparser.y"
5229     {
5230                 OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5231                 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
5232                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5233                         yyerror("out of memory");
5234                         free((yyvsp[-2].str));
5235                         free((yyvsp[-1].str));
5236                         free((yyvsp[0].str));
5237                 }
5238         }
5239 #line 5240 "util/configparser.c"
5240     break;
5241
5242   case 458:
5243 #line 2213 "util/configparser.y"
5244     {
5245                 OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5246                 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
5247                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5248                         yyerror("out of memory");
5249                         free((yyvsp[-2].str));
5250                         free((yyvsp[-1].str));
5251                         free((yyvsp[0].str));
5252                 }
5253         }
5254 #line 5255 "util/configparser.c"
5255     break;
5256
5257   case 459:
5258 #line 2225 "util/configparser.y"
5259     {
5260                 OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5261                 if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
5262                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5263                         yyerror("out of memory");
5264                         free((yyvsp[-2].str));
5265                         free((yyvsp[-1].str));
5266                         free((yyvsp[0].str));
5267                 }
5268         }
5269 #line 5270 "util/configparser.c"
5270     break;
5271
5272   case 460:
5273 #line 2237 "util/configparser.y"
5274     {
5275                 OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5276                 if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
5277                         (yyvsp[-1].str), (yyvsp[0].str))) {
5278                         yyerror("out of memory");
5279                 }
5280         }
5281 #line 5282 "util/configparser.c"
5282     break;
5283
5284   case 461:
5285 #line 2246 "util/configparser.y"
5286     {
5287                 size_t len = 0;
5288                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5289                         &len);
5290                 free((yyvsp[0].str));
5291                 OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str)));
5292                 if(!bitlist) {
5293                         yyerror("could not parse tags, (define-tag them first)");
5294                         free((yyvsp[-1].str));
5295                 }
5296                 if(bitlist) {
5297                         if(!cfg_strbytelist_insert(
5298                                 &cfg_parser->cfg->respip_tags,
5299                                 (yyvsp[-1].str), bitlist, len)) {
5300                                 yyerror("out of memory");
5301                                 free((yyvsp[-1].str));
5302                         }
5303                 }
5304         }
5305 #line 5306 "util/configparser.c"
5306     break;
5307
5308   case 462:
5309 #line 2267 "util/configparser.y"
5310     { 
5311                 OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); 
5312                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5313                         yyerror("number expected");
5314                 else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
5315                 free((yyvsp[0].str));
5316         }
5317 #line 5318 "util/configparser.c"
5318     break;
5319
5320   case 463:
5321 #line 2277 "util/configparser.y"
5322     { 
5323                 OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
5324                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5325                         yyerror("number expected");
5326                 else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
5327                 free((yyvsp[0].str));
5328         }
5329 #line 5330 "util/configparser.c"
5330     break;
5331
5332   case 464:
5333 #line 2286 "util/configparser.y"
5334     {
5335         OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
5336         if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
5337                 yyerror("memory size expected");
5338         free((yyvsp[0].str));
5339   }
5340 #line 5341 "util/configparser.c"
5341     break;
5342
5343   case 465:
5344 #line 2294 "util/configparser.y"
5345     {
5346                 OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
5347                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
5348                         yyerror("memory size expected");
5349                 free((yyvsp[0].str));
5350         }
5351 #line 5352 "util/configparser.c"
5352     break;
5353
5354   case 466:
5355 #line 2302 "util/configparser.y"
5356     {
5357         OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
5358         if(atoi((yyvsp[0].str)) == 0)
5359                 yyerror("number expected");
5360         else {
5361                 cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
5362                 if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
5363                         yyerror("must be a power of 2");
5364         }
5365         free((yyvsp[0].str));
5366   }
5367 #line 5368 "util/configparser.c"
5368     break;
5369
5370   case 467:
5371 #line 2315 "util/configparser.y"
5372     {
5373                 OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
5374                 if(atoi((yyvsp[0].str)) == 0)
5375                         yyerror("number expected");
5376                 else {
5377                         cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
5378                         if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
5379                                 yyerror("must be a power of 2");
5380                 }
5381                 free((yyvsp[0].str));
5382         }
5383 #line 5384 "util/configparser.c"
5384     break;
5385
5386   case 468:
5387 #line 2328 "util/configparser.y"
5388     {
5389                 OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5390                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
5391                         yyerror("number expected");
5392                         free((yyvsp[-1].str));
5393                         free((yyvsp[0].str));
5394                 } else {
5395                         if(!cfg_str2list_insert(&cfg_parser->cfg->
5396                                 ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
5397                                 fatal_exit("out of memory adding "
5398                                         "ratelimit-for-domain");
5399                 }
5400         }
5401 #line 5402 "util/configparser.c"
5402     break;
5403
5404   case 469:
5405 #line 2343 "util/configparser.y"
5406     {
5407                 OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5408                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
5409                         yyerror("number expected");
5410                         free((yyvsp[-1].str));
5411                         free((yyvsp[0].str));
5412                 } else {
5413                         if(!cfg_str2list_insert(&cfg_parser->cfg->
5414                                 ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
5415                                 fatal_exit("out of memory adding "
5416                                         "ratelimit-below-domain");
5417                 }
5418         }
5419 #line 5420 "util/configparser.c"
5420     break;
5421
5422   case 470:
5423 #line 2358 "util/configparser.y"
5424     { 
5425         OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
5426         if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5427                 yyerror("number expected");
5428         else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
5429         free((yyvsp[0].str));
5430         }
5431 #line 5432 "util/configparser.c"
5432     break;
5433
5434   case 471:
5435 #line 2367 "util/configparser.y"
5436     { 
5437                 OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
5438                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5439                         yyerror("number expected");
5440                 else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
5441                 free((yyvsp[0].str));
5442         }
5443 #line 5444 "util/configparser.c"
5444     break;
5445
5446   case 472:
5447 #line 2376 "util/configparser.y"
5448     { 
5449                 OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
5450                 free((yyvsp[0].str));
5451         }
5452 #line 5453 "util/configparser.c"
5453     break;
5454
5455   case 473:
5456 #line 2382 "util/configparser.y"
5457     { 
5458                 OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); 
5459                 if(atoi((yyvsp[0].str)) <= 0)
5460                         yyerror("number expected");
5461                 else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
5462                 free((yyvsp[0].str));
5463         }
5464 #line 5465 "util/configparser.c"
5465     break;
5466
5467   case 474:
5468 #line 2391 "util/configparser.y"
5469     { 
5470                 OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); 
5471                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5472                         yyerror("number expected");
5473                 else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
5474                 free((yyvsp[0].str));
5475         }
5476 #line 5477 "util/configparser.c"
5477     break;
5478
5479   case 475:
5480 #line 2400 "util/configparser.y"
5481     {
5482                 OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
5483                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5484                         yyerror("expected yes or no.");
5485                 else cfg_parser->cfg->qname_minimisation = 
5486                         (strcmp((yyvsp[0].str), "yes")==0);
5487                 free((yyvsp[0].str));
5488         }
5489 #line 5490 "util/configparser.c"
5490     break;
5491
5492   case 476:
5493 #line 2410 "util/configparser.y"
5494     {
5495                 OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
5496                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5497                         yyerror("expected yes or no.");
5498                 else cfg_parser->cfg->qname_minimisation_strict = 
5499                         (strcmp((yyvsp[0].str), "yes")==0);
5500                 free((yyvsp[0].str));
5501         }
5502 #line 5503 "util/configparser.c"
5503     break;
5504
5505   case 477:
5506 #line 2420 "util/configparser.y"
5507     {
5508         #ifdef USE_IPSECMOD
5509                 OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
5510                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5511                         yyerror("expected yes or no.");
5512                 else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0);
5513         #else
5514                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
5515         #endif
5516                 free((yyvsp[0].str));
5517         }
5518 #line 5519 "util/configparser.c"
5519     break;
5520
5521   case 478:
5522 #line 2433 "util/configparser.y"
5523     {
5524         #ifdef USE_IPSECMOD
5525                 OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
5526                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5527                         yyerror("expected yes or no.");
5528                 else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0);
5529         #else
5530                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
5531         #endif
5532                 free((yyvsp[0].str));
5533         }
5534 #line 5535 "util/configparser.c"
5535     break;
5536
5537   case 479:
5538 #line 2446 "util/configparser.y"
5539     {
5540         #ifdef USE_IPSECMOD
5541                 OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
5542                 free(cfg_parser->cfg->ipsecmod_hook);
5543                 cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str);
5544         #else
5545                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
5546                 free((yyvsp[0].str));
5547         #endif
5548         }
5549 #line 5550 "util/configparser.c"
5550     break;
5551
5552   case 480:
5553 #line 2458 "util/configparser.y"
5554     {
5555         #ifdef USE_IPSECMOD
5556                 OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
5557                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5558                         yyerror("number expected");
5559                 else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str));
5560                 free((yyvsp[0].str));
5561         #else
5562                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
5563                 free((yyvsp[0].str));
5564         #endif
5565         }
5566 #line 5567 "util/configparser.c"
5567     break;
5568
5569   case 481:
5570 #line 2472 "util/configparser.y"
5571     {
5572         #ifdef USE_IPSECMOD
5573                 OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
5574                 if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str)))
5575                         yyerror("out of memory");
5576         #else
5577                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
5578                 free((yyvsp[0].str));
5579         #endif
5580         }
5581 #line 5582 "util/configparser.c"
5582     break;
5583
5584   case 482:
5585 #line 2484 "util/configparser.y"
5586     {
5587         #ifdef USE_IPSECMOD
5588                 OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
5589                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5590                         yyerror("expected yes or no.");
5591                 else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0);
5592                 free((yyvsp[0].str));
5593         #else
5594                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
5595                 free((yyvsp[0].str));
5596         #endif
5597         }
5598 #line 5599 "util/configparser.c"
5599     break;
5600
5601   case 483:
5602 #line 2498 "util/configparser.y"
5603     {
5604                 OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5605                 if(!cfg_str2list_insert(
5606                         &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
5607                         fatal_exit("out of memory adding "
5608                                 "edns-client-string");
5609         }
5610 #line 5611 "util/configparser.c"
5611     break;
5612
5613   case 484:
5614 #line 2507 "util/configparser.y"
5615     {
5616                 OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
5617                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5618                         yyerror("option code expected");
5619                 else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
5620                         yyerror("option code must be in interval [0, 65535]");
5621                 else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
5622                 free((yyvsp[0].str));
5623
5624         }
5625 #line 5626 "util/configparser.c"
5626     break;
5627
5628   case 485:
5629 #line 2519 "util/configparser.y"
5630     {
5631                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
5632                 if(cfg_parser->cfg->stubs->name)
5633                         yyerror("stub name override, there must be one name "
5634                                 "for one stub-zone");
5635                 free(cfg_parser->cfg->stubs->name);
5636                 cfg_parser->cfg->stubs->name = (yyvsp[0].str);
5637         }
5638 #line 5639 "util/configparser.c"
5639     break;
5640
5641   case 486:
5642 #line 2529 "util/configparser.y"
5643     {
5644                 OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
5645                 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
5646                         yyerror("out of memory");
5647         }
5648 #line 5649 "util/configparser.c"
5649     break;
5650
5651   case 487:
5652 #line 2536 "util/configparser.y"
5653     {
5654                 OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
5655                 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
5656                         yyerror("out of memory");
5657         }
5658 #line 5659 "util/configparser.c"
5659     break;
5660
5661   case 488:
5662 #line 2543 "util/configparser.y"
5663     {
5664                 OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
5665                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5666                         yyerror("expected yes or no.");
5667                 else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
5668                 free((yyvsp[0].str));
5669         }
5670 #line 5671 "util/configparser.c"
5671     break;
5672
5673   case 489:
5674 #line 2552 "util/configparser.y"
5675     {
5676                 OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
5677                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5678                         yyerror("expected yes or no.");
5679                 else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
5680                 free((yyvsp[0].str));
5681         }
5682 #line 5683 "util/configparser.c"
5683     break;
5684
5685   case 490:
5686 #line 2561 "util/configparser.y"
5687     {
5688                 OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
5689                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5690                         yyerror("expected yes or no.");
5691                 else cfg_parser->cfg->stubs->ssl_upstream = 
5692                         (strcmp((yyvsp[0].str), "yes")==0);
5693                 free((yyvsp[0].str));
5694         }
5695 #line 5696 "util/configparser.c"
5696     break;
5697
5698   case 491:
5699 #line 2571 "util/configparser.y"
5700     {
5701                 OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
5702                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5703                         yyerror("expected yes or no.");
5704                 else cfg_parser->cfg->stubs->isprime = 
5705                         (strcmp((yyvsp[0].str), "yes")==0);
5706                 free((yyvsp[0].str));
5707         }
5708 #line 5709 "util/configparser.c"
5709     break;
5710
5711   case 492:
5712 #line 2581 "util/configparser.y"
5713     {
5714                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
5715                 if(cfg_parser->cfg->forwards->name)
5716                         yyerror("forward name override, there must be one "
5717                                 "name for one forward-zone");
5718                 free(cfg_parser->cfg->forwards->name);
5719                 cfg_parser->cfg->forwards->name = (yyvsp[0].str);
5720         }
5721 #line 5722 "util/configparser.c"
5722     break;
5723
5724   case 493:
5725 #line 2591 "util/configparser.y"
5726     {
5727                 OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
5728                 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
5729                         yyerror("out of memory");
5730         }
5731 #line 5732 "util/configparser.c"
5732     break;
5733
5734   case 494:
5735 #line 2598 "util/configparser.y"
5736     {
5737                 OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
5738                 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
5739                         yyerror("out of memory");
5740         }
5741 #line 5742 "util/configparser.c"
5742     break;
5743
5744   case 495:
5745 #line 2605 "util/configparser.y"
5746     {
5747                 OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
5748                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5749                         yyerror("expected yes or no.");
5750                 else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
5751                 free((yyvsp[0].str));
5752         }
5753 #line 5754 "util/configparser.c"
5754     break;
5755
5756   case 496:
5757 #line 2614 "util/configparser.y"
5758     {
5759                 OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
5760                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5761                         yyerror("expected yes or no.");
5762                 else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
5763                 free((yyvsp[0].str));
5764         }
5765 #line 5766 "util/configparser.c"
5766     break;
5767
5768   case 497:
5769 #line 2623 "util/configparser.y"
5770     {
5771                 OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
5772                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5773                         yyerror("expected yes or no.");
5774                 else cfg_parser->cfg->forwards->ssl_upstream = 
5775                         (strcmp((yyvsp[0].str), "yes")==0);
5776                 free((yyvsp[0].str));
5777         }
5778 #line 5779 "util/configparser.c"
5779     break;
5780
5781   case 498:
5782 #line 2633 "util/configparser.y"
5783     {
5784                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
5785                 if(cfg_parser->cfg->auths->name)
5786                         yyerror("auth name override, there must be one name "
5787                                 "for one auth-zone");
5788                 free(cfg_parser->cfg->auths->name);
5789                 cfg_parser->cfg->auths->name = (yyvsp[0].str);
5790         }
5791 #line 5792 "util/configparser.c"
5792     break;
5793
5794   case 499:
5795 #line 2643 "util/configparser.y"
5796     {
5797                 OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
5798                 free(cfg_parser->cfg->auths->zonefile);
5799                 cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
5800         }
5801 #line 5802 "util/configparser.c"
5802     break;
5803
5804   case 500:
5805 #line 2650 "util/configparser.y"
5806     {
5807                 OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
5808                 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
5809                         yyerror("out of memory");
5810         }
5811 #line 5812 "util/configparser.c"
5812     break;
5813
5814   case 501:
5815 #line 2657 "util/configparser.y"
5816     {
5817                 OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
5818                 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
5819                         yyerror("out of memory");
5820         }
5821 #line 5822 "util/configparser.c"
5822     break;
5823
5824   case 502:
5825 #line 2664 "util/configparser.y"
5826     {
5827                 OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
5828                 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
5829                         (yyvsp[0].str)))
5830                         yyerror("out of memory");
5831         }
5832 #line 5833 "util/configparser.c"
5833     break;
5834
5835   case 503:
5836 #line 2672 "util/configparser.y"
5837     {
5838                 OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
5839                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5840                         yyerror("expected yes or no.");
5841                 else cfg_parser->cfg->auths->for_downstream =
5842                         (strcmp((yyvsp[0].str), "yes")==0);
5843                 free((yyvsp[0].str));
5844         }
5845 #line 5846 "util/configparser.c"
5846     break;
5847
5848   case 504:
5849 #line 2682 "util/configparser.y"
5850     {
5851                 OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
5852                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5853                         yyerror("expected yes or no.");
5854                 else cfg_parser->cfg->auths->for_upstream =
5855                         (strcmp((yyvsp[0].str), "yes")==0);
5856                 free((yyvsp[0].str));
5857         }
5858 #line 5859 "util/configparser.c"
5859     break;
5860
5861   case 505:
5862 #line 2692 "util/configparser.y"
5863     {
5864                 OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
5865                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5866                         yyerror("expected yes or no.");
5867                 else cfg_parser->cfg->auths->fallback_enabled =
5868                         (strcmp((yyvsp[0].str), "yes")==0);
5869                 free((yyvsp[0].str));
5870         }
5871 #line 5872 "util/configparser.c"
5872     break;
5873
5874   case 506:
5875 #line 2702 "util/configparser.y"
5876     {
5877                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
5878                 if(cfg_parser->cfg->views->name)
5879                         yyerror("view name override, there must be one "
5880                                 "name for one view");
5881                 free(cfg_parser->cfg->views->name);
5882                 cfg_parser->cfg->views->name = (yyvsp[0].str);
5883         }
5884 #line 5885 "util/configparser.c"
5885     break;
5886
5887   case 507:
5888 #line 2712 "util/configparser.y"
5889     {
5890                 OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5891                 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
5892                    strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
5893                    strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
5894                    && strcmp((yyvsp[0].str), "typetransparent")!=0
5895                    && strcmp((yyvsp[0].str), "always_transparent")!=0
5896                    && strcmp((yyvsp[0].str), "always_refuse")!=0
5897                    && strcmp((yyvsp[0].str), "always_nxdomain")!=0
5898                    && strcmp((yyvsp[0].str), "noview")!=0
5899                    && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) {
5900                         yyerror("local-zone type: expected static, deny, "
5901                                 "refuse, redirect, transparent, "
5902                                 "typetransparent, inform, inform_deny, "
5903                                 "always_transparent, always_refuse, "
5904                                 "always_nxdomain, noview or nodefault");
5905                         free((yyvsp[-1].str));
5906                         free((yyvsp[0].str));
5907                 } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
5908                         if(!cfg_strlist_insert(&cfg_parser->cfg->views->
5909                                 local_zones_nodefault, (yyvsp[-1].str)))
5910                                 fatal_exit("out of memory adding local-zone");
5911                         free((yyvsp[0].str));
5912 #ifdef USE_IPSET
5913                 } else if(strcmp((yyvsp[0].str), "ipset")==0) {
5914                         if(!cfg_strlist_insert(&cfg_parser->cfg->views->
5915                                 local_zones_ipset, (yyvsp[-1].str)))
5916                                 fatal_exit("out of memory adding local-zone");
5917                         free((yyvsp[0].str));
5918 #endif
5919                 } else {
5920                         if(!cfg_str2list_insert(
5921                                 &cfg_parser->cfg->views->local_zones, 
5922                                 (yyvsp[-1].str), (yyvsp[0].str)))
5923                                 fatal_exit("out of memory adding local-zone");
5924                 }
5925         }
5926 #line 5927 "util/configparser.c"
5927     break;
5928
5929   case 508:
5930 #line 2751 "util/configparser.y"
5931     {
5932                 OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5933                 validate_respip_action((yyvsp[0].str));
5934                 if(!cfg_str2list_insert(
5935                         &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str)))
5936                         fatal_exit("out of memory adding per-view "
5937                                 "response-ip action");
5938         }
5939 #line 5940 "util/configparser.c"
5940     break;
5941
5942   case 509:
5943 #line 2761 "util/configparser.y"
5944     {
5945                 OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
5946                 if(!cfg_str2list_insert(
5947                         &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
5948                         fatal_exit("out of memory adding response-ip-data");
5949         }
5950 #line 5951 "util/configparser.c"
5951     break;
5952
5953   case 510:
5954 #line 2769 "util/configparser.y"
5955     {
5956                 OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
5957                 if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
5958                         fatal_exit("out of memory adding local-data");
5959                 }
5960         }
5961 #line 5962 "util/configparser.c"
5962     break;
5963
5964   case 511:
5965 #line 2777 "util/configparser.y"
5966     {
5967                 char* ptr;
5968                 OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
5969                 ptr = cfg_ptr_reverse((yyvsp[0].str));
5970                 free((yyvsp[0].str));
5971                 if(ptr) {
5972                         if(!cfg_strlist_insert(&cfg_parser->cfg->views->
5973                                 local_data, ptr))
5974                                 fatal_exit("out of memory adding local-data");
5975                 } else {
5976                         yyerror("local-data-ptr could not be reversed");
5977                 }
5978         }
5979 #line 5980 "util/configparser.c"
5980     break;
5981
5982   case 512:
5983 #line 2792 "util/configparser.y"
5984     {
5985                 OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
5986                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5987                         yyerror("expected yes or no.");
5988                 else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
5989                 free((yyvsp[0].str));
5990         }
5991 #line 5992 "util/configparser.c"
5992     break;
5993
5994   case 513:
5995 #line 2801 "util/configparser.y"
5996     { 
5997                 OUTYY(("\nP(remote-control:)\n")); 
5998         }
5999 #line 6000 "util/configparser.c"
6000     break;
6001
6002   case 524:
6003 #line 2812 "util/configparser.y"
6004     {
6005                 OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
6006                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6007                         yyerror("expected yes or no.");
6008                 else cfg_parser->cfg->remote_control_enable = 
6009                         (strcmp((yyvsp[0].str), "yes")==0);
6010                 free((yyvsp[0].str));
6011         }
6012 #line 6013 "util/configparser.c"
6013     break;
6014
6015   case 525:
6016 #line 2822 "util/configparser.y"
6017     {
6018                 OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
6019                 if(atoi((yyvsp[0].str)) == 0)
6020                         yyerror("control port number expected");
6021                 else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
6022                 free((yyvsp[0].str));
6023         }
6024 #line 6025 "util/configparser.c"
6025     break;
6026
6027   case 526:
6028 #line 2831 "util/configparser.y"
6029     {
6030                 OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
6031                 if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
6032                         yyerror("out of memory");
6033         }
6034 #line 6035 "util/configparser.c"
6035     break;
6036
6037   case 527:
6038 #line 2838 "util/configparser.y"
6039     {
6040                 OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
6041                 cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
6042                 free((yyvsp[0].str));
6043         }
6044 #line 6045 "util/configparser.c"
6045     break;
6046
6047   case 528:
6048 #line 2845 "util/configparser.y"
6049     {
6050                 OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
6051                 free(cfg_parser->cfg->server_key_file);
6052                 cfg_parser->cfg->server_key_file = (yyvsp[0].str);
6053         }
6054 #line 6055 "util/configparser.c"
6055     break;
6056
6057   case 529:
6058 #line 2852 "util/configparser.y"
6059     {
6060                 OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
6061                 free(cfg_parser->cfg->server_cert_file);
6062                 cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
6063         }
6064 #line 6065 "util/configparser.c"
6065     break;
6066
6067   case 530:
6068 #line 2859 "util/configparser.y"
6069     {
6070                 OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
6071                 free(cfg_parser->cfg->control_key_file);
6072                 cfg_parser->cfg->control_key_file = (yyvsp[0].str);
6073         }
6074 #line 6075 "util/configparser.c"
6075     break;
6076
6077   case 531:
6078 #line 2866 "util/configparser.y"
6079     {
6080                 OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
6081                 free(cfg_parser->cfg->control_cert_file);
6082                 cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
6083         }
6084 #line 6085 "util/configparser.c"
6085     break;
6086
6087   case 532:
6088 #line 2873 "util/configparser.y"
6089     {
6090                 OUTYY(("\nP(dnstap:)\n"));
6091         }
6092 #line 6093 "util/configparser.c"
6093     break;
6094
6095   case 554:
6096 #line 2893 "util/configparser.y"
6097     {
6098                 OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
6099                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6100                         yyerror("expected yes or no.");
6101                 else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
6102                 free((yyvsp[0].str));
6103         }
6104 #line 6105 "util/configparser.c"
6105     break;
6106
6107   case 555:
6108 #line 2902 "util/configparser.y"
6109     {
6110                 OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
6111                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6112                         yyerror("expected yes or no.");
6113                 else cfg_parser->cfg->dnstap_bidirectional =
6114                         (strcmp((yyvsp[0].str), "yes")==0);
6115                 free((yyvsp[0].str));
6116         }
6117 #line 6118 "util/configparser.c"
6118     break;
6119
6120   case 556:
6121 #line 2912 "util/configparser.y"
6122     {
6123                 OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
6124                 free(cfg_parser->cfg->dnstap_socket_path);
6125                 cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
6126         }
6127 #line 6128 "util/configparser.c"
6128     break;
6129
6130   case 557:
6131 #line 2919 "util/configparser.y"
6132     {
6133                 OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
6134                 free(cfg_parser->cfg->dnstap_ip);
6135                 cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
6136         }
6137 #line 6138 "util/configparser.c"
6138     break;
6139
6140   case 558:
6141 #line 2926 "util/configparser.y"
6142     {
6143                 OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
6144                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6145                         yyerror("expected yes or no.");
6146                 else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
6147                 free((yyvsp[0].str));
6148         }
6149 #line 6150 "util/configparser.c"
6150     break;
6151
6152   case 559:
6153 #line 2935 "util/configparser.y"
6154     {
6155                 OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
6156                 free(cfg_parser->cfg->dnstap_tls_server_name);
6157                 cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
6158         }
6159 #line 6160 "util/configparser.c"
6160     break;
6161
6162   case 560:
6163 #line 2942 "util/configparser.y"
6164     {
6165                 OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
6166                 free(cfg_parser->cfg->dnstap_tls_cert_bundle);
6167                 cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
6168         }
6169 #line 6170 "util/configparser.c"
6170     break;
6171
6172   case 561:
6173 #line 2949 "util/configparser.y"
6174     {
6175                 OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
6176                 free(cfg_parser->cfg->dnstap_tls_client_key_file);
6177                 cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
6178         }
6179 #line 6180 "util/configparser.c"
6180     break;
6181
6182   case 562:
6183 #line 2956 "util/configparser.y"
6184     {
6185                 OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
6186                 free(cfg_parser->cfg->dnstap_tls_client_cert_file);
6187                 cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
6188         }
6189 #line 6190 "util/configparser.c"
6190     break;
6191
6192   case 563:
6193 #line 2963 "util/configparser.y"
6194     {
6195                 OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
6196                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6197                         yyerror("expected yes or no.");
6198                 else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
6199                 free((yyvsp[0].str));
6200         }
6201 #line 6202 "util/configparser.c"
6202     break;
6203
6204   case 564:
6205 #line 2972 "util/configparser.y"
6206     {
6207                 OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
6208                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6209                         yyerror("expected yes or no.");
6210                 else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
6211                 free((yyvsp[0].str));
6212         }
6213 #line 6214 "util/configparser.c"
6214     break;
6215
6216   case 565:
6217 #line 2981 "util/configparser.y"
6218     {
6219                 OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
6220                 free(cfg_parser->cfg->dnstap_identity);
6221                 cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
6222         }
6223 #line 6224 "util/configparser.c"
6224     break;
6225
6226   case 566:
6227 #line 2988 "util/configparser.y"
6228     {
6229                 OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
6230                 free(cfg_parser->cfg->dnstap_version);
6231                 cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
6232         }
6233 #line 6234 "util/configparser.c"
6234     break;
6235
6236   case 567:
6237 #line 2995 "util/configparser.y"
6238     {
6239                 OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
6240                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6241                         yyerror("expected yes or no.");
6242                 else cfg_parser->cfg->dnstap_log_resolver_query_messages =
6243                         (strcmp((yyvsp[0].str), "yes")==0);
6244                 free((yyvsp[0].str));
6245         }
6246 #line 6247 "util/configparser.c"
6247     break;
6248
6249   case 568:
6250 #line 3005 "util/configparser.y"
6251     {
6252                 OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
6253                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6254                         yyerror("expected yes or no.");
6255                 else cfg_parser->cfg->dnstap_log_resolver_response_messages =
6256                         (strcmp((yyvsp[0].str), "yes")==0);
6257                 free((yyvsp[0].str));
6258         }
6259 #line 6260 "util/configparser.c"
6260     break;
6261
6262   case 569:
6263 #line 3015 "util/configparser.y"
6264     {
6265                 OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
6266                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6267                         yyerror("expected yes or no.");
6268                 else cfg_parser->cfg->dnstap_log_client_query_messages =
6269                         (strcmp((yyvsp[0].str), "yes")==0);
6270                 free((yyvsp[0].str));
6271         }
6272 #line 6273 "util/configparser.c"
6273     break;
6274
6275   case 570:
6276 #line 3025 "util/configparser.y"
6277     {
6278                 OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
6279                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6280                         yyerror("expected yes or no.");
6281                 else cfg_parser->cfg->dnstap_log_client_response_messages =
6282                         (strcmp((yyvsp[0].str), "yes")==0);
6283                 free((yyvsp[0].str));
6284         }
6285 #line 6286 "util/configparser.c"
6286     break;
6287
6288   case 571:
6289 #line 3035 "util/configparser.y"
6290     {
6291                 OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
6292                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6293                         yyerror("expected yes or no.");
6294                 else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
6295                         (strcmp((yyvsp[0].str), "yes")==0);
6296                 free((yyvsp[0].str));
6297         }
6298 #line 6299 "util/configparser.c"
6299     break;
6300
6301   case 572:
6302 #line 3045 "util/configparser.y"
6303     {
6304                 OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
6305                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6306                         yyerror("expected yes or no.");
6307                 else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
6308                         (strcmp((yyvsp[0].str), "yes")==0);
6309                 free((yyvsp[0].str));
6310         }
6311 #line 6312 "util/configparser.c"
6312     break;
6313
6314   case 573:
6315 #line 3055 "util/configparser.y"
6316     { 
6317                 OUTYY(("\nP(python:)\n")); 
6318         }
6319 #line 6320 "util/configparser.c"
6320     break;
6321
6322   case 577:
6323 #line 3064 "util/configparser.y"
6324     {
6325                 OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
6326                 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
6327                         yyerror("out of memory");
6328         }
6329 #line 6330 "util/configparser.c"
6330     break;
6331
6332   case 578:
6333 #line 3070 "util/configparser.y"
6334     { 
6335                 OUTYY(("\nP(dynlib:)\n")); 
6336         }
6337 #line 6338 "util/configparser.c"
6338     break;
6339
6340   case 582:
6341 #line 3079 "util/configparser.y"
6342     {
6343                 OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
6344                 if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
6345                         yyerror("out of memory");
6346         }
6347 #line 6348 "util/configparser.c"
6348     break;
6349
6350   case 583:
6351 #line 3085 "util/configparser.y"
6352     {
6353                 OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
6354                 if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6355                         yyerror("expected yes or no.");
6356                 else cfg_parser->cfg->disable_dnssec_lame_check =
6357                         (strcmp((yyvsp[0].str), "yes")==0);
6358                 free((yyvsp[0].str));
6359         }
6360 #line 6361 "util/configparser.c"
6361     break;
6362
6363   case 584:
6364 #line 3095 "util/configparser.y"
6365     {
6366                 OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
6367                 free(cfg_parser->cfg->log_identity);
6368                 cfg_parser->cfg->log_identity = (yyvsp[0].str);
6369         }
6370 #line 6371 "util/configparser.c"
6371     break;
6372
6373   case 585:
6374 #line 3102 "util/configparser.y"
6375     {
6376                 OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6377                 validate_respip_action((yyvsp[0].str));
6378                 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
6379                         (yyvsp[-1].str), (yyvsp[0].str)))
6380                         fatal_exit("out of memory adding response-ip");
6381         }
6382 #line 6383 "util/configparser.c"
6383     break;
6384
6385   case 586:
6386 #line 3111 "util/configparser.y"
6387     {
6388                 OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
6389                 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
6390                         (yyvsp[-1].str), (yyvsp[0].str)))
6391                         fatal_exit("out of memory adding response-ip-data");
6392         }
6393 #line 6394 "util/configparser.c"
6394     break;
6395
6396   case 587:
6397 #line 3119 "util/configparser.y"
6398     {
6399                 OUTYY(("\nP(dnscrypt:)\n"));
6400         }
6401 #line 6402 "util/configparser.c"
6402     break;
6403
6404   case 600:
6405 #line 3135 "util/configparser.y"
6406     {
6407                 OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
6408                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6409                         yyerror("expected yes or no.");
6410                 else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
6411                 free((yyvsp[0].str));
6412         }
6413 #line 6414 "util/configparser.c"
6414     break;
6415
6416   case 601:
6417 #line 3145 "util/configparser.y"
6418     {
6419                 OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
6420                 if(atoi((yyvsp[0].str)) == 0)
6421                         yyerror("port number expected");
6422                 else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
6423                 free((yyvsp[0].str));
6424         }
6425 #line 6426 "util/configparser.c"
6426     break;
6427
6428   case 602:
6429 #line 3154 "util/configparser.y"
6430     {
6431                 OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
6432                 free(cfg_parser->cfg->dnscrypt_provider);
6433                 cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
6434         }
6435 #line 6436 "util/configparser.c"
6436     break;
6437
6438   case 603:
6439 #line 3161 "util/configparser.y"
6440     {
6441                 OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
6442                 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
6443                         log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
6444                 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
6445                         fatal_exit("out of memory adding dnscrypt-provider-cert");
6446         }
6447 #line 6448 "util/configparser.c"
6448     break;
6449
6450   case 604:
6451 #line 3170 "util/configparser.y"
6452     {
6453                 OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
6454                 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
6455                         fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
6456         }
6457 #line 6458 "util/configparser.c"
6458     break;
6459
6460   case 605:
6461 #line 3177 "util/configparser.y"
6462     {
6463                 OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
6464                 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
6465                         log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
6466                 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
6467                         fatal_exit("out of memory adding dnscrypt-secret-key");
6468         }
6469 #line 6470 "util/configparser.c"
6470     break;
6471
6472   case 606:
6473 #line 3186 "util/configparser.y"
6474     {
6475         OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
6476         if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
6477                 yyerror("memory size expected");
6478         free((yyvsp[0].str));
6479   }
6480 #line 6481 "util/configparser.c"
6481     break;
6482
6483   case 607:
6484 #line 3194 "util/configparser.y"
6485     {
6486         OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
6487         if(atoi((yyvsp[0].str)) == 0)
6488                 yyerror("number expected");
6489         else {
6490                 cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str));
6491                 if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
6492                         yyerror("must be a power of 2");
6493         }
6494         free((yyvsp[0].str));
6495   }
6496 #line 6497 "util/configparser.c"
6497     break;
6498
6499   case 608:
6500 #line 3207 "util/configparser.y"
6501     {
6502         OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
6503         if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
6504                 yyerror("memory size expected");
6505         free((yyvsp[0].str));
6506   }
6507 #line 6508 "util/configparser.c"
6508     break;
6509
6510   case 609:
6511 #line 3215 "util/configparser.y"
6512     {
6513         OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
6514         if(atoi((yyvsp[0].str)) == 0)
6515                 yyerror("number expected");
6516         else {
6517                 cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
6518                 if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
6519                         yyerror("must be a power of 2");
6520         }
6521         free((yyvsp[0].str));
6522   }
6523 #line 6524 "util/configparser.c"
6524     break;
6525
6526   case 610:
6527 #line 3228 "util/configparser.y"
6528     {
6529                 OUTYY(("\nP(cachedb:)\n"));
6530         }
6531 #line 6532 "util/configparser.c"
6532     break;
6533
6534   case 619:
6535 #line 3239 "util/configparser.y"
6536     {
6537         #ifdef USE_CACHEDB
6538                 OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
6539                 free(cfg_parser->cfg->cachedb_backend);
6540                 cfg_parser->cfg->cachedb_backend = (yyvsp[0].str);
6541         #else
6542                 OUTYY(("P(Compiled without cachedb, ignoring)\n"));
6543                 free((yyvsp[0].str));
6544         #endif
6545         }
6546 #line 6547 "util/configparser.c"
6547     break;
6548
6549   case 620:
6550 #line 3251 "util/configparser.y"
6551     {
6552         #ifdef USE_CACHEDB
6553                 OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
6554                 free(cfg_parser->cfg->cachedb_secret);
6555                 cfg_parser->cfg->cachedb_secret = (yyvsp[0].str);
6556         #else
6557                 OUTYY(("P(Compiled without cachedb, ignoring)\n"));
6558                 free((yyvsp[0].str));
6559         #endif
6560         }
6561 #line 6562 "util/configparser.c"
6562     break;
6563
6564   case 621:
6565 #line 3263 "util/configparser.y"
6566     {
6567         #if defined(USE_CACHEDB) && defined(USE_REDIS)
6568                 OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
6569                 free(cfg_parser->cfg->redis_server_host);
6570                 cfg_parser->cfg->redis_server_host = (yyvsp[0].str);
6571         #else
6572                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
6573                 free((yyvsp[0].str));
6574         #endif
6575         }
6576 #line 6577 "util/configparser.c"
6577     break;
6578
6579   case 622:
6580 #line 3275 "util/configparser.y"
6581     {
6582         #if defined(USE_CACHEDB) && defined(USE_REDIS)
6583                 int port;
6584                 OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
6585                 port = atoi((yyvsp[0].str));
6586                 if(port == 0 || port < 0 || port > 65535)
6587                         yyerror("valid redis server port number expected");
6588                 else cfg_parser->cfg->redis_server_port = port;
6589         #else
6590                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
6591         #endif
6592                 free((yyvsp[0].str));
6593         }
6594 #line 6595 "util/configparser.c"
6595     break;
6596
6597   case 623:
6598 #line 3290 "util/configparser.y"
6599     {
6600         #if defined(USE_CACHEDB) && defined(USE_REDIS)
6601                 OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
6602                 if(atoi((yyvsp[0].str)) == 0)
6603                         yyerror("redis timeout value expected");
6604                 else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str));
6605         #else
6606                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
6607         #endif
6608                 free((yyvsp[0].str));
6609         }
6610 #line 6611 "util/configparser.c"
6611     break;
6612
6613   case 624:
6614 #line 3303 "util/configparser.y"
6615     {
6616         #if defined(USE_CACHEDB) && defined(USE_REDIS)
6617                 OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
6618                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6619                         yyerror("expected yes or no.");
6620                 else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0);
6621         #else
6622                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
6623         #endif
6624                 free((yyvsp[0].str));
6625         }
6626 #line 6627 "util/configparser.c"
6627     break;
6628
6629   case 625:
6630 #line 3316 "util/configparser.y"
6631     {
6632                 OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6633                 if (atoi((yyvsp[0].str)) < 0)
6634                         yyerror("positive number expected");
6635                 else {
6636                         if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str)))
6637                                 fatal_exit("out of memory adding tcp connection limit");
6638                 }
6639         }
6640 #line 6641 "util/configparser.c"
6641     break;
6642
6643   case 626:
6644 #line 3327 "util/configparser.y"
6645     {
6646                         OUTYY(("\nP(ipset:)\n"));
6647                 }
6648 #line 6649 "util/configparser.c"
6649     break;
6650
6651   case 631:
6652 #line 3336 "util/configparser.y"
6653     {
6654                 #ifdef USE_IPSET
6655                         OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
6656                         if(cfg_parser->cfg->ipset_name_v4)
6657                                 yyerror("ipset name v4 override, there must be one "
6658                                         "name for ip v4");
6659                         free(cfg_parser->cfg->ipset_name_v4);
6660                         cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
6661                 #else
6662                         OUTYY(("P(Compiled without ipset, ignoring)\n"));
6663                         free((yyvsp[0].str));
6664                 #endif
6665                 }
6666 #line 6667 "util/configparser.c"
6667     break;
6668
6669   case 632:
6670 #line 3351 "util/configparser.y"
6671     {
6672                 #ifdef USE_IPSET
6673                         OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
6674                         if(cfg_parser->cfg->ipset_name_v6)
6675                                 yyerror("ipset name v6 override, there must be one "
6676                                         "name for ip v6");
6677                         free(cfg_parser->cfg->ipset_name_v6);
6678                         cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
6679                 #else
6680                         OUTYY(("P(Compiled without ipset, ignoring)\n"));
6681                         free((yyvsp[0].str));
6682                 #endif
6683                 }
6684 #line 6685 "util/configparser.c"
6685     break;
6686
6687
6688 #line 6689 "util/configparser.c"
6689
6690       default: break;
6691     }
6692   /* User semantic actions sometimes alter yychar, and that requires
6693      that yytoken be updated with the new translation.  We take the
6694      approach of translating immediately before every use of yytoken.
6695      One alternative is translating here after every semantic action,
6696      but that translation would be missed if the semantic action invokes
6697      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
6698      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
6699      incorrect destructor might then be invoked immediately.  In the
6700      case of YYERROR or YYBACKUP, subsequent parser actions might lead
6701      to an incorrect destructor call or verbose syntax error message
6702      before the lookahead is translated.  */
6703   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
6704
6705   YYPOPSTACK (yylen);
6706   yylen = 0;
6707   YY_STACK_PRINT (yyss, yyssp);
6708
6709   *++yyvsp = yyval;
6710
6711   /* Now 'shift' the result of the reduction.  Determine what state
6712      that goes to, based on the state we popped back to and the rule
6713      number reduced by.  */
6714   {
6715     const int yylhs = yyr1[yyn] - YYNTOKENS;
6716     const int yyi = yypgoto[yylhs] + *yyssp;
6717     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
6718                ? yytable[yyi]
6719                : yydefgoto[yylhs]);
6720   }
6721
6722   goto yynewstate;
6723
6724
6725 /*--------------------------------------.
6726 | yyerrlab -- here on detecting error.  |
6727 `--------------------------------------*/
6728 yyerrlab:
6729   /* Make sure we have latest lookahead translation.  See comments at
6730      user semantic actions for why this is necessary.  */
6731   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
6732
6733   /* If not already recovering from an error, report this error.  */
6734   if (!yyerrstatus)
6735     {
6736       ++yynerrs;
6737 #if ! YYERROR_VERBOSE
6738       yyerror (YY_("syntax error"));
6739 #else
6740 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
6741                                         yyssp, yytoken)
6742       {
6743         char const *yymsgp = YY_("syntax error");
6744         int yysyntax_error_status;
6745         yysyntax_error_status = YYSYNTAX_ERROR;
6746         if (yysyntax_error_status == 0)
6747           yymsgp = yymsg;
6748         else if (yysyntax_error_status == 1)
6749           {
6750             if (yymsg != yymsgbuf)
6751               YYSTACK_FREE (yymsg);
6752             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
6753             if (!yymsg)
6754               {
6755                 yymsg = yymsgbuf;
6756                 yymsg_alloc = sizeof yymsgbuf;
6757                 yysyntax_error_status = 2;
6758               }
6759             else
6760               {
6761                 yysyntax_error_status = YYSYNTAX_ERROR;
6762                 yymsgp = yymsg;
6763               }
6764           }
6765         yyerror (yymsgp);
6766         if (yysyntax_error_status == 2)
6767           goto yyexhaustedlab;
6768       }
6769 # undef YYSYNTAX_ERROR
6770 #endif
6771     }
6772
6773
6774
6775   if (yyerrstatus == 3)
6776     {
6777       /* If just tried and failed to reuse lookahead token after an
6778          error, discard it.  */
6779
6780       if (yychar <= YYEOF)
6781         {
6782           /* Return failure if at end of input.  */
6783           if (yychar == YYEOF)
6784             YYABORT;
6785         }
6786       else
6787         {
6788           yydestruct ("Error: discarding",
6789                       yytoken, &yylval);
6790           yychar = YYEMPTY;
6791         }
6792     }
6793
6794   /* Else will try to reuse lookahead token after shifting the error
6795      token.  */
6796   goto yyerrlab1;
6797
6798
6799 /*---------------------------------------------------.
6800 | yyerrorlab -- error raised explicitly by YYERROR.  |
6801 `---------------------------------------------------*/
6802 yyerrorlab:
6803   /* Pacify compilers when the user code never invokes YYERROR and the
6804      label yyerrorlab therefore never appears in user code.  */
6805   if (0)
6806     YYERROR;
6807
6808   /* Do not reclaim the symbols of the rule whose action triggered
6809      this YYERROR.  */
6810   YYPOPSTACK (yylen);
6811   yylen = 0;
6812   YY_STACK_PRINT (yyss, yyssp);
6813   yystate = *yyssp;
6814   goto yyerrlab1;
6815
6816
6817 /*-------------------------------------------------------------.
6818 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
6819 `-------------------------------------------------------------*/
6820 yyerrlab1:
6821   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
6822
6823   for (;;)
6824     {
6825       yyn = yypact[yystate];
6826       if (!yypact_value_is_default (yyn))
6827         {
6828           yyn += YYTERROR;
6829           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6830             {
6831               yyn = yytable[yyn];
6832               if (0 < yyn)
6833                 break;
6834             }
6835         }
6836
6837       /* Pop the current state because it cannot handle the error token.  */
6838       if (yyssp == yyss)
6839         YYABORT;
6840
6841
6842       yydestruct ("Error: popping",
6843                   yystos[yystate], yyvsp);
6844       YYPOPSTACK (1);
6845       yystate = *yyssp;
6846       YY_STACK_PRINT (yyss, yyssp);
6847     }
6848
6849   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
6850   *++yyvsp = yylval;
6851   YY_IGNORE_MAYBE_UNINITIALIZED_END
6852
6853
6854   /* Shift the error token.  */
6855   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
6856
6857   yystate = yyn;
6858   goto yynewstate;
6859
6860
6861 /*-------------------------------------.
6862 | yyacceptlab -- YYACCEPT comes here.  |
6863 `-------------------------------------*/
6864 yyacceptlab:
6865   yyresult = 0;
6866   goto yyreturn;
6867
6868
6869 /*-----------------------------------.
6870 | yyabortlab -- YYABORT comes here.  |
6871 `-----------------------------------*/
6872 yyabortlab:
6873   yyresult = 1;
6874   goto yyreturn;
6875
6876
6877 #if !defined yyoverflow || YYERROR_VERBOSE
6878 /*-------------------------------------------------.
6879 | yyexhaustedlab -- memory exhaustion comes here.  |
6880 `-------------------------------------------------*/
6881 yyexhaustedlab:
6882   yyerror (YY_("memory exhausted"));
6883   yyresult = 2;
6884   /* Fall through.  */
6885 #endif
6886
6887
6888 /*-----------------------------------------------------.
6889 | yyreturn -- parsing is finished, return the result.  |
6890 `-----------------------------------------------------*/
6891 yyreturn:
6892   if (yychar != YYEMPTY)
6893     {
6894       /* Make sure we have latest lookahead translation.  See comments at
6895          user semantic actions for why this is necessary.  */
6896       yytoken = YYTRANSLATE (yychar);
6897       yydestruct ("Cleanup: discarding lookahead",
6898                   yytoken, &yylval);
6899     }
6900   /* Do not reclaim the symbols of the rule whose action triggered
6901      this YYABORT or YYACCEPT.  */
6902   YYPOPSTACK (yylen);
6903   YY_STACK_PRINT (yyss, yyssp);
6904   while (yyssp != yyss)
6905     {
6906       yydestruct ("Cleanup: popping",
6907                   yystos[*yyssp], yyvsp);
6908       YYPOPSTACK (1);
6909     }
6910 #ifndef yyoverflow
6911   if (yyss != yyssa)
6912     YYSTACK_FREE (yyss);
6913 #endif
6914 #if YYERROR_VERBOSE
6915   if (yymsg != yymsgbuf)
6916     YYSTACK_FREE (yymsg);
6917 #endif
6918   return yyresult;
6919 }
6920 #line 3365 "util/configparser.y"
6921
6922
6923 /* parse helper routines could be here */
6924 static void
6925 validate_respip_action(const char* action)
6926 {
6927         if(strcmp(action, "deny")!=0 &&
6928                 strcmp(action, "redirect")!=0 &&
6929                 strcmp(action, "inform")!=0 &&
6930                 strcmp(action, "inform_deny")!=0 &&
6931                 strcmp(action, "always_transparent")!=0 &&
6932                 strcmp(action, "always_refuse")!=0 &&
6933                 strcmp(action, "always_nxdomain")!=0)
6934         {
6935                 yyerror("response-ip action: expected deny, redirect, "
6936                         "inform, inform_deny, always_transparent, "
6937                         "always_refuse or always_nxdomain");
6938         }
6939 }
6940
6941