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