Coverage Report

Created: 2025-11-06 06:35

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/unbound/util/configparser.c
Line
Count
Source
1
/* A Bison parser, made by GNU Bison 3.5.1.  */
2
3
/* Bison implementation for Yacc-like parsers in C
4
5
   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
6
   Inc.
7
8
   This program is free software: you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation, either version 3 of the License, or
11
   (at your option) any later version.
12
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
18
   You should have received a copy of the GNU General Public License
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21
/* As a special exception, you may create a larger work that contains
22
   part or all of the Bison parser skeleton and distribute that work
23
   under terms of your choice, so long as that work isn't itself a
24
   parser generator using the skeleton or a modified version thereof
25
   as a parser skeleton.  Alternatively, if you modify or redistribute
26
   the parser skeleton itself, you may (at your option) remove this
27
   special exception, which will cause the skeleton and the resulting
28
   Bison output files to be licensed under the GNU General Public
29
   License without this special exception.
30
31
   This special exception was added by the Free Software Foundation in
32
   version 2.2 of Bison.  */
33
34
/* C LALR(1) parser skeleton written by Richard Stallman, by
35
   simplifying the original so-called "semantic" parser.  */
36
37
/* All symbols defined below should begin with yy or YY, to avoid
38
   infringing on user name space.  This should be done even for local
39
   variables, as they might otherwise be expanded by user macros.
40
   There are some unavoidable exceptions within include files to
41
   define necessary library symbols; they are noted "INFRINGES ON
42
   USER NAME SPACE" below.  */
43
44
/* Undocumented macros, especially those whose name start with YY_,
45
   are private implementation details.  Do not rely on them.  */
46
47
/* Identify Bison output.  */
48
#define YYBISON 1
49
50
/* Bison version.  */
51
#define YYBISON_VERSION "3.5.1"
52
53
/* Skeleton name.  */
54
#define YYSKELETON_NAME "yacc.c"
55
56
/* Pure parsers.  */
57
#define YYPURE 0
58
59
/* Push parsers.  */
60
#define YYPUSH 0
61
62
/* Pull parsers.  */
63
#define YYPULL 1
64
65
66
67
68
/* First part of user prologue.  */
69
#line 38 "./util/configparser.y"
70
71
#include "config.h"
72
73
#include <stdarg.h>
74
#include <stdio.h>
75
#include <string.h>
76
#include <stdlib.h>
77
#include <assert.h>
78
79
#include "util/configyyrename.h"
80
#include "util/config_file.h"
81
#include "util/net_help.h"
82
#include "sldns/str2wire.h"
83
84
int ub_c_lex(void);
85
void ub_c_error(const char *message);
86
87
static void validate_respip_action(const char* action);
88
static void validate_acl_action(const char* action);
89
90
/* these need to be global, otherwise they cannot be used inside yacc */
91
extern struct config_parser_state* cfg_parser;
92
93
#if 0
94
#define OUTYY(s)  printf s /* used ONLY when debugging */
95
#else
96
#define OUTYY(s)
97
#endif
98
99
100
#line 101 "util/configparser.c"
101
102
# ifndef YY_CAST
103
#  ifdef __cplusplus
104
#   define YY_CAST(Type, Val) static_cast<Type> (Val)
105
#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
106
#  else
107
0
#   define YY_CAST(Type, Val) ((Type) (Val))
108
#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
109
#  endif
110
# endif
111
# ifndef YY_NULLPTR
112
#  if defined __cplusplus
113
#   if 201103L <= __cplusplus
114
#    define YY_NULLPTR nullptr
115
#   else
116
#    define YY_NULLPTR 0
117
#   endif
118
#  else
119
#   define YY_NULLPTR ((void*)0)
120
#  endif
121
# endif
122
123
/* Enabling verbose error messages.  */
124
#ifdef YYERROR_VERBOSE
125
# undef YYERROR_VERBOSE
126
# define YYERROR_VERBOSE 1
127
#else
128
# define YYERROR_VERBOSE 0
129
#endif
130
131
/* Use api.header.include to #include this header
132
   instead of duplicating it here.  */
133
#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
134
# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
135
/* Debug traces.  */
136
#ifndef YYDEBUG
137
# define YYDEBUG 0
138
#endif
139
#if YYDEBUG
140
extern int yydebug;
141
#endif
142
143
/* Token type.  */
144
#ifndef YYTOKENTYPE
145
# define YYTOKENTYPE
146
  enum yytokentype
147
  {
148
    SPACE = 258,
149
    LETTER = 259,
150
    NEWLINE = 260,
151
    COMMENT = 261,
152
    COLON = 262,
153
    ANY = 263,
154
    ZONESTR = 264,
155
    STRING_ARG = 265,
156
    VAR_FORCE_TOPLEVEL = 266,
157
    VAR_SERVER = 267,
158
    VAR_VERBOSITY = 268,
159
    VAR_NUM_THREADS = 269,
160
    VAR_PORT = 270,
161
    VAR_OUTGOING_RANGE = 271,
162
    VAR_INTERFACE = 272,
163
    VAR_PREFER_IP4 = 273,
164
    VAR_DO_IP4 = 274,
165
    VAR_DO_IP6 = 275,
166
    VAR_DO_NAT64 = 276,
167
    VAR_PREFER_IP6 = 277,
168
    VAR_DO_UDP = 278,
169
    VAR_DO_TCP = 279,
170
    VAR_TCP_MSS = 280,
171
    VAR_OUTGOING_TCP_MSS = 281,
172
    VAR_TCP_IDLE_TIMEOUT = 282,
173
    VAR_EDNS_TCP_KEEPALIVE = 283,
174
    VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 284,
175
    VAR_SOCK_QUEUE_TIMEOUT = 285,
176
    VAR_CHROOT = 286,
177
    VAR_USERNAME = 287,
178
    VAR_DIRECTORY = 288,
179
    VAR_LOGFILE = 289,
180
    VAR_PIDFILE = 290,
181
    VAR_MSG_CACHE_SIZE = 291,
182
    VAR_MSG_CACHE_SLABS = 292,
183
    VAR_NUM_QUERIES_PER_THREAD = 293,
184
    VAR_RRSET_CACHE_SIZE = 294,
185
    VAR_RRSET_CACHE_SLABS = 295,
186
    VAR_OUTGOING_NUM_TCP = 296,
187
    VAR_INFRA_HOST_TTL = 297,
188
    VAR_INFRA_LAME_TTL = 298,
189
    VAR_INFRA_CACHE_SLABS = 299,
190
    VAR_INFRA_CACHE_NUMHOSTS = 300,
191
    VAR_INFRA_CACHE_LAME_SIZE = 301,
192
    VAR_NAME = 302,
193
    VAR_STUB_ZONE = 303,
194
    VAR_STUB_HOST = 304,
195
    VAR_STUB_ADDR = 305,
196
    VAR_TARGET_FETCH_POLICY = 306,
197
    VAR_HARDEN_SHORT_BUFSIZE = 307,
198
    VAR_HARDEN_LARGE_QUERIES = 308,
199
    VAR_FORWARD_ZONE = 309,
200
    VAR_FORWARD_HOST = 310,
201
    VAR_FORWARD_ADDR = 311,
202
    VAR_DO_NOT_QUERY_ADDRESS = 312,
203
    VAR_HIDE_IDENTITY = 313,
204
    VAR_HIDE_VERSION = 314,
205
    VAR_IDENTITY = 315,
206
    VAR_VERSION = 316,
207
    VAR_HARDEN_GLUE = 317,
208
    VAR_MODULE_CONF = 318,
209
    VAR_TRUST_ANCHOR_FILE = 319,
210
    VAR_TRUST_ANCHOR = 320,
211
    VAR_VAL_OVERRIDE_DATE = 321,
212
    VAR_BOGUS_TTL = 322,
213
    VAR_VAL_CLEAN_ADDITIONAL = 323,
214
    VAR_VAL_PERMISSIVE_MODE = 324,
215
    VAR_INCOMING_NUM_TCP = 325,
216
    VAR_MSG_BUFFER_SIZE = 326,
217
    VAR_KEY_CACHE_SIZE = 327,
218
    VAR_KEY_CACHE_SLABS = 328,
219
    VAR_TRUSTED_KEYS_FILE = 329,
220
    VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 330,
221
    VAR_USE_SYSLOG = 331,
222
    VAR_OUTGOING_INTERFACE = 332,
223
    VAR_ROOT_HINTS = 333,
224
    VAR_DO_NOT_QUERY_LOCALHOST = 334,
225
    VAR_CACHE_MAX_TTL = 335,
226
    VAR_HARDEN_DNSSEC_STRIPPED = 336,
227
    VAR_ACCESS_CONTROL = 337,
228
    VAR_LOCAL_ZONE = 338,
229
    VAR_LOCAL_DATA = 339,
230
    VAR_INTERFACE_AUTOMATIC = 340,
231
    VAR_STATISTICS_INTERVAL = 341,
232
    VAR_DO_DAEMONIZE = 342,
233
    VAR_USE_CAPS_FOR_ID = 343,
234
    VAR_STATISTICS_CUMULATIVE = 344,
235
    VAR_OUTGOING_PORT_PERMIT = 345,
236
    VAR_OUTGOING_PORT_AVOID = 346,
237
    VAR_DLV_ANCHOR_FILE = 347,
238
    VAR_DLV_ANCHOR = 348,
239
    VAR_NEG_CACHE_SIZE = 349,
240
    VAR_HARDEN_REFERRAL_PATH = 350,
241
    VAR_PRIVATE_ADDRESS = 351,
242
    VAR_PRIVATE_DOMAIN = 352,
243
    VAR_REMOTE_CONTROL = 353,
244
    VAR_CONTROL_ENABLE = 354,
245
    VAR_CONTROL_INTERFACE = 355,
246
    VAR_CONTROL_PORT = 356,
247
    VAR_SERVER_KEY_FILE = 357,
248
    VAR_SERVER_CERT_FILE = 358,
249
    VAR_CONTROL_KEY_FILE = 359,
250
    VAR_CONTROL_CERT_FILE = 360,
251
    VAR_CONTROL_USE_CERT = 361,
252
    VAR_TCP_REUSE_TIMEOUT = 362,
253
    VAR_MAX_REUSE_TCP_QUERIES = 363,
254
    VAR_EXTENDED_STATISTICS = 364,
255
    VAR_LOCAL_DATA_PTR = 365,
256
    VAR_JOSTLE_TIMEOUT = 366,
257
    VAR_STUB_PRIME = 367,
258
    VAR_UNWANTED_REPLY_THRESHOLD = 368,
259
    VAR_LOG_TIME_ASCII = 369,
260
    VAR_DOMAIN_INSECURE = 370,
261
    VAR_PYTHON = 371,
262
    VAR_PYTHON_SCRIPT = 372,
263
    VAR_VAL_SIG_SKEW_MIN = 373,
264
    VAR_VAL_SIG_SKEW_MAX = 374,
265
    VAR_VAL_MAX_RESTART = 375,
266
    VAR_CACHE_MIN_TTL = 376,
267
    VAR_VAL_LOG_LEVEL = 377,
268
    VAR_AUTO_TRUST_ANCHOR_FILE = 378,
269
    VAR_KEEP_MISSING = 379,
270
    VAR_ADD_HOLDDOWN = 380,
271
    VAR_DEL_HOLDDOWN = 381,
272
    VAR_SO_RCVBUF = 382,
273
    VAR_EDNS_BUFFER_SIZE = 383,
274
    VAR_PREFETCH = 384,
275
    VAR_PREFETCH_KEY = 385,
276
    VAR_SO_SNDBUF = 386,
277
    VAR_SO_REUSEPORT = 387,
278
    VAR_HARDEN_BELOW_NXDOMAIN = 388,
279
    VAR_IGNORE_CD_FLAG = 389,
280
    VAR_LOG_QUERIES = 390,
281
    VAR_LOG_REPLIES = 391,
282
    VAR_LOG_LOCAL_ACTIONS = 392,
283
    VAR_TCP_UPSTREAM = 393,
284
    VAR_SSL_UPSTREAM = 394,
285
    VAR_TCP_AUTH_QUERY_TIMEOUT = 395,
286
    VAR_SSL_SERVICE_KEY = 396,
287
    VAR_SSL_SERVICE_PEM = 397,
288
    VAR_SSL_PORT = 398,
289
    VAR_FORWARD_FIRST = 399,
290
    VAR_STUB_SSL_UPSTREAM = 400,
291
    VAR_FORWARD_SSL_UPSTREAM = 401,
292
    VAR_TLS_CERT_BUNDLE = 402,
293
    VAR_STUB_TCP_UPSTREAM = 403,
294
    VAR_FORWARD_TCP_UPSTREAM = 404,
295
    VAR_HTTPS_PORT = 405,
296
    VAR_HTTP_ENDPOINT = 406,
297
    VAR_HTTP_MAX_STREAMS = 407,
298
    VAR_HTTP_QUERY_BUFFER_SIZE = 408,
299
    VAR_HTTP_RESPONSE_BUFFER_SIZE = 409,
300
    VAR_HTTP_NODELAY = 410,
301
    VAR_HTTP_NOTLS_DOWNSTREAM = 411,
302
    VAR_STUB_FIRST = 412,
303
    VAR_MINIMAL_RESPONSES = 413,
304
    VAR_RRSET_ROUNDROBIN = 414,
305
    VAR_MAX_UDP_SIZE = 415,
306
    VAR_DELAY_CLOSE = 416,
307
    VAR_UDP_CONNECT = 417,
308
    VAR_UNBLOCK_LAN_ZONES = 418,
309
    VAR_INSECURE_LAN_ZONES = 419,
310
    VAR_INFRA_CACHE_MIN_RTT = 420,
311
    VAR_INFRA_CACHE_MAX_RTT = 421,
312
    VAR_INFRA_KEEP_PROBING = 422,
313
    VAR_DNS64_PREFIX = 423,
314
    VAR_DNS64_SYNTHALL = 424,
315
    VAR_DNS64_IGNORE_AAAA = 425,
316
    VAR_NAT64_PREFIX = 426,
317
    VAR_DNSTAP = 427,
318
    VAR_DNSTAP_ENABLE = 428,
319
    VAR_DNSTAP_SOCKET_PATH = 429,
320
    VAR_DNSTAP_IP = 430,
321
    VAR_DNSTAP_TLS = 431,
322
    VAR_DNSTAP_TLS_SERVER_NAME = 432,
323
    VAR_DNSTAP_TLS_CERT_BUNDLE = 433,
324
    VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 434,
325
    VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 435,
326
    VAR_DNSTAP_SEND_IDENTITY = 436,
327
    VAR_DNSTAP_SEND_VERSION = 437,
328
    VAR_DNSTAP_BIDIRECTIONAL = 438,
329
    VAR_DNSTAP_IDENTITY = 439,
330
    VAR_DNSTAP_VERSION = 440,
331
    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 441,
332
    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 442,
333
    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 443,
334
    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 444,
335
    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 445,
336
    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 446,
337
    VAR_DNSTAP_SAMPLE_RATE = 447,
338
    VAR_RESPONSE_IP_TAG = 448,
339
    VAR_RESPONSE_IP = 449,
340
    VAR_RESPONSE_IP_DATA = 450,
341
    VAR_HARDEN_ALGO_DOWNGRADE = 451,
342
    VAR_IP_TRANSPARENT = 452,
343
    VAR_IP_DSCP = 453,
344
    VAR_DISABLE_DNSSEC_LAME_CHECK = 454,
345
    VAR_IP_RATELIMIT = 455,
346
    VAR_IP_RATELIMIT_SLABS = 456,
347
    VAR_IP_RATELIMIT_SIZE = 457,
348
    VAR_RATELIMIT = 458,
349
    VAR_RATELIMIT_SLABS = 459,
350
    VAR_RATELIMIT_SIZE = 460,
351
    VAR_OUTBOUND_MSG_RETRY = 461,
352
    VAR_MAX_SENT_COUNT = 462,
353
    VAR_MAX_QUERY_RESTARTS = 463,
354
    VAR_RATELIMIT_FOR_DOMAIN = 464,
355
    VAR_RATELIMIT_BELOW_DOMAIN = 465,
356
    VAR_IP_RATELIMIT_FACTOR = 466,
357
    VAR_RATELIMIT_FACTOR = 467,
358
    VAR_IP_RATELIMIT_BACKOFF = 468,
359
    VAR_RATELIMIT_BACKOFF = 469,
360
    VAR_SEND_CLIENT_SUBNET = 470,
361
    VAR_CLIENT_SUBNET_ZONE = 471,
362
    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 472,
363
    VAR_CLIENT_SUBNET_OPCODE = 473,
364
    VAR_MAX_CLIENT_SUBNET_IPV4 = 474,
365
    VAR_MAX_CLIENT_SUBNET_IPV6 = 475,
366
    VAR_MIN_CLIENT_SUBNET_IPV4 = 476,
367
    VAR_MIN_CLIENT_SUBNET_IPV6 = 477,
368
    VAR_MAX_ECS_TREE_SIZE_IPV4 = 478,
369
    VAR_MAX_ECS_TREE_SIZE_IPV6 = 479,
370
    VAR_CAPS_WHITELIST = 480,
371
    VAR_CACHE_MAX_NEGATIVE_TTL = 481,
372
    VAR_PERMIT_SMALL_HOLDDOWN = 482,
373
    VAR_CACHE_MIN_NEGATIVE_TTL = 483,
374
    VAR_QNAME_MINIMISATION = 484,
375
    VAR_QNAME_MINIMISATION_STRICT = 485,
376
    VAR_IP_FREEBIND = 486,
377
    VAR_DEFINE_TAG = 487,
378
    VAR_LOCAL_ZONE_TAG = 488,
379
    VAR_ACCESS_CONTROL_TAG = 489,
380
    VAR_LOCAL_ZONE_OVERRIDE = 490,
381
    VAR_ACCESS_CONTROL_TAG_ACTION = 491,
382
    VAR_ACCESS_CONTROL_TAG_DATA = 492,
383
    VAR_VIEW = 493,
384
    VAR_ACCESS_CONTROL_VIEW = 494,
385
    VAR_VIEW_FIRST = 495,
386
    VAR_SERVE_EXPIRED = 496,
387
    VAR_SERVE_EXPIRED_TTL = 497,
388
    VAR_SERVE_EXPIRED_TTL_RESET = 498,
389
    VAR_SERVE_EXPIRED_REPLY_TTL = 499,
390
    VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 500,
391
    VAR_EDE_SERVE_EXPIRED = 501,
392
    VAR_SERVE_ORIGINAL_TTL = 502,
393
    VAR_FAKE_DSA = 503,
394
    VAR_FAKE_SHA1 = 504,
395
    VAR_LOG_IDENTITY = 505,
396
    VAR_HIDE_TRUSTANCHOR = 506,
397
    VAR_HIDE_HTTP_USER_AGENT = 507,
398
    VAR_HTTP_USER_AGENT = 508,
399
    VAR_TRUST_ANCHOR_SIGNALING = 509,
400
    VAR_AGGRESSIVE_NSEC = 510,
401
    VAR_USE_SYSTEMD = 511,
402
    VAR_SHM_ENABLE = 512,
403
    VAR_SHM_KEY = 513,
404
    VAR_ROOT_KEY_SENTINEL = 514,
405
    VAR_DNSCRYPT = 515,
406
    VAR_DNSCRYPT_ENABLE = 516,
407
    VAR_DNSCRYPT_PORT = 517,
408
    VAR_DNSCRYPT_PROVIDER = 518,
409
    VAR_DNSCRYPT_SECRET_KEY = 519,
410
    VAR_DNSCRYPT_PROVIDER_CERT = 520,
411
    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 521,
412
    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 522,
413
    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 523,
414
    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 524,
415
    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 525,
416
    VAR_PAD_RESPONSES = 526,
417
    VAR_PAD_RESPONSES_BLOCK_SIZE = 527,
418
    VAR_PAD_QUERIES = 528,
419
    VAR_PAD_QUERIES_BLOCK_SIZE = 529,
420
    VAR_IPSECMOD_ENABLED = 530,
421
    VAR_IPSECMOD_HOOK = 531,
422
    VAR_IPSECMOD_IGNORE_BOGUS = 532,
423
    VAR_IPSECMOD_MAX_TTL = 533,
424
    VAR_IPSECMOD_WHITELIST = 534,
425
    VAR_IPSECMOD_STRICT = 535,
426
    VAR_CACHEDB = 536,
427
    VAR_CACHEDB_BACKEND = 537,
428
    VAR_CACHEDB_SECRETSEED = 538,
429
    VAR_CACHEDB_REDISHOST = 539,
430
    VAR_CACHEDB_REDISREPLICAHOST = 540,
431
    VAR_CACHEDB_REDISPORT = 541,
432
    VAR_CACHEDB_REDISREPLICAPORT = 542,
433
    VAR_CACHEDB_REDISTIMEOUT = 543,
434
    VAR_CACHEDB_REDISREPLICATIMEOUT = 544,
435
    VAR_CACHEDB_REDISEXPIRERECORDS = 545,
436
    VAR_CACHEDB_REDISPATH = 546,
437
    VAR_CACHEDB_REDISREPLICAPATH = 547,
438
    VAR_CACHEDB_REDISPASSWORD = 548,
439
    VAR_CACHEDB_REDISREPLICAPASSWORD = 549,
440
    VAR_CACHEDB_REDISLOGICALDB = 550,
441
    VAR_CACHEDB_REDISREPLICALOGICALDB = 551,
442
    VAR_CACHEDB_REDISCOMMANDTIMEOUT = 552,
443
    VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT = 553,
444
    VAR_CACHEDB_REDISCONNECTTIMEOUT = 554,
445
    VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT = 555,
446
    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 556,
447
    VAR_FOR_UPSTREAM = 557,
448
    VAR_AUTH_ZONE = 558,
449
    VAR_ZONEFILE = 559,
450
    VAR_MASTER = 560,
451
    VAR_URL = 561,
452
    VAR_FOR_DOWNSTREAM = 562,
453
    VAR_FALLBACK_ENABLED = 563,
454
    VAR_TLS_ADDITIONAL_PORT = 564,
455
    VAR_LOW_RTT = 565,
456
    VAR_LOW_RTT_PERMIL = 566,
457
    VAR_FAST_SERVER_PERMIL = 567,
458
    VAR_FAST_SERVER_NUM = 568,
459
    VAR_ALLOW_NOTIFY = 569,
460
    VAR_TLS_WIN_CERT = 570,
461
    VAR_TCP_CONNECTION_LIMIT = 571,
462
    VAR_ANSWER_COOKIE = 572,
463
    VAR_COOKIE_SECRET = 573,
464
    VAR_IP_RATELIMIT_COOKIE = 574,
465
    VAR_FORWARD_NO_CACHE = 575,
466
    VAR_STUB_NO_CACHE = 576,
467
    VAR_LOG_SERVFAIL = 577,
468
    VAR_DENY_ANY = 578,
469
    VAR_UNKNOWN_SERVER_TIME_LIMIT = 579,
470
    VAR_LOG_TAG_QUERYREPLY = 580,
471
    VAR_DISCARD_TIMEOUT = 581,
472
    VAR_WAIT_LIMIT = 582,
473
    VAR_WAIT_LIMIT_COOKIE = 583,
474
    VAR_WAIT_LIMIT_NETBLOCK = 584,
475
    VAR_WAIT_LIMIT_COOKIE_NETBLOCK = 585,
476
    VAR_STREAM_WAIT_SIZE = 586,
477
    VAR_TLS_CIPHERS = 587,
478
    VAR_TLS_CIPHERSUITES = 588,
479
    VAR_TLS_USE_SNI = 589,
480
    VAR_TLS_USE_SYSTEM_POLICY_VERSIONS = 590,
481
    VAR_IPSET = 591,
482
    VAR_IPSET_NAME_V4 = 592,
483
    VAR_IPSET_NAME_V6 = 593,
484
    VAR_TLS_SESSION_TICKET_KEYS = 594,
485
    VAR_RPZ = 595,
486
    VAR_TAGS = 596,
487
    VAR_RPZ_ACTION_OVERRIDE = 597,
488
    VAR_RPZ_CNAME_OVERRIDE = 598,
489
    VAR_RPZ_LOG = 599,
490
    VAR_RPZ_LOG_NAME = 600,
491
    VAR_DYNLIB = 601,
492
    VAR_DYNLIB_FILE = 602,
493
    VAR_EDNS_CLIENT_STRING = 603,
494
    VAR_EDNS_CLIENT_STRING_OPCODE = 604,
495
    VAR_NSID = 605,
496
    VAR_ZONEMD_PERMISSIVE_MODE = 606,
497
    VAR_ZONEMD_CHECK = 607,
498
    VAR_ZONEMD_REJECT_ABSENCE = 608,
499
    VAR_RPZ_SIGNAL_NXDOMAIN_RA = 609,
500
    VAR_INTERFACE_AUTOMATIC_PORTS = 610,
501
    VAR_EDE = 611,
502
    VAR_DNS_ERROR_REPORTING = 612,
503
    VAR_INTERFACE_ACTION = 613,
504
    VAR_INTERFACE_VIEW = 614,
505
    VAR_INTERFACE_TAG = 615,
506
    VAR_INTERFACE_TAG_ACTION = 616,
507
    VAR_INTERFACE_TAG_DATA = 617,
508
    VAR_QUIC_PORT = 618,
509
    VAR_QUIC_SIZE = 619,
510
    VAR_PROXY_PROTOCOL_PORT = 620,
511
    VAR_STATISTICS_INHIBIT_ZERO = 621,
512
    VAR_HARDEN_UNKNOWN_ADDITIONAL = 622,
513
    VAR_DISABLE_EDNS_DO = 623,
514
    VAR_CACHEDB_NO_STORE = 624,
515
    VAR_LOG_DESTADDR = 625,
516
    VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED = 626,
517
    VAR_COOKIE_SECRET_FILE = 627,
518
    VAR_ITER_SCRUB_NS = 628,
519
    VAR_ITER_SCRUB_CNAME = 629,
520
    VAR_MAX_GLOBAL_QUOTA = 630,
521
    VAR_HARDEN_UNVERIFIED_GLUE = 631,
522
    VAR_LOG_TIME_ISO = 632,
523
    VAR_ITER_SCRUB_PROMISCUOUS = 633
524
  };
525
#endif
526
/* Tokens.  */
527
#define SPACE 258
528
#define LETTER 259
529
#define NEWLINE 260
530
#define COMMENT 261
531
#define COLON 262
532
#define ANY 263
533
#define ZONESTR 264
534
#define STRING_ARG 265
535
#define VAR_FORCE_TOPLEVEL 266
536
#define VAR_SERVER 267
537
#define VAR_VERBOSITY 268
538
#define VAR_NUM_THREADS 269
539
#define VAR_PORT 270
540
#define VAR_OUTGOING_RANGE 271
541
#define VAR_INTERFACE 272
542
#define VAR_PREFER_IP4 273
543
#define VAR_DO_IP4 274
544
#define VAR_DO_IP6 275
545
#define VAR_DO_NAT64 276
546
#define VAR_PREFER_IP6 277
547
#define VAR_DO_UDP 278
548
#define VAR_DO_TCP 279
549
#define VAR_TCP_MSS 280
550
#define VAR_OUTGOING_TCP_MSS 281
551
#define VAR_TCP_IDLE_TIMEOUT 282
552
#define VAR_EDNS_TCP_KEEPALIVE 283
553
#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 284
554
#define VAR_SOCK_QUEUE_TIMEOUT 285
555
#define VAR_CHROOT 286
556
#define VAR_USERNAME 287
557
#define VAR_DIRECTORY 288
558
#define VAR_LOGFILE 289
559
#define VAR_PIDFILE 290
560
#define VAR_MSG_CACHE_SIZE 291
561
#define VAR_MSG_CACHE_SLABS 292
562
#define VAR_NUM_QUERIES_PER_THREAD 293
563
#define VAR_RRSET_CACHE_SIZE 294
564
#define VAR_RRSET_CACHE_SLABS 295
565
#define VAR_OUTGOING_NUM_TCP 296
566
#define VAR_INFRA_HOST_TTL 297
567
#define VAR_INFRA_LAME_TTL 298
568
#define VAR_INFRA_CACHE_SLABS 299
569
#define VAR_INFRA_CACHE_NUMHOSTS 300
570
#define VAR_INFRA_CACHE_LAME_SIZE 301
571
#define VAR_NAME 302
572
#define VAR_STUB_ZONE 303
573
#define VAR_STUB_HOST 304
574
#define VAR_STUB_ADDR 305
575
#define VAR_TARGET_FETCH_POLICY 306
576
#define VAR_HARDEN_SHORT_BUFSIZE 307
577
#define VAR_HARDEN_LARGE_QUERIES 308
578
#define VAR_FORWARD_ZONE 309
579
#define VAR_FORWARD_HOST 310
580
#define VAR_FORWARD_ADDR 311
581
#define VAR_DO_NOT_QUERY_ADDRESS 312
582
#define VAR_HIDE_IDENTITY 313
583
#define VAR_HIDE_VERSION 314
584
#define VAR_IDENTITY 315
585
#define VAR_VERSION 316
586
#define VAR_HARDEN_GLUE 317
587
#define VAR_MODULE_CONF 318
588
#define VAR_TRUST_ANCHOR_FILE 319
589
#define VAR_TRUST_ANCHOR 320
590
#define VAR_VAL_OVERRIDE_DATE 321
591
#define VAR_BOGUS_TTL 322
592
#define VAR_VAL_CLEAN_ADDITIONAL 323
593
#define VAR_VAL_PERMISSIVE_MODE 324
594
#define VAR_INCOMING_NUM_TCP 325
595
#define VAR_MSG_BUFFER_SIZE 326
596
#define VAR_KEY_CACHE_SIZE 327
597
#define VAR_KEY_CACHE_SLABS 328
598
#define VAR_TRUSTED_KEYS_FILE 329
599
#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 330
600
#define VAR_USE_SYSLOG 331
601
#define VAR_OUTGOING_INTERFACE 332
602
#define VAR_ROOT_HINTS 333
603
#define VAR_DO_NOT_QUERY_LOCALHOST 334
604
#define VAR_CACHE_MAX_TTL 335
605
#define VAR_HARDEN_DNSSEC_STRIPPED 336
606
#define VAR_ACCESS_CONTROL 337
607
#define VAR_LOCAL_ZONE 338
608
#define VAR_LOCAL_DATA 339
609
#define VAR_INTERFACE_AUTOMATIC 340
610
#define VAR_STATISTICS_INTERVAL 341
611
#define VAR_DO_DAEMONIZE 342
612
#define VAR_USE_CAPS_FOR_ID 343
613
#define VAR_STATISTICS_CUMULATIVE 344
614
#define VAR_OUTGOING_PORT_PERMIT 345
615
#define VAR_OUTGOING_PORT_AVOID 346
616
#define VAR_DLV_ANCHOR_FILE 347
617
#define VAR_DLV_ANCHOR 348
618
#define VAR_NEG_CACHE_SIZE 349
619
#define VAR_HARDEN_REFERRAL_PATH 350
620
#define VAR_PRIVATE_ADDRESS 351
621
#define VAR_PRIVATE_DOMAIN 352
622
#define VAR_REMOTE_CONTROL 353
623
#define VAR_CONTROL_ENABLE 354
624
#define VAR_CONTROL_INTERFACE 355
625
#define VAR_CONTROL_PORT 356
626
#define VAR_SERVER_KEY_FILE 357
627
#define VAR_SERVER_CERT_FILE 358
628
#define VAR_CONTROL_KEY_FILE 359
629
#define VAR_CONTROL_CERT_FILE 360
630
#define VAR_CONTROL_USE_CERT 361
631
#define VAR_TCP_REUSE_TIMEOUT 362
632
#define VAR_MAX_REUSE_TCP_QUERIES 363
633
#define VAR_EXTENDED_STATISTICS 364
634
#define VAR_LOCAL_DATA_PTR 365
635
#define VAR_JOSTLE_TIMEOUT 366
636
#define VAR_STUB_PRIME 367
637
#define VAR_UNWANTED_REPLY_THRESHOLD 368
638
#define VAR_LOG_TIME_ASCII 369
639
#define VAR_DOMAIN_INSECURE 370
640
#define VAR_PYTHON 371
641
#define VAR_PYTHON_SCRIPT 372
642
#define VAR_VAL_SIG_SKEW_MIN 373
643
#define VAR_VAL_SIG_SKEW_MAX 374
644
#define VAR_VAL_MAX_RESTART 375
645
#define VAR_CACHE_MIN_TTL 376
646
#define VAR_VAL_LOG_LEVEL 377
647
#define VAR_AUTO_TRUST_ANCHOR_FILE 378
648
#define VAR_KEEP_MISSING 379
649
#define VAR_ADD_HOLDDOWN 380
650
#define VAR_DEL_HOLDDOWN 381
651
#define VAR_SO_RCVBUF 382
652
#define VAR_EDNS_BUFFER_SIZE 383
653
#define VAR_PREFETCH 384
654
#define VAR_PREFETCH_KEY 385
655
#define VAR_SO_SNDBUF 386
656
#define VAR_SO_REUSEPORT 387
657
#define VAR_HARDEN_BELOW_NXDOMAIN 388
658
#define VAR_IGNORE_CD_FLAG 389
659
#define VAR_LOG_QUERIES 390
660
#define VAR_LOG_REPLIES 391
661
#define VAR_LOG_LOCAL_ACTIONS 392
662
#define VAR_TCP_UPSTREAM 393
663
#define VAR_SSL_UPSTREAM 394
664
#define VAR_TCP_AUTH_QUERY_TIMEOUT 395
665
#define VAR_SSL_SERVICE_KEY 396
666
#define VAR_SSL_SERVICE_PEM 397
667
#define VAR_SSL_PORT 398
668
#define VAR_FORWARD_FIRST 399
669
#define VAR_STUB_SSL_UPSTREAM 400
670
#define VAR_FORWARD_SSL_UPSTREAM 401
671
#define VAR_TLS_CERT_BUNDLE 402
672
#define VAR_STUB_TCP_UPSTREAM 403
673
#define VAR_FORWARD_TCP_UPSTREAM 404
674
#define VAR_HTTPS_PORT 405
675
#define VAR_HTTP_ENDPOINT 406
676
#define VAR_HTTP_MAX_STREAMS 407
677
#define VAR_HTTP_QUERY_BUFFER_SIZE 408
678
#define VAR_HTTP_RESPONSE_BUFFER_SIZE 409
679
#define VAR_HTTP_NODELAY 410
680
#define VAR_HTTP_NOTLS_DOWNSTREAM 411
681
#define VAR_STUB_FIRST 412
682
#define VAR_MINIMAL_RESPONSES 413
683
#define VAR_RRSET_ROUNDROBIN 414
684
#define VAR_MAX_UDP_SIZE 415
685
#define VAR_DELAY_CLOSE 416
686
#define VAR_UDP_CONNECT 417
687
#define VAR_UNBLOCK_LAN_ZONES 418
688
#define VAR_INSECURE_LAN_ZONES 419
689
#define VAR_INFRA_CACHE_MIN_RTT 420
690
#define VAR_INFRA_CACHE_MAX_RTT 421
691
#define VAR_INFRA_KEEP_PROBING 422
692
#define VAR_DNS64_PREFIX 423
693
#define VAR_DNS64_SYNTHALL 424
694
#define VAR_DNS64_IGNORE_AAAA 425
695
#define VAR_NAT64_PREFIX 426
696
#define VAR_DNSTAP 427
697
#define VAR_DNSTAP_ENABLE 428
698
#define VAR_DNSTAP_SOCKET_PATH 429
699
#define VAR_DNSTAP_IP 430
700
#define VAR_DNSTAP_TLS 431
701
#define VAR_DNSTAP_TLS_SERVER_NAME 432
702
#define VAR_DNSTAP_TLS_CERT_BUNDLE 433
703
#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 434
704
#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 435
705
#define VAR_DNSTAP_SEND_IDENTITY 436
706
#define VAR_DNSTAP_SEND_VERSION 437
707
#define VAR_DNSTAP_BIDIRECTIONAL 438
708
#define VAR_DNSTAP_IDENTITY 439
709
#define VAR_DNSTAP_VERSION 440
710
#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 441
711
#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 442
712
#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 443
713
#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 444
714
#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 445
715
#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 446
716
#define VAR_DNSTAP_SAMPLE_RATE 447
717
#define VAR_RESPONSE_IP_TAG 448
718
#define VAR_RESPONSE_IP 449
719
#define VAR_RESPONSE_IP_DATA 450
720
#define VAR_HARDEN_ALGO_DOWNGRADE 451
721
#define VAR_IP_TRANSPARENT 452
722
#define VAR_IP_DSCP 453
723
#define VAR_DISABLE_DNSSEC_LAME_CHECK 454
724
#define VAR_IP_RATELIMIT 455
725
#define VAR_IP_RATELIMIT_SLABS 456
726
#define VAR_IP_RATELIMIT_SIZE 457
727
#define VAR_RATELIMIT 458
728
#define VAR_RATELIMIT_SLABS 459
729
#define VAR_RATELIMIT_SIZE 460
730
#define VAR_OUTBOUND_MSG_RETRY 461
731
#define VAR_MAX_SENT_COUNT 462
732
#define VAR_MAX_QUERY_RESTARTS 463
733
#define VAR_RATELIMIT_FOR_DOMAIN 464
734
#define VAR_RATELIMIT_BELOW_DOMAIN 465
735
#define VAR_IP_RATELIMIT_FACTOR 466
736
#define VAR_RATELIMIT_FACTOR 467
737
#define VAR_IP_RATELIMIT_BACKOFF 468
738
#define VAR_RATELIMIT_BACKOFF 469
739
#define VAR_SEND_CLIENT_SUBNET 470
740
#define VAR_CLIENT_SUBNET_ZONE 471
741
#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 472
742
#define VAR_CLIENT_SUBNET_OPCODE 473
743
#define VAR_MAX_CLIENT_SUBNET_IPV4 474
744
#define VAR_MAX_CLIENT_SUBNET_IPV6 475
745
#define VAR_MIN_CLIENT_SUBNET_IPV4 476
746
#define VAR_MIN_CLIENT_SUBNET_IPV6 477
747
#define VAR_MAX_ECS_TREE_SIZE_IPV4 478
748
#define VAR_MAX_ECS_TREE_SIZE_IPV6 479
749
#define VAR_CAPS_WHITELIST 480
750
#define VAR_CACHE_MAX_NEGATIVE_TTL 481
751
#define VAR_PERMIT_SMALL_HOLDDOWN 482
752
#define VAR_CACHE_MIN_NEGATIVE_TTL 483
753
#define VAR_QNAME_MINIMISATION 484
754
#define VAR_QNAME_MINIMISATION_STRICT 485
755
#define VAR_IP_FREEBIND 486
756
#define VAR_DEFINE_TAG 487
757
#define VAR_LOCAL_ZONE_TAG 488
758
#define VAR_ACCESS_CONTROL_TAG 489
759
#define VAR_LOCAL_ZONE_OVERRIDE 490
760
#define VAR_ACCESS_CONTROL_TAG_ACTION 491
761
#define VAR_ACCESS_CONTROL_TAG_DATA 492
762
#define VAR_VIEW 493
763
#define VAR_ACCESS_CONTROL_VIEW 494
764
#define VAR_VIEW_FIRST 495
765
#define VAR_SERVE_EXPIRED 496
766
#define VAR_SERVE_EXPIRED_TTL 497
767
#define VAR_SERVE_EXPIRED_TTL_RESET 498
768
#define VAR_SERVE_EXPIRED_REPLY_TTL 499
769
#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 500
770
#define VAR_EDE_SERVE_EXPIRED 501
771
#define VAR_SERVE_ORIGINAL_TTL 502
772
#define VAR_FAKE_DSA 503
773
#define VAR_FAKE_SHA1 504
774
#define VAR_LOG_IDENTITY 505
775
#define VAR_HIDE_TRUSTANCHOR 506
776
#define VAR_HIDE_HTTP_USER_AGENT 507
777
#define VAR_HTTP_USER_AGENT 508
778
#define VAR_TRUST_ANCHOR_SIGNALING 509
779
#define VAR_AGGRESSIVE_NSEC 510
780
#define VAR_USE_SYSTEMD 511
781
#define VAR_SHM_ENABLE 512
782
#define VAR_SHM_KEY 513
783
#define VAR_ROOT_KEY_SENTINEL 514
784
#define VAR_DNSCRYPT 515
785
#define VAR_DNSCRYPT_ENABLE 516
786
#define VAR_DNSCRYPT_PORT 517
787
#define VAR_DNSCRYPT_PROVIDER 518
788
#define VAR_DNSCRYPT_SECRET_KEY 519
789
#define VAR_DNSCRYPT_PROVIDER_CERT 520
790
#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 521
791
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 522
792
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 523
793
#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 524
794
#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 525
795
#define VAR_PAD_RESPONSES 526
796
#define VAR_PAD_RESPONSES_BLOCK_SIZE 527
797
#define VAR_PAD_QUERIES 528
798
#define VAR_PAD_QUERIES_BLOCK_SIZE 529
799
#define VAR_IPSECMOD_ENABLED 530
800
#define VAR_IPSECMOD_HOOK 531
801
#define VAR_IPSECMOD_IGNORE_BOGUS 532
802
#define VAR_IPSECMOD_MAX_TTL 533
803
#define VAR_IPSECMOD_WHITELIST 534
804
#define VAR_IPSECMOD_STRICT 535
805
#define VAR_CACHEDB 536
806
#define VAR_CACHEDB_BACKEND 537
807
#define VAR_CACHEDB_SECRETSEED 538
808
#define VAR_CACHEDB_REDISHOST 539
809
#define VAR_CACHEDB_REDISREPLICAHOST 540
810
#define VAR_CACHEDB_REDISPORT 541
811
#define VAR_CACHEDB_REDISREPLICAPORT 542
812
#define VAR_CACHEDB_REDISTIMEOUT 543
813
#define VAR_CACHEDB_REDISREPLICATIMEOUT 544
814
#define VAR_CACHEDB_REDISEXPIRERECORDS 545
815
#define VAR_CACHEDB_REDISPATH 546
816
#define VAR_CACHEDB_REDISREPLICAPATH 547
817
#define VAR_CACHEDB_REDISPASSWORD 548
818
#define VAR_CACHEDB_REDISREPLICAPASSWORD 549
819
#define VAR_CACHEDB_REDISLOGICALDB 550
820
#define VAR_CACHEDB_REDISREPLICALOGICALDB 551
821
#define VAR_CACHEDB_REDISCOMMANDTIMEOUT 552
822
#define VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT 553
823
#define VAR_CACHEDB_REDISCONNECTTIMEOUT 554
824
#define VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT 555
825
#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 556
826
#define VAR_FOR_UPSTREAM 557
827
#define VAR_AUTH_ZONE 558
828
#define VAR_ZONEFILE 559
829
#define VAR_MASTER 560
830
#define VAR_URL 561
831
#define VAR_FOR_DOWNSTREAM 562
832
#define VAR_FALLBACK_ENABLED 563
833
#define VAR_TLS_ADDITIONAL_PORT 564
834
#define VAR_LOW_RTT 565
835
#define VAR_LOW_RTT_PERMIL 566
836
#define VAR_FAST_SERVER_PERMIL 567
837
#define VAR_FAST_SERVER_NUM 568
838
#define VAR_ALLOW_NOTIFY 569
839
#define VAR_TLS_WIN_CERT 570
840
#define VAR_TCP_CONNECTION_LIMIT 571
841
#define VAR_ANSWER_COOKIE 572
842
#define VAR_COOKIE_SECRET 573
843
#define VAR_IP_RATELIMIT_COOKIE 574
844
#define VAR_FORWARD_NO_CACHE 575
845
#define VAR_STUB_NO_CACHE 576
846
#define VAR_LOG_SERVFAIL 577
847
#define VAR_DENY_ANY 578
848
#define VAR_UNKNOWN_SERVER_TIME_LIMIT 579
849
#define VAR_LOG_TAG_QUERYREPLY 580
850
#define VAR_DISCARD_TIMEOUT 581
851
#define VAR_WAIT_LIMIT 582
852
#define VAR_WAIT_LIMIT_COOKIE 583
853
#define VAR_WAIT_LIMIT_NETBLOCK 584
854
#define VAR_WAIT_LIMIT_COOKIE_NETBLOCK 585
855
#define VAR_STREAM_WAIT_SIZE 586
856
#define VAR_TLS_CIPHERS 587
857
#define VAR_TLS_CIPHERSUITES 588
858
#define VAR_TLS_USE_SNI 589
859
#define VAR_TLS_USE_SYSTEM_POLICY_VERSIONS 590
860
#define VAR_IPSET 591
861
#define VAR_IPSET_NAME_V4 592
862
#define VAR_IPSET_NAME_V6 593
863
#define VAR_TLS_SESSION_TICKET_KEYS 594
864
#define VAR_RPZ 595
865
#define VAR_TAGS 596
866
#define VAR_RPZ_ACTION_OVERRIDE 597
867
#define VAR_RPZ_CNAME_OVERRIDE 598
868
#define VAR_RPZ_LOG 599
869
#define VAR_RPZ_LOG_NAME 600
870
#define VAR_DYNLIB 601
871
#define VAR_DYNLIB_FILE 602
872
#define VAR_EDNS_CLIENT_STRING 603
873
#define VAR_EDNS_CLIENT_STRING_OPCODE 604
874
#define VAR_NSID 605
875
#define VAR_ZONEMD_PERMISSIVE_MODE 606
876
#define VAR_ZONEMD_CHECK 607
877
#define VAR_ZONEMD_REJECT_ABSENCE 608
878
#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 609
879
#define VAR_INTERFACE_AUTOMATIC_PORTS 610
880
#define VAR_EDE 611
881
#define VAR_DNS_ERROR_REPORTING 612
882
#define VAR_INTERFACE_ACTION 613
883
#define VAR_INTERFACE_VIEW 614
884
#define VAR_INTERFACE_TAG 615
885
#define VAR_INTERFACE_TAG_ACTION 616
886
#define VAR_INTERFACE_TAG_DATA 617
887
#define VAR_QUIC_PORT 618
888
#define VAR_QUIC_SIZE 619
889
#define VAR_PROXY_PROTOCOL_PORT 620
890
#define VAR_STATISTICS_INHIBIT_ZERO 621
891
#define VAR_HARDEN_UNKNOWN_ADDITIONAL 622
892
#define VAR_DISABLE_EDNS_DO 623
893
#define VAR_CACHEDB_NO_STORE 624
894
#define VAR_LOG_DESTADDR 625
895
#define VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED 626
896
#define VAR_COOKIE_SECRET_FILE 627
897
#define VAR_ITER_SCRUB_NS 628
898
#define VAR_ITER_SCRUB_CNAME 629
899
#define VAR_MAX_GLOBAL_QUOTA 630
900
#define VAR_HARDEN_UNVERIFIED_GLUE 631
901
#define VAR_LOG_TIME_ISO 632
902
#define VAR_ITER_SCRUB_PROMISCUOUS 633
903
904
/* Value type.  */
905
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
906
union YYSTYPE
907
{
908
#line 68 "./util/configparser.y"
909
910
  char* str;
911
912
#line 913 "util/configparser.c"
913
914
};
915
typedef union YYSTYPE YYSTYPE;
916
# define YYSTYPE_IS_TRIVIAL 1
917
# define YYSTYPE_IS_DECLARED 1
918
#endif
919
920
921
extern YYSTYPE yylval;
922
923
int yyparse (void);
924
925
#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
926
927
928
929
#ifdef short
930
# undef short
931
#endif
932
933
/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
934
   <limits.h> and (if available) <stdint.h> are included
935
   so that the code can choose integer types of a good width.  */
936
937
#ifndef __PTRDIFF_MAX__
938
# include <limits.h> /* INFRINGES ON USER NAME SPACE */
939
# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
940
#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
941
#  define YY_STDINT_H
942
# endif
943
#endif
944
945
/* Narrow types that promote to a signed type and that can represent a
946
   signed or unsigned integer of at least N bits.  In tables they can
947
   save space and decrease cache pressure.  Promoting to a signed type
948
   helps avoid bugs in integer arithmetic.  */
949
950
#ifdef __INT_LEAST8_MAX__
951
typedef __INT_LEAST8_TYPE__ yytype_int8;
952
#elif defined YY_STDINT_H
953
typedef int_least8_t yytype_int8;
954
#else
955
typedef signed char yytype_int8;
956
#endif
957
958
#ifdef __INT_LEAST16_MAX__
959
typedef __INT_LEAST16_TYPE__ yytype_int16;
960
#elif defined YY_STDINT_H
961
typedef int_least16_t yytype_int16;
962
#else
963
typedef short yytype_int16;
964
#endif
965
966
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
967
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
968
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
969
       && UINT_LEAST8_MAX <= INT_MAX)
970
typedef uint_least8_t yytype_uint8;
971
#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
972
typedef unsigned char yytype_uint8;
973
#else
974
typedef short yytype_uint8;
975
#endif
976
977
#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
978
typedef __UINT_LEAST16_TYPE__ yytype_uint16;
979
#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
980
       && UINT_LEAST16_MAX <= INT_MAX)
981
typedef uint_least16_t yytype_uint16;
982
#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
983
typedef unsigned short yytype_uint16;
984
#else
985
typedef int yytype_uint16;
986
#endif
987
988
#ifndef YYPTRDIFF_T
989
# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
990
0
#  define YYPTRDIFF_T __PTRDIFF_TYPE__
991
#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
992
# elif defined PTRDIFF_MAX
993
#  ifndef ptrdiff_t
994
#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
995
#  endif
996
#  define YYPTRDIFF_T ptrdiff_t
997
#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
998
# else
999
#  define YYPTRDIFF_T long
1000
#  define YYPTRDIFF_MAXIMUM LONG_MAX
1001
# endif
1002
#endif
1003
1004
#ifndef YYSIZE_T
1005
# ifdef __SIZE_TYPE__
1006
#  define YYSIZE_T __SIZE_TYPE__
1007
# elif defined size_t
1008
#  define YYSIZE_T size_t
1009
# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1010
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1011
#  define YYSIZE_T size_t
1012
# else
1013
#  define YYSIZE_T unsigned
1014
# endif
1015
#endif
1016
1017
#define YYSIZE_MAXIMUM                                  \
1018
  YY_CAST (YYPTRDIFF_T,                                 \
1019
           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
1020
            ? YYPTRDIFF_MAXIMUM                         \
1021
            : YY_CAST (YYSIZE_T, -1)))
1022
1023
0
#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
1024
1025
/* Stored state numbers (used for stacks). */
1026
typedef yytype_int16 yy_state_t;
1027
1028
/* State numbers in computations.  */
1029
typedef int yy_state_fast_t;
1030
1031
#ifndef YY_
1032
# if defined YYENABLE_NLS && YYENABLE_NLS
1033
#  if ENABLE_NLS
1034
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1035
#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
1036
#  endif
1037
# endif
1038
# ifndef YY_
1039
0
#  define YY_(Msgid) Msgid
1040
# endif
1041
#endif
1042
1043
#ifndef YY_ATTRIBUTE_PURE
1044
# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
1045
#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
1046
# else
1047
#  define YY_ATTRIBUTE_PURE
1048
# endif
1049
#endif
1050
1051
#ifndef YY_ATTRIBUTE_UNUSED
1052
# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
1053
#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
1054
# else
1055
#  define YY_ATTRIBUTE_UNUSED
1056
# endif
1057
#endif
1058
1059
/* Suppress unused-variable warnings by "using" E.  */
1060
#if ! defined lint || defined __GNUC__
1061
0
# define YYUSE(E) ((void) (E))
1062
#else
1063
# define YYUSE(E) /* empty */
1064
#endif
1065
1066
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
1067
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
1068
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
1069
    _Pragma ("GCC diagnostic push")                                     \
1070
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
1071
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1072
# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
1073
    _Pragma ("GCC diagnostic pop")
1074
#else
1075
# define YY_INITIAL_VALUE(Value) Value
1076
#endif
1077
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1078
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1079
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
1080
#endif
1081
#ifndef YY_INITIAL_VALUE
1082
# define YY_INITIAL_VALUE(Value) /* Nothing. */
1083
#endif
1084
1085
#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1086
# define YY_IGNORE_USELESS_CAST_BEGIN                          \
1087
    _Pragma ("GCC diagnostic push")                            \
1088
    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1089
# define YY_IGNORE_USELESS_CAST_END            \
1090
    _Pragma ("GCC diagnostic pop")
1091
#endif
1092
#ifndef YY_IGNORE_USELESS_CAST_BEGIN
1093
# define YY_IGNORE_USELESS_CAST_BEGIN
1094
# define YY_IGNORE_USELESS_CAST_END
1095
#endif
1096
1097
1098
0
#define YY_ASSERT(E) ((void) (0 && (E)))
1099
1100
#if ! defined yyoverflow || YYERROR_VERBOSE
1101
1102
/* The parser invokes alloca or malloc; define the necessary symbols.  */
1103
1104
# ifdef YYSTACK_USE_ALLOCA
1105
#  if YYSTACK_USE_ALLOCA
1106
#   ifdef __GNUC__
1107
#    define YYSTACK_ALLOC __builtin_alloca
1108
#   elif defined __BUILTIN_VA_ARG_INCR
1109
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1110
#   elif defined _AIX
1111
#    define YYSTACK_ALLOC __alloca
1112
#   elif defined _MSC_VER
1113
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1114
#    define alloca _alloca
1115
#   else
1116
#    define YYSTACK_ALLOC alloca
1117
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1118
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1119
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
1120
#     ifndef EXIT_SUCCESS
1121
#      define EXIT_SUCCESS 0
1122
#     endif
1123
#    endif
1124
#   endif
1125
#  endif
1126
# endif
1127
1128
# ifdef YYSTACK_ALLOC
1129
   /* Pacify GCC's 'empty if-body' warning.  */
1130
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1131
#  ifndef YYSTACK_ALLOC_MAXIMUM
1132
    /* The OS might guarantee only one guard page at the bottom of the stack,
1133
       and a page size can be as small as 4096 bytes.  So we cannot safely
1134
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
1135
       to allow for a few compiler-allocated temporary stack slots.  */
1136
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1137
#  endif
1138
# else
1139
#  define YYSTACK_ALLOC YYMALLOC
1140
0
#  define YYSTACK_FREE YYFREE
1141
#  ifndef YYSTACK_ALLOC_MAXIMUM
1142
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1143
#  endif
1144
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
1145
       && ! ((defined YYMALLOC || defined malloc) \
1146
             && (defined YYFREE || defined free)))
1147
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1148
#   ifndef EXIT_SUCCESS
1149
#    define EXIT_SUCCESS 0
1150
#   endif
1151
#  endif
1152
#  ifndef YYMALLOC
1153
#   define YYMALLOC malloc
1154
#   if ! defined malloc && ! defined EXIT_SUCCESS
1155
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1156
#   endif
1157
#  endif
1158
#  ifndef YYFREE
1159
0
#   define YYFREE free
1160
#   if ! defined free && ! defined EXIT_SUCCESS
1161
void free (void *); /* INFRINGES ON USER NAME SPACE */
1162
#   endif
1163
#  endif
1164
# endif
1165
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1166
1167
1168
#if (! defined yyoverflow \
1169
     && (! defined __cplusplus \
1170
         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1171
1172
/* A type that is properly aligned for any stack member.  */
1173
union yyalloc
1174
{
1175
  yy_state_t yyss_alloc;
1176
  YYSTYPE yyvs_alloc;
1177
};
1178
1179
/* The size of the maximum gap between one aligned stack and the next.  */
1180
0
# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1181
1182
/* The size of an array large to enough to hold all stacks, each with
1183
   N elements.  */
1184
# define YYSTACK_BYTES(N) \
1185
     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
1186
      + YYSTACK_GAP_MAXIMUM)
1187
1188
# define YYCOPY_NEEDED 1
1189
1190
/* Relocate STACK from its old location to the new one.  The
1191
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
1192
   elements in the stack, and YYPTR gives the new location of the
1193
   stack.  Advance YYPTR to a properly aligned location for the next
1194
   stack.  */
1195
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
1196
0
    do                                                                  \
1197
0
      {                                                                 \
1198
0
        YYPTRDIFF_T yynewbytes;                                         \
1199
0
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
1200
0
        Stack = &yyptr->Stack_alloc;                                    \
1201
0
        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1202
0
        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
1203
0
      }                                                                 \
1204
0
    while (0)
1205
1206
#endif
1207
1208
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1209
/* Copy COUNT objects from SRC to DST.  The source and destination do
1210
   not overlap.  */
1211
# ifndef YYCOPY
1212
#  if defined __GNUC__ && 1 < __GNUC__
1213
#   define YYCOPY(Dst, Src, Count) \
1214
0
      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1215
#  else
1216
#   define YYCOPY(Dst, Src, Count)              \
1217
      do                                        \
1218
        {                                       \
1219
          YYPTRDIFF_T yyi;                      \
1220
          for (yyi = 0; yyi < (Count); yyi++)   \
1221
            (Dst)[yyi] = (Src)[yyi];            \
1222
        }                                       \
1223
      while (0)
1224
#  endif
1225
# endif
1226
#endif /* !YYCOPY_NEEDED */
1227
1228
/* YYFINAL -- State number of the termination state.  */
1229
0
#define YYFINAL  2
1230
/* YYLAST -- Last index in YYTABLE.  */
1231
0
#define YYLAST   809
1232
1233
/* YYNTOKENS -- Number of terminals.  */
1234
0
#define YYNTOKENS  379
1235
/* YYNNTS -- Number of nonterminals.  */
1236
#define YYNNTS  407
1237
/* YYNRULES -- Number of rules.  */
1238
#define YYNRULES  788
1239
/* YYNSTATES -- Number of states.  */
1240
#define YYNSTATES  1180
1241
1242
0
#define YYUNDEFTOK  2
1243
0
#define YYMAXUTOK   633
1244
1245
1246
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1247
   as returned by yylex, with out-of-bounds checking.  */
1248
#define YYTRANSLATE(YYX)                                                \
1249
0
  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1250
1251
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1252
   as returned by yylex.  */
1253
static const yytype_int16 yytranslate[] =
1254
{
1255
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1256
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1257
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1258
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1259
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1260
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1261
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1262
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1263
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1264
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1265
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1266
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1267
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1268
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1269
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1270
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1271
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1272
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1273
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1274
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1275
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1276
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1277
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1278
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1279
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1280
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
1281
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
1282
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
1283
      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
1284
      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
1285
      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
1286
      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1287
      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1288
      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
1289
      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
1290
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
1291
     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
1292
     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
1293
     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
1294
     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
1295
     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
1296
     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
1297
     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
1298
     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
1299
     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
1300
     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
1301
     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
1302
     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
1303
     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
1304
     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
1305
     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
1306
     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1307
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1308
     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1309
     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1310
     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1311
     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1312
     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1313
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1314
     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1315
     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1316
     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1317
     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1318
     375,   376,   377,   378
1319
};
1320
1321
#if YYDEBUG
1322
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
1323
static const yytype_int16 yyrline[] =
1324
{
1325
       0,   222,   222,   222,   223,   223,   224,   224,   225,   225,
1326
     225,   226,   226,   227,   227,   228,   228,   229,   231,   238,
1327
     244,   245,   246,   246,   246,   247,   247,   248,   248,   248,
1328
     249,   249,   249,   250,   250,   250,   251,   251,   252,   253,
1329
     253,   253,   254,   254,   254,   255,   255,   256,   256,   257,
1330
     257,   258,   258,   259,   259,   260,   260,   261,   261,   262,
1331
     262,   263,   263,   263,   264,   264,   265,   265,   265,   266,
1332
     266,   266,   267,   267,   268,   268,   269,   269,   270,   270,
1333
     271,   271,   271,   272,   272,   273,   273,   274,   274,   274,
1334
     275,   275,   276,   276,   277,   277,   278,   278,   278,   279,
1335
     279,   280,   280,   281,   281,   282,   282,   283,   283,   284,
1336
     284,   285,   285,   286,   286,   287,   287,   287,   288,   288,
1337
     288,   289,   289,   289,   290,   290,   290,   290,   291,   292,
1338
     292,   292,   293,   293,   293,   294,   294,   295,   295,   296,
1339
     296,   296,   297,   297,   297,   298,   298,   299,   299,   299,
1340
     300,   301,   301,   301,   302,   302,   302,   303,   303,   304,
1341
     304,   305,   305,   306,   307,   307,   308,   308,   309,   309,
1342
     310,   310,   311,   311,   312,   312,   313,   313,   314,   314,
1343
     315,   315,   316,   316,   317,   318,   318,   319,   319,   319,
1344
     320,   320,   321,   321,   322,   322,   323,   323,   323,   324,
1345
     324,   325,   326,   326,   327,   327,   328,   329,   329,   330,
1346
     330,   331,   331,   331,   332,   332,   333,   333,   333,   334,
1347
     334,   334,   335,   335,   336,   337,   337,   338,   338,   339,
1348
     339,   340,   340,   341,   341,   341,   342,   342,   342,   343,
1349
     343,   343,   344,   344,   345,   345,   345,   346,   346,   347,
1350
     347,   348,   348,   349,   349,   349,   350,   350,   351,   352,
1351
     352,   353,   353,   354,   354,   355,   355,   356,   356,   357,
1352
     358,   358,   359,   359,   360,   360,   361,   361,   361,   362,
1353
     362,   362,   364,   372,   386,   387,   388,   388,   388,   388,
1354
     388,   389,   389,   389,   391,   399,   413,   414,   415,   415,
1355
     415,   415,   416,   416,   416,   418,   426,   440,   441,   442,
1356
     442,   442,   442,   443,   443,   443,   445,   466,   467,   468,
1357
     468,   468,   468,   469,   469,   469,   470,   470,   470,   473,
1358
     492,   509,   517,   527,   534,   544,   563,   564,   565,   565,
1359
     565,   565,   565,   566,   566,   566,   567,   567,   567,   567,
1360
     569,   578,   587,   598,   607,   616,   625,   634,   645,   654,
1361
     666,   680,   695,   706,   723,   740,   757,   774,   789,   804,
1362
     817,   832,   841,   850,   859,   868,   877,   886,   893,   902,
1363
     911,   920,   929,   938,   947,   956,   965,   974,   987,   998,
1364
    1009,  1020,  1029,  1042,  1055,  1064,  1073,  1082,  1089,  1096,
1365
    1105,  1112,  1121,  1129,  1136,  1143,  1151,  1160,  1169,  1177,
1366
    1195,  1203,  1211,  1219,  1227,  1235,  1248,  1255,  1264,  1273,
1367
    1287,  1296,  1305,  1314,  1323,  1332,  1341,  1350,  1359,  1366,
1368
    1373,  1399,  1407,  1414,  1421,  1428,  1435,  1443,  1451,  1459,
1369
    1466,  1477,  1488,  1495,  1504,  1513,  1522,  1531,  1538,  1545,
1370
    1552,  1568,  1576,  1584,  1594,  1604,  1614,  1628,  1636,  1649,
1371
    1660,  1668,  1681,  1690,  1699,  1708,  1717,  1727,  1737,  1745,
1372
    1758,  1767,  1775,  1784,  1792,  1805,  1814,  1823,  1833,  1840,
1373
    1850,  1860,  1870,  1880,  1890,  1900,  1910,  1920,  1930,  1940,
1374
    1947,  1954,  1961,  1970,  1979,  1988,  1997,  2004,  2014,  2022,
1375
    2031,  2038,  2056,  2069,  2082,  2095,  2104,  2113,  2122,  2131,
1376
    2140,  2150,  2160,  2171,  2180,  2189,  2198,  2207,  2216,  2225,
1377
    2234,  2243,  2252,  2265,  2278,  2287,  2294,  2303,  2312,  2321,
1378
    2330,  2340,  2348,  2361,  2369,  2425,  2432,  2447,  2457,  2467,
1379
    2474,  2481,  2488,  2495,  2510,  2525,  2532,  2539,  2548,  2556,
1380
    2563,  2577,  2598,  2619,  2631,  2643,  2655,  2664,  2685,  2697,
1381
    2709,  2718,  2739,  2748,  2757,  2766,  2774,  2782,  2795,  2808,
1382
    2823,  2838,  2847,  2856,  2866,  2876,  2885,  2894,  2903,  2909,
1383
    2918,  2927,  2937,  2947,  2957,  2966,  2976,  2985,  2998,  3011,
1384
    3023,  3037,  3049,  3063,  3072,  3083,  3092,  3101,  3108,  3118,
1385
    3125,  3132,  3141,  3150,  3160,  3170,  3180,  3190,  3197,  3204,
1386
    3213,  3222,  3232,  3242,  3252,  3259,  3266,  3273,  3281,  3291,
1387
    3301,  3311,  3321,  3331,  3341,  3397,  3407,  3415,  3423,  3438,
1388
    3447,  3453,  3454,  3455,  3455,  3455,  3456,  3456,  3456,  3457,
1389
    3457,  3459,  3469,  3478,  3485,  3492,  3499,  3506,  3513,  3520,
1390
    3526,  3527,  3528,  3528,  3528,  3529,  3529,  3529,  3530,  3531,
1391
    3531,  3532,  3532,  3533,  3533,  3534,  3535,  3536,  3537,  3538,
1392
    3539,  3540,  3542,  3551,  3561,  3568,  3575,  3584,  3591,  3598,
1393
    3605,  3612,  3621,  3630,  3637,  3644,  3654,  3664,  3674,  3684,
1394
    3694,  3704,  3715,  3721,  3722,  3723,  3725,  3732,  3738,  3739,
1395
    3740,  3742,  3749,  3759,  3766,  3775,  3783,  3789,  3790,  3792,
1396
    3792,  3792,  3793,  3793,  3794,  3795,  3796,  3797,  3798,  3800,
1397
    3809,  3818,  3825,  3834,  3841,  3850,  3858,  3871,  3879,  3892,
1398
    3898,  3899,  3900,  3900,  3901,  3901,  3902,  3902,  3903,  3903,
1399
    3904,  3904,  3905,  3905,  3906,  3906,  3907,  3907,  3908,  3908,
1400
    3909,  3909,  3910,  3912,  3924,  3936,  3949,  3962,  3974,  3986,
1401
    4001,  4016,  4028,  4040,  4052,  4064,  4077,  4090,  4103,  4116,
1402
    4129,  4142,  4155,  4170,  4185,  4196,  4205,  4221,  4228,  4237,
1403
    4246,  4255,  4265,  4271,  4272,  4273,  4273,  4275,  4290
1404
};
1405
#endif
1406
1407
#if YYDEBUG || YYERROR_VERBOSE || 0
1408
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1409
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
1410
static const char *const yytname[] =
1411
{
1412
  "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT",
1413
  "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL",
1414
  "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT",
1415
  "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4",
1416
  "VAR_DO_IP6", "VAR_DO_NAT64", "VAR_PREFER_IP6", "VAR_DO_UDP",
1417
  "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS",
1418
  "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE",
1419
  "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_SOCK_QUEUE_TIMEOUT", "VAR_CHROOT",
1420
  "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
1421
  "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS",
1422
  "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE",
1423
  "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL",
1424
  "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS",
1425
  "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME",
1426
  "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR",
1427
  "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE",
1428
  "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST",
1429
  "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY",
1430
  "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE",
1431
  "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR",
1432
  "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL",
1433
  "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
1434
  "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
1435
  "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
1436
  "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
1437
  "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL",
1438
  "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC",
1439
  "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID",
1440
  "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT",
1441
  "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR",
1442
  "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS",
1443
  "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
1444
  "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
1445
  "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
1446
  "VAR_CONTROL_USE_CERT", "VAR_TCP_REUSE_TIMEOUT",
1447
  "VAR_MAX_REUSE_TCP_QUERIES", "VAR_EXTENDED_STATISTICS",
1448
  "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME",
1449
  "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
1450
  "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT",
1451
  "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "VAR_VAL_MAX_RESTART",
1452
  "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE",
1453
  "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN",
1454
  "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH",
1455
  "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT",
1456
  "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES",
1457
  "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM",
1458
  "VAR_SSL_UPSTREAM", "VAR_TCP_AUTH_QUERY_TIMEOUT", "VAR_SSL_SERVICE_KEY",
1459
  "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
1460
  "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM",
1461
  "VAR_TLS_CERT_BUNDLE", "VAR_STUB_TCP_UPSTREAM",
1462
  "VAR_FORWARD_TCP_UPSTREAM", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT",
1463
  "VAR_HTTP_MAX_STREAMS", "VAR_HTTP_QUERY_BUFFER_SIZE",
1464
  "VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY",
1465
  "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
1466
  "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE",
1467
  "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
1468
  "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_CACHE_MAX_RTT",
1469
  "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
1470
  "VAR_DNS64_IGNORE_AAAA", "VAR_NAT64_PREFIX", "VAR_DNSTAP",
1471
  "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP",
1472
  "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME",
1473
  "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE",
1474
  "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY",
1475
  "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL",
1476
  "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
1477
  "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
1478
  "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
1479
  "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
1480
  "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
1481
  "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
1482
  "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_DNSTAP_SAMPLE_RATE",
1483
  "VAR_RESPONSE_IP_TAG", "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA",
1484
  "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_IP_DSCP",
1485
  "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT",
1486
  "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT",
1487
  "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_OUTBOUND_MSG_RETRY",
1488
  "VAR_MAX_SENT_COUNT", "VAR_MAX_QUERY_RESTARTS",
1489
  "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
1490
  "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
1491
  "VAR_IP_RATELIMIT_BACKOFF", "VAR_RATELIMIT_BACKOFF",
1492
  "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE",
1493
  "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE",
1494
  "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
1495
  "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6",
1496
  "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
1497
  "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
1498
  "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_CACHE_MIN_NEGATIVE_TTL",
1499
  "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT",
1500
  "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG",
1501
  "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE",
1502
  "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA",
1503
  "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST",
1504
  "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
1505
  "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
1506
  "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_EDE_SERVE_EXPIRED",
1507
  "VAR_SERVE_ORIGINAL_TTL", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
1508
  "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_HIDE_HTTP_USER_AGENT",
1509
  "VAR_HTTP_USER_AGENT", "VAR_TRUST_ANCHOR_SIGNALING",
1510
  "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
1511
  "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT",
1512
  "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER",
1513
  "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT",
1514
  "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED",
1515
  "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE",
1516
  "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS",
1517
  "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS",
1518
  "VAR_PAD_RESPONSES", "VAR_PAD_RESPONSES_BLOCK_SIZE", "VAR_PAD_QUERIES",
1519
  "VAR_PAD_QUERIES_BLOCK_SIZE", "VAR_IPSECMOD_ENABLED",
1520
  "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL",
1521
  "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB",
1522
  "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST",
1523
  "VAR_CACHEDB_REDISREPLICAHOST", "VAR_CACHEDB_REDISPORT",
1524
  "VAR_CACHEDB_REDISREPLICAPORT", "VAR_CACHEDB_REDISTIMEOUT",
1525
  "VAR_CACHEDB_REDISREPLICATIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS",
1526
  "VAR_CACHEDB_REDISPATH", "VAR_CACHEDB_REDISREPLICAPATH",
1527
  "VAR_CACHEDB_REDISPASSWORD", "VAR_CACHEDB_REDISREPLICAPASSWORD",
1528
  "VAR_CACHEDB_REDISLOGICALDB", "VAR_CACHEDB_REDISREPLICALOGICALDB",
1529
  "VAR_CACHEDB_REDISCOMMANDTIMEOUT",
1530
  "VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT",
1531
  "VAR_CACHEDB_REDISCONNECTTIMEOUT",
1532
  "VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT",
1533
  "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM",
1534
  "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL",
1535
  "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT",
1536
  "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL",
1537
  "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT",
1538
  "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", "VAR_COOKIE_SECRET",
1539
  "VAR_IP_RATELIMIT_COOKIE", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE",
1540
  "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT",
1541
  "VAR_LOG_TAG_QUERYREPLY", "VAR_DISCARD_TIMEOUT", "VAR_WAIT_LIMIT",
1542
  "VAR_WAIT_LIMIT_COOKIE", "VAR_WAIT_LIMIT_NETBLOCK",
1543
  "VAR_WAIT_LIMIT_COOKIE_NETBLOCK", "VAR_STREAM_WAIT_SIZE",
1544
  "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI",
1545
  "VAR_TLS_USE_SYSTEM_POLICY_VERSIONS", "VAR_IPSET", "VAR_IPSET_NAME_V4",
1546
  "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ",
1547
  "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE",
1548
  "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE",
1549
  "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID",
1550
  "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK",
1551
  "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA",
1552
  "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_DNS_ERROR_REPORTING",
1553
  "VAR_INTERFACE_ACTION", "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG",
1554
  "VAR_INTERFACE_TAG_ACTION", "VAR_INTERFACE_TAG_DATA", "VAR_QUIC_PORT",
1555
  "VAR_QUIC_SIZE", "VAR_PROXY_PROTOCOL_PORT",
1556
  "VAR_STATISTICS_INHIBIT_ZERO", "VAR_HARDEN_UNKNOWN_ADDITIONAL",
1557
  "VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "VAR_LOG_DESTADDR",
1558
  "VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED", "VAR_COOKIE_SECRET_FILE",
1559
  "VAR_ITER_SCRUB_NS", "VAR_ITER_SCRUB_CNAME", "VAR_MAX_GLOBAL_QUOTA",
1560
  "VAR_HARDEN_UNVERIFIED_GLUE", "VAR_LOG_TIME_ISO",
1561
  "VAR_ITER_SCRUB_PROMISCUOUS", "$accept", "toplevelvars", "toplevelvar",
1562
  "force_toplevel", "serverstart", "contents_server", "content_server",
1563
  "stub_clause", "stubstart", "contents_stub", "content_stub",
1564
  "forward_clause", "forwardstart", "contents_forward", "content_forward",
1565
  "view_clause", "viewstart", "contents_view", "content_view", "authstart",
1566
  "contents_auth", "content_auth", "rpz_tag", "rpz_action_override",
1567
  "rpz_cname_override", "rpz_log", "rpz_log_name",
1568
  "rpz_signal_nxdomain_ra", "rpzstart", "contents_rpz", "content_rpz",
1569
  "server_num_threads", "server_verbosity", "server_statistics_interval",
1570
  "server_statistics_cumulative", "server_extended_statistics",
1571
  "server_statistics_inhibit_zero", "server_shm_enable", "server_shm_key",
1572
  "server_port", "server_send_client_subnet", "server_client_subnet_zone",
1573
  "server_client_subnet_always_forward", "server_client_subnet_opcode",
1574
  "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
1575
  "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
1576
  "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6",
1577
  "server_interface", "server_outgoing_interface", "server_outgoing_range",
1578
  "server_outgoing_port_permit", "server_outgoing_port_avoid",
1579
  "server_outgoing_num_tcp", "server_incoming_num_tcp",
1580
  "server_interface_automatic", "server_interface_automatic_ports",
1581
  "server_do_ip4", "server_do_ip6", "server_do_nat64", "server_do_udp",
1582
  "server_do_tcp", "server_prefer_ip4", "server_prefer_ip6",
1583
  "server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_idle_timeout",
1584
  "server_max_reuse_tcp_queries", "server_tcp_reuse_timeout",
1585
  "server_tcp_auth_query_timeout", "server_tcp_keepalive",
1586
  "server_tcp_keepalive_timeout", "server_sock_queue_timeout",
1587
  "server_tcp_upstream", "server_udp_upstream_without_downstream",
1588
  "server_ssl_upstream", "server_ssl_service_key",
1589
  "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
1590
  "server_tls_win_cert", "server_tls_additional_port",
1591
  "server_tls_ciphers", "server_tls_ciphersuites",
1592
  "server_tls_session_ticket_keys", "server_tls_use_sni",
1593
  "server_tls_use_system_policy_versions", "server_https_port",
1594
  "server_http_endpoint", "server_http_max_streams",
1595
  "server_http_query_buffer_size", "server_http_response_buffer_size",
1596
  "server_http_nodelay", "server_http_notls_downstream",
1597
  "server_quic_port", "server_quic_size", "server_use_systemd",
1598
  "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
1599
  "server_log_time_iso", "server_log_queries", "server_log_replies",
1600
  "server_log_tag_queryreply", "server_log_servfail",
1601
  "server_log_destaddr", "server_log_local_actions", "server_chroot",
1602
  "server_username", "server_directory", "server_logfile",
1603
  "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
1604
  "server_dlv_anchor", "server_auto_trust_anchor_file",
1605
  "server_trust_anchor_file", "server_trusted_keys_file",
1606
  "server_trust_anchor", "server_trust_anchor_signaling",
1607
  "server_root_key_sentinel", "server_domain_insecure",
1608
  "server_hide_identity", "server_hide_version", "server_hide_trustanchor",
1609
  "server_hide_http_user_agent", "server_identity", "server_version",
1610
  "server_http_user_agent", "server_nsid", "server_so_rcvbuf",
1611
  "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
1612
  "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size",
1613
  "server_edns_buffer_size", "server_msg_buffer_size",
1614
  "server_msg_cache_size", "server_msg_cache_slabs",
1615
  "server_num_queries_per_thread", "server_jostle_timeout",
1616
  "server_delay_close", "server_udp_connect", "server_unblock_lan_zones",
1617
  "server_insecure_lan_zones", "server_rrset_cache_size",
1618
  "server_rrset_cache_slabs", "server_infra_host_ttl",
1619
  "server_infra_lame_ttl", "server_infra_cache_numhosts",
1620
  "server_infra_cache_lame_size", "server_infra_cache_slabs",
1621
  "server_infra_cache_min_rtt", "server_infra_cache_max_rtt",
1622
  "server_infra_keep_probing", "server_target_fetch_policy",
1623
  "server_harden_short_bufsize", "server_harden_large_queries",
1624
  "server_harden_glue", "server_harden_unverified_glue",
1625
  "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
1626
  "server_harden_referral_path", "server_harden_algo_downgrade",
1627
  "server_harden_unknown_additional", "server_use_caps_for_id",
1628
  "server_caps_whitelist", "server_private_address",
1629
  "server_private_domain", "server_prefetch", "server_prefetch_key",
1630
  "server_deny_any", "server_unwanted_reply_threshold",
1631
  "server_do_not_query_address", "server_do_not_query_localhost",
1632
  "server_access_control", "server_interface_action", "server_module_conf",
1633
  "server_val_override_date", "server_val_sig_skew_min",
1634
  "server_val_sig_skew_max", "server_val_max_restart",
1635
  "server_cache_max_ttl", "server_cache_max_negative_ttl",
1636
  "server_cache_min_negative_ttl", "server_cache_min_ttl",
1637
  "server_bogus_ttl", "server_val_clean_additional",
1638
  "server_val_permissive_mode", "server_aggressive_nsec",
1639
  "server_ignore_cd_flag", "server_disable_edns_do",
1640
  "server_serve_expired", "server_serve_expired_ttl",
1641
  "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl",
1642
  "server_serve_expired_client_timeout", "server_ede_serve_expired",
1643
  "server_serve_original_ttl", "server_fake_dsa", "server_fake_sha1",
1644
  "server_val_log_level", "server_val_nsec3_keysize_iterations",
1645
  "server_zonemd_permissive_mode", "server_add_holddown",
1646
  "server_del_holddown", "server_keep_missing",
1647
  "server_permit_small_holddown", "server_key_cache_size",
1648
  "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
1649
  "server_local_data", "server_local_data_ptr", "server_minimal_responses",
1650
  "server_rrset_roundrobin", "server_unknown_server_time_limit",
1651
  "server_discard_timeout", "server_wait_limit",
1652
  "server_wait_limit_cookie", "server_wait_limit_netblock",
1653
  "server_wait_limit_cookie_netblock", "server_max_udp_size",
1654
  "server_dns64_prefix", "server_dns64_synthall",
1655
  "server_dns64_ignore_aaaa", "server_nat64_prefix", "server_define_tag",
1656
  "server_local_zone_tag", "server_access_control_tag",
1657
  "server_access_control_tag_action", "server_access_control_tag_data",
1658
  "server_local_zone_override", "server_access_control_view",
1659
  "server_interface_tag", "server_interface_tag_action",
1660
  "server_interface_tag_data", "server_interface_view",
1661
  "server_response_ip_tag", "server_ip_ratelimit",
1662
  "server_ip_ratelimit_cookie", "server_ratelimit",
1663
  "server_ip_ratelimit_size", "server_ratelimit_size",
1664
  "server_ip_ratelimit_slabs", "server_ratelimit_slabs",
1665
  "server_ratelimit_for_domain", "server_ratelimit_below_domain",
1666
  "server_ip_ratelimit_factor", "server_ratelimit_factor",
1667
  "server_ip_ratelimit_backoff", "server_ratelimit_backoff",
1668
  "server_outbound_msg_retry", "server_max_sent_count",
1669
  "server_max_query_restarts", "server_low_rtt", "server_fast_server_num",
1670
  "server_fast_server_permil", "server_qname_minimisation",
1671
  "server_qname_minimisation_strict", "server_pad_responses",
1672
  "server_pad_responses_block_size", "server_pad_queries",
1673
  "server_pad_queries_block_size", "server_ipsecmod_enabled",
1674
  "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
1675
  "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
1676
  "server_ipsecmod_strict", "server_edns_client_string",
1677
  "server_edns_client_string_opcode", "server_ede",
1678
  "server_dns_error_reporting", "server_proxy_protocol_port", "stub_name",
1679
  "stub_host", "stub_addr", "stub_first", "stub_no_cache",
1680
  "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", "forward_name",
1681
  "forward_host", "forward_addr", "forward_first", "forward_no_cache",
1682
  "forward_ssl_upstream", "forward_tcp_upstream", "auth_name",
1683
  "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
1684
  "auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream",
1685
  "auth_for_upstream", "auth_fallback_enabled", "view_name",
1686
  "view_local_zone", "view_response_ip", "view_response_ip_data",
1687
  "view_local_data", "view_local_data_ptr", "view_first", "rcstart",
1688
  "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
1689
  "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
1690
  "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
1691
  "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
1692
  "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
1693
  "dt_dnstap_tls", "dt_dnstap_tls_server_name",
1694
  "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
1695
  "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
1696
  "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
1697
  "dt_dnstap_log_resolver_query_messages",
1698
  "dt_dnstap_log_resolver_response_messages",
1699
  "dt_dnstap_log_client_query_messages",
1700
  "dt_dnstap_log_client_response_messages",
1701
  "dt_dnstap_log_forwarder_query_messages",
1702
  "dt_dnstap_log_forwarder_response_messages", "dt_dnstap_sample_rate",
1703
  "pythonstart", "contents_py", "content_py", "py_script", "dynlibstart",
1704
  "contents_dl", "content_dl", "dl_file",
1705
  "server_disable_dnssec_lame_check", "server_log_identity",
1706
  "server_response_ip", "server_response_ip_data", "dnscstart",
1707
  "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
1708
  "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
1709
  "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
1710
  "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
1711
  "dnsc_dnscrypt_shared_secret_cache_slabs",
1712
  "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
1713
  "cachedbstart", "contents_cachedb", "content_cachedb",
1714
  "cachedb_backend_name", "cachedb_secret_seed", "cachedb_no_store",
1715
  "cachedb_check_when_serve_expired", "redis_server_host",
1716
  "redis_replica_server_host", "redis_server_port",
1717
  "redis_replica_server_port", "redis_server_path",
1718
  "redis_replica_server_path", "redis_server_password",
1719
  "redis_replica_server_password", "redis_timeout",
1720
  "redis_replica_timeout", "redis_command_timeout",
1721
  "redis_replica_command_timeout", "redis_connect_timeout",
1722
  "redis_replica_connect_timeout", "redis_expire_records",
1723
  "redis_logical_db", "redis_replica_logical_db",
1724
  "server_tcp_connection_limit", "server_answer_cookie",
1725
  "server_cookie_secret", "server_cookie_secret_file",
1726
  "server_iter_scrub_ns", "server_iter_scrub_cname",
1727
  "server_max_global_quota", "server_iter_scrub_promiscuous", "ipsetstart",
1728
  "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
1729
};
1730
#endif
1731
1732
# ifdef YYPRINT
1733
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
1734
   (internal) symbol number NUM (which must be that of a token).  */
1735
static const yytype_int16 yytoknum[] =
1736
{
1737
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1738
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1739
     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1740
     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1741
     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1742
     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1743
     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1744
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1745
     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1746
     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1747
     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1748
     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1749
     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
1750
     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
1751
     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
1752
     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
1753
     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
1754
     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
1755
     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
1756
     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
1757
     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
1758
     465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
1759
     475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
1760
     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
1761
     495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
1762
     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
1763
     515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
1764
     525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
1765
     535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
1766
     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
1767
     555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
1768
     565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
1769
     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
1770
     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
1771
     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
1772
     605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
1773
     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
1774
     625,   626,   627,   628,   629,   630,   631,   632,   633
1775
};
1776
# endif
1777
1778
0
#define YYPACT_NINF (-311)
1779
1780
#define yypact_value_is_default(Yyn) \
1781
0
  ((Yyn) == YYPACT_NINF)
1782
1783
#define YYTABLE_NINF (-1)
1784
1785
#define yytable_value_is_error(Yyn) \
1786
0
  0
1787
1788
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1789
     STATE-NUM.  */
1790
static const yytype_int16 yypact[] =
1791
{
1792
    -311,   275,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1793
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1794
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1795
    -311,  -311,  -311,  -311,  -311,   -13,   221,   226,   293,   112,
1796
      88,   -14,   294,   -81,  -310,   118,  -122,  -303,    31,    32,
1797
      33,    83,    89,    93,    94,   121,   122,   123,   126,   134,
1798
     169,   215,   217,   238,   240,   241,   242,   243,   244,   245,
1799
     246,   247,   259,   262,   264,   266,   267,   268,   269,   270,
1800
     273,   274,   279,   280,   281,   282,   283,   284,   285,   288,
1801
     291,   297,   298,   314,   315,   317,   318,   320,   321,   322,
1802
     324,   329,   331,   346,   348,   357,   358,   361,   364,   379,
1803
     380,   386,   387,   388,   389,   390,   391,   394,   395,   396,
1804
     397,   398,   399,   400,   401,   402,   403,   405,   411,   412,
1805
     413,   414,   415,   417,   418,   424,   425,   426,   427,   428,
1806
     429,   430,   431,   433,   434,   435,   436,   438,   439,   440,
1807
     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
1808
     451,   452,   453,   456,   479,   480,   481,   482,   483,   484,
1809
     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
1810
     495,   496,   497,   498,   499,   500,   501,   502,   504,   505,
1811
     506,   507,   508,   509,   510,   511,   512,   513,   514,   515,
1812
     516,   517,   518,   519,   520,   521,   522,   524,   526,   527,
1813
     528,   529,   530,   531,   533,   534,   535,   537,   538,   539,
1814
     540,   541,   542,   543,   544,   545,   547,   548,   549,   550,
1815
     551,   552,   553,   554,   555,   556,   557,   558,   559,   560,
1816
     561,   562,   563,   564,   565,   566,   567,   569,   570,   571,
1817
     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
1818
     582,   583,   584,   585,   586,   587,   588,   589,   590,   591,
1819
     592,   593,   594,   595,   596,   597,   598,   599,   600,   602,
1820
     603,   604,   606,   607,   608,   609,   610,   612,   613,   614,
1821
     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
1822
     625,   626,   627,   628,   629,   630,   631,   632,  -311,  -311,
1823
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1824
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1825
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1826
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1827
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1828
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1829
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1830
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1831
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1832
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1833
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1834
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1835
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1836
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1837
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1838
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1839
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1840
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1841
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1842
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1843
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1844
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1845
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1846
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1847
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1848
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   633,
1849
     634,   635,   636,   637,   638,   639,   640,  -311,  -311,  -311,
1850
    -311,  -311,  -311,  -311,  -311,  -311,   641,   642,   643,   644,
1851
     645,   646,   647,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1852
    -311,   648,   649,   650,   651,   652,   653,   654,  -311,  -311,
1853
    -311,  -311,  -311,  -311,  -311,  -311,   655,   656,   657,   658,
1854
     659,   660,   661,   662,   663,   664,  -311,  -311,  -311,  -311,
1855
    -311,  -311,  -311,  -311,  -311,  -311,  -311,   665,   666,   667,
1856
     668,   669,   670,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1857
    -311,  -311,  -311,  -311,  -311,  -311,   671,   672,   673,   674,
1858
     675,   676,   677,   678,  -311,  -311,  -311,  -311,  -311,  -311,
1859
    -311,  -311,  -311,   679,   680,   681,   682,   683,   684,   685,
1860
     686,   687,   688,   689,   690,   691,   692,   693,   694,   695,
1861
     696,   697,   698,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1862
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1863
    -311,  -311,  -311,  -311,   699,  -311,  -311,   700,  -311,  -311,
1864
     701,   702,   703,   704,   705,   706,   707,   708,   709,   710,
1865
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1866
    -311,   711,   712,   713,   714,   715,   716,   717,   718,   719,
1867
     720,   721,   722,   723,   724,   725,   726,   727,   728,   729,
1868
     730,   731,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1869
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1870
    -311,  -311,  -311,  -311,   732,   733,  -311,  -311,  -311,  -311,
1871
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1872
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1873
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1874
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1875
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1876
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1877
    -311,   734,   735,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1878
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1879
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1880
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1881
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1882
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1883
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1884
    -311,  -311,  -311,   736,   737,   738,  -311,  -311,  -311,  -311,
1885
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   739,
1886
     740,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1887
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1888
    -311,  -311,  -311,   741,   742,   743,   744,   745,   746,  -311,
1889
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1890
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1891
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1892
    -311,  -311,  -311,  -311,   747,  -311,  -311,  -311,  -311,  -311,
1893
    -311,  -311,  -311,  -311,  -311,   748,   749,  -311,  -311,  -311,
1894
    -311,  -311,  -311,   750,  -311,  -311,  -311,  -311,  -311,  -311,
1895
     751,   752,   753,   754,   755,  -311,  -311,  -311,  -311,  -311,
1896
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1897
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1898
    -311,  -311,  -311,  -311,  -311,   756,  -311,  -311,   757,   758,
1899
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1900
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1901
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1902
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1903
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1904
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1905
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1906
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1907
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   759,
1908
     760,   761,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1909
     762,   763,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311
1910
};
1911
1912
  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1913
     Performed when YYTABLE does not specify something else to do.  Zero
1914
     means the default is an error.  */
1915
static const yytype_int16 yydefact[] =
1916
{
1917
       2,     0,     1,    18,    19,   283,   295,   630,   692,   649,
1918
     306,   706,   729,   316,   782,   335,   697,     3,    17,    21,
1919
       5,   285,     6,   297,    10,   308,   318,   337,   632,   651,
1920
     694,   699,   708,   731,   784,     4,   282,   294,   305,    14,
1921
      15,     8,     9,     7,    16,    11,    12,    13,     0,     0,
1922
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1923
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1924
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1925
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1926
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1927
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1928
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1929
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1930
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1931
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1932
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1933
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1934
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1935
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1936
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1937
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1938
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1939
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1940
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1941
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1942
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1943
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1944
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1945
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1946
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1947
       0,     0,     0,     0,     0,     0,     0,     0,    20,    22,
1948
      23,    90,    93,   102,   271,   219,   220,    24,   172,   173,
1949
     174,   175,   176,   177,   178,   179,   180,   181,    39,    81,
1950
      25,    94,    95,    50,    74,    89,   267,    26,    27,    28,
1951
      31,    32,    29,    30,    33,    34,    35,   262,   263,   264,
1952
      36,    37,    38,   126,   231,   127,   129,   130,   131,   233,
1953
     238,   234,   250,   251,   252,   256,   258,   132,   133,   134,
1954
     135,   136,   137,   138,   265,   266,   215,    91,    80,   106,
1955
     280,   124,   125,   243,   240,   274,   128,    40,    41,    42,
1956
      43,    44,    82,    96,    97,   113,    68,    78,    69,   223,
1957
     224,   107,    60,    61,   222,    64,    62,    63,    65,   260,
1958
     117,   121,   142,   154,   187,   157,   249,   118,    75,    45,
1959
      46,    47,   104,   143,   144,   145,   146,    48,    49,    51,
1960
      52,    54,    55,    53,   151,   152,   158,    56,    57,    58,
1961
      66,   279,    85,   122,    99,   153,   272,    92,   182,   100,
1962
     101,   119,   120,   241,   105,    59,    83,    86,   196,    67,
1963
      70,   108,   109,   110,    84,   183,   184,   111,    71,    72,
1964
      73,   232,   123,   273,   206,   207,   208,   209,   210,   211,
1965
     212,   213,   221,   112,    79,   261,   114,   115,   116,   185,
1966
      76,    77,    98,    87,    88,   103,   139,   140,   242,   244,
1967
     245,   246,   247,   248,   141,   147,   148,   149,   150,   188,
1968
     189,   191,   193,   194,   192,   195,   198,   199,   200,   197,
1969
     216,   155,   255,   156,   161,   162,   159,   160,   163,   164,
1970
     166,   165,   168,   167,   169,   170,   171,   235,   237,   236,
1971
     186,   201,   202,   203,   204,   205,   225,   227,   226,   228,
1972
     229,   230,   257,   259,   268,   269,   270,   190,   214,   217,
1973
     218,   239,   253,   254,   275,   276,   277,   278,   281,     0,
1974
       0,     0,     0,     0,     0,     0,     0,   284,   286,   287,
1975
     288,   290,   291,   292,   293,   289,     0,     0,     0,     0,
1976
       0,     0,     0,   296,   298,   299,   300,   301,   302,   303,
1977
     304,     0,     0,     0,     0,     0,     0,     0,   307,   309,
1978
     310,   313,   314,   311,   315,   312,     0,     0,     0,     0,
1979
       0,     0,     0,     0,     0,     0,   317,   319,   320,   321,
1980
     322,   326,   327,   328,   323,   324,   325,     0,     0,     0,
1981
       0,     0,     0,   340,   344,   345,   346,   347,   348,   336,
1982
     338,   339,   341,   342,   343,   349,     0,     0,     0,     0,
1983
       0,     0,     0,     0,   631,   633,   635,   634,   640,   636,
1984
     637,   638,   639,     0,     0,     0,     0,     0,     0,     0,
1985
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1986
       0,     0,     0,   650,   652,   654,   653,   655,   656,   657,
1987
     658,   659,   660,   661,   662,   663,   664,   665,   666,   667,
1988
     668,   669,   670,   671,     0,   693,   695,     0,   698,   700,
1989
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1990
     707,   709,   710,   711,   713,   714,   712,   715,   716,   717,
1991
     718,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1992
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1993
       0,     0,   730,   732,   733,   750,   752,   734,   735,   736,
1994
     737,   744,   745,   746,   747,   738,   739,   740,   741,   742,
1995
     743,   751,   748,   749,     0,     0,   783,   785,   786,   351,
1996
     350,   358,   371,   369,   383,   378,   379,   380,   384,   381,
1997
     382,   385,   386,   387,   391,   392,   393,   428,   429,   430,
1998
     431,   432,   460,   461,   462,   468,   469,   374,   470,   471,
1999
     474,   472,   473,   478,   479,   480,   496,   443,   444,   447,
2000
     448,   481,   500,   437,   439,   501,   509,   510,   511,   375,
2001
     459,   531,   532,   438,   525,   419,   370,   433,   497,   505,
2002
     483,     0,     0,   535,   376,   352,   418,   488,   353,   372,
2003
     373,   434,   435,   533,   485,   490,   491,   389,   388,   354,
2004
     536,   463,   495,   420,   442,   502,   503,   504,   508,   524,
2005
     436,   529,   527,   528,   451,   458,   492,   493,   452,   453,
2006
     484,   513,   422,   423,   427,   394,   396,   390,   397,   398,
2007
     399,   400,   408,   409,   410,   411,   412,   413,   414,   537,
2008
     538,   545,   464,   465,   466,   467,   475,   476,   477,   546,
2009
     547,   548,   549,     0,     0,     0,   486,   454,   456,   702,
2010
     562,   567,   565,   564,   568,   566,   575,   576,   577,     0,
2011
       0,   571,   572,   573,   574,   359,   360,   361,   362,   363,
2012
     364,   365,   366,   367,   368,   489,   506,   530,   507,   581,
2013
     582,   455,   550,     0,     0,     0,     0,     0,     0,   515,
2014
     516,   517,   518,   519,   520,   521,   522,   523,   703,   445,
2015
     446,   449,   440,   512,   417,   356,   357,   441,   583,   584,
2016
     585,   586,   587,   589,   588,   590,   591,   592,   395,   402,
2017
     578,   580,   579,   401,     0,   775,   776,   563,   425,   494,
2018
     539,   424,   540,   541,   542,     0,     0,   457,   403,   404,
2019
     406,   407,   405,     0,   594,   450,   526,   377,   595,   596,
2020
       0,     0,     0,     0,     0,   415,   416,   597,   355,   487,
2021
     514,   426,   777,   778,   779,   780,   482,   421,   781,   598,
2022
     599,   600,   605,   603,   604,   601,   602,   606,   607,   608,
2023
     609,   611,   612,   610,   623,     0,   627,   628,     0,     0,
2024
     629,   613,   621,   614,   615,   616,   620,   622,   617,   618,
2025
     619,   329,   330,   331,   332,   333,   334,   641,   643,   642,
2026
     645,   646,   647,   648,   644,   672,   674,   675,   676,   677,
2027
     678,   679,   680,   681,   682,   673,   683,   684,   685,   686,
2028
     687,   688,   689,   690,   691,   696,   701,   719,   720,   721,
2029
     724,   722,   723,   725,   726,   727,   728,   753,   754,   757,
2030
     758,   759,   760,   765,   766,   771,   761,   762,   763,   764,
2031
     772,   773,   767,   768,   769,   770,   755,   756,   787,   788,
2032
     498,   534,   561,   704,   705,   569,   570,   551,   552,     0,
2033
       0,     0,   556,   774,   543,   544,   593,   499,   560,   557,
2034
       0,     0,   624,   625,   626,   555,   553,   554,   558,   559
2035
};
2036
2037
  /* YYPGOTO[NTERM-NUM].  */
2038
static const yytype_int16 yypgoto[] =
2039
{
2040
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2041
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2042
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2043
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2044
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2045
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2046
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2047
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2048
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2049
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2050
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2051
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2052
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2053
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2054
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2055
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2056
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2057
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2058
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2059
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2060
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2061
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2062
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2063
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2064
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2065
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2066
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2067
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2068
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2069
    -311,  -311,  -311,  -311,   764,   765,   766,   767,   768,  -311,
2070
    -311,   769,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2071
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2072
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2073
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2074
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2075
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2076
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2077
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2078
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2079
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2080
    -311,  -311,  -311,  -311,  -311,  -311,  -311
2081
};
2082
2083
  /* YYDEFGOTO[NTERM-NUM].  */
2084
static const yytype_int16 yydefgoto[] =
2085
{
2086
      -1,     1,    17,    18,    19,    35,   308,    20,    21,    36,
2087
     577,    22,    23,    37,   593,    24,    25,    38,   608,    26,
2088
      39,   626,   643,   644,   645,   646,   647,   648,    27,    40,
2089
     649,   309,   310,   311,   312,   313,   314,   315,   316,   317,
2090
     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
2091
     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
2092
     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
2093
     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
2094
     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
2095
     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
2096
     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
2097
     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
2098
     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
2099
     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
2100
     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
2101
     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
2102
     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
2103
     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
2104
     458,   459,   460,   461,   462,   463,   464,   465,   466,   467,
2105
     468,   469,   470,   471,   472,   473,   474,   475,   476,   477,
2106
     478,   479,   480,   481,   482,   483,   484,   485,   486,   487,
2107
     488,   489,   490,   491,   492,   493,   494,   495,   496,   497,
2108
     498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
2109
     508,   509,   510,   511,   512,   513,   514,   515,   516,   517,
2110
     518,   519,   520,   521,   522,   523,   524,   525,   526,   527,
2111
     528,   529,   530,   531,   532,   533,   534,   535,   536,   537,
2112
     538,   539,   540,   541,   542,   543,   544,   545,   546,   547,
2113
     548,   549,   550,   551,   552,   553,   554,   555,   556,   578,
2114
     579,   580,   581,   582,   583,   584,   585,   594,   595,   596,
2115
     597,   598,   599,   600,   627,   628,   629,   630,   631,   632,
2116
     633,   634,   635,   636,   609,   610,   611,   612,   613,   614,
2117
     615,    28,    41,   664,   665,   666,   667,   668,   669,   670,
2118
     671,   672,    29,    42,   693,   694,   695,   696,   697,   698,
2119
     699,   700,   701,   702,   703,   704,   705,   706,   707,   708,
2120
     709,   710,   711,   712,   713,    30,    43,   715,   716,    31,
2121
      44,   718,   719,   557,   558,   559,   560,    32,    45,   730,
2122
     731,   732,   733,   734,   735,   736,   737,   738,   739,   740,
2123
      33,    46,   762,   763,   764,   765,   766,   767,   768,   769,
2124
     770,   771,   772,   773,   774,   775,   776,   777,   778,   779,
2125
     780,   781,   782,   783,   561,   562,   563,   564,   565,   566,
2126
     567,   568,    34,    47,   786,   787,   788
2127
};
2128
2129
  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
2130
     positive, shift that token.  If negative, reduce the rule whose
2131
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
2132
static const yytype_int16 yytable[] =
2133
{
2134
      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
2135
      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
2136
      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
2137
      78,    79,    80,    81,   784,   785,   714,   717,    82,    83,
2138
      84,   789,   790,   791,    85,    86,    87,    88,    89,    90,
2139
      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
2140
     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
2141
     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
2142
     121,   122,   123,   124,   125,   656,   657,   658,   659,   660,
2143
     661,   662,   663,   792,   126,   127,   128,   129,   130,   793,
2144
     131,   132,   133,   794,   795,   134,   135,   136,   137,   138,
2145
     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
2146
     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
2147
     159,   796,   797,   798,   160,   616,   799,   161,   162,   163,
2148
     164,   165,   166,   167,   800,   168,   169,   170,   171,   172,
2149
     173,   174,   175,   176,   177,   178,   179,   180,   181,   616,
2150
     741,   742,   743,   744,   745,   746,   747,   748,   749,   750,
2151
     751,   752,   753,   754,   755,   756,   757,   758,   759,   801,
2152
     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
2153
     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
2154
     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
2155
     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
2156
     222,   223,   224,   225,   226,   802,   227,   803,   228,   229,
2157
     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
2158
     240,   241,   242,   243,   244,   245,   246,   760,   804,   761,
2159
     805,   806,   807,   808,   809,   810,   811,   812,   247,   248,
2160
     249,   250,   251,   252,   253,   254,   255,   256,   569,   813,
2161
     570,   571,   814,   586,   815,     2,   816,   817,   818,   819,
2162
     820,   587,   588,   821,   822,     0,     3,     4,   257,   823,
2163
     824,   825,   826,   827,   828,   829,   258,   259,   830,   260,
2164
     261,   831,   262,   263,   264,   265,   266,   832,   833,   267,
2165
     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
2166
     278,   279,   280,     5,   834,   835,   281,   836,   837,     6,
2167
     838,   839,   840,   572,   841,   282,   283,   284,   285,   842,
2168
     601,   843,   286,   287,   288,   289,   290,   291,   292,   293,
2169
     294,   295,   296,   297,   298,   299,   844,   300,   845,   301,
2170
     302,   303,   304,   305,   306,   307,   573,   846,   847,   574,
2171
     589,   848,   590,     7,   849,   591,   602,   603,   575,   720,
2172
     721,   722,   723,   724,   725,   726,   727,   728,   729,   850,
2173
     851,     8,   618,   619,   620,   621,   852,   853,   854,   855,
2174
     856,   857,   623,   604,   858,   859,   860,   861,   862,   863,
2175
     864,   865,   866,   867,   617,   868,   618,   619,   620,   621,
2176
     622,   869,   870,   871,   872,   873,   623,   874,   875,   637,
2177
     638,   639,   640,   641,   876,   877,   878,   879,   880,   881,
2178
     882,   883,   642,   884,   885,   886,   887,     9,   888,   889,
2179
     890,   891,   892,   893,   894,   895,   896,   897,   898,   899,
2180
     900,   901,   902,   903,   624,   625,   904,   673,   674,   675,
2181
     676,   677,   678,   679,   680,   681,   682,   683,   684,   685,
2182
     686,   687,   688,   689,   690,   691,   692,   605,   606,   905,
2183
     906,   907,   908,   909,   910,   911,   912,   913,   914,   915,
2184
     916,   917,   918,   919,   920,   921,   922,   923,   924,   925,
2185
     926,   927,   928,    10,   929,   930,   931,   932,   933,   934,
2186
     935,   936,   937,   938,   939,   940,   941,   942,   943,   944,
2187
     945,   946,   947,   607,   948,    11,   949,   950,   951,   952,
2188
     953,   954,   576,   955,   956,   957,   592,   958,   959,   960,
2189
     961,   962,   963,   964,   965,   966,    12,   967,   968,   969,
2190
     970,   971,   972,   973,   974,   975,   976,   977,   978,   979,
2191
     980,   981,   982,   983,   984,   985,   986,   987,    13,   988,
2192
     989,   990,   991,   992,   993,   994,   995,   996,   997,   998,
2193
     999,  1000,  1001,  1002,  1003,  1004,  1005,  1006,  1007,  1008,
2194
    1009,  1010,  1011,  1012,  1013,  1014,  1015,  1016,  1017,  1018,
2195
    1019,    14,  1020,  1021,  1022,    15,  1023,  1024,  1025,  1026,
2196
    1027,    16,  1028,  1029,  1030,  1031,  1032,  1033,  1034,  1035,
2197
    1036,  1037,  1038,  1039,  1040,  1041,  1042,  1043,  1044,  1045,
2198
    1046,  1047,  1048,  1049,  1050,  1051,  1052,  1053,  1054,  1055,
2199
    1056,  1057,  1058,  1059,  1060,  1061,  1062,  1063,  1064,  1065,
2200
    1066,  1067,  1068,  1069,  1070,  1071,  1072,  1073,  1074,  1075,
2201
    1076,  1077,  1078,  1079,  1080,  1081,  1082,  1083,  1084,  1085,
2202
    1086,  1087,  1088,  1089,  1090,  1091,  1092,  1093,  1094,  1095,
2203
    1096,  1097,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,
2204
    1106,  1107,  1108,  1109,  1110,  1111,  1112,  1113,  1114,  1115,
2205
    1116,  1117,  1118,  1119,  1120,  1121,  1122,  1123,  1124,  1125,
2206
    1126,  1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,
2207
    1136,  1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,
2208
    1146,  1147,  1148,  1149,  1150,  1151,  1152,  1153,  1154,  1155,
2209
    1156,  1157,  1158,  1159,  1160,  1161,  1162,  1163,  1164,  1165,
2210
    1166,  1167,  1168,  1169,  1170,  1171,  1172,  1173,  1174,  1175,
2211
    1176,  1177,  1178,  1179,     0,     0,     0,     0,     0,     0,
2212
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2213
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2214
       0,     0,     0,     0,   650,   651,   652,   653,   654,   655
2215
};
2216
2217
static const yytype_int16 yycheck[] =
2218
{
2219
      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
2220
      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
2221
      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
2222
      43,    44,    45,    46,   337,   338,   117,   347,    51,    52,
2223
      53,    10,    10,    10,    57,    58,    59,    60,    61,    62,
2224
      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
2225
      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
2226
      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
2227
      93,    94,    95,    96,    97,    99,   100,   101,   102,   103,
2228
     104,   105,   106,    10,   107,   108,   109,   110,   111,    10,
2229
     113,   114,   115,    10,    10,   118,   119,   120,   121,   122,
2230
     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
2231
     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
2232
     143,    10,    10,    10,   147,    47,    10,   150,   151,   152,
2233
     153,   154,   155,   156,    10,   158,   159,   160,   161,   162,
2234
     163,   164,   165,   166,   167,   168,   169,   170,   171,    47,
2235
     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
2236
     292,   293,   294,   295,   296,   297,   298,   299,   300,    10,
2237
     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
2238
     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
2239
     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
2240
     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
2241
     233,   234,   235,   236,   237,    10,   239,    10,   241,   242,
2242
     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
2243
     253,   254,   255,   256,   257,   258,   259,   369,    10,   371,
2244
      10,    10,    10,    10,    10,    10,    10,    10,   271,   272,
2245
     273,   274,   275,   276,   277,   278,   279,   280,    47,    10,
2246
      49,    50,    10,    47,    10,     0,    10,    10,    10,    10,
2247
      10,    55,    56,    10,    10,    -1,    11,    12,   301,    10,
2248
      10,    10,    10,    10,    10,    10,   309,   310,    10,   312,
2249
     313,    10,   315,   316,   317,   318,   319,    10,    10,   322,
2250
     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
2251
     333,   334,   335,    48,    10,    10,   339,    10,    10,    54,
2252
      10,    10,    10,   112,    10,   348,   349,   350,   351,    10,
2253
      47,    10,   355,   356,   357,   358,   359,   360,   361,   362,
2254
     363,   364,   365,   366,   367,   368,    10,   370,    10,   372,
2255
     373,   374,   375,   376,   377,   378,   145,    10,    10,   148,
2256
     144,    10,   146,    98,    10,   149,    83,    84,   157,   261,
2257
     262,   263,   264,   265,   266,   267,   268,   269,   270,    10,
2258
      10,   116,   304,   305,   306,   307,    10,    10,    10,    10,
2259
      10,    10,   314,   110,    10,    10,    10,    10,    10,    10,
2260
      10,    10,    10,    10,   302,    10,   304,   305,   306,   307,
2261
     308,    10,    10,    10,    10,    10,   314,    10,    10,   341,
2262
     342,   343,   344,   345,    10,    10,    10,    10,    10,    10,
2263
      10,    10,   354,    10,    10,    10,    10,   172,    10,    10,
2264
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2265
      10,    10,    10,    10,   352,   353,    10,   173,   174,   175,
2266
     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
2267
     186,   187,   188,   189,   190,   191,   192,   194,   195,    10,
2268
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2269
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2270
      10,    10,    10,   238,    10,    10,    10,    10,    10,    10,
2271
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2272
      10,    10,    10,   240,    10,   260,    10,    10,    10,    10,
2273
      10,    10,   321,    10,    10,    10,   320,    10,    10,    10,
2274
      10,    10,    10,    10,    10,    10,   281,    10,    10,    10,
2275
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2276
      10,    10,    10,    10,    10,    10,    10,    10,   303,    10,
2277
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2278
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2279
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2280
      10,   336,    10,    10,    10,   340,    10,    10,    10,    10,
2281
      10,   346,    10,    10,    10,    10,    10,    10,    10,    10,
2282
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2283
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2284
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2285
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2286
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2287
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2288
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2289
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2290
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2291
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2292
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2293
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2294
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2295
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2296
      10,    10,    10,    10,    -1,    -1,    -1,    -1,    -1,    -1,
2297
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2298
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2299
      -1,    -1,    -1,    -1,    40,    40,    40,    40,    40,    40
2300
};
2301
2302
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2303
     symbol of state STATE-NUM.  */
2304
static const yytype_int16 yystos[] =
2305
{
2306
       0,   380,     0,    11,    12,    48,    54,    98,   116,   172,
2307
     238,   260,   281,   303,   336,   340,   346,   381,   382,   383,
2308
     386,   387,   390,   391,   394,   395,   398,   407,   690,   701,
2309
     724,   728,   736,   749,   781,   384,   388,   392,   396,   399,
2310
     408,   691,   702,   725,   729,   737,   750,   782,    13,    14,
2311
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
2312
      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
2313
      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
2314
      45,    46,    51,    52,    53,    57,    58,    59,    60,    61,
2315
      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
2316
      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
2317
      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
2318
      92,    93,    94,    95,    96,    97,   107,   108,   109,   110,
2319
     111,   113,   114,   115,   118,   119,   120,   121,   122,   123,
2320
     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
2321
     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
2322
     147,   150,   151,   152,   153,   154,   155,   156,   158,   159,
2323
     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
2324
     170,   171,   193,   194,   195,   196,   197,   198,   199,   200,
2325
     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
2326
     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
2327
     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
2328
     231,   232,   233,   234,   235,   236,   237,   239,   241,   242,
2329
     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
2330
     253,   254,   255,   256,   257,   258,   259,   271,   272,   273,
2331
     274,   275,   276,   277,   278,   279,   280,   301,   309,   310,
2332
     312,   313,   315,   316,   317,   318,   319,   322,   323,   324,
2333
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
2334
     335,   339,   348,   349,   350,   351,   355,   356,   357,   358,
2335
     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
2336
     370,   372,   373,   374,   375,   376,   377,   378,   385,   410,
2337
     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
2338
     421,   422,   423,   424,   425,   426,   427,   428,   429,   430,
2339
     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
2340
     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
2341
     451,   452,   453,   454,   455,   456,   457,   458,   459,   460,
2342
     461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
2343
     471,   472,   473,   474,   475,   476,   477,   478,   479,   480,
2344
     481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
2345
     491,   492,   493,   494,   495,   496,   497,   498,   499,   500,
2346
     501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
2347
     511,   512,   513,   514,   515,   516,   517,   518,   519,   520,
2348
     521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
2349
     531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
2350
     541,   542,   543,   544,   545,   546,   547,   548,   549,   550,
2351
     551,   552,   553,   554,   555,   556,   557,   558,   559,   560,
2352
     561,   562,   563,   564,   565,   566,   567,   568,   569,   570,
2353
     571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
2354
     581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
2355
     591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
2356
     601,   602,   603,   604,   605,   606,   607,   608,   609,   610,
2357
     611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
2358
     621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
2359
     631,   632,   633,   634,   635,   636,   637,   638,   639,   640,
2360
     641,   642,   643,   644,   645,   646,   647,   648,   649,   650,
2361
     651,   652,   653,   654,   655,   656,   657,   732,   733,   734,
2362
     735,   773,   774,   775,   776,   777,   778,   779,   780,    47,
2363
      49,    50,   112,   145,   148,   157,   321,   389,   658,   659,
2364
     660,   661,   662,   663,   664,   665,    47,    55,    56,   144,
2365
     146,   149,   320,   393,   666,   667,   668,   669,   670,   671,
2366
     672,    47,    83,    84,   110,   194,   195,   240,   397,   683,
2367
     684,   685,   686,   687,   688,   689,    47,   302,   304,   305,
2368
     306,   307,   308,   314,   352,   353,   400,   673,   674,   675,
2369
     676,   677,   678,   679,   680,   681,   682,   341,   342,   343,
2370
     344,   345,   354,   401,   402,   403,   404,   405,   406,   409,
2371
     673,   674,   675,   676,   677,   680,    99,   100,   101,   102,
2372
     103,   104,   105,   106,   692,   693,   694,   695,   696,   697,
2373
     698,   699,   700,   173,   174,   175,   176,   177,   178,   179,
2374
     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
2375
     190,   191,   192,   703,   704,   705,   706,   707,   708,   709,
2376
     710,   711,   712,   713,   714,   715,   716,   717,   718,   719,
2377
     720,   721,   722,   723,   117,   726,   727,   347,   730,   731,
2378
     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
2379
     738,   739,   740,   741,   742,   743,   744,   745,   746,   747,
2380
     748,   282,   283,   284,   285,   286,   287,   288,   289,   290,
2381
     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
2382
     369,   371,   751,   752,   753,   754,   755,   756,   757,   758,
2383
     759,   760,   761,   762,   763,   764,   765,   766,   767,   768,
2384
     769,   770,   771,   772,   337,   338,   783,   784,   785,    10,
2385
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2386
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2387
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2388
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2389
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2390
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2391
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2392
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2393
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2394
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2395
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2396
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2397
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2398
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2399
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2400
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2401
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2402
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2403
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2404
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2405
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2406
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2407
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2408
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2409
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2410
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2411
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2412
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2413
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2414
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2415
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2416
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2417
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2418
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2419
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2420
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2421
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2422
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2423
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10
2424
};
2425
2426
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
2427
static const yytype_int16 yyr1[] =
2428
{
2429
       0,   379,   380,   380,   381,   381,   381,   381,   381,   381,
2430
     381,   381,   381,   381,   381,   381,   381,   381,   382,   383,
2431
     384,   384,   385,   385,   385,   385,   385,   385,   385,   385,
2432
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2433
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2434
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2435
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2436
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2437
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2438
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2439
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2440
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2441
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2442
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2443
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2444
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2445
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2446
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2447
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2448
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2449
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2450
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2451
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2452
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2453
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2454
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2455
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2456
     385,   385,   385,   385,   385,   385,   385,   385,   385,   385,
2457
     385,   385,   386,   387,   388,   388,   389,   389,   389,   389,
2458
     389,   389,   389,   389,   390,   391,   392,   392,   393,   393,
2459
     393,   393,   393,   393,   393,   394,   395,   396,   396,   397,
2460
     397,   397,   397,   397,   397,   397,   398,   399,   399,   400,
2461
     400,   400,   400,   400,   400,   400,   400,   400,   400,   401,
2462
     402,   403,   404,   405,   406,   407,   408,   408,   409,   409,
2463
     409,   409,   409,   409,   409,   409,   409,   409,   409,   409,
2464
     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
2465
     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
2466
     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
2467
     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
2468
     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
2469
     460,   461,   462,   463,   464,   465,   466,   467,   468,   469,
2470
     470,   471,   472,   473,   474,   475,   476,   477,   478,   479,
2471
     480,   481,   482,   483,   484,   485,   486,   487,   488,   489,
2472
     490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
2473
     500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
2474
     510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
2475
     520,   521,   522,   523,   524,   525,   526,   527,   528,   529,
2476
     530,   531,   532,   533,   534,   535,   536,   537,   538,   539,
2477
     540,   541,   542,   543,   544,   545,   546,   547,   548,   549,
2478
     550,   551,   552,   553,   554,   555,   556,   557,   558,   559,
2479
     560,   561,   562,   563,   564,   565,   566,   567,   568,   569,
2480
     570,   571,   572,   573,   574,   575,   576,   577,   578,   579,
2481
     580,   581,   582,   583,   584,   585,   586,   587,   588,   589,
2482
     590,   591,   592,   593,   594,   595,   596,   597,   598,   599,
2483
     600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
2484
     610,   611,   612,   613,   614,   615,   616,   617,   618,   619,
2485
     620,   621,   622,   623,   624,   625,   626,   627,   628,   629,
2486
     630,   631,   632,   633,   634,   635,   636,   637,   638,   639,
2487
     640,   641,   642,   643,   644,   645,   646,   647,   648,   649,
2488
     650,   651,   652,   653,   654,   655,   656,   657,   658,   659,
2489
     660,   661,   662,   663,   664,   665,   666,   667,   668,   669,
2490
     670,   671,   672,   673,   674,   675,   676,   677,   678,   679,
2491
     680,   681,   682,   683,   684,   685,   686,   687,   688,   689,
2492
     690,   691,   691,   692,   692,   692,   692,   692,   692,   692,
2493
     692,   693,   694,   695,   696,   697,   698,   699,   700,   701,
2494
     702,   702,   703,   703,   703,   703,   703,   703,   703,   703,
2495
     703,   703,   703,   703,   703,   703,   703,   703,   703,   703,
2496
     703,   703,   704,   705,   706,   707,   708,   709,   710,   711,
2497
     712,   713,   714,   715,   716,   717,   718,   719,   720,   721,
2498
     722,   723,   724,   725,   725,   726,   727,   728,   729,   729,
2499
     730,   731,   732,   733,   734,   735,   736,   737,   737,   738,
2500
     738,   738,   738,   738,   738,   738,   738,   738,   738,   739,
2501
     740,   741,   742,   743,   744,   745,   746,   747,   748,   749,
2502
     750,   750,   751,   751,   751,   751,   751,   751,   751,   751,
2503
     751,   751,   751,   751,   751,   751,   751,   751,   751,   751,
2504
     751,   751,   751,   752,   753,   754,   755,   756,   757,   758,
2505
     759,   760,   761,   762,   763,   764,   765,   766,   767,   768,
2506
     769,   770,   771,   772,   773,   774,   775,   776,   777,   778,
2507
     779,   780,   781,   782,   782,   783,   783,   784,   785
2508
};
2509
2510
  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
2511
static const yytype_int8 yyr2[] =
2512
{
2513
       0,     2,     0,     2,     2,     1,     1,     2,     2,     2,
2514
       1,     2,     2,     2,     2,     2,     2,     1,     1,     1,
2515
       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
2516
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2517
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2518
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2519
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2520
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2521
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2522
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2523
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2524
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2525
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2526
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2527
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2528
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2529
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2530
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2531
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2532
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2533
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2534
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2535
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2536
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2537
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2538
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2539
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2540
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2541
       1,     1,     2,     1,     2,     0,     1,     1,     1,     1,
2542
       1,     1,     1,     1,     2,     1,     2,     0,     1,     1,
2543
       1,     1,     1,     1,     1,     2,     1,     2,     0,     1,
2544
       1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
2545
       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
2546
       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
2547
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2548
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2549
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2550
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2551
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2552
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2553
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2554
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2555
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2556
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2557
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2558
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2559
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2560
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2561
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2562
       2,     2,     2,     2,     2,     2,     2,     2,     3,     3,
2563
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2564
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2565
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2566
       2,     2,     2,     2,     3,     2,     2,     2,     2,     2,
2567
       2,     2,     2,     3,     3,     2,     2,     2,     2,     2,
2568
       2,     3,     3,     4,     4,     4,     3,     3,     4,     4,
2569
       3,     3,     2,     2,     2,     2,     2,     2,     2,     3,
2570
       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2571
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2572
       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
2573
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2574
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2575
       2,     2,     2,     2,     3,     3,     3,     2,     2,     2,
2576
       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
2577
       1,     2,     2,     2,     2,     2,     2,     2,     2,     1,
2578
       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
2579
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2580
       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
2581
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2582
       2,     2,     1,     2,     0,     1,     2,     1,     2,     0,
2583
       1,     2,     2,     2,     3,     3,     1,     2,     0,     1,
2584
       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
2585
       2,     2,     2,     2,     2,     2,     2,     2,     2,     1,
2586
       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
2587
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2588
       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
2589
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2590
       2,     2,     2,     2,     3,     2,     2,     2,     2,     2,
2591
       2,     2,     1,     2,     0,     1,     1,     2,     2
2592
};
2593
2594
2595
#define yyerrok         (yyerrstatus = 0)
2596
#define yyclearin       (yychar = YYEMPTY)
2597
0
#define YYEMPTY         (-2)
2598
0
#define YYEOF           0
2599
2600
0
#define YYACCEPT        goto yyacceptlab
2601
0
#define YYABORT         goto yyabortlab
2602
0
#define YYERROR         goto yyerrorlab
2603
2604
2605
#define YYRECOVERING()  (!!yyerrstatus)
2606
2607
#define YYBACKUP(Token, Value)                                    \
2608
  do                                                              \
2609
    if (yychar == YYEMPTY)                                        \
2610
      {                                                           \
2611
        yychar = (Token);                                         \
2612
        yylval = (Value);                                         \
2613
        YYPOPSTACK (yylen);                                       \
2614
        yystate = *yyssp;                                         \
2615
        goto yybackup;                                            \
2616
      }                                                           \
2617
    else                                                          \
2618
      {                                                           \
2619
        yyerror (YY_("syntax error: cannot back up")); \
2620
        YYERROR;                                                  \
2621
      }                                                           \
2622
  while (0)
2623
2624
/* Error token number */
2625
0
#define YYTERROR        1
2626
#define YYERRCODE       256
2627
2628
2629
2630
/* Enable debugging if requested.  */
2631
#if YYDEBUG
2632
2633
# ifndef YYFPRINTF
2634
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2635
#  define YYFPRINTF fprintf
2636
# endif
2637
2638
# define YYDPRINTF(Args)                        \
2639
do {                                            \
2640
  if (yydebug)                                  \
2641
    YYFPRINTF Args;                             \
2642
} while (0)
2643
2644
/* This macro is provided for backward compatibility. */
2645
#ifndef YY_LOCATION_PRINT
2646
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2647
#endif
2648
2649
2650
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
2651
do {                                                                      \
2652
  if (yydebug)                                                            \
2653
    {                                                                     \
2654
      YYFPRINTF (stderr, "%s ", Title);                                   \
2655
      yy_symbol_print (stderr,                                            \
2656
                  Type, Value); \
2657
      YYFPRINTF (stderr, "\n");                                           \
2658
    }                                                                     \
2659
} while (0)
2660
2661
2662
/*-----------------------------------.
2663
| Print this symbol's value on YYO.  |
2664
`-----------------------------------*/
2665
2666
static void
2667
yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
2668
{
2669
  FILE *yyoutput = yyo;
2670
  YYUSE (yyoutput);
2671
  if (!yyvaluep)
2672
    return;
2673
# ifdef YYPRINT
2674
  if (yytype < YYNTOKENS)
2675
    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
2676
# endif
2677
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2678
  YYUSE (yytype);
2679
  YY_IGNORE_MAYBE_UNINITIALIZED_END
2680
}
2681
2682
2683
/*---------------------------.
2684
| Print this symbol on YYO.  |
2685
`---------------------------*/
2686
2687
static void
2688
yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
2689
{
2690
  YYFPRINTF (yyo, "%s %s (",
2691
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
2692
2693
  yy_symbol_value_print (yyo, yytype, yyvaluep);
2694
  YYFPRINTF (yyo, ")");
2695
}
2696
2697
/*------------------------------------------------------------------.
2698
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2699
| TOP (included).                                                   |
2700
`------------------------------------------------------------------*/
2701
2702
static void
2703
yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2704
{
2705
  YYFPRINTF (stderr, "Stack now");
2706
  for (; yybottom <= yytop; yybottom++)
2707
    {
2708
      int yybot = *yybottom;
2709
      YYFPRINTF (stderr, " %d", yybot);
2710
    }
2711
  YYFPRINTF (stderr, "\n");
2712
}
2713
2714
# define YY_STACK_PRINT(Bottom, Top)                            \
2715
do {                                                            \
2716
  if (yydebug)                                                  \
2717
    yy_stack_print ((Bottom), (Top));                           \
2718
} while (0)
2719
2720
2721
/*------------------------------------------------.
2722
| Report that the YYRULE is going to be reduced.  |
2723
`------------------------------------------------*/
2724
2725
static void
2726
yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
2727
{
2728
  int yylno = yyrline[yyrule];
2729
  int yynrhs = yyr2[yyrule];
2730
  int yyi;
2731
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2732
             yyrule - 1, yylno);
2733
  /* The symbols being reduced.  */
2734
  for (yyi = 0; yyi < yynrhs; yyi++)
2735
    {
2736
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
2737
      yy_symbol_print (stderr,
2738
                       yystos[+yyssp[yyi + 1 - yynrhs]],
2739
                       &yyvsp[(yyi + 1) - (yynrhs)]
2740
                                              );
2741
      YYFPRINTF (stderr, "\n");
2742
    }
2743
}
2744
2745
# define YY_REDUCE_PRINT(Rule)          \
2746
do {                                    \
2747
  if (yydebug)                          \
2748
    yy_reduce_print (yyssp, yyvsp, Rule); \
2749
} while (0)
2750
2751
/* Nonzero means print parse trace.  It is left uninitialized so that
2752
   multiple parsers can coexist.  */
2753
int yydebug;
2754
#else /* !YYDEBUG */
2755
# define YYDPRINTF(Args)
2756
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2757
# define YY_STACK_PRINT(Bottom, Top)
2758
# define YY_REDUCE_PRINT(Rule)
2759
#endif /* !YYDEBUG */
2760
2761
2762
/* YYINITDEPTH -- initial size of the parser's stacks.  */
2763
#ifndef YYINITDEPTH
2764
0
# define YYINITDEPTH 200
2765
#endif
2766
2767
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2768
   if the built-in stack extension method is used).
2769
2770
   Do not make this value too large; the results are undefined if
2771
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2772
   evaluated with infinite-precision integer arithmetic.  */
2773
2774
#ifndef YYMAXDEPTH
2775
0
# define YYMAXDEPTH 10000
2776
#endif
2777
2778
2779
#if YYERROR_VERBOSE
2780
2781
# ifndef yystrlen
2782
#  if defined __GLIBC__ && defined _STRING_H
2783
#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
2784
#  else
2785
/* Return the length of YYSTR.  */
2786
static YYPTRDIFF_T
2787
yystrlen (const char *yystr)
2788
{
2789
  YYPTRDIFF_T yylen;
2790
  for (yylen = 0; yystr[yylen]; yylen++)
2791
    continue;
2792
  return yylen;
2793
}
2794
#  endif
2795
# endif
2796
2797
# ifndef yystpcpy
2798
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2799
#   define yystpcpy stpcpy
2800
#  else
2801
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2802
   YYDEST.  */
2803
static char *
2804
yystpcpy (char *yydest, const char *yysrc)
2805
{
2806
  char *yyd = yydest;
2807
  const char *yys = yysrc;
2808
2809
  while ((*yyd++ = *yys++) != '\0')
2810
    continue;
2811
2812
  return yyd - 1;
2813
}
2814
#  endif
2815
# endif
2816
2817
# ifndef yytnamerr
2818
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2819
   quotes and backslashes, so that it's suitable for yyerror.  The
2820
   heuristic is that double-quoting is unnecessary unless the string
2821
   contains an apostrophe, a comma, or backslash (other than
2822
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
2823
   null, do not copy; instead, return the length of what the result
2824
   would have been.  */
2825
static YYPTRDIFF_T
2826
yytnamerr (char *yyres, const char *yystr)
2827
{
2828
  if (*yystr == '"')
2829
    {
2830
      YYPTRDIFF_T yyn = 0;
2831
      char const *yyp = yystr;
2832
2833
      for (;;)
2834
        switch (*++yyp)
2835
          {
2836
          case '\'':
2837
          case ',':
2838
            goto do_not_strip_quotes;
2839
2840
          case '\\':
2841
            if (*++yyp != '\\')
2842
              goto do_not_strip_quotes;
2843
            else
2844
              goto append;
2845
2846
          append:
2847
          default:
2848
            if (yyres)
2849
              yyres[yyn] = *yyp;
2850
            yyn++;
2851
            break;
2852
2853
          case '"':
2854
            if (yyres)
2855
              yyres[yyn] = '\0';
2856
            return yyn;
2857
          }
2858
    do_not_strip_quotes: ;
2859
    }
2860
2861
  if (yyres)
2862
    return yystpcpy (yyres, yystr) - yyres;
2863
  else
2864
    return yystrlen (yystr);
2865
}
2866
# endif
2867
2868
/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
2869
   about the unexpected token YYTOKEN for the state stack whose top is
2870
   YYSSP.
2871
2872
   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
2873
   not large enough to hold the message.  In that case, also set
2874
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
2875
   required number of bytes is too large to store.  */
2876
static int
2877
yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
2878
                yy_state_t *yyssp, int yytoken)
2879
{
2880
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
2881
  /* Internationalized format string. */
2882
  const char *yyformat = YY_NULLPTR;
2883
  /* Arguments of yyformat: reported tokens (one for the "unexpected",
2884
     one per "expected"). */
2885
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
2886
  /* Actual size of YYARG. */
2887
  int yycount = 0;
2888
  /* Cumulated lengths of YYARG.  */
2889
  YYPTRDIFF_T yysize = 0;
2890
2891
  /* There are many possibilities here to consider:
2892
     - If this state is a consistent state with a default action, then
2893
       the only way this function was invoked is if the default action
2894
       is an error action.  In that case, don't check for expected
2895
       tokens because there are none.
2896
     - The only way there can be no lookahead present (in yychar) is if
2897
       this state is a consistent state with a default action.  Thus,
2898
       detecting the absence of a lookahead is sufficient to determine
2899
       that there is no unexpected or expected token to report.  In that
2900
       case, just report a simple "syntax error".
2901
     - Don't assume there isn't a lookahead just because this state is a
2902
       consistent state with a default action.  There might have been a
2903
       previous inconsistent state, consistent state with a non-default
2904
       action, or user semantic action that manipulated yychar.
2905
     - Of course, the expected token list depends on states to have
2906
       correct lookahead information, and it depends on the parser not
2907
       to perform extra reductions after fetching a lookahead from the
2908
       scanner and before detecting a syntax error.  Thus, state merging
2909
       (from LALR or IELR) and default reductions corrupt the expected
2910
       token list.  However, the list is correct for canonical LR with
2911
       one exception: it will still contain any token that will not be
2912
       accepted due to an error action in a later state.
2913
  */
2914
  if (yytoken != YYEMPTY)
2915
    {
2916
      int yyn = yypact[+*yyssp];
2917
      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
2918
      yysize = yysize0;
2919
      yyarg[yycount++] = yytname[yytoken];
2920
      if (!yypact_value_is_default (yyn))
2921
        {
2922
          /* Start YYX at -YYN if negative to avoid negative indexes in
2923
             YYCHECK.  In other words, skip the first -YYN actions for
2924
             this state because they are default actions.  */
2925
          int yyxbegin = yyn < 0 ? -yyn : 0;
2926
          /* Stay within bounds of both yycheck and yytname.  */
2927
          int yychecklim = YYLAST - yyn + 1;
2928
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2929
          int yyx;
2930
2931
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2932
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
2933
                && !yytable_value_is_error (yytable[yyx + yyn]))
2934
              {
2935
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
2936
                  {
2937
                    yycount = 1;
2938
                    yysize = yysize0;
2939
                    break;
2940
                  }
2941
                yyarg[yycount++] = yytname[yyx];
2942
                {
2943
                  YYPTRDIFF_T yysize1
2944
                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
2945
                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2946
                    yysize = yysize1;
2947
                  else
2948
                    return 2;
2949
                }
2950
              }
2951
        }
2952
    }
2953
2954
  switch (yycount)
2955
    {
2956
# define YYCASE_(N, S)                      \
2957
      case N:                               \
2958
        yyformat = S;                       \
2959
      break
2960
    default: /* Avoid compiler warnings. */
2961
      YYCASE_(0, YY_("syntax error"));
2962
      YYCASE_(1, YY_("syntax error, unexpected %s"));
2963
      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2964
      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2965
      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2966
      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2967
# undef YYCASE_
2968
    }
2969
2970
  {
2971
    /* Don't count the "%s"s in the final size, but reserve room for
2972
       the terminator.  */
2973
    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
2974
    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2975
      yysize = yysize1;
2976
    else
2977
      return 2;
2978
  }
2979
2980
  if (*yymsg_alloc < yysize)
2981
    {
2982
      *yymsg_alloc = 2 * yysize;
2983
      if (! (yysize <= *yymsg_alloc
2984
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
2985
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
2986
      return 1;
2987
    }
2988
2989
  /* Avoid sprintf, as that infringes on the user's name space.
2990
     Don't have undefined behavior even if the translation
2991
     produced a string with the wrong number of "%s"s.  */
2992
  {
2993
    char *yyp = *yymsg;
2994
    int yyi = 0;
2995
    while ((*yyp = *yyformat) != '\0')
2996
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
2997
        {
2998
          yyp += yytnamerr (yyp, yyarg[yyi++]);
2999
          yyformat += 2;
3000
        }
3001
      else
3002
        {
3003
          ++yyp;
3004
          ++yyformat;
3005
        }
3006
  }
3007
  return 0;
3008
}
3009
#endif /* YYERROR_VERBOSE */
3010
3011
/*-----------------------------------------------.
3012
| Release the memory associated to this symbol.  |
3013
`-----------------------------------------------*/
3014
3015
static void
3016
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3017
0
{
3018
0
  YYUSE (yyvaluep);
3019
0
  if (!yymsg)
3020
0
    yymsg = "Deleting";
3021
0
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3022
3023
0
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
3024
0
  YYUSE (yytype);
3025
0
  YY_IGNORE_MAYBE_UNINITIALIZED_END
3026
0
}
3027
3028
3029
3030
3031
/* The lookahead symbol.  */
3032
int yychar;
3033
3034
/* The semantic value of the lookahead symbol.  */
3035
YYSTYPE yylval;
3036
/* Number of syntax errors so far.  */
3037
int yynerrs;
3038
3039
3040
/*----------.
3041
| yyparse.  |
3042
`----------*/
3043
3044
int
3045
yyparse (void)
3046
0
{
3047
0
    yy_state_fast_t yystate;
3048
    /* Number of tokens to shift before error messages enabled.  */
3049
0
    int yyerrstatus;
3050
3051
    /* The stacks and their tools:
3052
       'yyss': related to states.
3053
       'yyvs': related to semantic values.
3054
3055
       Refer to the stacks through separate pointers, to allow yyoverflow
3056
       to reallocate them elsewhere.  */
3057
3058
    /* The state stack.  */
3059
0
    yy_state_t yyssa[YYINITDEPTH];
3060
0
    yy_state_t *yyss;
3061
0
    yy_state_t *yyssp;
3062
3063
    /* The semantic value stack.  */
3064
0
    YYSTYPE yyvsa[YYINITDEPTH];
3065
0
    YYSTYPE *yyvs;
3066
0
    YYSTYPE *yyvsp;
3067
3068
0
    YYPTRDIFF_T yystacksize;
3069
3070
0
  int yyn;
3071
0
  int yyresult;
3072
  /* Lookahead token as an internal (translated) token number.  */
3073
0
  int yytoken = 0;
3074
  /* The variables used to return semantic value and location from the
3075
     action routines.  */
3076
0
  YYSTYPE yyval;
3077
3078
#if YYERROR_VERBOSE
3079
  /* Buffer for error messages, and its allocated size.  */
3080
  char yymsgbuf[128];
3081
  char *yymsg = yymsgbuf;
3082
  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
3083
#endif
3084
3085
0
#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
3086
3087
  /* The number of symbols on the RHS of the reduced rule.
3088
     Keep to zero when no symbol should be popped.  */
3089
0
  int yylen = 0;
3090
3091
0
  yyssp = yyss = yyssa;
3092
0
  yyvsp = yyvs = yyvsa;
3093
0
  yystacksize = YYINITDEPTH;
3094
3095
0
  YYDPRINTF ((stderr, "Starting parse\n"));
3096
3097
0
  yystate = 0;
3098
0
  yyerrstatus = 0;
3099
0
  yynerrs = 0;
3100
0
  yychar = YYEMPTY; /* Cause a token to be read.  */
3101
0
  goto yysetstate;
3102
3103
3104
/*------------------------------------------------------------.
3105
| yynewstate -- push a new state, which is found in yystate.  |
3106
`------------------------------------------------------------*/
3107
0
yynewstate:
3108
  /* In all cases, when you get here, the value and location stacks
3109
     have just been pushed.  So pushing a state here evens the stacks.  */
3110
0
  yyssp++;
3111
3112
3113
/*--------------------------------------------------------------------.
3114
| yysetstate -- set current state (the top of the stack) to yystate.  |
3115
`--------------------------------------------------------------------*/
3116
0
yysetstate:
3117
0
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3118
0
  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
3119
0
  YY_IGNORE_USELESS_CAST_BEGIN
3120
0
  *yyssp = YY_CAST (yy_state_t, yystate);
3121
0
  YY_IGNORE_USELESS_CAST_END
3122
3123
0
  if (yyss + yystacksize - 1 <= yyssp)
3124
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
3125
    goto yyexhaustedlab;
3126
#else
3127
0
    {
3128
      /* Get the current used size of the three stacks, in elements.  */
3129
0
      YYPTRDIFF_T yysize = yyssp - yyss + 1;
3130
3131
# if defined yyoverflow
3132
      {
3133
        /* Give user a chance to reallocate the stack.  Use copies of
3134
           these so that the &'s don't force the real ones into
3135
           memory.  */
3136
        yy_state_t *yyss1 = yyss;
3137
        YYSTYPE *yyvs1 = yyvs;
3138
3139
        /* Each stack pointer address is followed by the size of the
3140
           data in use in that stack, in bytes.  This used to be a
3141
           conditional around just the two extra args, but that might
3142
           be undefined if yyoverflow is a macro.  */
3143
        yyoverflow (YY_("memory exhausted"),
3144
                    &yyss1, yysize * YYSIZEOF (*yyssp),
3145
                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
3146
                    &yystacksize);
3147
        yyss = yyss1;
3148
        yyvs = yyvs1;
3149
      }
3150
# else /* defined YYSTACK_RELOCATE */
3151
      /* Extend the stack our own way.  */
3152
0
      if (YYMAXDEPTH <= yystacksize)
3153
0
        goto yyexhaustedlab;
3154
0
      yystacksize *= 2;
3155
0
      if (YYMAXDEPTH < yystacksize)
3156
0
        yystacksize = YYMAXDEPTH;
3157
3158
0
      {
3159
0
        yy_state_t *yyss1 = yyss;
3160
0
        union yyalloc *yyptr =
3161
0
          YY_CAST (union yyalloc *,
3162
0
                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
3163
0
        if (! yyptr)
3164
0
          goto yyexhaustedlab;
3165
0
        YYSTACK_RELOCATE (yyss_alloc, yyss);
3166
0
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
3167
0
# undef YYSTACK_RELOCATE
3168
0
        if (yyss1 != yyssa)
3169
0
          YYSTACK_FREE (yyss1);
3170
0
      }
3171
0
# endif
3172
3173
0
      yyssp = yyss + yysize - 1;
3174
0
      yyvsp = yyvs + yysize - 1;
3175
3176
0
      YY_IGNORE_USELESS_CAST_BEGIN
3177
0
      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
3178
0
                  YY_CAST (long, yystacksize)));
3179
0
      YY_IGNORE_USELESS_CAST_END
3180
3181
0
      if (yyss + yystacksize - 1 <= yyssp)
3182
0
        YYABORT;
3183
0
    }
3184
0
#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
3185
3186
0
  if (yystate == YYFINAL)
3187
0
    YYACCEPT;
3188
3189
0
  goto yybackup;
3190
3191
3192
/*-----------.
3193
| yybackup.  |
3194
`-----------*/
3195
0
yybackup:
3196
  /* Do appropriate processing given the current state.  Read a
3197
     lookahead token if we need one and don't already have one.  */
3198
3199
  /* First try to decide what to do without reference to lookahead token.  */
3200
0
  yyn = yypact[yystate];
3201
0
  if (yypact_value_is_default (yyn))
3202
0
    goto yydefault;
3203
3204
  /* Not known => get a lookahead token if don't already have one.  */
3205
3206
  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
3207
0
  if (yychar == YYEMPTY)
3208
0
    {
3209
0
      YYDPRINTF ((stderr, "Reading a token: "));
3210
0
      yychar = yylex ();
3211
0
    }
3212
3213
0
  if (yychar <= YYEOF)
3214
0
    {
3215
0
      yychar = yytoken = YYEOF;
3216
0
      YYDPRINTF ((stderr, "Now at end of input.\n"));
3217
0
    }
3218
0
  else
3219
0
    {
3220
0
      yytoken = YYTRANSLATE (yychar);
3221
0
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3222
0
    }
3223
3224
  /* If the proper action on seeing token YYTOKEN is to reduce or to
3225
     detect an error, take that action.  */
3226
0
  yyn += yytoken;
3227
0
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3228
0
    goto yydefault;
3229
0
  yyn = yytable[yyn];
3230
0
  if (yyn <= 0)
3231
0
    {
3232
0
      if (yytable_value_is_error (yyn))
3233
0
        goto yyerrlab;
3234
0
      yyn = -yyn;
3235
0
      goto yyreduce;
3236
0
    }
3237
3238
  /* Count tokens shifted since error; after three, turn off error
3239
     status.  */
3240
0
  if (yyerrstatus)
3241
0
    yyerrstatus--;
3242
3243
  /* Shift the lookahead token.  */
3244
0
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
3245
0
  yystate = yyn;
3246
0
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
3247
0
  *++yyvsp = yylval;
3248
0
  YY_IGNORE_MAYBE_UNINITIALIZED_END
3249
3250
  /* Discard the shifted token.  */
3251
0
  yychar = YYEMPTY;
3252
0
  goto yynewstate;
3253
3254
3255
/*-----------------------------------------------------------.
3256
| yydefault -- do the default action for the current state.  |
3257
`-----------------------------------------------------------*/
3258
0
yydefault:
3259
0
  yyn = yydefact[yystate];
3260
0
  if (yyn == 0)
3261
0
    goto yyerrlab;
3262
0
  goto yyreduce;
3263
3264
3265
/*-----------------------------.
3266
| yyreduce -- do a reduction.  |
3267
`-----------------------------*/
3268
0
yyreduce:
3269
  /* yyn is the number of a rule to reduce with.  */
3270
0
  yylen = yyr2[yyn];
3271
3272
  /* If YYLEN is nonzero, implement the default value of the action:
3273
     '$$ = $1'.
3274
3275
     Otherwise, the following line sets YYVAL to garbage.
3276
     This behavior is undocumented and Bison
3277
     users should not rely upon it.  Assigning to YYVAL
3278
     unconditionally makes the parser a bit smaller, and it avoids a
3279
     GCC warning that YYVAL may be used uninitialized.  */
3280
0
  yyval = yyvsp[1-yylen];
3281
3282
3283
0
  YY_REDUCE_PRINT (yyn);
3284
0
  switch (yyn)
3285
0
    {
3286
0
  case 18:
3287
0
#line 232 "./util/configparser.y"
3288
0
        {
3289
0
    OUTYY(("\nP(force-toplevel)\n"));
3290
0
    cfg_parser->started_toplevel = 0;
3291
0
  }
3292
0
#line 3293 "util/configparser.c"
3293
0
    break;
3294
3295
0
  case 19:
3296
0
#line 239 "./util/configparser.y"
3297
0
        {
3298
0
    OUTYY(("\nP(server:)\n"));
3299
0
    cfg_parser->started_toplevel = 1;
3300
0
  }
3301
0
#line 3302 "util/configparser.c"
3302
0
    break;
3303
3304
0
  case 282:
3305
0
#line 365 "./util/configparser.y"
3306
0
        {
3307
    /* stub end */
3308
0
    if(cfg_parser->cfg->stubs &&
3309
0
      !cfg_parser->cfg->stubs->name)
3310
0
      yyerror("stub-zone without name");
3311
0
  }
3312
0
#line 3313 "util/configparser.c"
3313
0
    break;
3314
3315
0
  case 283:
3316
0
#line 373 "./util/configparser.y"
3317
0
        {
3318
0
    struct config_stub* s;
3319
0
    OUTYY(("\nP(stub_zone:)\n"));
3320
0
    cfg_parser->started_toplevel = 1;
3321
0
    s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
3322
0
    if(s) {
3323
0
      s->next = cfg_parser->cfg->stubs;
3324
0
      cfg_parser->cfg->stubs = s;
3325
0
    } else {
3326
0
      yyerror("out of memory");
3327
0
    }
3328
0
  }
3329
0
#line 3330 "util/configparser.c"
3330
0
    break;
3331
3332
0
  case 294:
3333
0
#line 392 "./util/configparser.y"
3334
0
        {
3335
    /* forward end */
3336
0
    if(cfg_parser->cfg->forwards &&
3337
0
      !cfg_parser->cfg->forwards->name)
3338
0
      yyerror("forward-zone without name");
3339
0
  }
3340
0
#line 3341 "util/configparser.c"
3341
0
    break;
3342
3343
0
  case 295:
3344
0
#line 400 "./util/configparser.y"
3345
0
        {
3346
0
    struct config_stub* s;
3347
0
    OUTYY(("\nP(forward_zone:)\n"));
3348
0
    cfg_parser->started_toplevel = 1;
3349
0
    s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
3350
0
    if(s) {
3351
0
      s->next = cfg_parser->cfg->forwards;
3352
0
      cfg_parser->cfg->forwards = s;
3353
0
    } else {
3354
0
      yyerror("out of memory");
3355
0
    }
3356
0
  }
3357
0
#line 3358 "util/configparser.c"
3358
0
    break;
3359
3360
0
  case 305:
3361
0
#line 419 "./util/configparser.y"
3362
0
        {
3363
    /* view end */
3364
0
    if(cfg_parser->cfg->views &&
3365
0
      !cfg_parser->cfg->views->name)
3366
0
      yyerror("view without name");
3367
0
  }
3368
0
#line 3369 "util/configparser.c"
3369
0
    break;
3370
3371
0
  case 306:
3372
0
#line 427 "./util/configparser.y"
3373
0
        {
3374
0
    struct config_view* s;
3375
0
    OUTYY(("\nP(view:)\n"));
3376
0
    cfg_parser->started_toplevel = 1;
3377
0
    s = (struct config_view*)calloc(1, sizeof(struct config_view));
3378
0
    if(s) {
3379
0
      s->next = cfg_parser->cfg->views;
3380
0
      cfg_parser->cfg->views = s;
3381
0
    } else {
3382
0
      yyerror("out of memory");
3383
0
    }
3384
0
  }
3385
0
#line 3386 "util/configparser.c"
3386
0
    break;
3387
3388
0
  case 316:
3389
0
#line 446 "./util/configparser.y"
3390
0
        {
3391
0
    struct config_auth* s;
3392
0
    OUTYY(("\nP(auth_zone:)\n"));
3393
0
    cfg_parser->started_toplevel = 1;
3394
0
    s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
3395
0
    if(s) {
3396
0
      s->next = cfg_parser->cfg->auths;
3397
0
      cfg_parser->cfg->auths = s;
3398
      /* defaults for auth zone */
3399
0
      s->for_downstream = 1;
3400
0
      s->for_upstream = 1;
3401
0
      s->fallback_enabled = 0;
3402
0
      s->zonemd_check = 0;
3403
0
      s->zonemd_reject_absence = 0;
3404
0
      s->isrpz = 0;
3405
0
    } else {
3406
0
      yyerror("out of memory");
3407
0
    }
3408
0
  }
3409
0
#line 3410 "util/configparser.c"
3410
0
    break;
3411
3412
0
  case 329:
3413
0
#line 474 "./util/configparser.y"
3414
0
        {
3415
0
    uint8_t* bitlist;
3416
0
    size_t len = 0;
3417
0
    OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
3418
0
    bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
3419
0
      &len);
3420
0
    free((yyvsp[0].str));
3421
0
    if(!bitlist) {
3422
0
      yyerror("could not parse tags, (define-tag them first)");
3423
0
    }
3424
0
    if(bitlist) {
3425
0
      cfg_parser->cfg->auths->rpz_taglist = bitlist;
3426
0
      cfg_parser->cfg->auths->rpz_taglistlen = len;
3427
3428
0
    }
3429
0
  }
3430
0
#line 3431 "util/configparser.c"
3431
0
    break;
3432
3433
0
  case 330:
3434
0
#line 493 "./util/configparser.y"
3435
0
        {
3436
0
    OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
3437
0
    if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
3438
0
       strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 &&
3439
0
       strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) {
3440
0
      yyerror("rpz-action-override action: expected nxdomain, "
3441
0
        "nodata, passthru, drop, cname or disabled");
3442
0
      free((yyvsp[0].str));
3443
0
      cfg_parser->cfg->auths->rpz_action_override = NULL;
3444
0
    }
3445
0
    else {
3446
0
      cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
3447
0
    }
3448
0
  }
3449
0
#line 3450 "util/configparser.c"
3450
0
    break;
3451
3452
0
  case 331:
3453
0
#line 510 "./util/configparser.y"
3454
0
        {
3455
0
    OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
3456
0
    free(cfg_parser->cfg->auths->rpz_cname);
3457
0
    cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
3458
0
  }
3459
0
#line 3460 "util/configparser.c"
3460
0
    break;
3461
3462
0
  case 332:
3463
0
#line 518 "./util/configparser.y"
3464
0
        {
3465
0
    OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
3466
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3467
0
      yyerror("expected yes or no.");
3468
0
    else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
3469
0
    free((yyvsp[0].str));
3470
0
  }
3471
0
#line 3472 "util/configparser.c"
3472
0
    break;
3473
3474
0
  case 333:
3475
0
#line 528 "./util/configparser.y"
3476
0
        {
3477
0
    OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
3478
0
    free(cfg_parser->cfg->auths->rpz_log_name);
3479
0
    cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
3480
0
  }
3481
0
#line 3482 "util/configparser.c"
3482
0
    break;
3483
3484
0
  case 334:
3485
0
#line 535 "./util/configparser.y"
3486
0
        {
3487
0
    OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str)));
3488
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3489
0
      yyerror("expected yes or no.");
3490
0
    else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
3491
0
    free((yyvsp[0].str));
3492
0
  }
3493
0
#line 3494 "util/configparser.c"
3494
0
    break;
3495
3496
0
  case 335:
3497
0
#line 545 "./util/configparser.y"
3498
0
        {
3499
0
    struct config_auth* s;
3500
0
    OUTYY(("\nP(rpz:)\n"));
3501
0
    cfg_parser->started_toplevel = 1;
3502
0
    s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
3503
0
    if(s) {
3504
0
      s->next = cfg_parser->cfg->auths;
3505
0
      cfg_parser->cfg->auths = s;
3506
      /* defaults for RPZ auth zone */
3507
0
      s->for_downstream = 0;
3508
0
      s->for_upstream = 0;
3509
0
      s->fallback_enabled = 0;
3510
0
      s->isrpz = 1;
3511
0
    } else {
3512
0
      yyerror("out of memory");
3513
0
    }
3514
0
  }
3515
0
#line 3516 "util/configparser.c"
3516
0
    break;
3517
3518
0
  case 350:
3519
0
#line 570 "./util/configparser.y"
3520
0
        {
3521
0
    OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
3522
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3523
0
      yyerror("number expected");
3524
0
    else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
3525
0
    free((yyvsp[0].str));
3526
0
  }
3527
0
#line 3528 "util/configparser.c"
3528
0
    break;
3529
3530
0
  case 351:
3531
0
#line 579 "./util/configparser.y"
3532
0
        {
3533
0
    OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
3534
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3535
0
      yyerror("number expected");
3536
0
    else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
3537
0
    free((yyvsp[0].str));
3538
0
  }
3539
0
#line 3540 "util/configparser.c"
3540
0
    break;
3541
3542
0
  case 352:
3543
0
#line 588 "./util/configparser.y"
3544
0
        {
3545
0
    OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
3546
0
    if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3547
0
      cfg_parser->cfg->stat_interval = 0;
3548
0
    else if(atoi((yyvsp[0].str)) == 0)
3549
0
      yyerror("number expected");
3550
0
    else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
3551
0
    free((yyvsp[0].str));
3552
0
  }
3553
0
#line 3554 "util/configparser.c"
3554
0
    break;
3555
3556
0
  case 353:
3557
0
#line 599 "./util/configparser.y"
3558
0
        {
3559
0
    OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
3560
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3561
0
      yyerror("expected yes or no.");
3562
0
    else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
3563
0
    free((yyvsp[0].str));
3564
0
  }
3565
0
#line 3566 "util/configparser.c"
3566
0
    break;
3567
3568
0
  case 354:
3569
0
#line 608 "./util/configparser.y"
3570
0
        {
3571
0
    OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
3572
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3573
0
      yyerror("expected yes or no.");
3574
0
    else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
3575
0
    free((yyvsp[0].str));
3576
0
  }
3577
0
#line 3578 "util/configparser.c"
3578
0
    break;
3579
3580
0
  case 355:
3581
0
#line 617 "./util/configparser.y"
3582
0
        {
3583
0
    OUTYY(("P(server_statistics_inhibit_zero:%s)\n", (yyvsp[0].str)));
3584
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3585
0
      yyerror("expected yes or no.");
3586
0
    else cfg_parser->cfg->stat_inhibit_zero = (strcmp((yyvsp[0].str), "yes")==0);
3587
0
    free((yyvsp[0].str));
3588
0
  }
3589
0
#line 3590 "util/configparser.c"
3590
0
    break;
3591
3592
0
  case 356:
3593
0
#line 626 "./util/configparser.y"
3594
0
        {
3595
0
    OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
3596
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3597
0
      yyerror("expected yes or no.");
3598
0
    else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
3599
0
    free((yyvsp[0].str));
3600
0
  }
3601
0
#line 3602 "util/configparser.c"
3602
0
    break;
3603
3604
0
  case 357:
3605
0
#line 635 "./util/configparser.y"
3606
0
        {
3607
0
    OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
3608
0
    if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3609
0
      cfg_parser->cfg->shm_key = 0;
3610
0
    else if(atoi((yyvsp[0].str)) == 0)
3611
0
      yyerror("number expected");
3612
0
    else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
3613
0
    free((yyvsp[0].str));
3614
0
  }
3615
0
#line 3616 "util/configparser.c"
3616
0
    break;
3617
3618
0
  case 358:
3619
0
#line 646 "./util/configparser.y"
3620
0
        {
3621
0
    OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
3622
0
    if(atoi((yyvsp[0].str)) == 0)
3623
0
      yyerror("port number expected");
3624
0
    else cfg_parser->cfg->port = atoi((yyvsp[0].str));
3625
0
    free((yyvsp[0].str));
3626
0
  }
3627
0
#line 3628 "util/configparser.c"
3628
0
    break;
3629
3630
0
  case 359:
3631
0
#line 655 "./util/configparser.y"
3632
0
        {
3633
  #ifdef CLIENT_SUBNET
3634
    OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
3635
    if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
3636
      fatal_exit("out of memory adding client-subnet");
3637
  #else
3638
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3639
0
    free((yyvsp[0].str));
3640
0
  #endif
3641
0
  }
3642
0
#line 3643 "util/configparser.c"
3643
0
    break;
3644
3645
0
  case 360:
3646
0
#line 667 "./util/configparser.y"
3647
0
        {
3648
  #ifdef CLIENT_SUBNET
3649
    OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
3650
    if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
3651
      (yyvsp[0].str)))
3652
      fatal_exit("out of memory adding client-subnet-zone");
3653
  #else
3654
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3655
0
    free((yyvsp[0].str));
3656
0
  #endif
3657
0
  }
3658
0
#line 3659 "util/configparser.c"
3659
0
    break;
3660
3661
0
  case 361:
3662
0
#line 681 "./util/configparser.y"
3663
0
        {
3664
  #ifdef CLIENT_SUBNET
3665
    OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
3666
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3667
      yyerror("expected yes or no.");
3668
    else
3669
      cfg_parser->cfg->client_subnet_always_forward =
3670
        (strcmp((yyvsp[0].str), "yes")==0);
3671
  #else
3672
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3673
0
  #endif
3674
0
    free((yyvsp[0].str));
3675
0
  }
3676
0
#line 3677 "util/configparser.c"
3677
0
    break;
3678
3679
0
  case 362:
3680
0
#line 696 "./util/configparser.y"
3681
0
        {
3682
  #ifdef CLIENT_SUBNET
3683
    OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
3684
    OUTYY(("P(Deprecated option, ignoring)\n"));
3685
  #else
3686
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3687
0
  #endif
3688
0
    free((yyvsp[0].str));
3689
0
  }
3690
0
#line 3691 "util/configparser.c"
3691
0
    break;
3692
3693
0
  case 363:
3694
0
#line 707 "./util/configparser.y"
3695
0
        {
3696
  #ifdef CLIENT_SUBNET
3697
    OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3698
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3699
      yyerror("IPv4 subnet length expected");
3700
    else if (atoi((yyvsp[0].str)) > 32)
3701
      cfg_parser->cfg->max_client_subnet_ipv4 = 32;
3702
    else if (atoi((yyvsp[0].str)) < 0)
3703
      cfg_parser->cfg->max_client_subnet_ipv4 = 0;
3704
    else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3705
  #else
3706
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3707
0
  #endif
3708
0
    free((yyvsp[0].str));
3709
0
  }
3710
0
#line 3711 "util/configparser.c"
3711
0
    break;
3712
3713
0
  case 364:
3714
0
#line 724 "./util/configparser.y"
3715
0
        {
3716
  #ifdef CLIENT_SUBNET
3717
    OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3718
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3719
      yyerror("Ipv6 subnet length expected");
3720
    else if (atoi((yyvsp[0].str)) > 128)
3721
      cfg_parser->cfg->max_client_subnet_ipv6 = 128;
3722
    else if (atoi((yyvsp[0].str)) < 0)
3723
      cfg_parser->cfg->max_client_subnet_ipv6 = 0;
3724
    else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3725
  #else
3726
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3727
0
  #endif
3728
0
    free((yyvsp[0].str));
3729
0
  }
3730
0
#line 3731 "util/configparser.c"
3731
0
    break;
3732
3733
0
  case 365:
3734
0
#line 741 "./util/configparser.y"
3735
0
        {
3736
  #ifdef CLIENT_SUBNET
3737
    OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3738
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3739
      yyerror("IPv4 subnet length expected");
3740
    else if (atoi((yyvsp[0].str)) > 32)
3741
      cfg_parser->cfg->min_client_subnet_ipv4 = 32;
3742
    else if (atoi((yyvsp[0].str)) < 0)
3743
      cfg_parser->cfg->min_client_subnet_ipv4 = 0;
3744
    else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3745
  #else
3746
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3747
0
  #endif
3748
0
    free((yyvsp[0].str));
3749
0
  }
3750
0
#line 3751 "util/configparser.c"
3751
0
    break;
3752
3753
0
  case 366:
3754
0
#line 758 "./util/configparser.y"
3755
0
        {
3756
  #ifdef CLIENT_SUBNET
3757
    OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3758
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3759
      yyerror("Ipv6 subnet length expected");
3760
    else if (atoi((yyvsp[0].str)) > 128)
3761
      cfg_parser->cfg->min_client_subnet_ipv6 = 128;
3762
    else if (atoi((yyvsp[0].str)) < 0)
3763
      cfg_parser->cfg->min_client_subnet_ipv6 = 0;
3764
    else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3765
  #else
3766
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3767
0
  #endif
3768
0
    free((yyvsp[0].str));
3769
0
  }
3770
0
#line 3771 "util/configparser.c"
3771
0
    break;
3772
3773
0
  case 367:
3774
0
#line 775 "./util/configparser.y"
3775
0
        {
3776
  #ifdef CLIENT_SUBNET
3777
    OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
3778
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3779
      yyerror("IPv4 ECS tree size expected");
3780
    else if (atoi((yyvsp[0].str)) < 0)
3781
      cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
3782
    else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str));
3783
  #else
3784
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3785
0
  #endif
3786
0
    free((yyvsp[0].str));
3787
0
  }
3788
0
#line 3789 "util/configparser.c"
3789
0
    break;
3790
3791
0
  case 368:
3792
0
#line 790 "./util/configparser.y"
3793
0
        {
3794
  #ifdef CLIENT_SUBNET
3795
    OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
3796
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3797
      yyerror("IPv6 ECS tree size expected");
3798
    else if (atoi((yyvsp[0].str)) < 0)
3799
      cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
3800
    else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str));
3801
  #else
3802
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3803
0
  #endif
3804
0
    free((yyvsp[0].str));
3805
0
  }
3806
0
#line 3807 "util/configparser.c"
3807
0
    break;
3808
3809
0
  case 369:
3810
0
#line 805 "./util/configparser.y"
3811
0
        {
3812
0
    OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
3813
0
    if(cfg_parser->cfg->num_ifs == 0)
3814
0
      cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
3815
0
    else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
3816
0
        (cfg_parser->cfg->num_ifs+1)*sizeof(char*));
3817
0
    if(!cfg_parser->cfg->ifs)
3818
0
      yyerror("out of memory");
3819
0
    else
3820
0
      cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
3821
0
  }
3822
0
#line 3823 "util/configparser.c"
3823
0
    break;
3824
3825
0
  case 370:
3826
0
#line 818 "./util/configparser.y"
3827
0
        {
3828
0
    OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
3829
0
    if(cfg_parser->cfg->num_out_ifs == 0)
3830
0
      cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
3831
0
    else cfg_parser->cfg->out_ifs = realloc(
3832
0
      cfg_parser->cfg->out_ifs,
3833
0
      (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
3834
0
    if(!cfg_parser->cfg->out_ifs)
3835
0
      yyerror("out of memory");
3836
0
    else
3837
0
      cfg_parser->cfg->out_ifs[
3838
0
        cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
3839
0
  }
3840
0
#line 3841 "util/configparser.c"
3841
0
    break;
3842
3843
0
  case 371:
3844
0
#line 833 "./util/configparser.y"
3845
0
        {
3846
0
    OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
3847
0
    if(atoi((yyvsp[0].str)) == 0)
3848
0
      yyerror("number expected");
3849
0
    else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
3850
0
    free((yyvsp[0].str));
3851
0
  }
3852
0
#line 3853 "util/configparser.c"
3853
0
    break;
3854
3855
0
  case 372:
3856
0
#line 842 "./util/configparser.y"
3857
0
        {
3858
0
    OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
3859
0
    if(!cfg_mark_ports((yyvsp[0].str), 1,
3860
0
      cfg_parser->cfg->outgoing_avail_ports, 65536))
3861
0
      yyerror("port number or range (\"low-high\") expected");
3862
0
    free((yyvsp[0].str));
3863
0
  }
3864
0
#line 3865 "util/configparser.c"
3865
0
    break;
3866
3867
0
  case 373:
3868
0
#line 851 "./util/configparser.y"
3869
0
        {
3870
0
    OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
3871
0
    if(!cfg_mark_ports((yyvsp[0].str), 0,
3872
0
      cfg_parser->cfg->outgoing_avail_ports, 65536))
3873
0
      yyerror("port number or range (\"low-high\") expected");
3874
0
    free((yyvsp[0].str));
3875
0
  }
3876
0
#line 3877 "util/configparser.c"
3877
0
    break;
3878
3879
0
  case 374:
3880
0
#line 860 "./util/configparser.y"
3881
0
        {
3882
0
    OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
3883
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3884
0
      yyerror("number expected");
3885
0
    else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
3886
0
    free((yyvsp[0].str));
3887
0
  }
3888
0
#line 3889 "util/configparser.c"
3889
0
    break;
3890
3891
0
  case 375:
3892
0
#line 869 "./util/configparser.y"
3893
0
        {
3894
0
    OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
3895
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3896
0
      yyerror("number expected");
3897
0
    else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
3898
0
    free((yyvsp[0].str));
3899
0
  }
3900
0
#line 3901 "util/configparser.c"
3901
0
    break;
3902
3903
0
  case 376:
3904
0
#line 878 "./util/configparser.y"
3905
0
        {
3906
0
    OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
3907
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3908
0
      yyerror("expected yes or no.");
3909
0
    else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
3910
0
    free((yyvsp[0].str));
3911
0
  }
3912
0
#line 3913 "util/configparser.c"
3913
0
    break;
3914
3915
0
  case 377:
3916
0
#line 887 "./util/configparser.y"
3917
0
        {
3918
0
    OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str)));
3919
0
    free(cfg_parser->cfg->if_automatic_ports);
3920
0
    cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str);
3921
0
  }
3922
0
#line 3923 "util/configparser.c"
3923
0
    break;
3924
3925
0
  case 378:
3926
0
#line 894 "./util/configparser.y"
3927
0
        {
3928
0
    OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
3929
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3930
0
      yyerror("expected yes or no.");
3931
0
    else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3932
0
    free((yyvsp[0].str));
3933
0
  }
3934
0
#line 3935 "util/configparser.c"
3935
0
    break;
3936
3937
0
  case 379:
3938
0
#line 903 "./util/configparser.y"
3939
0
        {
3940
0
    OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
3941
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3942
0
      yyerror("expected yes or no.");
3943
0
    else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
3944
0
    free((yyvsp[0].str));
3945
0
  }
3946
0
#line 3947 "util/configparser.c"
3947
0
    break;
3948
3949
0
  case 380:
3950
0
#line 912 "./util/configparser.y"
3951
0
        {
3952
0
    OUTYY(("P(server_do_nat64:%s)\n", (yyvsp[0].str)));
3953
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3954
0
      yyerror("expected yes or no.");
3955
0
    else cfg_parser->cfg->do_nat64 = (strcmp((yyvsp[0].str), "yes")==0);
3956
0
    free((yyvsp[0].str));
3957
0
  }
3958
0
#line 3959 "util/configparser.c"
3959
0
    break;
3960
3961
0
  case 381:
3962
0
#line 921 "./util/configparser.y"
3963
0
        {
3964
0
    OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
3965
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3966
0
      yyerror("expected yes or no.");
3967
0
    else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
3968
0
    free((yyvsp[0].str));
3969
0
  }
3970
0
#line 3971 "util/configparser.c"
3971
0
    break;
3972
3973
0
  case 382:
3974
0
#line 930 "./util/configparser.y"
3975
0
        {
3976
0
    OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
3977
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3978
0
      yyerror("expected yes or no.");
3979
0
    else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
3980
0
    free((yyvsp[0].str));
3981
0
  }
3982
0
#line 3983 "util/configparser.c"
3983
0
    break;
3984
3985
0
  case 383:
3986
0
#line 939 "./util/configparser.y"
3987
0
        {
3988
0
    OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
3989
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3990
0
      yyerror("expected yes or no.");
3991
0
    else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3992
0
    free((yyvsp[0].str));
3993
0
  }
3994
0
#line 3995 "util/configparser.c"
3995
0
    break;
3996
3997
0
  case 384:
3998
0
#line 948 "./util/configparser.y"
3999
0
        {
4000
0
    OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
4001
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4002
0
      yyerror("expected yes or no.");
4003
0
    else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
4004
0
    free((yyvsp[0].str));
4005
0
  }
4006
0
#line 4007 "util/configparser.c"
4007
0
    break;
4008
4009
0
  case 385:
4010
0
#line 957 "./util/configparser.y"
4011
0
        {
4012
0
    OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
4013
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4014
0
      yyerror("number expected");
4015
0
    else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
4016
0
    free((yyvsp[0].str));
4017
0
  }
4018
0
#line 4019 "util/configparser.c"
4019
0
    break;
4020
4021
0
  case 386:
4022
0
#line 966 "./util/configparser.y"
4023
0
        {
4024
0
    OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
4025
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4026
0
      yyerror("number expected");
4027
0
    else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
4028
0
    free((yyvsp[0].str));
4029
0
  }
4030
0
#line 4031 "util/configparser.c"
4031
0
    break;
4032
4033
0
  case 387:
4034
0
#line 975 "./util/configparser.y"
4035
0
        {
4036
0
    OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
4037
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4038
0
      yyerror("number expected");
4039
0
    else if (atoi((yyvsp[0].str)) > 120000)
4040
0
      cfg_parser->cfg->tcp_idle_timeout = 120000;
4041
0
    else if (atoi((yyvsp[0].str)) < 1)
4042
0
      cfg_parser->cfg->tcp_idle_timeout = 1;
4043
0
    else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
4044
0
    free((yyvsp[0].str));
4045
0
  }
4046
0
#line 4047 "util/configparser.c"
4047
0
    break;
4048
4049
0
  case 388:
4050
0
#line 988 "./util/configparser.y"
4051
0
        {
4052
0
    OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str)));
4053
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4054
0
      yyerror("number expected");
4055
0
    else if (atoi((yyvsp[0].str)) < 1)
4056
0
      cfg_parser->cfg->max_reuse_tcp_queries = 0;
4057
0
    else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
4058
0
    free((yyvsp[0].str));
4059
0
  }
4060
0
#line 4061 "util/configparser.c"
4061
0
    break;
4062
4063
0
  case 389:
4064
0
#line 999 "./util/configparser.y"
4065
0
        {
4066
0
    OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str)));
4067
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4068
0
      yyerror("number expected");
4069
0
    else if (atoi((yyvsp[0].str)) < 1)
4070
0
      cfg_parser->cfg->tcp_reuse_timeout = 0;
4071
0
    else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
4072
0
    free((yyvsp[0].str));
4073
0
  }
4074
0
#line 4075 "util/configparser.c"
4075
0
    break;
4076
4077
0
  case 390:
4078
0
#line 1010 "./util/configparser.y"
4079
0
        {
4080
0
    OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str)));
4081
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4082
0
      yyerror("number expected");
4083
0
    else if (atoi((yyvsp[0].str)) < 1)
4084
0
      cfg_parser->cfg->tcp_auth_query_timeout = 0;
4085
0
    else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
4086
0
    free((yyvsp[0].str));
4087
0
  }
4088
0
#line 4089 "util/configparser.c"
4089
0
    break;
4090
4091
0
  case 391:
4092
0
#line 1021 "./util/configparser.y"
4093
0
        {
4094
0
    OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
4095
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4096
0
      yyerror("expected yes or no.");
4097
0
    else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
4098
0
    free((yyvsp[0].str));
4099
0
  }
4100
0
#line 4101 "util/configparser.c"
4101
0
    break;
4102
4103
0
  case 392:
4104
0
#line 1030 "./util/configparser.y"
4105
0
        {
4106
0
    OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
4107
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4108
0
      yyerror("number expected");
4109
0
    else if (atoi((yyvsp[0].str)) > 6553500)
4110
0
      cfg_parser->cfg->tcp_keepalive_timeout = 6553500;
4111
0
    else if (atoi((yyvsp[0].str)) < 1)
4112
0
      cfg_parser->cfg->tcp_keepalive_timeout = 0;
4113
0
    else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
4114
0
    free((yyvsp[0].str));
4115
0
  }
4116
0
#line 4117 "util/configparser.c"
4117
0
    break;
4118
4119
0
  case 393:
4120
0
#line 1043 "./util/configparser.y"
4121
0
        {
4122
0
    OUTYY(("P(server_sock_queue_timeout:%s)\n", (yyvsp[0].str)));
4123
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4124
0
      yyerror("number expected");
4125
0
    else if (atoi((yyvsp[0].str)) > 6553500)
4126
0
      cfg_parser->cfg->sock_queue_timeout = 6553500;
4127
0
    else if (atoi((yyvsp[0].str)) < 1)
4128
0
      cfg_parser->cfg->sock_queue_timeout = 0;
4129
0
    else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str));
4130
0
    free((yyvsp[0].str));
4131
0
  }
4132
0
#line 4133 "util/configparser.c"
4133
0
    break;
4134
4135
0
  case 394:
4136
0
#line 1056 "./util/configparser.y"
4137
0
        {
4138
0
    OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
4139
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4140
0
      yyerror("expected yes or no.");
4141
0
    else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
4142
0
    free((yyvsp[0].str));
4143
0
  }
4144
0
#line 4145 "util/configparser.c"
4145
0
    break;
4146
4147
0
  case 395:
4148
0
#line 1065 "./util/configparser.y"
4149
0
        {
4150
0
    OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
4151
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4152
0
      yyerror("expected yes or no.");
4153
0
    else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
4154
0
    free((yyvsp[0].str));
4155
0
  }
4156
0
#line 4157 "util/configparser.c"
4157
0
    break;
4158
4159
0
  case 396:
4160
0
#line 1074 "./util/configparser.y"
4161
0
        {
4162
0
    OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
4163
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4164
0
      yyerror("expected yes or no.");
4165
0
    else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
4166
0
    free((yyvsp[0].str));
4167
0
  }
4168
0
#line 4169 "util/configparser.c"
4169
0
    break;
4170
4171
0
  case 397:
4172
0
#line 1083 "./util/configparser.y"
4173
0
        {
4174
0
    OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
4175
0
    free(cfg_parser->cfg->ssl_service_key);
4176
0
    cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
4177
0
  }
4178
0
#line 4179 "util/configparser.c"
4179
0
    break;
4180
4181
0
  case 398:
4182
0
#line 1090 "./util/configparser.y"
4183
0
        {
4184
0
    OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
4185
0
    free(cfg_parser->cfg->ssl_service_pem);
4186
0
    cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
4187
0
  }
4188
0
#line 4189 "util/configparser.c"
4189
0
    break;
4190
4191
0
  case 399:
4192
0
#line 1097 "./util/configparser.y"
4193
0
        {
4194
0
    OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
4195
0
    if(atoi((yyvsp[0].str)) == 0)
4196
0
      yyerror("port number expected");
4197
0
    else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
4198
0
    free((yyvsp[0].str));
4199
0
  }
4200
0
#line 4201 "util/configparser.c"
4201
0
    break;
4202
4203
0
  case 400:
4204
0
#line 1106 "./util/configparser.y"
4205
0
        {
4206
0
    OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
4207
0
    free(cfg_parser->cfg->tls_cert_bundle);
4208
0
    cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
4209
0
  }
4210
0
#line 4211 "util/configparser.c"
4211
0
    break;
4212
4213
0
  case 401:
4214
0
#line 1113 "./util/configparser.y"
4215
0
        {
4216
0
    OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
4217
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4218
0
      yyerror("expected yes or no.");
4219
0
    else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
4220
0
    free((yyvsp[0].str));
4221
0
  }
4222
0
#line 4223 "util/configparser.c"
4223
0
    break;
4224
4225
0
  case 402:
4226
0
#line 1122 "./util/configparser.y"
4227
0
        {
4228
0
    OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
4229
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
4230
0
      (yyvsp[0].str)))
4231
0
      yyerror("out of memory");
4232
0
  }
4233
0
#line 4234 "util/configparser.c"
4234
0
    break;
4235
4236
0
  case 403:
4237
0
#line 1130 "./util/configparser.y"
4238
0
        {
4239
0
    OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
4240
0
    free(cfg_parser->cfg->tls_ciphers);
4241
0
    cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
4242
0
  }
4243
0
#line 4244 "util/configparser.c"
4244
0
    break;
4245
4246
0
  case 404:
4247
0
#line 1137 "./util/configparser.y"
4248
0
        {
4249
0
    OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
4250
0
    free(cfg_parser->cfg->tls_ciphersuites);
4251
0
    cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
4252
0
  }
4253
0
#line 4254 "util/configparser.c"
4254
0
    break;
4255
4256
0
  case 405:
4257
0
#line 1144 "./util/configparser.y"
4258
0
        {
4259
0
    OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
4260
0
    if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
4261
0
      (yyvsp[0].str)))
4262
0
      yyerror("out of memory");
4263
0
  }
4264
0
#line 4265 "util/configparser.c"
4265
0
    break;
4266
4267
0
  case 406:
4268
0
#line 1152 "./util/configparser.y"
4269
0
        {
4270
0
    OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
4271
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4272
0
      yyerror("expected yes or no.");
4273
0
    else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
4274
0
    free((yyvsp[0].str));
4275
0
  }
4276
0
#line 4277 "util/configparser.c"
4277
0
    break;
4278
4279
0
  case 407:
4280
0
#line 1161 "./util/configparser.y"
4281
0
        {
4282
0
    OUTYY(("P(server_tls_use_system_policy_versions:%s)\n", (yyvsp[0].str)));
4283
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4284
0
      yyerror("expected yes or no.");
4285
0
    else cfg_parser->cfg->tls_use_system_policy_versions = (strcmp((yyvsp[0].str), "yes")==0);
4286
0
    free((yyvsp[0].str));
4287
0
  }
4288
0
#line 4289 "util/configparser.c"
4289
0
    break;
4290
4291
0
  case 408:
4292
0
#line 1170 "./util/configparser.y"
4293
0
        {
4294
0
    OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
4295
0
    if(atoi((yyvsp[0].str)) == 0)
4296
0
      yyerror("port number expected");
4297
0
    else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
4298
0
    free((yyvsp[0].str));
4299
0
  }
4300
0
#line 4301 "util/configparser.c"
4301
0
    break;
4302
4303
0
  case 409:
4304
0
#line 1178 "./util/configparser.y"
4305
0
        {
4306
0
    OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
4307
0
    free(cfg_parser->cfg->http_endpoint);
4308
0
    if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') {
4309
0
      cfg_parser->cfg->http_endpoint = malloc(strlen((yyvsp[0].str))+2);
4310
0
      if(cfg_parser->cfg->http_endpoint) {
4311
0
        cfg_parser->cfg->http_endpoint[0] = '/';
4312
0
        memmove(cfg_parser->cfg->http_endpoint+1, (yyvsp[0].str),
4313
0
          strlen((yyvsp[0].str))+1);
4314
0
      } else {
4315
0
        yyerror("out of memory");
4316
0
      }
4317
0
      free((yyvsp[0].str));
4318
0
    } else {
4319
0
      cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
4320
0
    }
4321
0
  }
4322
0
#line 4323 "util/configparser.c"
4323
0
    break;
4324
4325
0
  case 410:
4326
0
#line 1196 "./util/configparser.y"
4327
0
        {
4328
0
    OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
4329
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4330
0
      yyerror("number expected");
4331
0
    else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
4332
0
    free((yyvsp[0].str));
4333
0
  }
4334
0
#line 4335 "util/configparser.c"
4335
0
    break;
4336
4337
0
  case 411:
4338
0
#line 1204 "./util/configparser.y"
4339
0
        {
4340
0
    OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
4341
0
    if(!cfg_parse_memsize((yyvsp[0].str),
4342
0
      &cfg_parser->cfg->http_query_buffer_size))
4343
0
      yyerror("memory size expected");
4344
0
    free((yyvsp[0].str));
4345
0
  }
4346
0
#line 4347 "util/configparser.c"
4347
0
    break;
4348
4349
0
  case 412:
4350
0
#line 1212 "./util/configparser.y"
4351
0
        {
4352
0
    OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
4353
0
    if(!cfg_parse_memsize((yyvsp[0].str),
4354
0
      &cfg_parser->cfg->http_response_buffer_size))
4355
0
      yyerror("memory size expected");
4356
0
    free((yyvsp[0].str));
4357
0
  }
4358
0
#line 4359 "util/configparser.c"
4359
0
    break;
4360
4361
0
  case 413:
4362
0
#line 1220 "./util/configparser.y"
4363
0
        {
4364
0
    OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
4365
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4366
0
      yyerror("expected yes or no.");
4367
0
    else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
4368
0
    free((yyvsp[0].str));
4369
0
  }
4370
0
#line 4371 "util/configparser.c"
4371
0
    break;
4372
4373
0
  case 414:
4374
0
#line 1228 "./util/configparser.y"
4375
0
        {
4376
0
    OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
4377
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4378
0
      yyerror("expected yes or no.");
4379
0
    else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
4380
0
    free((yyvsp[0].str));
4381
0
  }
4382
0
#line 4383 "util/configparser.c"
4383
0
    break;
4384
4385
0
  case 415:
4386
0
#line 1236 "./util/configparser.y"
4387
0
        {
4388
0
    OUTYY(("P(server_quic_port:%s)\n", (yyvsp[0].str)));
4389
0
#ifndef HAVE_NGTCP2
4390
0
    log_warn("%s:%d: Unbound is not compiled with "
4391
0
      "ngtcp2. This is required to use DNS "
4392
0
      "over QUIC.", cfg_parser->filename, cfg_parser->line);
4393
0
#endif
4394
0
    if(atoi((yyvsp[0].str)) == 0)
4395
0
      yyerror("port number expected");
4396
0
    else cfg_parser->cfg->quic_port = atoi((yyvsp[0].str));
4397
0
    free((yyvsp[0].str));
4398
0
  }
4399
0
#line 4400 "util/configparser.c"
4400
0
    break;
4401
4402
0
  case 416:
4403
0
#line 1249 "./util/configparser.y"
4404
0
        {
4405
0
    OUTYY(("P(server_quic_size:%s)\n", (yyvsp[0].str)));
4406
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->quic_size))
4407
0
      yyerror("memory size expected");
4408
0
    free((yyvsp[0].str));
4409
0
  }
4410
0
#line 4411 "util/configparser.c"
4411
0
    break;
4412
4413
0
  case 417:
4414
0
#line 1256 "./util/configparser.y"
4415
0
        {
4416
0
    OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
4417
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4418
0
      yyerror("expected yes or no.");
4419
0
    else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
4420
0
    free((yyvsp[0].str));
4421
0
  }
4422
0
#line 4423 "util/configparser.c"
4423
0
    break;
4424
4425
0
  case 418:
4426
0
#line 1265 "./util/configparser.y"
4427
0
        {
4428
0
    OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
4429
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4430
0
      yyerror("expected yes or no.");
4431
0
    else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
4432
0
    free((yyvsp[0].str));
4433
0
  }
4434
0
#line 4435 "util/configparser.c"
4435
0
    break;
4436
4437
0
  case 419:
4438
0
#line 1274 "./util/configparser.y"
4439
0
        {
4440
0
    OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
4441
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4442
0
      yyerror("expected yes or no.");
4443
0
    else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0);
4444
#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
4445
    if(strcmp((yyvsp[0].str), "yes") == 0)
4446
      yyerror("no syslog services are available. "
4447
        "(reconfigure and compile to add)");
4448
#endif
4449
0
    free((yyvsp[0].str));
4450
0
  }
4451
0
#line 4452 "util/configparser.c"
4452
0
    break;
4453
4454
0
  case 420:
4455
0
#line 1288 "./util/configparser.y"
4456
0
        {
4457
0
    OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
4458
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4459
0
      yyerror("expected yes or no.");
4460
0
    else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
4461
0
    free((yyvsp[0].str));
4462
0
  }
4463
0
#line 4464 "util/configparser.c"
4464
0
    break;
4465
4466
0
  case 421:
4467
0
#line 1297 "./util/configparser.y"
4468
0
        {
4469
0
    OUTYY(("P(server_log_time_iso:%s)\n", (yyvsp[0].str)));
4470
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4471
0
      yyerror("expected yes or no.");
4472
0
    else cfg_parser->cfg->log_time_iso = (strcmp((yyvsp[0].str), "yes")==0);
4473
0
    free((yyvsp[0].str));
4474
0
  }
4475
0
#line 4476 "util/configparser.c"
4476
0
    break;
4477
4478
0
  case 422:
4479
0
#line 1306 "./util/configparser.y"
4480
0
        {
4481
0
    OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
4482
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4483
0
      yyerror("expected yes or no.");
4484
0
    else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
4485
0
    free((yyvsp[0].str));
4486
0
  }
4487
0
#line 4488 "util/configparser.c"
4488
0
    break;
4489
4490
0
  case 423:
4491
0
#line 1315 "./util/configparser.y"
4492
0
        {
4493
0
    OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
4494
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4495
0
      yyerror("expected yes or no.");
4496
0
    else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
4497
0
    free((yyvsp[0].str));
4498
0
  }
4499
0
#line 4500 "util/configparser.c"
4500
0
    break;
4501
4502
0
  case 424:
4503
0
#line 1324 "./util/configparser.y"
4504
0
        {
4505
0
    OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
4506
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4507
0
      yyerror("expected yes or no.");
4508
0
    else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
4509
0
    free((yyvsp[0].str));
4510
0
  }
4511
0
#line 4512 "util/configparser.c"
4512
0
    break;
4513
4514
0
  case 425:
4515
0
#line 1333 "./util/configparser.y"
4516
0
        {
4517
0
    OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
4518
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4519
0
      yyerror("expected yes or no.");
4520
0
    else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
4521
0
    free((yyvsp[0].str));
4522
0
  }
4523
0
#line 4524 "util/configparser.c"
4524
0
    break;
4525
4526
0
  case 426:
4527
0
#line 1342 "./util/configparser.y"
4528
0
        {
4529
0
    OUTYY(("P(server_log_destaddr:%s)\n", (yyvsp[0].str)));
4530
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4531
0
      yyerror("expected yes or no.");
4532
0
    else cfg_parser->cfg->log_destaddr = (strcmp((yyvsp[0].str), "yes")==0);
4533
0
    free((yyvsp[0].str));
4534
0
  }
4535
0
#line 4536 "util/configparser.c"
4536
0
    break;
4537
4538
0
  case 427:
4539
0
#line 1351 "./util/configparser.y"
4540
0
        {
4541
0
    OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
4542
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4543
0
      yyerror("expected yes or no.");
4544
0
    else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
4545
0
    free((yyvsp[0].str));
4546
0
  }
4547
0
#line 4548 "util/configparser.c"
4548
0
    break;
4549
4550
0
  case 428:
4551
0
#line 1360 "./util/configparser.y"
4552
0
        {
4553
0
    OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
4554
0
    free(cfg_parser->cfg->chrootdir);
4555
0
    cfg_parser->cfg->chrootdir = (yyvsp[0].str);
4556
0
  }
4557
0
#line 4558 "util/configparser.c"
4558
0
    break;
4559
4560
0
  case 429:
4561
0
#line 1367 "./util/configparser.y"
4562
0
        {
4563
0
    OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
4564
0
    free(cfg_parser->cfg->username);
4565
0
    cfg_parser->cfg->username = (yyvsp[0].str);
4566
0
  }
4567
0
#line 4568 "util/configparser.c"
4568
0
    break;
4569
4570
0
  case 430:
4571
0
#line 1374 "./util/configparser.y"
4572
0
        {
4573
0
    OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
4574
0
    free(cfg_parser->cfg->directory);
4575
0
    cfg_parser->cfg->directory = (yyvsp[0].str);
4576
    /* change there right away for includes relative to this */
4577
0
    if((yyvsp[0].str)[0]) {
4578
0
      char* d;
4579
#ifdef UB_ON_WINDOWS
4580
      w_config_adjust_directory(cfg_parser->cfg);
4581
#endif
4582
0
      d = cfg_parser->cfg->directory;
4583
      /* adjust directory if we have already chroot,
4584
       * like, we reread after sighup */
4585
0
      if(cfg_parser->chroot && cfg_parser->chroot[0] &&
4586
0
        strncmp(d, cfg_parser->chroot, strlen(
4587
0
        cfg_parser->chroot)) == 0)
4588
0
        d += strlen(cfg_parser->chroot);
4589
0
      if(d[0]) {
4590
0
        if(chdir(d))
4591
0
        log_err("cannot chdir to directory: %s (%s)",
4592
0
          d, strerror(errno));
4593
0
      }
4594
0
    }
4595
0
  }
4596
0
#line 4597 "util/configparser.c"
4597
0
    break;
4598
4599
0
  case 431:
4600
0
#line 1400 "./util/configparser.y"
4601
0
        {
4602
0
    OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
4603
0
    free(cfg_parser->cfg->logfile);
4604
0
    cfg_parser->cfg->logfile = (yyvsp[0].str);
4605
0
    cfg_parser->cfg->use_syslog = 0;
4606
0
  }
4607
0
#line 4608 "util/configparser.c"
4608
0
    break;
4609
4610
0
  case 432:
4611
0
#line 1408 "./util/configparser.y"
4612
0
        {
4613
0
    OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
4614
0
    free(cfg_parser->cfg->pidfile);
4615
0
    cfg_parser->cfg->pidfile = (yyvsp[0].str);
4616
0
  }
4617
0
#line 4618 "util/configparser.c"
4618
0
    break;
4619
4620
0
  case 433:
4621
0
#line 1415 "./util/configparser.y"
4622
0
        {
4623
0
    OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
4624
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
4625
0
      yyerror("out of memory");
4626
0
  }
4627
0
#line 4628 "util/configparser.c"
4628
0
    break;
4629
4630
0
  case 434:
4631
0
#line 1422 "./util/configparser.y"
4632
0
        {
4633
0
    OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
4634
0
    log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
4635
0
    free((yyvsp[0].str));
4636
0
  }
4637
0
#line 4638 "util/configparser.c"
4638
0
    break;
4639
4640
0
  case 435:
4641
0
#line 1429 "./util/configparser.y"
4642
0
        {
4643
0
    OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
4644
0
    log_warn("option dlv-anchor ignored: DLV is decommissioned");
4645
0
    free((yyvsp[0].str));
4646
0
  }
4647
0
#line 4648 "util/configparser.c"
4648
0
    break;
4649
4650
0
  case 436:
4651
0
#line 1436 "./util/configparser.y"
4652
0
        {
4653
0
    OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
4654
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->
4655
0
      auto_trust_anchor_file_list, (yyvsp[0].str)))
4656
0
      yyerror("out of memory");
4657
0
  }
4658
0
#line 4659 "util/configparser.c"
4659
0
    break;
4660
4661
0
  case 437:
4662
0
#line 1444 "./util/configparser.y"
4663
0
        {
4664
0
    OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
4665
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->
4666
0
      trust_anchor_file_list, (yyvsp[0].str)))
4667
0
      yyerror("out of memory");
4668
0
  }
4669
0
#line 4670 "util/configparser.c"
4670
0
    break;
4671
4672
0
  case 438:
4673
0
#line 1452 "./util/configparser.y"
4674
0
        {
4675
0
    OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
4676
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->
4677
0
      trusted_keys_file_list, (yyvsp[0].str)))
4678
0
      yyerror("out of memory");
4679
0
  }
4680
0
#line 4681 "util/configparser.c"
4681
0
    break;
4682
4683
0
  case 439:
4684
0
#line 1460 "./util/configparser.y"
4685
0
        {
4686
0
    OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
4687
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
4688
0
      yyerror("out of memory");
4689
0
  }
4690
0
#line 4691 "util/configparser.c"
4691
0
    break;
4692
4693
0
  case 440:
4694
0
#line 1467 "./util/configparser.y"
4695
0
        {
4696
0
    OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
4697
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4698
0
      yyerror("expected yes or no.");
4699
0
    else
4700
0
      cfg_parser->cfg->trust_anchor_signaling =
4701
0
        (strcmp((yyvsp[0].str), "yes")==0);
4702
0
    free((yyvsp[0].str));
4703
0
  }
4704
0
#line 4705 "util/configparser.c"
4705
0
    break;
4706
4707
0
  case 441:
4708
0
#line 1478 "./util/configparser.y"
4709
0
        {
4710
0
    OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
4711
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4712
0
      yyerror("expected yes or no.");
4713
0
    else
4714
0
      cfg_parser->cfg->root_key_sentinel =
4715
0
        (strcmp((yyvsp[0].str), "yes")==0);
4716
0
    free((yyvsp[0].str));
4717
0
  }
4718
0
#line 4719 "util/configparser.c"
4719
0
    break;
4720
4721
0
  case 442:
4722
0
#line 1489 "./util/configparser.y"
4723
0
        {
4724
0
    OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
4725
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
4726
0
      yyerror("out of memory");
4727
0
  }
4728
0
#line 4729 "util/configparser.c"
4729
0
    break;
4730
4731
0
  case 443:
4732
0
#line 1496 "./util/configparser.y"
4733
0
        {
4734
0
    OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
4735
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4736
0
      yyerror("expected yes or no.");
4737
0
    else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
4738
0
    free((yyvsp[0].str));
4739
0
  }
4740
0
#line 4741 "util/configparser.c"
4741
0
    break;
4742
4743
0
  case 444:
4744
0
#line 1505 "./util/configparser.y"
4745
0
        {
4746
0
    OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
4747
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4748
0
      yyerror("expected yes or no.");
4749
0
    else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
4750
0
    free((yyvsp[0].str));
4751
0
  }
4752
0
#line 4753 "util/configparser.c"
4753
0
    break;
4754
4755
0
  case 445:
4756
0
#line 1514 "./util/configparser.y"
4757
0
        {
4758
0
    OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
4759
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4760
0
      yyerror("expected yes or no.");
4761
0
    else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
4762
0
    free((yyvsp[0].str));
4763
0
  }
4764
0
#line 4765 "util/configparser.c"
4765
0
    break;
4766
4767
0
  case 446:
4768
0
#line 1523 "./util/configparser.y"
4769
0
        {
4770
0
    OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str)));
4771
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4772
0
      yyerror("expected yes or no.");
4773
0
    else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
4774
0
    free((yyvsp[0].str));
4775
0
  }
4776
0
#line 4777 "util/configparser.c"
4777
0
    break;
4778
4779
0
  case 447:
4780
0
#line 1532 "./util/configparser.y"
4781
0
        {
4782
0
    OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
4783
0
    free(cfg_parser->cfg->identity);
4784
0
    cfg_parser->cfg->identity = (yyvsp[0].str);
4785
0
  }
4786
0
#line 4787 "util/configparser.c"
4787
0
    break;
4788
4789
0
  case 448:
4790
0
#line 1539 "./util/configparser.y"
4791
0
        {
4792
0
    OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
4793
0
    free(cfg_parser->cfg->version);
4794
0
    cfg_parser->cfg->version = (yyvsp[0].str);
4795
0
  }
4796
0
#line 4797 "util/configparser.c"
4797
0
    break;
4798
4799
0
  case 449:
4800
0
#line 1546 "./util/configparser.y"
4801
0
        {
4802
0
    OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str)));
4803
0
    free(cfg_parser->cfg->http_user_agent);
4804
0
    cfg_parser->cfg->http_user_agent = (yyvsp[0].str);
4805
0
  }
4806
0
#line 4807 "util/configparser.c"
4807
0
    break;
4808
4809
0
  case 450:
4810
0
#line 1553 "./util/configparser.y"
4811
0
        {
4812
0
    OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
4813
0
    free(cfg_parser->cfg->nsid_cfg_str);
4814
0
    cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str);
4815
0
    free(cfg_parser->cfg->nsid);
4816
0
    cfg_parser->cfg->nsid = NULL;
4817
0
    cfg_parser->cfg->nsid_len = 0;
4818
0
    if (*(yyvsp[0].str) == 0)
4819
0
      ; /* pass; empty string is not setting nsid */
4820
0
    else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid(
4821
0
          (yyvsp[0].str), &cfg_parser->cfg->nsid_len)))
4822
0
      yyerror("the NSID must be either a hex string or an "
4823
0
          "ascii character string prepended with ascii_.");
4824
0
  }
4825
0
#line 4826 "util/configparser.c"
4826
0
    break;
4827
4828
0
  case 451:
4829
0
#line 1569 "./util/configparser.y"
4830
0
        {
4831
0
    OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
4832
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
4833
0
      yyerror("buffer size expected");
4834
0
    free((yyvsp[0].str));
4835
0
  }
4836
0
#line 4837 "util/configparser.c"
4837
0
    break;
4838
4839
0
  case 452:
4840
0
#line 1577 "./util/configparser.y"
4841
0
        {
4842
0
    OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
4843
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
4844
0
      yyerror("buffer size expected");
4845
0
    free((yyvsp[0].str));
4846
0
  }
4847
0
#line 4848 "util/configparser.c"
4848
0
    break;
4849
4850
0
  case 453:
4851
0
#line 1585 "./util/configparser.y"
4852
0
        {
4853
0
    OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
4854
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4855
0
      yyerror("expected yes or no.");
4856
0
    else cfg_parser->cfg->so_reuseport =
4857
0
      (strcmp((yyvsp[0].str), "yes")==0);
4858
0
    free((yyvsp[0].str));
4859
0
  }
4860
0
#line 4861 "util/configparser.c"
4861
0
    break;
4862
4863
0
  case 454:
4864
0
#line 1595 "./util/configparser.y"
4865
0
        {
4866
0
    OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
4867
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4868
0
      yyerror("expected yes or no.");
4869
0
    else cfg_parser->cfg->ip_transparent =
4870
0
      (strcmp((yyvsp[0].str), "yes")==0);
4871
0
    free((yyvsp[0].str));
4872
0
  }
4873
0
#line 4874 "util/configparser.c"
4874
0
    break;
4875
4876
0
  case 455:
4877
0
#line 1605 "./util/configparser.y"
4878
0
        {
4879
0
    OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
4880
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4881
0
      yyerror("expected yes or no.");
4882
0
    else cfg_parser->cfg->ip_freebind =
4883
0
      (strcmp((yyvsp[0].str), "yes")==0);
4884
0
    free((yyvsp[0].str));
4885
0
  }
4886
0
#line 4887 "util/configparser.c"
4887
0
    break;
4888
4889
0
  case 456:
4890
0
#line 1615 "./util/configparser.y"
4891
0
        {
4892
0
    OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
4893
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4894
0
      yyerror("number expected");
4895
0
    else if (atoi((yyvsp[0].str)) > 63)
4896
0
      yyerror("value too large (max 63)");
4897
0
    else if (atoi((yyvsp[0].str)) < 0)
4898
0
      yyerror("value too small (min 0)");
4899
0
    else
4900
0
      cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
4901
0
    free((yyvsp[0].str));
4902
0
  }
4903
0
#line 4904 "util/configparser.c"
4904
0
    break;
4905
4906
0
  case 457:
4907
0
#line 1629 "./util/configparser.y"
4908
0
        {
4909
0
    OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
4910
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
4911
0
      yyerror("memory size expected");
4912
0
    free((yyvsp[0].str));
4913
0
  }
4914
0
#line 4915 "util/configparser.c"
4915
0
    break;
4916
4917
0
  case 458:
4918
0
#line 1637 "./util/configparser.y"
4919
0
        {
4920
0
    OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
4921
0
    if(atoi((yyvsp[0].str)) == 0)
4922
0
      yyerror("number expected");
4923
0
    else if (atoi((yyvsp[0].str)) < 12)
4924
0
      yyerror("edns buffer size too small");
4925
0
    else if (atoi((yyvsp[0].str)) > 65535)
4926
0
      cfg_parser->cfg->edns_buffer_size = 65535;
4927
0
    else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
4928
0
    free((yyvsp[0].str));
4929
0
  }
4930
0
#line 4931 "util/configparser.c"
4931
0
    break;
4932
4933
0
  case 459:
4934
0
#line 1650 "./util/configparser.y"
4935
0
        {
4936
0
    OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
4937
0
    if(atoi((yyvsp[0].str)) == 0)
4938
0
      yyerror("number expected");
4939
0
    else if (atoi((yyvsp[0].str)) < 4096)
4940
0
      yyerror("message buffer size too small (use 4096)");
4941
0
    else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
4942
0
    free((yyvsp[0].str));
4943
0
  }
4944
0
#line 4945 "util/configparser.c"
4945
0
    break;
4946
4947
0
  case 460:
4948
0
#line 1661 "./util/configparser.y"
4949
0
        {
4950
0
    OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
4951
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
4952
0
      yyerror("memory size expected");
4953
0
    free((yyvsp[0].str));
4954
0
  }
4955
0
#line 4956 "util/configparser.c"
4956
0
    break;
4957
4958
0
  case 461:
4959
0
#line 1669 "./util/configparser.y"
4960
0
        {
4961
0
    OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
4962
0
    if(atoi((yyvsp[0].str)) == 0) {
4963
0
      yyerror("number expected");
4964
0
    } else {
4965
0
      cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
4966
0
      if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
4967
0
        yyerror("must be a power of 2");
4968
0
    }
4969
0
    free((yyvsp[0].str));
4970
0
  }
4971
0
#line 4972 "util/configparser.c"
4972
0
    break;
4973
4974
0
  case 462:
4975
0
#line 1682 "./util/configparser.y"
4976
0
        {
4977
0
    OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
4978
0
    if(atoi((yyvsp[0].str)) == 0)
4979
0
      yyerror("number expected");
4980
0
    else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
4981
0
    free((yyvsp[0].str));
4982
0
  }
4983
0
#line 4984 "util/configparser.c"
4984
0
    break;
4985
4986
0
  case 463:
4987
0
#line 1691 "./util/configparser.y"
4988
0
        {
4989
0
    OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
4990
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4991
0
      yyerror("number expected");
4992
0
    else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
4993
0
    free((yyvsp[0].str));
4994
0
  }
4995
0
#line 4996 "util/configparser.c"
4996
0
    break;
4997
4998
0
  case 464:
4999
0
#line 1700 "./util/configparser.y"
5000
0
        {
5001
0
    OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
5002
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5003
0
      yyerror("number expected");
5004
0
    else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
5005
0
    free((yyvsp[0].str));
5006
0
  }
5007
0
#line 5008 "util/configparser.c"
5008
0
    break;
5009
5010
0
  case 465:
5011
0
#line 1709 "./util/configparser.y"
5012
0
        {
5013
0
    OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
5014
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5015
0
      yyerror("expected yes or no.");
5016
0
    else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
5017
0
    free((yyvsp[0].str));
5018
0
  }
5019
0
#line 5020 "util/configparser.c"
5020
0
    break;
5021
5022
0
  case 466:
5023
0
#line 1718 "./util/configparser.y"
5024
0
        {
5025
0
    OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
5026
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5027
0
      yyerror("expected yes or no.");
5028
0
    else cfg_parser->cfg->unblock_lan_zones =
5029
0
      (strcmp((yyvsp[0].str), "yes")==0);
5030
0
    free((yyvsp[0].str));
5031
0
  }
5032
0
#line 5033 "util/configparser.c"
5033
0
    break;
5034
5035
0
  case 467:
5036
0
#line 1728 "./util/configparser.y"
5037
0
        {
5038
0
    OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
5039
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5040
0
      yyerror("expected yes or no.");
5041
0
    else cfg_parser->cfg->insecure_lan_zones =
5042
0
      (strcmp((yyvsp[0].str), "yes")==0);
5043
0
    free((yyvsp[0].str));
5044
0
  }
5045
0
#line 5046 "util/configparser.c"
5046
0
    break;
5047
5048
0
  case 468:
5049
0
#line 1738 "./util/configparser.y"
5050
0
        {
5051
0
    OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
5052
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
5053
0
      yyerror("memory size expected");
5054
0
    free((yyvsp[0].str));
5055
0
  }
5056
0
#line 5057 "util/configparser.c"
5057
0
    break;
5058
5059
0
  case 469:
5060
0
#line 1746 "./util/configparser.y"
5061
0
        {
5062
0
    OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
5063
0
    if(atoi((yyvsp[0].str)) == 0) {
5064
0
      yyerror("number expected");
5065
0
    } else {
5066
0
      cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
5067
0
      if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
5068
0
        yyerror("must be a power of 2");
5069
0
    }
5070
0
    free((yyvsp[0].str));
5071
0
  }
5072
0
#line 5073 "util/configparser.c"
5073
0
    break;
5074
5075
0
  case 470:
5076
0
#line 1759 "./util/configparser.y"
5077
0
        {
5078
0
    OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
5079
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5080
0
      yyerror("number expected");
5081
0
    else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
5082
0
    free((yyvsp[0].str));
5083
0
  }
5084
0
#line 5085 "util/configparser.c"
5085
0
    break;
5086
5087
0
  case 471:
5088
0
#line 1768 "./util/configparser.y"
5089
0
        {
5090
0
    OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
5091
0
    verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
5092
0
      "removed, use infra-host-ttl)", (yyvsp[0].str));
5093
0
    free((yyvsp[0].str));
5094
0
  }
5095
0
#line 5096 "util/configparser.c"
5096
0
    break;
5097
5098
0
  case 472:
5099
0
#line 1776 "./util/configparser.y"
5100
0
        {
5101
0
    OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
5102
0
    if(atoi((yyvsp[0].str)) == 0)
5103
0
      yyerror("number expected");
5104
0
    else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
5105
0
    free((yyvsp[0].str));
5106
0
  }
5107
0
#line 5108 "util/configparser.c"
5108
0
    break;
5109
5110
0
  case 473:
5111
0
#line 1785 "./util/configparser.y"
5112
0
        {
5113
0
    OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
5114
0
    verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
5115
0
      "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
5116
0
    free((yyvsp[0].str));
5117
0
  }
5118
0
#line 5119 "util/configparser.c"
5119
0
    break;
5120
5121
0
  case 474:
5122
0
#line 1793 "./util/configparser.y"
5123
0
        {
5124
0
    OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
5125
0
    if(atoi((yyvsp[0].str)) == 0) {
5126
0
      yyerror("number expected");
5127
0
    } else {
5128
0
      cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
5129
0
      if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
5130
0
        yyerror("must be a power of 2");
5131
0
    }
5132
0
    free((yyvsp[0].str));
5133
0
  }
5134
0
#line 5135 "util/configparser.c"
5135
0
    break;
5136
5137
0
  case 475:
5138
0
#line 1806 "./util/configparser.y"
5139
0
        {
5140
0
    OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
5141
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5142
0
      yyerror("number expected");
5143
0
    else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
5144
0
    free((yyvsp[0].str));
5145
0
  }
5146
0
#line 5147 "util/configparser.c"
5147
0
    break;
5148
5149
0
  case 476:
5150
0
#line 1815 "./util/configparser.y"
5151
0
        {
5152
0
    OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str)));
5153
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5154
0
      yyerror("number expected");
5155
0
    else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str));
5156
0
    free((yyvsp[0].str));
5157
0
  }
5158
0
#line 5159 "util/configparser.c"
5159
0
    break;
5160
5161
0
  case 477:
5162
0
#line 1824 "./util/configparser.y"
5163
0
        {
5164
0
    OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
5165
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5166
0
      yyerror("expected yes or no.");
5167
0
    else cfg_parser->cfg->infra_keep_probing =
5168
0
      (strcmp((yyvsp[0].str), "yes")==0);
5169
0
    free((yyvsp[0].str));
5170
0
  }
5171
0
#line 5172 "util/configparser.c"
5172
0
    break;
5173
5174
0
  case 478:
5175
0
#line 1834 "./util/configparser.y"
5176
0
        {
5177
0
    OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
5178
0
    free(cfg_parser->cfg->target_fetch_policy);
5179
0
    cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
5180
0
  }
5181
0
#line 5182 "util/configparser.c"
5182
0
    break;
5183
5184
0
  case 479:
5185
0
#line 1841 "./util/configparser.y"
5186
0
        {
5187
0
    OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
5188
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5189
0
      yyerror("expected yes or no.");
5190
0
    else cfg_parser->cfg->harden_short_bufsize =
5191
0
      (strcmp((yyvsp[0].str), "yes")==0);
5192
0
    free((yyvsp[0].str));
5193
0
  }
5194
0
#line 5195 "util/configparser.c"
5195
0
    break;
5196
5197
0
  case 480:
5198
0
#line 1851 "./util/configparser.y"
5199
0
        {
5200
0
    OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
5201
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5202
0
      yyerror("expected yes or no.");
5203
0
    else cfg_parser->cfg->harden_large_queries =
5204
0
      (strcmp((yyvsp[0].str), "yes")==0);
5205
0
    free((yyvsp[0].str));
5206
0
  }
5207
0
#line 5208 "util/configparser.c"
5208
0
    break;
5209
5210
0
  case 481:
5211
0
#line 1861 "./util/configparser.y"
5212
0
        {
5213
0
    OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
5214
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5215
0
      yyerror("expected yes or no.");
5216
0
    else cfg_parser->cfg->harden_glue =
5217
0
      (strcmp((yyvsp[0].str), "yes")==0);
5218
0
    free((yyvsp[0].str));
5219
0
  }
5220
0
#line 5221 "util/configparser.c"
5221
0
    break;
5222
5223
0
  case 482:
5224
0
#line 1871 "./util/configparser.y"
5225
0
       {
5226
0
               OUTYY(("P(server_harden_unverified_glue:%s)\n", (yyvsp[0].str)));
5227
0
               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5228
0
                       yyerror("expected yes or no.");
5229
0
               else cfg_parser->cfg->harden_unverified_glue =
5230
0
                       (strcmp((yyvsp[0].str), "yes")==0);
5231
0
               free((yyvsp[0].str));
5232
0
       }
5233
0
#line 5234 "util/configparser.c"
5234
0
    break;
5235
5236
0
  case 483:
5237
0
#line 1881 "./util/configparser.y"
5238
0
        {
5239
0
    OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
5240
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5241
0
      yyerror("expected yes or no.");
5242
0
    else cfg_parser->cfg->harden_dnssec_stripped =
5243
0
      (strcmp((yyvsp[0].str), "yes")==0);
5244
0
    free((yyvsp[0].str));
5245
0
  }
5246
0
#line 5247 "util/configparser.c"
5247
0
    break;
5248
5249
0
  case 484:
5250
0
#line 1891 "./util/configparser.y"
5251
0
        {
5252
0
    OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
5253
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5254
0
      yyerror("expected yes or no.");
5255
0
    else cfg_parser->cfg->harden_below_nxdomain =
5256
0
      (strcmp((yyvsp[0].str), "yes")==0);
5257
0
    free((yyvsp[0].str));
5258
0
  }
5259
0
#line 5260 "util/configparser.c"
5260
0
    break;
5261
5262
0
  case 485:
5263
0
#line 1901 "./util/configparser.y"
5264
0
        {
5265
0
    OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
5266
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5267
0
      yyerror("expected yes or no.");
5268
0
    else cfg_parser->cfg->harden_referral_path =
5269
0
      (strcmp((yyvsp[0].str), "yes")==0);
5270
0
    free((yyvsp[0].str));
5271
0
  }
5272
0
#line 5273 "util/configparser.c"
5273
0
    break;
5274
5275
0
  case 486:
5276
0
#line 1911 "./util/configparser.y"
5277
0
        {
5278
0
    OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
5279
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5280
0
      yyerror("expected yes or no.");
5281
0
    else cfg_parser->cfg->harden_algo_downgrade =
5282
0
      (strcmp((yyvsp[0].str), "yes")==0);
5283
0
    free((yyvsp[0].str));
5284
0
  }
5285
0
#line 5286 "util/configparser.c"
5286
0
    break;
5287
5288
0
  case 487:
5289
0
#line 1921 "./util/configparser.y"
5290
0
        {
5291
0
    OUTYY(("P(server_harden_unknown_additional:%s)\n", (yyvsp[0].str)));
5292
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5293
0
      yyerror("expected yes or no.");
5294
0
    else cfg_parser->cfg->harden_unknown_additional =
5295
0
      (strcmp((yyvsp[0].str), "yes")==0);
5296
0
    free((yyvsp[0].str));
5297
0
  }
5298
0
#line 5299 "util/configparser.c"
5299
0
    break;
5300
5301
0
  case 488:
5302
0
#line 1931 "./util/configparser.y"
5303
0
        {
5304
0
    OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
5305
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5306
0
      yyerror("expected yes or no.");
5307
0
    else cfg_parser->cfg->use_caps_bits_for_id =
5308
0
      (strcmp((yyvsp[0].str), "yes")==0);
5309
0
    free((yyvsp[0].str));
5310
0
  }
5311
0
#line 5312 "util/configparser.c"
5312
0
    break;
5313
5314
0
  case 489:
5315
0
#line 1941 "./util/configparser.y"
5316
0
        {
5317
0
    OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
5318
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
5319
0
      yyerror("out of memory");
5320
0
  }
5321
0
#line 5322 "util/configparser.c"
5322
0
    break;
5323
5324
0
  case 490:
5325
0
#line 1948 "./util/configparser.y"
5326
0
        {
5327
0
    OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
5328
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
5329
0
      yyerror("out of memory");
5330
0
  }
5331
0
#line 5332 "util/configparser.c"
5332
0
    break;
5333
5334
0
  case 491:
5335
0
#line 1955 "./util/configparser.y"
5336
0
        {
5337
0
    OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
5338
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
5339
0
      yyerror("out of memory");
5340
0
  }
5341
0
#line 5342 "util/configparser.c"
5342
0
    break;
5343
5344
0
  case 492:
5345
0
#line 1962 "./util/configparser.y"
5346
0
        {
5347
0
    OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
5348
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5349
0
      yyerror("expected yes or no.");
5350
0
    else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
5351
0
    free((yyvsp[0].str));
5352
0
  }
5353
0
#line 5354 "util/configparser.c"
5354
0
    break;
5355
5356
0
  case 493:
5357
0
#line 1971 "./util/configparser.y"
5358
0
        {
5359
0
    OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
5360
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5361
0
      yyerror("expected yes or no.");
5362
0
    else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
5363
0
    free((yyvsp[0].str));
5364
0
  }
5365
0
#line 5366 "util/configparser.c"
5366
0
    break;
5367
5368
0
  case 494:
5369
0
#line 1980 "./util/configparser.y"
5370
0
        {
5371
0
    OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
5372
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5373
0
      yyerror("expected yes or no.");
5374
0
    else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
5375
0
    free((yyvsp[0].str));
5376
0
  }
5377
0
#line 5378 "util/configparser.c"
5378
0
    break;
5379
5380
0
  case 495:
5381
0
#line 1989 "./util/configparser.y"
5382
0
        {
5383
0
    OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
5384
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5385
0
      yyerror("number expected");
5386
0
    else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
5387
0
    free((yyvsp[0].str));
5388
0
  }
5389
0
#line 5390 "util/configparser.c"
5390
0
    break;
5391
5392
0
  case 496:
5393
0
#line 1998 "./util/configparser.y"
5394
0
        {
5395
0
    OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
5396
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
5397
0
      yyerror("out of memory");
5398
0
  }
5399
0
#line 5400 "util/configparser.c"
5400
0
    break;
5401
5402
0
  case 497:
5403
0
#line 2005 "./util/configparser.y"
5404
0
        {
5405
0
    OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
5406
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5407
0
      yyerror("expected yes or no.");
5408
0
    else cfg_parser->cfg->donotquery_localhost =
5409
0
      (strcmp((yyvsp[0].str), "yes")==0);
5410
0
    free((yyvsp[0].str));
5411
0
  }
5412
0
#line 5413 "util/configparser.c"
5413
0
    break;
5414
5415
0
  case 498:
5416
0
#line 2015 "./util/configparser.y"
5417
0
        {
5418
0
    OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5419
0
    validate_acl_action((yyvsp[0].str));
5420
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
5421
0
      fatal_exit("out of memory adding acl");
5422
0
  }
5423
0
#line 5424 "util/configparser.c"
5424
0
    break;
5425
5426
0
  case 499:
5427
0
#line 2023 "./util/configparser.y"
5428
0
        {
5429
0
    OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5430
0
    validate_acl_action((yyvsp[0].str));
5431
0
    if(!cfg_str2list_insert(
5432
0
      &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str)))
5433
0
      fatal_exit("out of memory adding acl");
5434
0
  }
5435
0
#line 5436 "util/configparser.c"
5436
0
    break;
5437
5438
0
  case 500:
5439
0
#line 2032 "./util/configparser.y"
5440
0
        {
5441
0
    OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
5442
0
    free(cfg_parser->cfg->module_conf);
5443
0
    cfg_parser->cfg->module_conf = (yyvsp[0].str);
5444
0
  }
5445
0
#line 5446 "util/configparser.c"
5446
0
    break;
5447
5448
0
  case 501:
5449
0
#line 2039 "./util/configparser.y"
5450
0
        {
5451
0
    OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
5452
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5453
0
      cfg_parser->cfg->val_date_override = 0;
5454
0
    } else if(strlen((yyvsp[0].str)) == 14) {
5455
0
      cfg_parser->cfg->val_date_override =
5456
0
        cfg_convert_timeval((yyvsp[0].str));
5457
0
      if(!cfg_parser->cfg->val_date_override)
5458
0
        yyerror("bad date/time specification");
5459
0
    } else {
5460
0
      if(atoi((yyvsp[0].str)) == 0)
5461
0
        yyerror("number expected");
5462
0
      cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str));
5463
0
    }
5464
0
    free((yyvsp[0].str));
5465
0
  }
5466
0
#line 5467 "util/configparser.c"
5467
0
    break;
5468
5469
0
  case 502:
5470
0
#line 2057 "./util/configparser.y"
5471
0
        {
5472
0
    OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
5473
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5474
0
      cfg_parser->cfg->val_sig_skew_min = 0;
5475
0
    } else {
5476
0
      cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str));
5477
0
      if(!cfg_parser->cfg->val_sig_skew_min)
5478
0
        yyerror("number expected");
5479
0
    }
5480
0
    free((yyvsp[0].str));
5481
0
  }
5482
0
#line 5483 "util/configparser.c"
5483
0
    break;
5484
5485
0
  case 503:
5486
0
#line 2070 "./util/configparser.y"
5487
0
        {
5488
0
    OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
5489
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5490
0
      cfg_parser->cfg->val_sig_skew_max = 0;
5491
0
    } else {
5492
0
      cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str));
5493
0
      if(!cfg_parser->cfg->val_sig_skew_max)
5494
0
        yyerror("number expected");
5495
0
    }
5496
0
    free((yyvsp[0].str));
5497
0
  }
5498
0
#line 5499 "util/configparser.c"
5499
0
    break;
5500
5501
0
  case 504:
5502
0
#line 2083 "./util/configparser.y"
5503
0
        {
5504
0
    OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str)));
5505
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5506
0
      cfg_parser->cfg->val_max_restart = 0;
5507
0
    } else {
5508
0
      cfg_parser->cfg->val_max_restart = atoi((yyvsp[0].str));
5509
0
      if(!cfg_parser->cfg->val_max_restart)
5510
0
        yyerror("number expected");
5511
0
    }
5512
0
    free((yyvsp[0].str));
5513
0
  }
5514
0
#line 5515 "util/configparser.c"
5515
0
    break;
5516
5517
0
  case 505:
5518
0
#line 2096 "./util/configparser.y"
5519
0
        {
5520
0
    OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
5521
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5522
0
      yyerror("number expected");
5523
0
    else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
5524
0
    free((yyvsp[0].str));
5525
0
  }
5526
0
#line 5527 "util/configparser.c"
5527
0
    break;
5528
5529
0
  case 506:
5530
0
#line 2105 "./util/configparser.y"
5531
0
        {
5532
0
    OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
5533
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5534
0
      yyerror("number expected");
5535
0
    else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
5536
0
    free((yyvsp[0].str));
5537
0
  }
5538
0
#line 5539 "util/configparser.c"
5539
0
    break;
5540
5541
0
  case 507:
5542
0
#line 2114 "./util/configparser.y"
5543
0
        {
5544
0
    OUTYY(("P(server_cache_min_negative_ttl:%s)\n", (yyvsp[0].str)));
5545
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5546
0
      yyerror("number expected");
5547
0
    else cfg_parser->cfg->min_negative_ttl = atoi((yyvsp[0].str));
5548
0
    free((yyvsp[0].str));
5549
0
  }
5550
0
#line 5551 "util/configparser.c"
5551
0
    break;
5552
5553
0
  case 508:
5554
0
#line 2123 "./util/configparser.y"
5555
0
        {
5556
0
    OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
5557
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5558
0
      yyerror("number expected");
5559
0
    else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
5560
0
    free((yyvsp[0].str));
5561
0
  }
5562
0
#line 5563 "util/configparser.c"
5563
0
    break;
5564
5565
0
  case 509:
5566
0
#line 2132 "./util/configparser.y"
5567
0
        {
5568
0
    OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
5569
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5570
0
      yyerror("number expected");
5571
0
    else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
5572
0
    free((yyvsp[0].str));
5573
0
  }
5574
0
#line 5575 "util/configparser.c"
5575
0
    break;
5576
5577
0
  case 510:
5578
0
#line 2141 "./util/configparser.y"
5579
0
        {
5580
0
    OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
5581
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5582
0
      yyerror("expected yes or no.");
5583
0
    else cfg_parser->cfg->val_clean_additional =
5584
0
      (strcmp((yyvsp[0].str), "yes")==0);
5585
0
    free((yyvsp[0].str));
5586
0
  }
5587
0
#line 5588 "util/configparser.c"
5588
0
    break;
5589
5590
0
  case 511:
5591
0
#line 2151 "./util/configparser.y"
5592
0
        {
5593
0
    OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
5594
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5595
0
      yyerror("expected yes or no.");
5596
0
    else cfg_parser->cfg->val_permissive_mode =
5597
0
      (strcmp((yyvsp[0].str), "yes")==0);
5598
0
    free((yyvsp[0].str));
5599
0
  }
5600
0
#line 5601 "util/configparser.c"
5601
0
    break;
5602
5603
0
  case 512:
5604
0
#line 2161 "./util/configparser.y"
5605
0
        {
5606
0
    OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
5607
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5608
0
      yyerror("expected yes or no.");
5609
0
    else
5610
0
      cfg_parser->cfg->aggressive_nsec =
5611
0
        (strcmp((yyvsp[0].str), "yes")==0);
5612
0
    free((yyvsp[0].str));
5613
0
  }
5614
0
#line 5615 "util/configparser.c"
5615
0
    break;
5616
5617
0
  case 513:
5618
0
#line 2172 "./util/configparser.y"
5619
0
        {
5620
0
    OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
5621
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5622
0
      yyerror("expected yes or no.");
5623
0
    else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
5624
0
    free((yyvsp[0].str));
5625
0
  }
5626
0
#line 5627 "util/configparser.c"
5627
0
    break;
5628
5629
0
  case 514:
5630
0
#line 2181 "./util/configparser.y"
5631
0
        {
5632
0
    OUTYY(("P(server_disable_edns_do:%s)\n", (yyvsp[0].str)));
5633
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5634
0
      yyerror("expected yes or no.");
5635
0
    else cfg_parser->cfg->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0);
5636
0
    free((yyvsp[0].str));
5637
0
  }
5638
0
#line 5639 "util/configparser.c"
5639
0
    break;
5640
5641
0
  case 515:
5642
0
#line 2190 "./util/configparser.y"
5643
0
        {
5644
0
    OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
5645
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5646
0
      yyerror("expected yes or no.");
5647
0
    else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
5648
0
    free((yyvsp[0].str));
5649
0
  }
5650
0
#line 5651 "util/configparser.c"
5651
0
    break;
5652
5653
0
  case 516:
5654
0
#line 2199 "./util/configparser.y"
5655
0
        {
5656
0
    OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
5657
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5658
0
      yyerror("number expected");
5659
0
    else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
5660
0
    free((yyvsp[0].str));
5661
0
  }
5662
0
#line 5663 "util/configparser.c"
5663
0
    break;
5664
5665
0
  case 517:
5666
0
#line 2208 "./util/configparser.y"
5667
0
        {
5668
0
    OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
5669
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5670
0
      yyerror("expected yes or no.");
5671
0
    else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
5672
0
    free((yyvsp[0].str));
5673
0
  }
5674
0
#line 5675 "util/configparser.c"
5675
0
    break;
5676
5677
0
  case 518:
5678
0
#line 2217 "./util/configparser.y"
5679
0
        {
5680
0
    OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
5681
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5682
0
      yyerror("number expected");
5683
0
    else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
5684
0
    free((yyvsp[0].str));
5685
0
  }
5686
0
#line 5687 "util/configparser.c"
5687
0
    break;
5688
5689
0
  case 519:
5690
0
#line 2226 "./util/configparser.y"
5691
0
        {
5692
0
    OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
5693
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5694
0
      yyerror("number expected");
5695
0
    else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
5696
0
    free((yyvsp[0].str));
5697
0
  }
5698
0
#line 5699 "util/configparser.c"
5699
0
    break;
5700
5701
0
  case 520:
5702
0
#line 2235 "./util/configparser.y"
5703
0
        {
5704
0
    OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str)));
5705
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5706
0
      yyerror("expected yes or no.");
5707
0
    else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
5708
0
    free((yyvsp[0].str));
5709
0
  }
5710
0
#line 5711 "util/configparser.c"
5711
0
    break;
5712
5713
0
  case 521:
5714
0
#line 2244 "./util/configparser.y"
5715
0
        {
5716
0
    OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str)));
5717
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5718
0
      yyerror("expected yes or no.");
5719
0
    else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
5720
0
    free((yyvsp[0].str));
5721
0
  }
5722
0
#line 5723 "util/configparser.c"
5723
0
    break;
5724
5725
0
  case 522:
5726
0
#line 2253 "./util/configparser.y"
5727
0
        {
5728
0
    OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
5729
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5730
0
      yyerror("expected yes or no.");
5731
0
#if defined(HAVE_SSL) || defined(HAVE_NETTLE)
5732
0
    else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0);
5733
0
    if(fake_dsa)
5734
0
      log_warn("test option fake_dsa is enabled");
5735
0
#endif
5736
0
    free((yyvsp[0].str));
5737
0
  }
5738
0
#line 5739 "util/configparser.c"
5739
0
    break;
5740
5741
0
  case 523:
5742
0
#line 2266 "./util/configparser.y"
5743
0
        {
5744
0
    OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
5745
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5746
0
      yyerror("expected yes or no.");
5747
0
#if defined(HAVE_SSL) || defined(HAVE_NETTLE)
5748
0
    else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0);
5749
0
    if(fake_sha1)
5750
0
      log_warn("test option fake_sha1 is enabled");
5751
0
#endif
5752
0
    free((yyvsp[0].str));
5753
0
  }
5754
0
#line 5755 "util/configparser.c"
5755
0
    break;
5756
5757
0
  case 524:
5758
0
#line 2279 "./util/configparser.y"
5759
0
        {
5760
0
    OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
5761
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5762
0
      yyerror("number expected");
5763
0
    else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
5764
0
    free((yyvsp[0].str));
5765
0
  }
5766
0
#line 5767 "util/configparser.c"
5767
0
    break;
5768
5769
0
  case 525:
5770
0
#line 2288 "./util/configparser.y"
5771
0
        {
5772
0
    OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
5773
0
    free(cfg_parser->cfg->val_nsec3_key_iterations);
5774
0
    cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
5775
0
  }
5776
0
#line 5777 "util/configparser.c"
5777
0
    break;
5778
5779
0
  case 526:
5780
0
#line 2295 "./util/configparser.y"
5781
0
        {
5782
0
    OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str)));
5783
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5784
0
      yyerror("expected yes or no.");
5785
0
    else  cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
5786
0
    free((yyvsp[0].str));
5787
0
  }
5788
0
#line 5789 "util/configparser.c"
5789
0
    break;
5790
5791
0
  case 527:
5792
0
#line 2304 "./util/configparser.y"
5793
0
        {
5794
0
    OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
5795
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5796
0
      yyerror("number expected");
5797
0
    else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
5798
0
    free((yyvsp[0].str));
5799
0
  }
5800
0
#line 5801 "util/configparser.c"
5801
0
    break;
5802
5803
0
  case 528:
5804
0
#line 2313 "./util/configparser.y"
5805
0
        {
5806
0
    OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
5807
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5808
0
      yyerror("number expected");
5809
0
    else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
5810
0
    free((yyvsp[0].str));
5811
0
  }
5812
0
#line 5813 "util/configparser.c"
5813
0
    break;
5814
5815
0
  case 529:
5816
0
#line 2322 "./util/configparser.y"
5817
0
        {
5818
0
    OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
5819
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5820
0
      yyerror("number expected");
5821
0
    else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
5822
0
    free((yyvsp[0].str));
5823
0
  }
5824
0
#line 5825 "util/configparser.c"
5825
0
    break;
5826
5827
0
  case 530:
5828
0
#line 2331 "./util/configparser.y"
5829
0
        {
5830
0
    OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
5831
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5832
0
      yyerror("expected yes or no.");
5833
0
    else cfg_parser->cfg->permit_small_holddown =
5834
0
      (strcmp((yyvsp[0].str), "yes")==0);
5835
0
    free((yyvsp[0].str));
5836
0
  }
5837
0
#line 5838 "util/configparser.c"
5838
0
    break;
5839
5840
0
  case 531:
5841
0
#line 2341 "./util/configparser.y"
5842
0
        {
5843
0
    OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
5844
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
5845
0
      yyerror("memory size expected");
5846
0
    free((yyvsp[0].str));
5847
0
  }
5848
0
#line 5849 "util/configparser.c"
5849
0
    break;
5850
5851
0
  case 532:
5852
0
#line 2349 "./util/configparser.y"
5853
0
        {
5854
0
    OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
5855
0
    if(atoi((yyvsp[0].str)) == 0) {
5856
0
      yyerror("number expected");
5857
0
    } else {
5858
0
      cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
5859
0
      if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
5860
0
        yyerror("must be a power of 2");
5861
0
    }
5862
0
    free((yyvsp[0].str));
5863
0
  }
5864
0
#line 5865 "util/configparser.c"
5865
0
    break;
5866
5867
0
  case 533:
5868
0
#line 2362 "./util/configparser.y"
5869
0
        {
5870
0
    OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
5871
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
5872
0
      yyerror("memory size expected");
5873
0
    free((yyvsp[0].str));
5874
0
  }
5875
0
#line 5876 "util/configparser.c"
5876
0
    break;
5877
5878
0
  case 534:
5879
0
#line 2370 "./util/configparser.y"
5880
0
        {
5881
0
    OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5882
0
    if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
5883
0
       strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
5884
0
       strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
5885
0
       && strcmp((yyvsp[0].str), "typetransparent")!=0
5886
0
       && strcmp((yyvsp[0].str), "always_transparent")!=0
5887
0
       && strcmp((yyvsp[0].str), "block_a")!=0
5888
0
       && strcmp((yyvsp[0].str), "always_refuse")!=0
5889
0
       && strcmp((yyvsp[0].str), "always_nxdomain")!=0
5890
0
       && strcmp((yyvsp[0].str), "always_nodata")!=0
5891
0
       && strcmp((yyvsp[0].str), "always_deny")!=0
5892
0
       && strcmp((yyvsp[0].str), "always_null")!=0
5893
0
       && strcmp((yyvsp[0].str), "noview")!=0
5894
0
       && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
5895
0
       && strcmp((yyvsp[0].str), "inform_redirect") != 0
5896
0
       && strcmp((yyvsp[0].str), "ipset") != 0) {
5897
0
      yyerror("local-zone type: expected static, deny, "
5898
0
        "refuse, redirect, transparent, "
5899
0
        "typetransparent, inform, inform_deny, "
5900
0
        "inform_redirect, always_transparent, block_a,"
5901
0
        "always_refuse, always_nxdomain, "
5902
0
        "always_nodata, always_deny, always_null, "
5903
0
        "noview, nodefault or ipset");
5904
0
      free((yyvsp[-1].str));
5905
0
      free((yyvsp[0].str));
5906
0
    } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
5907
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->
5908
0
        local_zones_nodefault, (yyvsp[-1].str)))
5909
0
        fatal_exit("out of memory adding local-zone");
5910
0
      free((yyvsp[0].str));
5911
#ifdef USE_IPSET
5912
    } else if(strcmp((yyvsp[0].str), "ipset")==0) {
5913
      size_t len = strlen((yyvsp[-1].str));
5914
      /* Make sure to add the trailing dot.
5915
       * These are str compared to domain names. */
5916
      if((yyvsp[-1].str)[len-1] != '.') {
5917
        if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
5918
          fatal_exit("out of memory adding local-zone");
5919
        }
5920
        (yyvsp[-1].str)[len] = '.';
5921
        (yyvsp[-1].str)[len+1] = 0;
5922
      }
5923
      if(!cfg_strlist_insert(&cfg_parser->cfg->
5924
        local_zones_ipset, (yyvsp[-1].str)))
5925
        fatal_exit("out of memory adding local-zone");
5926
      free((yyvsp[0].str));
5927
#endif
5928
0
    } else {
5929
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
5930
0
        (yyvsp[-1].str), (yyvsp[0].str)))
5931
0
        fatal_exit("out of memory adding local-zone");
5932
0
    }
5933
0
  }
5934
0
#line 5935 "util/configparser.c"
5935
0
    break;
5936
5937
0
  case 535:
5938
0
#line 2426 "./util/configparser.y"
5939
0
        {
5940
0
    OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
5941
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
5942
0
      fatal_exit("out of memory adding local-data");
5943
0
  }
5944
0
#line 5945 "util/configparser.c"
5945
0
    break;
5946
5947
0
  case 536:
5948
0
#line 2433 "./util/configparser.y"
5949
0
        {
5950
0
    char* ptr;
5951
0
    OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
5952
0
    ptr = cfg_ptr_reverse((yyvsp[0].str));
5953
0
    free((yyvsp[0].str));
5954
0
    if(ptr) {
5955
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->
5956
0
        local_data, ptr))
5957
0
        fatal_exit("out of memory adding local-data");
5958
0
    } else {
5959
0
      yyerror("local-data-ptr could not be reversed");
5960
0
    }
5961
0
  }
5962
0
#line 5963 "util/configparser.c"
5963
0
    break;
5964
5965
0
  case 537:
5966
0
#line 2448 "./util/configparser.y"
5967
0
        {
5968
0
    OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
5969
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5970
0
      yyerror("expected yes or no.");
5971
0
    else cfg_parser->cfg->minimal_responses =
5972
0
      (strcmp((yyvsp[0].str), "yes")==0);
5973
0
    free((yyvsp[0].str));
5974
0
  }
5975
0
#line 5976 "util/configparser.c"
5976
0
    break;
5977
5978
0
  case 538:
5979
0
#line 2458 "./util/configparser.y"
5980
0
        {
5981
0
    OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
5982
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5983
0
      yyerror("expected yes or no.");
5984
0
    else cfg_parser->cfg->rrset_roundrobin =
5985
0
      (strcmp((yyvsp[0].str), "yes")==0);
5986
0
    free((yyvsp[0].str));
5987
0
  }
5988
0
#line 5989 "util/configparser.c"
5989
0
    break;
5990
5991
0
  case 539:
5992
0
#line 2468 "./util/configparser.y"
5993
0
        {
5994
0
    OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
5995
0
    cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
5996
0
    free((yyvsp[0].str));
5997
0
  }
5998
0
#line 5999 "util/configparser.c"
5999
0
    break;
6000
6001
0
  case 540:
6002
0
#line 2475 "./util/configparser.y"
6003
0
        {
6004
0
    OUTYY(("P(server_discard_timeout:%s)\n", (yyvsp[0].str)));
6005
0
    cfg_parser->cfg->discard_timeout = atoi((yyvsp[0].str));
6006
0
    free((yyvsp[0].str));
6007
0
  }
6008
0
#line 6009 "util/configparser.c"
6009
0
    break;
6010
6011
0
  case 541:
6012
0
#line 2482 "./util/configparser.y"
6013
0
        {
6014
0
    OUTYY(("P(server_wait_limit:%s)\n", (yyvsp[0].str)));
6015
0
    cfg_parser->cfg->wait_limit = atoi((yyvsp[0].str));
6016
0
    free((yyvsp[0].str));
6017
0
  }
6018
0
#line 6019 "util/configparser.c"
6019
0
    break;
6020
6021
0
  case 542:
6022
0
#line 2489 "./util/configparser.y"
6023
0
        {
6024
0
    OUTYY(("P(server_wait_limit_cookie:%s)\n", (yyvsp[0].str)));
6025
0
    cfg_parser->cfg->wait_limit_cookie = atoi((yyvsp[0].str));
6026
0
    free((yyvsp[0].str));
6027
0
  }
6028
0
#line 6029 "util/configparser.c"
6029
0
    break;
6030
6031
0
  case 543:
6032
0
#line 2496 "./util/configparser.y"
6033
0
        {
6034
0
    OUTYY(("P(server_wait_limit_netblock:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6035
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6036
0
      yyerror("number expected");
6037
0
      free((yyvsp[-1].str));
6038
0
      free((yyvsp[0].str));
6039
0
    } else {
6040
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6041
0
        wait_limit_netblock, (yyvsp[-1].str), (yyvsp[0].str)))
6042
0
        fatal_exit("out of memory adding "
6043
0
          "wait-limit-netblock");
6044
0
    }
6045
0
  }
6046
0
#line 6047 "util/configparser.c"
6047
0
    break;
6048
6049
0
  case 544:
6050
0
#line 2511 "./util/configparser.y"
6051
0
        {
6052
0
    OUTYY(("P(server_wait_limit_cookie_netblock:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6053
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6054
0
      yyerror("number expected");
6055
0
      free((yyvsp[-1].str));
6056
0
      free((yyvsp[0].str));
6057
0
    } else {
6058
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6059
0
        wait_limit_cookie_netblock, (yyvsp[-1].str), (yyvsp[0].str)))
6060
0
        fatal_exit("out of memory adding "
6061
0
          "wait-limit-cookie-netblock");
6062
0
    }
6063
0
  }
6064
0
#line 6065 "util/configparser.c"
6065
0
    break;
6066
6067
0
  case 545:
6068
0
#line 2526 "./util/configparser.y"
6069
0
        {
6070
0
    OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
6071
0
    cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
6072
0
    free((yyvsp[0].str));
6073
0
  }
6074
0
#line 6075 "util/configparser.c"
6075
0
    break;
6076
6077
0
  case 546:
6078
0
#line 2533 "./util/configparser.y"
6079
0
        {
6080
0
    OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
6081
0
    free(cfg_parser->cfg->dns64_prefix);
6082
0
    cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
6083
0
  }
6084
0
#line 6085 "util/configparser.c"
6085
0
    break;
6086
6087
0
  case 547:
6088
0
#line 2540 "./util/configparser.y"
6089
0
        {
6090
0
    OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
6091
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6092
0
      yyerror("expected yes or no.");
6093
0
    else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
6094
0
    free((yyvsp[0].str));
6095
0
  }
6096
0
#line 6097 "util/configparser.c"
6097
0
    break;
6098
6099
0
  case 548:
6100
0
#line 2549 "./util/configparser.y"
6101
0
        {
6102
0
    OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
6103
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
6104
0
      (yyvsp[0].str)))
6105
0
      fatal_exit("out of memory adding dns64-ignore-aaaa");
6106
0
  }
6107
0
#line 6108 "util/configparser.c"
6108
0
    break;
6109
6110
0
  case 549:
6111
0
#line 2557 "./util/configparser.y"
6112
0
        {
6113
0
    OUTYY(("P(nat64_prefix:%s)\n", (yyvsp[0].str)));
6114
0
    free(cfg_parser->cfg->nat64_prefix);
6115
0
    cfg_parser->cfg->nat64_prefix = (yyvsp[0].str);
6116
0
  }
6117
0
#line 6118 "util/configparser.c"
6118
0
    break;
6119
6120
0
  case 550:
6121
0
#line 2564 "./util/configparser.y"
6122
0
        {
6123
0
    char* p, *s = (yyvsp[0].str);
6124
0
    OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
6125
0
    while((p=strsep(&s, " \t\n")) != NULL) {
6126
0
      if(*p) {
6127
0
        if(!config_add_tag(cfg_parser->cfg, p))
6128
0
          yyerror("could not define-tag, "
6129
0
            "out of memory");
6130
0
      }
6131
0
    }
6132
0
    free((yyvsp[0].str));
6133
0
  }
6134
0
#line 6135 "util/configparser.c"
6135
0
    break;
6136
6137
0
  case 551:
6138
0
#line 2578 "./util/configparser.y"
6139
0
        {
6140
0
    size_t len = 0;
6141
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6142
0
      &len);
6143
0
    free((yyvsp[0].str));
6144
0
    OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
6145
0
    if(!bitlist) {
6146
0
      yyerror("could not parse tags, (define-tag them first)");
6147
0
      free((yyvsp[-1].str));
6148
0
    }
6149
0
    if(bitlist) {
6150
0
      if(!cfg_strbytelist_insert(
6151
0
        &cfg_parser->cfg->local_zone_tags,
6152
0
        (yyvsp[-1].str), bitlist, len)) {
6153
0
        yyerror("out of memory");
6154
0
        free((yyvsp[-1].str));
6155
0
      }
6156
0
    }
6157
0
  }
6158
0
#line 6159 "util/configparser.c"
6159
0
    break;
6160
6161
0
  case 552:
6162
0
#line 2599 "./util/configparser.y"
6163
0
        {
6164
0
    size_t len = 0;
6165
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6166
0
      &len);
6167
0
    free((yyvsp[0].str));
6168
0
    OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
6169
0
    if(!bitlist) {
6170
0
      yyerror("could not parse tags, (define-tag them first)");
6171
0
      free((yyvsp[-1].str));
6172
0
    }
6173
0
    if(bitlist) {
6174
0
      if(!cfg_strbytelist_insert(
6175
0
        &cfg_parser->cfg->acl_tags,
6176
0
        (yyvsp[-1].str), bitlist, len)) {
6177
0
        yyerror("out of memory");
6178
0
        free((yyvsp[-1].str));
6179
0
      }
6180
0
    }
6181
0
  }
6182
0
#line 6183 "util/configparser.c"
6183
0
    break;
6184
6185
0
  case 553:
6186
0
#line 2620 "./util/configparser.y"
6187
0
        {
6188
0
    OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6189
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
6190
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6191
0
      yyerror("out of memory");
6192
0
      free((yyvsp[-2].str));
6193
0
      free((yyvsp[-1].str));
6194
0
      free((yyvsp[0].str));
6195
0
    }
6196
0
  }
6197
0
#line 6198 "util/configparser.c"
6198
0
    break;
6199
6200
0
  case 554:
6201
0
#line 2632 "./util/configparser.y"
6202
0
        {
6203
0
    OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6204
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
6205
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6206
0
      yyerror("out of memory");
6207
0
      free((yyvsp[-2].str));
6208
0
      free((yyvsp[-1].str));
6209
0
      free((yyvsp[0].str));
6210
0
    }
6211
0
  }
6212
0
#line 6213 "util/configparser.c"
6213
0
    break;
6214
6215
0
  case 555:
6216
0
#line 2644 "./util/configparser.y"
6217
0
        {
6218
0
    OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6219
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
6220
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6221
0
      yyerror("out of memory");
6222
0
      free((yyvsp[-2].str));
6223
0
      free((yyvsp[-1].str));
6224
0
      free((yyvsp[0].str));
6225
0
    }
6226
0
  }
6227
0
#line 6228 "util/configparser.c"
6228
0
    break;
6229
6230
0
  case 556:
6231
0
#line 2656 "./util/configparser.y"
6232
0
        {
6233
0
    OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6234
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
6235
0
      (yyvsp[-1].str), (yyvsp[0].str))) {
6236
0
      yyerror("out of memory");
6237
0
    }
6238
0
  }
6239
0
#line 6240 "util/configparser.c"
6240
0
    break;
6241
6242
0
  case 557:
6243
0
#line 2665 "./util/configparser.y"
6244
0
        {
6245
0
    size_t len = 0;
6246
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6247
0
      &len);
6248
0
    free((yyvsp[0].str));
6249
0
    OUTYY(("P(server_interface_tag:%s)\n", (yyvsp[-1].str)));
6250
0
    if(!bitlist) {
6251
0
      yyerror("could not parse tags, (define-tag them first)");
6252
0
      free((yyvsp[-1].str));
6253
0
    }
6254
0
    if(bitlist) {
6255
0
      if(!cfg_strbytelist_insert(
6256
0
        &cfg_parser->cfg->interface_tags,
6257
0
        (yyvsp[-1].str), bitlist, len)) {
6258
0
        yyerror("out of memory");
6259
0
        free((yyvsp[-1].str));
6260
0
      }
6261
0
    }
6262
0
  }
6263
0
#line 6264 "util/configparser.c"
6264
0
    break;
6265
6266
0
  case 558:
6267
0
#line 2686 "./util/configparser.y"
6268
0
        {
6269
0
    OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6270
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions,
6271
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6272
0
      yyerror("out of memory");
6273
0
      free((yyvsp[-2].str));
6274
0
      free((yyvsp[-1].str));
6275
0
      free((yyvsp[0].str));
6276
0
    }
6277
0
  }
6278
0
#line 6279 "util/configparser.c"
6279
0
    break;
6280
6281
0
  case 559:
6282
0
#line 2698 "./util/configparser.y"
6283
0
        {
6284
0
    OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6285
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas,
6286
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6287
0
      yyerror("out of memory");
6288
0
      free((yyvsp[-2].str));
6289
0
      free((yyvsp[-1].str));
6290
0
      free((yyvsp[0].str));
6291
0
    }
6292
0
  }
6293
0
#line 6294 "util/configparser.c"
6294
0
    break;
6295
6296
0
  case 560:
6297
0
#line 2710 "./util/configparser.y"
6298
0
        {
6299
0
    OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6300
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view,
6301
0
      (yyvsp[-1].str), (yyvsp[0].str))) {
6302
0
      yyerror("out of memory");
6303
0
    }
6304
0
  }
6305
0
#line 6306 "util/configparser.c"
6306
0
    break;
6307
6308
0
  case 561:
6309
0
#line 2719 "./util/configparser.y"
6310
0
        {
6311
0
    size_t len = 0;
6312
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6313
0
      &len);
6314
0
    free((yyvsp[0].str));
6315
0
    OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str)));
6316
0
    if(!bitlist) {
6317
0
      yyerror("could not parse tags, (define-tag them first)");
6318
0
      free((yyvsp[-1].str));
6319
0
    }
6320
0
    if(bitlist) {
6321
0
      if(!cfg_strbytelist_insert(
6322
0
        &cfg_parser->cfg->respip_tags,
6323
0
        (yyvsp[-1].str), bitlist, len)) {
6324
0
        yyerror("out of memory");
6325
0
        free((yyvsp[-1].str));
6326
0
      }
6327
0
    }
6328
0
  }
6329
0
#line 6330 "util/configparser.c"
6330
0
    break;
6331
6332
0
  case 562:
6333
0
#line 2740 "./util/configparser.y"
6334
0
        {
6335
0
    OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
6336
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6337
0
      yyerror("number expected");
6338
0
    else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
6339
0
    free((yyvsp[0].str));
6340
0
  }
6341
0
#line 6342 "util/configparser.c"
6342
0
    break;
6343
6344
0
  case 563:
6345
0
#line 2749 "./util/configparser.y"
6346
0
        {
6347
0
    OUTYY(("P(server_ip_ratelimit_cookie:%s)\n", (yyvsp[0].str)));
6348
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6349
0
      yyerror("number expected");
6350
0
    else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str));
6351
0
    free((yyvsp[0].str));
6352
0
  }
6353
0
#line 6354 "util/configparser.c"
6354
0
    break;
6355
6356
0
  case 564:
6357
0
#line 2758 "./util/configparser.y"
6358
0
        {
6359
0
    OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
6360
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6361
0
      yyerror("number expected");
6362
0
    else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
6363
0
    free((yyvsp[0].str));
6364
0
  }
6365
0
#line 6366 "util/configparser.c"
6366
0
    break;
6367
6368
0
  case 565:
6369
0
#line 2767 "./util/configparser.y"
6370
0
        {
6371
0
    OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
6372
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
6373
0
      yyerror("memory size expected");
6374
0
    free((yyvsp[0].str));
6375
0
  }
6376
0
#line 6377 "util/configparser.c"
6377
0
    break;
6378
6379
0
  case 566:
6380
0
#line 2775 "./util/configparser.y"
6381
0
        {
6382
0
    OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
6383
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
6384
0
      yyerror("memory size expected");
6385
0
    free((yyvsp[0].str));
6386
0
  }
6387
0
#line 6388 "util/configparser.c"
6388
0
    break;
6389
6390
0
  case 567:
6391
0
#line 2783 "./util/configparser.y"
6392
0
        {
6393
0
    OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
6394
0
    if(atoi((yyvsp[0].str)) == 0) {
6395
0
      yyerror("number expected");
6396
0
    } else {
6397
0
      cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
6398
0
      if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
6399
0
        yyerror("must be a power of 2");
6400
0
    }
6401
0
    free((yyvsp[0].str));
6402
0
  }
6403
0
#line 6404 "util/configparser.c"
6404
0
    break;
6405
6406
0
  case 568:
6407
0
#line 2796 "./util/configparser.y"
6408
0
        {
6409
0
    OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
6410
0
    if(atoi((yyvsp[0].str)) == 0) {
6411
0
      yyerror("number expected");
6412
0
    } else {
6413
0
      cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
6414
0
      if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
6415
0
        yyerror("must be a power of 2");
6416
0
    }
6417
0
    free((yyvsp[0].str));
6418
0
  }
6419
0
#line 6420 "util/configparser.c"
6420
0
    break;
6421
6422
0
  case 569:
6423
0
#line 2809 "./util/configparser.y"
6424
0
        {
6425
0
    OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6426
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6427
0
      yyerror("number expected");
6428
0
      free((yyvsp[-1].str));
6429
0
      free((yyvsp[0].str));
6430
0
    } else {
6431
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6432
0
        ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
6433
0
        fatal_exit("out of memory adding "
6434
0
          "ratelimit-for-domain");
6435
0
    }
6436
0
  }
6437
0
#line 6438 "util/configparser.c"
6438
0
    break;
6439
6440
0
  case 570:
6441
0
#line 2824 "./util/configparser.y"
6442
0
        {
6443
0
    OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6444
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6445
0
      yyerror("number expected");
6446
0
      free((yyvsp[-1].str));
6447
0
      free((yyvsp[0].str));
6448
0
    } else {
6449
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6450
0
        ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
6451
0
        fatal_exit("out of memory adding "
6452
0
          "ratelimit-below-domain");
6453
0
    }
6454
0
  }
6455
0
#line 6456 "util/configparser.c"
6456
0
    break;
6457
6458
0
  case 571:
6459
0
#line 2839 "./util/configparser.y"
6460
0
        {
6461
0
    OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
6462
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6463
0
      yyerror("number expected");
6464
0
    else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
6465
0
    free((yyvsp[0].str));
6466
0
  }
6467
0
#line 6468 "util/configparser.c"
6468
0
    break;
6469
6470
0
  case 572:
6471
0
#line 2848 "./util/configparser.y"
6472
0
        {
6473
0
    OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
6474
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6475
0
      yyerror("number expected");
6476
0
    else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
6477
0
    free((yyvsp[0].str));
6478
0
  }
6479
0
#line 6480 "util/configparser.c"
6480
0
    break;
6481
6482
0
  case 573:
6483
0
#line 2857 "./util/configparser.y"
6484
0
        {
6485
0
    OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
6486
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6487
0
      yyerror("expected yes or no.");
6488
0
    else cfg_parser->cfg->ip_ratelimit_backoff =
6489
0
      (strcmp((yyvsp[0].str), "yes")==0);
6490
0
    free((yyvsp[0].str));
6491
0
  }
6492
0
#line 6493 "util/configparser.c"
6493
0
    break;
6494
6495
0
  case 574:
6496
0
#line 2867 "./util/configparser.y"
6497
0
        {
6498
0
    OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
6499
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6500
0
      yyerror("expected yes or no.");
6501
0
    else cfg_parser->cfg->ratelimit_backoff =
6502
0
      (strcmp((yyvsp[0].str), "yes")==0);
6503
0
    free((yyvsp[0].str));
6504
0
  }
6505
0
#line 6506 "util/configparser.c"
6506
0
    break;
6507
6508
0
  case 575:
6509
0
#line 2877 "./util/configparser.y"
6510
0
        {
6511
0
    OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str)));
6512
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6513
0
      yyerror("number expected");
6514
0
    else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
6515
0
    free((yyvsp[0].str));
6516
0
  }
6517
0
#line 6518 "util/configparser.c"
6518
0
    break;
6519
6520
0
  case 576:
6521
0
#line 2886 "./util/configparser.y"
6522
0
        {
6523
0
    OUTYY(("P(server_max_sent_count:%s)\n", (yyvsp[0].str)));
6524
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6525
0
      yyerror("number expected");
6526
0
    else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str));
6527
0
    free((yyvsp[0].str));
6528
0
  }
6529
0
#line 6530 "util/configparser.c"
6530
0
    break;
6531
6532
0
  case 577:
6533
0
#line 2895 "./util/configparser.y"
6534
0
        {
6535
0
    OUTYY(("P(server_max_query_restarts:%s)\n", (yyvsp[0].str)));
6536
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6537
0
      yyerror("number expected");
6538
0
    else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str));
6539
0
    free((yyvsp[0].str));
6540
0
  }
6541
0
#line 6542 "util/configparser.c"
6542
0
    break;
6543
6544
0
  case 578:
6545
0
#line 2904 "./util/configparser.y"
6546
0
        {
6547
0
    OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
6548
0
    free((yyvsp[0].str));
6549
0
  }
6550
0
#line 6551 "util/configparser.c"
6551
0
    break;
6552
6553
0
  case 579:
6554
0
#line 2910 "./util/configparser.y"
6555
0
        {
6556
0
    OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
6557
0
    if(atoi((yyvsp[0].str)) <= 0)
6558
0
      yyerror("number expected");
6559
0
    else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
6560
0
    free((yyvsp[0].str));
6561
0
  }
6562
0
#line 6563 "util/configparser.c"
6563
0
    break;
6564
6565
0
  case 580:
6566
0
#line 2919 "./util/configparser.y"
6567
0
        {
6568
0
    OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
6569
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6570
0
      yyerror("number expected");
6571
0
    else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
6572
0
    free((yyvsp[0].str));
6573
0
  }
6574
0
#line 6575 "util/configparser.c"
6575
0
    break;
6576
6577
0
  case 581:
6578
0
#line 2928 "./util/configparser.y"
6579
0
        {
6580
0
    OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
6581
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6582
0
      yyerror("expected yes or no.");
6583
0
    else cfg_parser->cfg->qname_minimisation =
6584
0
      (strcmp((yyvsp[0].str), "yes")==0);
6585
0
    free((yyvsp[0].str));
6586
0
  }
6587
0
#line 6588 "util/configparser.c"
6588
0
    break;
6589
6590
0
  case 582:
6591
0
#line 2938 "./util/configparser.y"
6592
0
        {
6593
0
    OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
6594
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6595
0
      yyerror("expected yes or no.");
6596
0
    else cfg_parser->cfg->qname_minimisation_strict =
6597
0
      (strcmp((yyvsp[0].str), "yes")==0);
6598
0
    free((yyvsp[0].str));
6599
0
  }
6600
0
#line 6601 "util/configparser.c"
6601
0
    break;
6602
6603
0
  case 583:
6604
0
#line 2948 "./util/configparser.y"
6605
0
        {
6606
0
    OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str)));
6607
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6608
0
      yyerror("expected yes or no.");
6609
0
    else cfg_parser->cfg->pad_responses =
6610
0
      (strcmp((yyvsp[0].str), "yes")==0);
6611
0
    free((yyvsp[0].str));
6612
0
  }
6613
0
#line 6614 "util/configparser.c"
6614
0
    break;
6615
6616
0
  case 584:
6617
0
#line 2958 "./util/configparser.y"
6618
0
        {
6619
0
    OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
6620
0
    if(atoi((yyvsp[0].str)) == 0)
6621
0
      yyerror("number expected");
6622
0
    else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
6623
0
    free((yyvsp[0].str));
6624
0
  }
6625
0
#line 6626 "util/configparser.c"
6626
0
    break;
6627
6628
0
  case 585:
6629
0
#line 2967 "./util/configparser.y"
6630
0
        {
6631
0
    OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str)));
6632
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6633
0
      yyerror("expected yes or no.");
6634
0
    else cfg_parser->cfg->pad_queries =
6635
0
      (strcmp((yyvsp[0].str), "yes")==0);
6636
0
    free((yyvsp[0].str));
6637
0
  }
6638
0
#line 6639 "util/configparser.c"
6639
0
    break;
6640
6641
0
  case 586:
6642
0
#line 2977 "./util/configparser.y"
6643
0
        {
6644
0
    OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
6645
0
    if(atoi((yyvsp[0].str)) == 0)
6646
0
      yyerror("number expected");
6647
0
    else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
6648
0
    free((yyvsp[0].str));
6649
0
  }
6650
0
#line 6651 "util/configparser.c"
6651
0
    break;
6652
6653
0
  case 587:
6654
0
#line 2986 "./util/configparser.y"
6655
0
        {
6656
  #ifdef USE_IPSECMOD
6657
    OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
6658
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6659
      yyerror("expected yes or no.");
6660
    else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0);
6661
  #else
6662
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6663
0
  #endif
6664
0
    free((yyvsp[0].str));
6665
0
  }
6666
0
#line 6667 "util/configparser.c"
6667
0
    break;
6668
6669
0
  case 588:
6670
0
#line 2999 "./util/configparser.y"
6671
0
        {
6672
  #ifdef USE_IPSECMOD
6673
    OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
6674
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6675
      yyerror("expected yes or no.");
6676
    else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0);
6677
  #else
6678
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6679
0
  #endif
6680
0
    free((yyvsp[0].str));
6681
0
  }
6682
0
#line 6683 "util/configparser.c"
6683
0
    break;
6684
6685
0
  case 589:
6686
0
#line 3012 "./util/configparser.y"
6687
0
        {
6688
  #ifdef USE_IPSECMOD
6689
    OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
6690
    free(cfg_parser->cfg->ipsecmod_hook);
6691
    cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str);
6692
  #else
6693
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6694
0
    free((yyvsp[0].str));
6695
0
  #endif
6696
0
  }
6697
0
#line 6698 "util/configparser.c"
6698
0
    break;
6699
6700
0
  case 590:
6701
0
#line 3024 "./util/configparser.y"
6702
0
        {
6703
  #ifdef USE_IPSECMOD
6704
    OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
6705
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6706
      yyerror("number expected");
6707
    else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str));
6708
    free((yyvsp[0].str));
6709
  #else
6710
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6711
0
    free((yyvsp[0].str));
6712
0
  #endif
6713
0
  }
6714
0
#line 6715 "util/configparser.c"
6715
0
    break;
6716
6717
0
  case 591:
6718
0
#line 3038 "./util/configparser.y"
6719
0
        {
6720
  #ifdef USE_IPSECMOD
6721
    OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
6722
    if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str)))
6723
      yyerror("out of memory");
6724
  #else
6725
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6726
0
    free((yyvsp[0].str));
6727
0
  #endif
6728
0
  }
6729
0
#line 6730 "util/configparser.c"
6730
0
    break;
6731
6732
0
  case 592:
6733
0
#line 3050 "./util/configparser.y"
6734
0
        {
6735
  #ifdef USE_IPSECMOD
6736
    OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
6737
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6738
      yyerror("expected yes or no.");
6739
    else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0);
6740
    free((yyvsp[0].str));
6741
  #else
6742
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6743
0
    free((yyvsp[0].str));
6744
0
  #endif
6745
0
  }
6746
0
#line 6747 "util/configparser.c"
6747
0
    break;
6748
6749
0
  case 593:
6750
0
#line 3064 "./util/configparser.y"
6751
0
        {
6752
0
    OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6753
0
    if(!cfg_str2list_insert(
6754
0
      &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
6755
0
      fatal_exit("out of memory adding "
6756
0
        "edns-client-string");
6757
0
  }
6758
0
#line 6759 "util/configparser.c"
6759
0
    break;
6760
6761
0
  case 594:
6762
0
#line 3073 "./util/configparser.y"
6763
0
        {
6764
0
    OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
6765
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6766
0
      yyerror("option code expected");
6767
0
    else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
6768
0
      yyerror("option code must be in interval [0, 65535]");
6769
0
    else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
6770
0
    free((yyvsp[0].str));
6771
0
  }
6772
0
#line 6773 "util/configparser.c"
6773
0
    break;
6774
6775
0
  case 595:
6776
0
#line 3084 "./util/configparser.y"
6777
0
        {
6778
0
    OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str)));
6779
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6780
0
      yyerror("expected yes or no.");
6781
0
    else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0);
6782
0
    free((yyvsp[0].str));
6783
0
  }
6784
0
#line 6785 "util/configparser.c"
6785
0
    break;
6786
6787
0
  case 596:
6788
0
#line 3093 "./util/configparser.y"
6789
0
        {
6790
0
    OUTYY(("P(server_dns_error_reporting:%s)\n", (yyvsp[0].str)));
6791
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6792
0
      yyerror("expected yes or no.");
6793
0
    else cfg_parser->cfg->dns_error_reporting = (strcmp((yyvsp[0].str), "yes")==0);
6794
0
    free((yyvsp[0].str));
6795
0
  }
6796
0
#line 6797 "util/configparser.c"
6797
0
    break;
6798
6799
0
  case 597:
6800
0
#line 3102 "./util/configparser.y"
6801
0
        {
6802
0
    OUTYY(("P(server_proxy_protocol_port:%s)\n", (yyvsp[0].str)));
6803
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, (yyvsp[0].str)))
6804
0
      yyerror("out of memory");
6805
0
  }
6806
0
#line 6807 "util/configparser.c"
6807
0
    break;
6808
6809
0
  case 598:
6810
0
#line 3109 "./util/configparser.y"
6811
0
        {
6812
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6813
0
    if(cfg_parser->cfg->stubs->name)
6814
0
      yyerror("stub name override, there must be one name "
6815
0
        "for one stub-zone");
6816
0
    free(cfg_parser->cfg->stubs->name);
6817
0
    cfg_parser->cfg->stubs->name = (yyvsp[0].str);
6818
0
  }
6819
0
#line 6820 "util/configparser.c"
6820
0
    break;
6821
6822
0
  case 599:
6823
0
#line 3119 "./util/configparser.y"
6824
0
        {
6825
0
    OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
6826
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
6827
0
      yyerror("out of memory");
6828
0
  }
6829
0
#line 6830 "util/configparser.c"
6830
0
    break;
6831
6832
0
  case 600:
6833
0
#line 3126 "./util/configparser.y"
6834
0
        {
6835
0
    OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
6836
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
6837
0
      yyerror("out of memory");
6838
0
  }
6839
0
#line 6840 "util/configparser.c"
6840
0
    break;
6841
6842
0
  case 601:
6843
0
#line 3133 "./util/configparser.y"
6844
0
        {
6845
0
    OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
6846
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6847
0
      yyerror("expected yes or no.");
6848
0
    else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6849
0
    free((yyvsp[0].str));
6850
0
  }
6851
0
#line 6852 "util/configparser.c"
6852
0
    break;
6853
6854
0
  case 602:
6855
0
#line 3142 "./util/configparser.y"
6856
0
        {
6857
0
    OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
6858
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6859
0
      yyerror("expected yes or no.");
6860
0
    else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
6861
0
    free((yyvsp[0].str));
6862
0
  }
6863
0
#line 6864 "util/configparser.c"
6864
0
    break;
6865
6866
0
  case 603:
6867
0
#line 3151 "./util/configparser.y"
6868
0
        {
6869
0
    OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
6870
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6871
0
      yyerror("expected yes or no.");
6872
0
    else cfg_parser->cfg->stubs->ssl_upstream =
6873
0
      (strcmp((yyvsp[0].str), "yes")==0);
6874
0
    free((yyvsp[0].str));
6875
0
  }
6876
0
#line 6877 "util/configparser.c"
6877
0
    break;
6878
6879
0
  case 604:
6880
0
#line 3161 "./util/configparser.y"
6881
0
        {
6882
0
                OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str)));
6883
0
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6884
0
                        yyerror("expected yes or no.");
6885
0
                else cfg_parser->cfg->stubs->tcp_upstream =
6886
0
                        (strcmp((yyvsp[0].str), "yes")==0);
6887
0
                free((yyvsp[0].str));
6888
0
        }
6889
0
#line 6890 "util/configparser.c"
6890
0
    break;
6891
6892
0
  case 605:
6893
0
#line 3171 "./util/configparser.y"
6894
0
        {
6895
0
    OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
6896
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6897
0
      yyerror("expected yes or no.");
6898
0
    else cfg_parser->cfg->stubs->isprime =
6899
0
      (strcmp((yyvsp[0].str), "yes")==0);
6900
0
    free((yyvsp[0].str));
6901
0
  }
6902
0
#line 6903 "util/configparser.c"
6903
0
    break;
6904
6905
0
  case 606:
6906
0
#line 3181 "./util/configparser.y"
6907
0
        {
6908
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6909
0
    if(cfg_parser->cfg->forwards->name)
6910
0
      yyerror("forward name override, there must be one "
6911
0
        "name for one forward-zone");
6912
0
    free(cfg_parser->cfg->forwards->name);
6913
0
    cfg_parser->cfg->forwards->name = (yyvsp[0].str);
6914
0
  }
6915
0
#line 6916 "util/configparser.c"
6916
0
    break;
6917
6918
0
  case 607:
6919
0
#line 3191 "./util/configparser.y"
6920
0
        {
6921
0
    OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
6922
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
6923
0
      yyerror("out of memory");
6924
0
  }
6925
0
#line 6926 "util/configparser.c"
6926
0
    break;
6927
6928
0
  case 608:
6929
0
#line 3198 "./util/configparser.y"
6930
0
        {
6931
0
    OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
6932
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
6933
0
      yyerror("out of memory");
6934
0
  }
6935
0
#line 6936 "util/configparser.c"
6936
0
    break;
6937
6938
0
  case 609:
6939
0
#line 3205 "./util/configparser.y"
6940
0
        {
6941
0
    OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
6942
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6943
0
      yyerror("expected yes or no.");
6944
0
    else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6945
0
    free((yyvsp[0].str));
6946
0
  }
6947
0
#line 6948 "util/configparser.c"
6948
0
    break;
6949
6950
0
  case 610:
6951
0
#line 3214 "./util/configparser.y"
6952
0
        {
6953
0
    OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
6954
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6955
0
      yyerror("expected yes or no.");
6956
0
    else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
6957
0
    free((yyvsp[0].str));
6958
0
  }
6959
0
#line 6960 "util/configparser.c"
6960
0
    break;
6961
6962
0
  case 611:
6963
0
#line 3223 "./util/configparser.y"
6964
0
        {
6965
0
    OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
6966
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6967
0
      yyerror("expected yes or no.");
6968
0
    else cfg_parser->cfg->forwards->ssl_upstream =
6969
0
      (strcmp((yyvsp[0].str), "yes")==0);
6970
0
    free((yyvsp[0].str));
6971
0
  }
6972
0
#line 6973 "util/configparser.c"
6973
0
    break;
6974
6975
0
  case 612:
6976
0
#line 3233 "./util/configparser.y"
6977
0
        {
6978
0
                OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str)));
6979
0
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6980
0
                        yyerror("expected yes or no.");
6981
0
                else cfg_parser->cfg->forwards->tcp_upstream =
6982
0
                        (strcmp((yyvsp[0].str), "yes")==0);
6983
0
                free((yyvsp[0].str));
6984
0
        }
6985
0
#line 6986 "util/configparser.c"
6986
0
    break;
6987
6988
0
  case 613:
6989
0
#line 3243 "./util/configparser.y"
6990
0
        {
6991
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6992
0
    if(cfg_parser->cfg->auths->name)
6993
0
      yyerror("auth name override, there must be one name "
6994
0
        "for one auth-zone");
6995
0
    free(cfg_parser->cfg->auths->name);
6996
0
    cfg_parser->cfg->auths->name = (yyvsp[0].str);
6997
0
  }
6998
0
#line 6999 "util/configparser.c"
6999
0
    break;
7000
7001
0
  case 614:
7002
0
#line 3253 "./util/configparser.y"
7003
0
        {
7004
0
    OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
7005
0
    free(cfg_parser->cfg->auths->zonefile);
7006
0
    cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
7007
0
  }
7008
0
#line 7009 "util/configparser.c"
7009
0
    break;
7010
7011
0
  case 615:
7012
0
#line 3260 "./util/configparser.y"
7013
0
        {
7014
0
    OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
7015
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
7016
0
      yyerror("out of memory");
7017
0
  }
7018
0
#line 7019 "util/configparser.c"
7019
0
    break;
7020
7021
0
  case 616:
7022
0
#line 3267 "./util/configparser.y"
7023
0
        {
7024
0
    OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
7025
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
7026
0
      yyerror("out of memory");
7027
0
  }
7028
0
#line 7029 "util/configparser.c"
7029
0
    break;
7030
7031
0
  case 617:
7032
0
#line 3274 "./util/configparser.y"
7033
0
        {
7034
0
    OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
7035
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
7036
0
      (yyvsp[0].str)))
7037
0
      yyerror("out of memory");
7038
0
  }
7039
0
#line 7040 "util/configparser.c"
7040
0
    break;
7041
7042
0
  case 618:
7043
0
#line 3282 "./util/configparser.y"
7044
0
        {
7045
0
    OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str)));
7046
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7047
0
      yyerror("expected yes or no.");
7048
0
    else cfg_parser->cfg->auths->zonemd_check =
7049
0
      (strcmp((yyvsp[0].str), "yes")==0);
7050
0
    free((yyvsp[0].str));
7051
0
  }
7052
0
#line 7053 "util/configparser.c"
7053
0
    break;
7054
7055
0
  case 619:
7056
0
#line 3292 "./util/configparser.y"
7057
0
        {
7058
0
    OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str)));
7059
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7060
0
      yyerror("expected yes or no.");
7061
0
    else cfg_parser->cfg->auths->zonemd_reject_absence =
7062
0
      (strcmp((yyvsp[0].str), "yes")==0);
7063
0
    free((yyvsp[0].str));
7064
0
  }
7065
0
#line 7066 "util/configparser.c"
7066
0
    break;
7067
7068
0
  case 620:
7069
0
#line 3302 "./util/configparser.y"
7070
0
        {
7071
0
    OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
7072
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7073
0
      yyerror("expected yes or no.");
7074
0
    else cfg_parser->cfg->auths->for_downstream =
7075
0
      (strcmp((yyvsp[0].str), "yes")==0);
7076
0
    free((yyvsp[0].str));
7077
0
  }
7078
0
#line 7079 "util/configparser.c"
7079
0
    break;
7080
7081
0
  case 621:
7082
0
#line 3312 "./util/configparser.y"
7083
0
        {
7084
0
    OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
7085
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7086
0
      yyerror("expected yes or no.");
7087
0
    else cfg_parser->cfg->auths->for_upstream =
7088
0
      (strcmp((yyvsp[0].str), "yes")==0);
7089
0
    free((yyvsp[0].str));
7090
0
  }
7091
0
#line 7092 "util/configparser.c"
7092
0
    break;
7093
7094
0
  case 622:
7095
0
#line 3322 "./util/configparser.y"
7096
0
        {
7097
0
    OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
7098
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7099
0
      yyerror("expected yes or no.");
7100
0
    else cfg_parser->cfg->auths->fallback_enabled =
7101
0
      (strcmp((yyvsp[0].str), "yes")==0);
7102
0
    free((yyvsp[0].str));
7103
0
  }
7104
0
#line 7105 "util/configparser.c"
7105
0
    break;
7106
7107
0
  case 623:
7108
0
#line 3332 "./util/configparser.y"
7109
0
        {
7110
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
7111
0
    if(cfg_parser->cfg->views->name)
7112
0
      yyerror("view name override, there must be one "
7113
0
        "name for one view");
7114
0
    free(cfg_parser->cfg->views->name);
7115
0
    cfg_parser->cfg->views->name = (yyvsp[0].str);
7116
0
  }
7117
0
#line 7118 "util/configparser.c"
7118
0
    break;
7119
7120
0
  case 624:
7121
0
#line 3342 "./util/configparser.y"
7122
0
        {
7123
0
    OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7124
0
    if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
7125
0
       strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
7126
0
       strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
7127
0
       && strcmp((yyvsp[0].str), "typetransparent")!=0
7128
0
       && strcmp((yyvsp[0].str), "always_transparent")!=0
7129
0
       && strcmp((yyvsp[0].str), "always_refuse")!=0
7130
0
       && strcmp((yyvsp[0].str), "always_nxdomain")!=0
7131
0
       && strcmp((yyvsp[0].str), "always_nodata")!=0
7132
0
       && strcmp((yyvsp[0].str), "always_deny")!=0
7133
0
       && strcmp((yyvsp[0].str), "always_null")!=0
7134
0
       && strcmp((yyvsp[0].str), "noview")!=0
7135
0
       && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
7136
0
       && strcmp((yyvsp[0].str), "inform_redirect") != 0
7137
0
       && strcmp((yyvsp[0].str), "ipset") != 0) {
7138
0
      yyerror("local-zone type: expected static, deny, "
7139
0
        "refuse, redirect, transparent, "
7140
0
        "typetransparent, inform, inform_deny, "
7141
0
        "inform_redirect, always_transparent, "
7142
0
        "always_refuse, always_nxdomain, "
7143
0
        "always_nodata, always_deny, always_null, "
7144
0
        "noview, nodefault or ipset");
7145
0
      free((yyvsp[-1].str));
7146
0
      free((yyvsp[0].str));
7147
0
    } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
7148
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->views->
7149
0
        local_zones_nodefault, (yyvsp[-1].str)))
7150
0
        fatal_exit("out of memory adding local-zone");
7151
0
      free((yyvsp[0].str));
7152
#ifdef USE_IPSET
7153
    } else if(strcmp((yyvsp[0].str), "ipset")==0) {
7154
      size_t len = strlen((yyvsp[-1].str));
7155
      /* Make sure to add the trailing dot.
7156
       * These are str compared to domain names. */
7157
      if((yyvsp[-1].str)[len-1] != '.') {
7158
        if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
7159
          fatal_exit("out of memory adding local-zone");
7160
        }
7161
        (yyvsp[-1].str)[len] = '.';
7162
        (yyvsp[-1].str)[len+1] = 0;
7163
      }
7164
      if(!cfg_strlist_insert(&cfg_parser->cfg->views->
7165
        local_zones_ipset, (yyvsp[-1].str)))
7166
        fatal_exit("out of memory adding local-zone");
7167
      free((yyvsp[0].str));
7168
#endif
7169
0
    } else {
7170
0
      if(!cfg_str2list_insert(
7171
0
        &cfg_parser->cfg->views->local_zones,
7172
0
        (yyvsp[-1].str), (yyvsp[0].str)))
7173
0
        fatal_exit("out of memory adding local-zone");
7174
0
    }
7175
0
  }
7176
0
#line 7177 "util/configparser.c"
7177
0
    break;
7178
7179
0
  case 625:
7180
0
#line 3398 "./util/configparser.y"
7181
0
        {
7182
0
    OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7183
0
    validate_respip_action((yyvsp[0].str));
7184
0
    if(!cfg_str2list_insert(
7185
0
      &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str)))
7186
0
      fatal_exit("out of memory adding per-view "
7187
0
        "response-ip action");
7188
0
  }
7189
0
#line 7190 "util/configparser.c"
7190
0
    break;
7191
7192
0
  case 626:
7193
0
#line 3408 "./util/configparser.y"
7194
0
        {
7195
0
    OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
7196
0
    if(!cfg_str2list_insert(
7197
0
      &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
7198
0
      fatal_exit("out of memory adding response-ip-data");
7199
0
  }
7200
0
#line 7201 "util/configparser.c"
7201
0
    break;
7202
7203
0
  case 627:
7204
0
#line 3416 "./util/configparser.y"
7205
0
        {
7206
0
    OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
7207
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
7208
0
      fatal_exit("out of memory adding local-data");
7209
0
    }
7210
0
  }
7211
0
#line 7212 "util/configparser.c"
7212
0
    break;
7213
7214
0
  case 628:
7215
0
#line 3424 "./util/configparser.y"
7216
0
        {
7217
0
    char* ptr;
7218
0
    OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
7219
0
    ptr = cfg_ptr_reverse((yyvsp[0].str));
7220
0
    free((yyvsp[0].str));
7221
0
    if(ptr) {
7222
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->views->
7223
0
        local_data, ptr))
7224
0
        fatal_exit("out of memory adding local-data");
7225
0
    } else {
7226
0
      yyerror("local-data-ptr could not be reversed");
7227
0
    }
7228
0
  }
7229
0
#line 7230 "util/configparser.c"
7230
0
    break;
7231
7232
0
  case 629:
7233
0
#line 3439 "./util/configparser.y"
7234
0
        {
7235
0
    OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
7236
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7237
0
      yyerror("expected yes or no.");
7238
0
    else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
7239
0
    free((yyvsp[0].str));
7240
0
  }
7241
0
#line 7242 "util/configparser.c"
7242
0
    break;
7243
7244
0
  case 630:
7245
0
#line 3448 "./util/configparser.y"
7246
0
        {
7247
0
    OUTYY(("\nP(remote-control:)\n"));
7248
0
    cfg_parser->started_toplevel = 1;
7249
0
  }
7250
0
#line 7251 "util/configparser.c"
7251
0
    break;
7252
7253
0
  case 641:
7254
0
#line 3460 "./util/configparser.y"
7255
0
        {
7256
0
    OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
7257
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7258
0
      yyerror("expected yes or no.");
7259
0
    else cfg_parser->cfg->remote_control_enable =
7260
0
      (strcmp((yyvsp[0].str), "yes")==0);
7261
0
    free((yyvsp[0].str));
7262
0
  }
7263
0
#line 7264 "util/configparser.c"
7264
0
    break;
7265
7266
0
  case 642:
7267
0
#line 3470 "./util/configparser.y"
7268
0
        {
7269
0
    OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
7270
0
    if(atoi((yyvsp[0].str)) == 0)
7271
0
      yyerror("control port number expected");
7272
0
    else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
7273
0
    free((yyvsp[0].str));
7274
0
  }
7275
0
#line 7276 "util/configparser.c"
7276
0
    break;
7277
7278
0
  case 643:
7279
0
#line 3479 "./util/configparser.y"
7280
0
        {
7281
0
    OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
7282
0
    if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
7283
0
      yyerror("out of memory");
7284
0
  }
7285
0
#line 7286 "util/configparser.c"
7286
0
    break;
7287
7288
0
  case 644:
7289
0
#line 3486 "./util/configparser.y"
7290
0
        {
7291
0
    OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
7292
0
    cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
7293
0
    free((yyvsp[0].str));
7294
0
  }
7295
0
#line 7296 "util/configparser.c"
7296
0
    break;
7297
7298
0
  case 645:
7299
0
#line 3493 "./util/configparser.y"
7300
0
        {
7301
0
    OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
7302
0
    free(cfg_parser->cfg->server_key_file);
7303
0
    cfg_parser->cfg->server_key_file = (yyvsp[0].str);
7304
0
  }
7305
0
#line 7306 "util/configparser.c"
7306
0
    break;
7307
7308
0
  case 646:
7309
0
#line 3500 "./util/configparser.y"
7310
0
        {
7311
0
    OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
7312
0
    free(cfg_parser->cfg->server_cert_file);
7313
0
    cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
7314
0
  }
7315
0
#line 7316 "util/configparser.c"
7316
0
    break;
7317
7318
0
  case 647:
7319
0
#line 3507 "./util/configparser.y"
7320
0
        {
7321
0
    OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
7322
0
    free(cfg_parser->cfg->control_key_file);
7323
0
    cfg_parser->cfg->control_key_file = (yyvsp[0].str);
7324
0
  }
7325
0
#line 7326 "util/configparser.c"
7326
0
    break;
7327
7328
0
  case 648:
7329
0
#line 3514 "./util/configparser.y"
7330
0
        {
7331
0
    OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
7332
0
    free(cfg_parser->cfg->control_cert_file);
7333
0
    cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
7334
0
  }
7335
0
#line 7336 "util/configparser.c"
7336
0
    break;
7337
7338
0
  case 649:
7339
0
#line 3521 "./util/configparser.y"
7340
0
        {
7341
0
    OUTYY(("\nP(dnstap:)\n"));
7342
0
    cfg_parser->started_toplevel = 1;
7343
0
  }
7344
0
#line 7345 "util/configparser.c"
7345
0
    break;
7346
7347
0
  case 672:
7348
0
#line 3543 "./util/configparser.y"
7349
0
        {
7350
0
    OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
7351
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7352
0
      yyerror("expected yes or no.");
7353
0
    else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
7354
0
    free((yyvsp[0].str));
7355
0
  }
7356
0
#line 7357 "util/configparser.c"
7357
0
    break;
7358
7359
0
  case 673:
7360
0
#line 3552 "./util/configparser.y"
7361
0
        {
7362
0
    OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
7363
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7364
0
      yyerror("expected yes or no.");
7365
0
    else cfg_parser->cfg->dnstap_bidirectional =
7366
0
      (strcmp((yyvsp[0].str), "yes")==0);
7367
0
    free((yyvsp[0].str));
7368
0
  }
7369
0
#line 7370 "util/configparser.c"
7370
0
    break;
7371
7372
0
  case 674:
7373
0
#line 3562 "./util/configparser.y"
7374
0
        {
7375
0
    OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
7376
0
    free(cfg_parser->cfg->dnstap_socket_path);
7377
0
    cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
7378
0
  }
7379
0
#line 7380 "util/configparser.c"
7380
0
    break;
7381
7382
0
  case 675:
7383
0
#line 3569 "./util/configparser.y"
7384
0
        {
7385
0
    OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
7386
0
    free(cfg_parser->cfg->dnstap_ip);
7387
0
    cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
7388
0
  }
7389
0
#line 7390 "util/configparser.c"
7390
0
    break;
7391
7392
0
  case 676:
7393
0
#line 3576 "./util/configparser.y"
7394
0
        {
7395
0
    OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
7396
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7397
0
      yyerror("expected yes or no.");
7398
0
    else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
7399
0
    free((yyvsp[0].str));
7400
0
  }
7401
0
#line 7402 "util/configparser.c"
7402
0
    break;
7403
7404
0
  case 677:
7405
0
#line 3585 "./util/configparser.y"
7406
0
        {
7407
0
    OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
7408
0
    free(cfg_parser->cfg->dnstap_tls_server_name);
7409
0
    cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
7410
0
  }
7411
0
#line 7412 "util/configparser.c"
7412
0
    break;
7413
7414
0
  case 678:
7415
0
#line 3592 "./util/configparser.y"
7416
0
        {
7417
0
    OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
7418
0
    free(cfg_parser->cfg->dnstap_tls_cert_bundle);
7419
0
    cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
7420
0
  }
7421
0
#line 7422 "util/configparser.c"
7422
0
    break;
7423
7424
0
  case 679:
7425
0
#line 3599 "./util/configparser.y"
7426
0
        {
7427
0
    OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
7428
0
    free(cfg_parser->cfg->dnstap_tls_client_key_file);
7429
0
    cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
7430
0
  }
7431
0
#line 7432 "util/configparser.c"
7432
0
    break;
7433
7434
0
  case 680:
7435
0
#line 3606 "./util/configparser.y"
7436
0
        {
7437
0
    OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
7438
0
    free(cfg_parser->cfg->dnstap_tls_client_cert_file);
7439
0
    cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
7440
0
  }
7441
0
#line 7442 "util/configparser.c"
7442
0
    break;
7443
7444
0
  case 681:
7445
0
#line 3613 "./util/configparser.y"
7446
0
        {
7447
0
    OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
7448
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7449
0
      yyerror("expected yes or no.");
7450
0
    else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
7451
0
    free((yyvsp[0].str));
7452
0
  }
7453
0
#line 7454 "util/configparser.c"
7454
0
    break;
7455
7456
0
  case 682:
7457
0
#line 3622 "./util/configparser.y"
7458
0
        {
7459
0
    OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
7460
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7461
0
      yyerror("expected yes or no.");
7462
0
    else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
7463
0
    free((yyvsp[0].str));
7464
0
  }
7465
0
#line 7466 "util/configparser.c"
7466
0
    break;
7467
7468
0
  case 683:
7469
0
#line 3631 "./util/configparser.y"
7470
0
        {
7471
0
    OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
7472
0
    free(cfg_parser->cfg->dnstap_identity);
7473
0
    cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
7474
0
  }
7475
0
#line 7476 "util/configparser.c"
7476
0
    break;
7477
7478
0
  case 684:
7479
0
#line 3638 "./util/configparser.y"
7480
0
        {
7481
0
    OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
7482
0
    free(cfg_parser->cfg->dnstap_version);
7483
0
    cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
7484
0
  }
7485
0
#line 7486 "util/configparser.c"
7486
0
    break;
7487
7488
0
  case 685:
7489
0
#line 3645 "./util/configparser.y"
7490
0
        {
7491
0
    OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
7492
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7493
0
      yyerror("expected yes or no.");
7494
0
    else cfg_parser->cfg->dnstap_log_resolver_query_messages =
7495
0
      (strcmp((yyvsp[0].str), "yes")==0);
7496
0
    free((yyvsp[0].str));
7497
0
  }
7498
0
#line 7499 "util/configparser.c"
7499
0
    break;
7500
7501
0
  case 686:
7502
0
#line 3655 "./util/configparser.y"
7503
0
        {
7504
0
    OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
7505
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7506
0
      yyerror("expected yes or no.");
7507
0
    else cfg_parser->cfg->dnstap_log_resolver_response_messages =
7508
0
      (strcmp((yyvsp[0].str), "yes")==0);
7509
0
    free((yyvsp[0].str));
7510
0
  }
7511
0
#line 7512 "util/configparser.c"
7512
0
    break;
7513
7514
0
  case 687:
7515
0
#line 3665 "./util/configparser.y"
7516
0
        {
7517
0
    OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
7518
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7519
0
      yyerror("expected yes or no.");
7520
0
    else cfg_parser->cfg->dnstap_log_client_query_messages =
7521
0
      (strcmp((yyvsp[0].str), "yes")==0);
7522
0
    free((yyvsp[0].str));
7523
0
  }
7524
0
#line 7525 "util/configparser.c"
7525
0
    break;
7526
7527
0
  case 688:
7528
0
#line 3675 "./util/configparser.y"
7529
0
        {
7530
0
    OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
7531
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7532
0
      yyerror("expected yes or no.");
7533
0
    else cfg_parser->cfg->dnstap_log_client_response_messages =
7534
0
      (strcmp((yyvsp[0].str), "yes")==0);
7535
0
    free((yyvsp[0].str));
7536
0
  }
7537
0
#line 7538 "util/configparser.c"
7538
0
    break;
7539
7540
0
  case 689:
7541
0
#line 3685 "./util/configparser.y"
7542
0
        {
7543
0
    OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
7544
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7545
0
      yyerror("expected yes or no.");
7546
0
    else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
7547
0
      (strcmp((yyvsp[0].str), "yes")==0);
7548
0
    free((yyvsp[0].str));
7549
0
  }
7550
0
#line 7551 "util/configparser.c"
7551
0
    break;
7552
7553
0
  case 690:
7554
0
#line 3695 "./util/configparser.y"
7555
0
        {
7556
0
    OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
7557
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7558
0
      yyerror("expected yes or no.");
7559
0
    else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
7560
0
      (strcmp((yyvsp[0].str), "yes")==0);
7561
0
    free((yyvsp[0].str));
7562
0
  }
7563
0
#line 7564 "util/configparser.c"
7564
0
    break;
7565
7566
0
  case 691:
7567
0
#line 3705 "./util/configparser.y"
7568
0
        {
7569
0
    OUTYY(("P(dt_dnstap_sample_rate:%s)\n", (yyvsp[0].str)));
7570
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
7571
0
      yyerror("number expected");
7572
0
    else if(atoi((yyvsp[0].str)) < 0)
7573
0
      yyerror("dnstap sample rate too small");
7574
0
    else  cfg_parser->cfg->dnstap_sample_rate = atoi((yyvsp[0].str));
7575
0
    free((yyvsp[0].str));
7576
0
  }
7577
0
#line 7578 "util/configparser.c"
7578
0
    break;
7579
7580
0
  case 692:
7581
0
#line 3716 "./util/configparser.y"
7582
0
        {
7583
0
    OUTYY(("\nP(python:)\n"));
7584
0
    cfg_parser->started_toplevel = 1;
7585
0
  }
7586
0
#line 7587 "util/configparser.c"
7587
0
    break;
7588
7589
0
  case 696:
7590
0
#line 3726 "./util/configparser.y"
7591
0
        {
7592
0
    OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
7593
0
    if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
7594
0
      yyerror("out of memory");
7595
0
  }
7596
0
#line 7597 "util/configparser.c"
7597
0
    break;
7598
7599
0
  case 697:
7600
0
#line 3733 "./util/configparser.y"
7601
0
        {
7602
0
    OUTYY(("\nP(dynlib:)\n"));
7603
0
    cfg_parser->started_toplevel = 1;
7604
0
  }
7605
0
#line 7606 "util/configparser.c"
7606
0
    break;
7607
7608
0
  case 701:
7609
0
#line 3743 "./util/configparser.y"
7610
0
        {
7611
0
    OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
7612
0
    if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
7613
0
      yyerror("out of memory");
7614
0
  }
7615
0
#line 7616 "util/configparser.c"
7616
0
    break;
7617
7618
0
  case 702:
7619
0
#line 3750 "./util/configparser.y"
7620
0
        {
7621
0
    OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
7622
0
    if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7623
0
      yyerror("expected yes or no.");
7624
0
    else cfg_parser->cfg->disable_dnssec_lame_check =
7625
0
      (strcmp((yyvsp[0].str), "yes")==0);
7626
0
    free((yyvsp[0].str));
7627
0
  }
7628
0
#line 7629 "util/configparser.c"
7629
0
    break;
7630
7631
0
  case 703:
7632
0
#line 3760 "./util/configparser.y"
7633
0
        {
7634
0
    OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
7635
0
    free(cfg_parser->cfg->log_identity);
7636
0
    cfg_parser->cfg->log_identity = (yyvsp[0].str);
7637
0
  }
7638
0
#line 7639 "util/configparser.c"
7639
0
    break;
7640
7641
0
  case 704:
7642
0
#line 3767 "./util/configparser.y"
7643
0
        {
7644
0
    OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7645
0
    validate_respip_action((yyvsp[0].str));
7646
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
7647
0
      (yyvsp[-1].str), (yyvsp[0].str)))
7648
0
      fatal_exit("out of memory adding response-ip");
7649
0
  }
7650
0
#line 7651 "util/configparser.c"
7651
0
    break;
7652
7653
0
  case 705:
7654
0
#line 3776 "./util/configparser.y"
7655
0
        {
7656
0
    OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
7657
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
7658
0
      (yyvsp[-1].str), (yyvsp[0].str)))
7659
0
      fatal_exit("out of memory adding response-ip-data");
7660
0
  }
7661
0
#line 7662 "util/configparser.c"
7662
0
    break;
7663
7664
0
  case 706:
7665
0
#line 3784 "./util/configparser.y"
7666
0
        {
7667
0
    OUTYY(("\nP(dnscrypt:)\n"));
7668
0
    cfg_parser->started_toplevel = 1;
7669
0
  }
7670
0
#line 7671 "util/configparser.c"
7671
0
    break;
7672
7673
0
  case 719:
7674
0
#line 3801 "./util/configparser.y"
7675
0
        {
7676
0
    OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
7677
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7678
0
      yyerror("expected yes or no.");
7679
0
    else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
7680
0
    free((yyvsp[0].str));
7681
0
  }
7682
0
#line 7683 "util/configparser.c"
7683
0
    break;
7684
7685
0
  case 720:
7686
0
#line 3810 "./util/configparser.y"
7687
0
        {
7688
0
    OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
7689
0
    if(atoi((yyvsp[0].str)) == 0)
7690
0
      yyerror("port number expected");
7691
0
    else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
7692
0
    free((yyvsp[0].str));
7693
0
  }
7694
0
#line 7695 "util/configparser.c"
7695
0
    break;
7696
7697
0
  case 721:
7698
0
#line 3819 "./util/configparser.y"
7699
0
        {
7700
0
    OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
7701
0
    free(cfg_parser->cfg->dnscrypt_provider);
7702
0
    cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
7703
0
  }
7704
0
#line 7705 "util/configparser.c"
7705
0
    break;
7706
7707
0
  case 722:
7708
0
#line 3826 "./util/configparser.y"
7709
0
        {
7710
0
    OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
7711
0
    if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
7712
0
      log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
7713
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
7714
0
      fatal_exit("out of memory adding dnscrypt-provider-cert");
7715
0
  }
7716
0
#line 7717 "util/configparser.c"
7717
0
    break;
7718
7719
0
  case 723:
7720
0
#line 3835 "./util/configparser.y"
7721
0
        {
7722
0
    OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
7723
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
7724
0
      fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
7725
0
  }
7726
0
#line 7727 "util/configparser.c"
7727
0
    break;
7728
7729
0
  case 724:
7730
0
#line 3842 "./util/configparser.y"
7731
0
        {
7732
0
    OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
7733
0
    if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
7734
0
      log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
7735
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
7736
0
      fatal_exit("out of memory adding dnscrypt-secret-key");
7737
0
  }
7738
0
#line 7739 "util/configparser.c"
7739
0
    break;
7740
7741
0
  case 725:
7742
0
#line 3851 "./util/configparser.y"
7743
0
  {
7744
0
  OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
7745
0
  if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
7746
0
    yyerror("memory size expected");
7747
0
  free((yyvsp[0].str));
7748
0
  }
7749
0
#line 7750 "util/configparser.c"
7750
0
    break;
7751
7752
0
  case 726:
7753
0
#line 3859 "./util/configparser.y"
7754
0
  {
7755
0
  OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
7756
0
  if(atoi((yyvsp[0].str)) == 0) {
7757
0
    yyerror("number expected");
7758
0
  } else {
7759
0
    cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str));
7760
0
    if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
7761
0
      yyerror("must be a power of 2");
7762
0
  }
7763
0
  free((yyvsp[0].str));
7764
0
  }
7765
0
#line 7766 "util/configparser.c"
7766
0
    break;
7767
7768
0
  case 727:
7769
0
#line 3872 "./util/configparser.y"
7770
0
  {
7771
0
  OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
7772
0
  if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
7773
0
    yyerror("memory size expected");
7774
0
  free((yyvsp[0].str));
7775
0
  }
7776
0
#line 7777 "util/configparser.c"
7777
0
    break;
7778
7779
0
  case 728:
7780
0
#line 3880 "./util/configparser.y"
7781
0
  {
7782
0
  OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
7783
0
  if(atoi((yyvsp[0].str)) == 0) {
7784
0
    yyerror("number expected");
7785
0
  } else {
7786
0
    cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
7787
0
    if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
7788
0
      yyerror("must be a power of 2");
7789
0
  }
7790
0
  free((yyvsp[0].str));
7791
0
  }
7792
0
#line 7793 "util/configparser.c"
7793
0
    break;
7794
7795
0
  case 729:
7796
0
#line 3893 "./util/configparser.y"
7797
0
        {
7798
0
    OUTYY(("\nP(cachedb:)\n"));
7799
0
    cfg_parser->started_toplevel = 1;
7800
0
  }
7801
0
#line 7802 "util/configparser.c"
7802
0
    break;
7803
7804
0
  case 753:
7805
0
#line 3913 "./util/configparser.y"
7806
0
        {
7807
  #ifdef USE_CACHEDB
7808
    OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
7809
    free(cfg_parser->cfg->cachedb_backend);
7810
    cfg_parser->cfg->cachedb_backend = (yyvsp[0].str);
7811
  #else
7812
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7813
0
    free((yyvsp[0].str));
7814
0
  #endif
7815
0
  }
7816
0
#line 7817 "util/configparser.c"
7817
0
    break;
7818
7819
0
  case 754:
7820
0
#line 3925 "./util/configparser.y"
7821
0
        {
7822
  #ifdef USE_CACHEDB
7823
    OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
7824
    free(cfg_parser->cfg->cachedb_secret);
7825
    cfg_parser->cfg->cachedb_secret = (yyvsp[0].str);
7826
  #else
7827
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7828
0
    free((yyvsp[0].str));
7829
0
  #endif
7830
0
  }
7831
0
#line 7832 "util/configparser.c"
7832
0
    break;
7833
7834
0
  case 755:
7835
0
#line 3937 "./util/configparser.y"
7836
0
        {
7837
  #ifdef USE_CACHEDB
7838
    OUTYY(("P(cachedb_no_store:%s)\n", (yyvsp[0].str)));
7839
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7840
      yyerror("expected yes or no.");
7841
    else cfg_parser->cfg->cachedb_no_store = (strcmp((yyvsp[0].str), "yes")==0);
7842
  #else
7843
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7844
0
  #endif
7845
0
    free((yyvsp[0].str));
7846
0
  }
7847
0
#line 7848 "util/configparser.c"
7848
0
    break;
7849
7850
0
  case 756:
7851
0
#line 3950 "./util/configparser.y"
7852
0
        {
7853
  #ifdef USE_CACHEDB
7854
    OUTYY(("P(cachedb_check_when_serve_expired:%s)\n", (yyvsp[0].str)));
7855
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7856
      yyerror("expected yes or no.");
7857
    else cfg_parser->cfg->cachedb_check_when_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
7858
  #else
7859
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7860
0
  #endif
7861
0
    free((yyvsp[0].str));
7862
0
  }
7863
0
#line 7864 "util/configparser.c"
7864
0
    break;
7865
7866
0
  case 757:
7867
0
#line 3963 "./util/configparser.y"
7868
0
        {
7869
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7870
    OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
7871
    free(cfg_parser->cfg->redis_server_host);
7872
    cfg_parser->cfg->redis_server_host = (yyvsp[0].str);
7873
  #else
7874
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7875
0
    free((yyvsp[0].str));
7876
0
  #endif
7877
0
  }
7878
0
#line 7879 "util/configparser.c"
7879
0
    break;
7880
7881
0
  case 758:
7882
0
#line 3975 "./util/configparser.y"
7883
0
        {
7884
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7885
    OUTYY(("P(redis_replica_server_host:%s)\n", (yyvsp[0].str)));
7886
    free(cfg_parser->cfg->redis_replica_server_host);
7887
    cfg_parser->cfg->redis_replica_server_host = (yyvsp[0].str);
7888
  #else
7889
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7890
0
    free((yyvsp[0].str));
7891
0
  #endif
7892
0
  }
7893
0
#line 7894 "util/configparser.c"
7894
0
    break;
7895
7896
0
  case 759:
7897
0
#line 3987 "./util/configparser.y"
7898
0
        {
7899
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7900
    int port;
7901
    OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
7902
    port = atoi((yyvsp[0].str));
7903
    if(port == 0 || port < 0 || port > 65535)
7904
      yyerror("valid redis server port number expected");
7905
    else cfg_parser->cfg->redis_server_port = port;
7906
  #else
7907
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7908
0
  #endif
7909
0
    free((yyvsp[0].str));
7910
0
  }
7911
0
#line 7912 "util/configparser.c"
7912
0
    break;
7913
7914
0
  case 760:
7915
0
#line 4002 "./util/configparser.y"
7916
0
        {
7917
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7918
    int port;
7919
    OUTYY(("P(redis_replica_server_port:%s)\n", (yyvsp[0].str)));
7920
    port = atoi((yyvsp[0].str));
7921
    if(port == 0 || port < 0 || port > 65535)
7922
      yyerror("valid redis server port number expected");
7923
    else cfg_parser->cfg->redis_replica_server_port = port;
7924
  #else
7925
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7926
0
  #endif
7927
0
    free((yyvsp[0].str));
7928
0
  }
7929
0
#line 7930 "util/configparser.c"
7930
0
    break;
7931
7932
0
  case 761:
7933
0
#line 4017 "./util/configparser.y"
7934
0
        {
7935
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7936
    OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str)));
7937
    free(cfg_parser->cfg->redis_server_path);
7938
    cfg_parser->cfg->redis_server_path = (yyvsp[0].str);
7939
  #else
7940
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7941
0
    free((yyvsp[0].str));
7942
0
  #endif
7943
0
  }
7944
0
#line 7945 "util/configparser.c"
7945
0
    break;
7946
7947
0
  case 762:
7948
0
#line 4029 "./util/configparser.y"
7949
0
        {
7950
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7951
    OUTYY(("P(redis_replica_server_path:%s)\n", (yyvsp[0].str)));
7952
    free(cfg_parser->cfg->redis_replica_server_path);
7953
    cfg_parser->cfg->redis_replica_server_path = (yyvsp[0].str);
7954
  #else
7955
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7956
0
    free((yyvsp[0].str));
7957
0
  #endif
7958
0
  }
7959
0
#line 7960 "util/configparser.c"
7960
0
    break;
7961
7962
0
  case 763:
7963
0
#line 4041 "./util/configparser.y"
7964
0
        {
7965
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7966
    OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str)));
7967
    free(cfg_parser->cfg->redis_server_password);
7968
    cfg_parser->cfg->redis_server_password = (yyvsp[0].str);
7969
  #else
7970
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7971
0
    free((yyvsp[0].str));
7972
0
  #endif
7973
0
  }
7974
0
#line 7975 "util/configparser.c"
7975
0
    break;
7976
7977
0
  case 764:
7978
0
#line 4053 "./util/configparser.y"
7979
0
        {
7980
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7981
    OUTYY(("P(redis_replica_server_password:%s)\n", (yyvsp[0].str)));
7982
    free(cfg_parser->cfg->redis_replica_server_password);
7983
    cfg_parser->cfg->redis_replica_server_password = (yyvsp[0].str);
7984
  #else
7985
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7986
0
    free((yyvsp[0].str));
7987
0
  #endif
7988
0
  }
7989
0
#line 7990 "util/configparser.c"
7990
0
    break;
7991
7992
0
  case 765:
7993
0
#line 4065 "./util/configparser.y"
7994
0
        {
7995
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7996
    OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
7997
    if(atoi((yyvsp[0].str)) == 0)
7998
      yyerror("redis timeout value expected");
7999
    else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str));
8000
  #else
8001
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8002
0
  #endif
8003
0
    free((yyvsp[0].str));
8004
0
  }
8005
0
#line 8006 "util/configparser.c"
8006
0
    break;
8007
8008
0
  case 766:
8009
0
#line 4078 "./util/configparser.y"
8010
0
        {
8011
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8012
    OUTYY(("P(redis_replica_timeout:%s)\n", (yyvsp[0].str)));
8013
    if(atoi((yyvsp[0].str)) == 0)
8014
      yyerror("redis timeout value expected");
8015
    else cfg_parser->cfg->redis_replica_timeout = atoi((yyvsp[0].str));
8016
  #else
8017
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8018
0
  #endif
8019
0
    free((yyvsp[0].str));
8020
0
  }
8021
0
#line 8022 "util/configparser.c"
8022
0
    break;
8023
8024
0
  case 767:
8025
0
#line 4091 "./util/configparser.y"
8026
0
        {
8027
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8028
    OUTYY(("P(redis_command_timeout:%s)\n", (yyvsp[0].str)));
8029
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8030
      yyerror("redis command timeout value expected");
8031
    else cfg_parser->cfg->redis_command_timeout = atoi((yyvsp[0].str));
8032
  #else
8033
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8034
0
  #endif
8035
0
    free((yyvsp[0].str));
8036
0
  }
8037
0
#line 8038 "util/configparser.c"
8038
0
    break;
8039
8040
0
  case 768:
8041
0
#line 4104 "./util/configparser.y"
8042
0
        {
8043
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8044
    OUTYY(("P(redis_replica_command_timeout:%s)\n", (yyvsp[0].str)));
8045
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8046
      yyerror("redis command timeout value expected");
8047
    else cfg_parser->cfg->redis_replica_command_timeout = atoi((yyvsp[0].str));
8048
  #else
8049
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8050
0
  #endif
8051
0
    free((yyvsp[0].str));
8052
0
  }
8053
0
#line 8054 "util/configparser.c"
8054
0
    break;
8055
8056
0
  case 769:
8057
0
#line 4117 "./util/configparser.y"
8058
0
        {
8059
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8060
    OUTYY(("P(redis_connect_timeout:%s)\n", (yyvsp[0].str)));
8061
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8062
      yyerror("redis connect timeout value expected");
8063
    else cfg_parser->cfg->redis_connect_timeout = atoi((yyvsp[0].str));
8064
  #else
8065
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8066
0
  #endif
8067
0
    free((yyvsp[0].str));
8068
0
  }
8069
0
#line 8070 "util/configparser.c"
8070
0
    break;
8071
8072
0
  case 770:
8073
0
#line 4130 "./util/configparser.y"
8074
0
        {
8075
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8076
    OUTYY(("P(redis_replica_connect_timeout:%s)\n", (yyvsp[0].str)));
8077
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8078
      yyerror("redis connect timeout value expected");
8079
    else cfg_parser->cfg->redis_replica_connect_timeout = atoi((yyvsp[0].str));
8080
  #else
8081
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8082
0
  #endif
8083
0
    free((yyvsp[0].str));
8084
0
  }
8085
0
#line 8086 "util/configparser.c"
8086
0
    break;
8087
8088
0
  case 771:
8089
0
#line 4143 "./util/configparser.y"
8090
0
        {
8091
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8092
    OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
8093
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
8094
      yyerror("expected yes or no.");
8095
    else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0);
8096
  #else
8097
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8098
0
  #endif
8099
0
    free((yyvsp[0].str));
8100
0
  }
8101
0
#line 8102 "util/configparser.c"
8102
0
    break;
8103
8104
0
  case 772:
8105
0
#line 4156 "./util/configparser.y"
8106
0
        {
8107
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8108
    int db;
8109
    OUTYY(("P(redis_logical_db:%s)\n", (yyvsp[0].str)));
8110
    db = atoi((yyvsp[0].str));
8111
    if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0)
8112
      yyerror("valid redis logical database index expected");
8113
    else cfg_parser->cfg->redis_logical_db = db;
8114
  #else
8115
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8116
0
  #endif
8117
0
    free((yyvsp[0].str));
8118
0
  }
8119
0
#line 8120 "util/configparser.c"
8120
0
    break;
8121
8122
0
  case 773:
8123
0
#line 4171 "./util/configparser.y"
8124
0
        {
8125
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8126
    int db;
8127
    OUTYY(("P(redis_replica_logical_db:%s)\n", (yyvsp[0].str)));
8128
    db = atoi((yyvsp[0].str));
8129
    if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0)
8130
      yyerror("valid redis logical database index expected");
8131
    else cfg_parser->cfg->redis_replica_logical_db = db;
8132
  #else
8133
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8134
0
  #endif
8135
0
    free((yyvsp[0].str));
8136
0
  }
8137
0
#line 8138 "util/configparser.c"
8138
0
    break;
8139
8140
0
  case 774:
8141
0
#line 4186 "./util/configparser.y"
8142
0
        {
8143
0
    OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
8144
0
    if (atoi((yyvsp[0].str)) < 0)
8145
0
      yyerror("positive number expected");
8146
0
    else {
8147
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str)))
8148
0
        fatal_exit("out of memory adding tcp connection limit");
8149
0
    }
8150
0
  }
8151
0
#line 8152 "util/configparser.c"
8152
0
    break;
8153
8154
0
  case 775:
8155
0
#line 4197 "./util/configparser.y"
8156
0
        {
8157
0
    OUTYY(("P(server_answer_cookie:%s)\n", (yyvsp[0].str)));
8158
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
8159
0
      yyerror("expected yes or no.");
8160
0
    else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0);
8161
0
    free((yyvsp[0].str));
8162
0
  }
8163
0
#line 8164 "util/configparser.c"
8164
0
    break;
8165
8166
0
  case 776:
8167
0
#line 4206 "./util/configparser.y"
8168
0
        {
8169
0
    uint8_t secret[32];
8170
0
    size_t secret_len = sizeof(secret);
8171
8172
0
    OUTYY(("P(server_cookie_secret:%s)\n", (yyvsp[0].str)));
8173
0
    if(sldns_str2wire_hex_buf((yyvsp[0].str), secret, &secret_len)
8174
0
    || (secret_len != 16))
8175
0
      yyerror("expected 128 bit hex string");
8176
0
    else {
8177
0
      cfg_parser->cfg->cookie_secret_len = secret_len;
8178
0
      memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret));
8179
0
    }
8180
0
    free((yyvsp[0].str));
8181
0
  }
8182
0
#line 8183 "util/configparser.c"
8183
0
    break;
8184
8185
0
  case 777:
8186
0
#line 4222 "./util/configparser.y"
8187
0
        {
8188
0
    OUTYY(("P(cookie_secret_file:%s)\n", (yyvsp[0].str)));
8189
0
    free(cfg_parser->cfg->cookie_secret_file);
8190
0
    cfg_parser->cfg->cookie_secret_file = (yyvsp[0].str);
8191
0
  }
8192
0
#line 8193 "util/configparser.c"
8193
0
    break;
8194
8195
0
  case 778:
8196
0
#line 4229 "./util/configparser.y"
8197
0
        {
8198
0
    OUTYY(("P(server_iter_scrub_ns:%s)\n", (yyvsp[0].str)));
8199
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8200
0
      yyerror("number expected");
8201
0
    else cfg_parser->cfg->iter_scrub_ns = atoi((yyvsp[0].str));
8202
0
    free((yyvsp[0].str));
8203
0
  }
8204
0
#line 8205 "util/configparser.c"
8205
0
    break;
8206
8207
0
  case 779:
8208
0
#line 4238 "./util/configparser.y"
8209
0
        {
8210
0
    OUTYY(("P(server_iter_scrub_cname:%s)\n", (yyvsp[0].str)));
8211
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8212
0
      yyerror("number expected");
8213
0
    else cfg_parser->cfg->iter_scrub_cname = atoi((yyvsp[0].str));
8214
0
    free((yyvsp[0].str));
8215
0
  }
8216
0
#line 8217 "util/configparser.c"
8217
0
    break;
8218
8219
0
  case 780:
8220
0
#line 4247 "./util/configparser.y"
8221
0
        {
8222
0
    OUTYY(("P(server_max_global_quota:%s)\n", (yyvsp[0].str)));
8223
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8224
0
      yyerror("number expected");
8225
0
    else cfg_parser->cfg->max_global_quota = atoi((yyvsp[0].str));
8226
0
    free((yyvsp[0].str));
8227
0
  }
8228
0
#line 8229 "util/configparser.c"
8229
0
    break;
8230
8231
0
  case 781:
8232
0
#line 4256 "./util/configparser.y"
8233
0
        {
8234
0
    OUTYY(("P(server_iter_scrub_promiscuous:%s)\n", (yyvsp[0].str)));
8235
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
8236
0
      yyerror("expected yes or no.");
8237
0
    else cfg_parser->cfg->iter_scrub_promiscuous =
8238
0
      (strcmp((yyvsp[0].str), "yes")==0);
8239
0
    free((yyvsp[0].str));
8240
0
  }
8241
0
#line 8242 "util/configparser.c"
8242
0
    break;
8243
8244
0
  case 782:
8245
0
#line 4266 "./util/configparser.y"
8246
0
        {
8247
0
    OUTYY(("\nP(ipset:)\n"));
8248
0
    cfg_parser->started_toplevel = 1;
8249
0
  }
8250
0
#line 8251 "util/configparser.c"
8251
0
    break;
8252
8253
0
  case 787:
8254
0
#line 4276 "./util/configparser.y"
8255
0
        {
8256
  #ifdef USE_IPSET
8257
    OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
8258
    if(cfg_parser->cfg->ipset_name_v4)
8259
      yyerror("ipset name v4 override, there must be one "
8260
        "name for ip v4");
8261
    free(cfg_parser->cfg->ipset_name_v4);
8262
    cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
8263
  #else
8264
0
    OUTYY(("P(Compiled without ipset, ignoring)\n"));
8265
0
    free((yyvsp[0].str));
8266
0
  #endif
8267
0
  }
8268
0
#line 8269 "util/configparser.c"
8269
0
    break;
8270
8271
0
  case 788:
8272
0
#line 4291 "./util/configparser.y"
8273
0
        {
8274
  #ifdef USE_IPSET
8275
    OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
8276
    if(cfg_parser->cfg->ipset_name_v6)
8277
      yyerror("ipset name v6 override, there must be one "
8278
        "name for ip v6");
8279
    free(cfg_parser->cfg->ipset_name_v6);
8280
    cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
8281
  #else
8282
0
    OUTYY(("P(Compiled without ipset, ignoring)\n"));
8283
0
    free((yyvsp[0].str));
8284
0
  #endif
8285
0
  }
8286
0
#line 8287 "util/configparser.c"
8287
0
    break;
8288
8289
8290
0
#line 8291 "util/configparser.c"
8291
8292
0
      default: break;
8293
0
    }
8294
  /* User semantic actions sometimes alter yychar, and that requires
8295
     that yytoken be updated with the new translation.  We take the
8296
     approach of translating immediately before every use of yytoken.
8297
     One alternative is translating here after every semantic action,
8298
     but that translation would be missed if the semantic action invokes
8299
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
8300
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
8301
     incorrect destructor might then be invoked immediately.  In the
8302
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
8303
     to an incorrect destructor call or verbose syntax error message
8304
     before the lookahead is translated.  */
8305
0
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
8306
8307
0
  YYPOPSTACK (yylen);
8308
0
  yylen = 0;
8309
0
  YY_STACK_PRINT (yyss, yyssp);
8310
8311
0
  *++yyvsp = yyval;
8312
8313
  /* Now 'shift' the result of the reduction.  Determine what state
8314
     that goes to, based on the state we popped back to and the rule
8315
     number reduced by.  */
8316
0
  {
8317
0
    const int yylhs = yyr1[yyn] - YYNTOKENS;
8318
0
    const int yyi = yypgoto[yylhs] + *yyssp;
8319
0
    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
8320
0
               ? yytable[yyi]
8321
0
               : yydefgoto[yylhs]);
8322
0
  }
8323
8324
0
  goto yynewstate;
8325
8326
8327
/*--------------------------------------.
8328
| yyerrlab -- here on detecting error.  |
8329
`--------------------------------------*/
8330
0
yyerrlab:
8331
  /* Make sure we have latest lookahead translation.  See comments at
8332
     user semantic actions for why this is necessary.  */
8333
0
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
8334
8335
  /* If not already recovering from an error, report this error.  */
8336
0
  if (!yyerrstatus)
8337
0
    {
8338
0
      ++yynerrs;
8339
0
#if ! YYERROR_VERBOSE
8340
0
      yyerror (YY_("syntax error"));
8341
#else
8342
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
8343
                                        yyssp, yytoken)
8344
      {
8345
        char const *yymsgp = YY_("syntax error");
8346
        int yysyntax_error_status;
8347
        yysyntax_error_status = YYSYNTAX_ERROR;
8348
        if (yysyntax_error_status == 0)
8349
          yymsgp = yymsg;
8350
        else if (yysyntax_error_status == 1)
8351
          {
8352
            if (yymsg != yymsgbuf)
8353
              YYSTACK_FREE (yymsg);
8354
            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
8355
            if (!yymsg)
8356
              {
8357
                yymsg = yymsgbuf;
8358
                yymsg_alloc = sizeof yymsgbuf;
8359
                yysyntax_error_status = 2;
8360
              }
8361
            else
8362
              {
8363
                yysyntax_error_status = YYSYNTAX_ERROR;
8364
                yymsgp = yymsg;
8365
              }
8366
          }
8367
        yyerror (yymsgp);
8368
        if (yysyntax_error_status == 2)
8369
          goto yyexhaustedlab;
8370
      }
8371
# undef YYSYNTAX_ERROR
8372
#endif
8373
0
    }
8374
8375
8376
8377
0
  if (yyerrstatus == 3)
8378
0
    {
8379
      /* If just tried and failed to reuse lookahead token after an
8380
         error, discard it.  */
8381
8382
0
      if (yychar <= YYEOF)
8383
0
        {
8384
          /* Return failure if at end of input.  */
8385
0
          if (yychar == YYEOF)
8386
0
            YYABORT;
8387
0
        }
8388
0
      else
8389
0
        {
8390
0
          yydestruct ("Error: discarding",
8391
0
                      yytoken, &yylval);
8392
0
          yychar = YYEMPTY;
8393
0
        }
8394
0
    }
8395
8396
  /* Else will try to reuse lookahead token after shifting the error
8397
     token.  */
8398
0
  goto yyerrlab1;
8399
8400
8401
/*---------------------------------------------------.
8402
| yyerrorlab -- error raised explicitly by YYERROR.  |
8403
`---------------------------------------------------*/
8404
0
yyerrorlab:
8405
  /* Pacify compilers when the user code never invokes YYERROR and the
8406
     label yyerrorlab therefore never appears in user code.  */
8407
0
  if (0)
8408
0
    YYERROR;
8409
8410
  /* Do not reclaim the symbols of the rule whose action triggered
8411
     this YYERROR.  */
8412
0
  YYPOPSTACK (yylen);
8413
0
  yylen = 0;
8414
0
  YY_STACK_PRINT (yyss, yyssp);
8415
0
  yystate = *yyssp;
8416
0
  goto yyerrlab1;
8417
8418
8419
/*-------------------------------------------------------------.
8420
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
8421
`-------------------------------------------------------------*/
8422
0
yyerrlab1:
8423
0
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
8424
8425
0
  for (;;)
8426
0
    {
8427
0
      yyn = yypact[yystate];
8428
0
      if (!yypact_value_is_default (yyn))
8429
0
        {
8430
0
          yyn += YYTERROR;
8431
0
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
8432
0
            {
8433
0
              yyn = yytable[yyn];
8434
0
              if (0 < yyn)
8435
0
                break;
8436
0
            }
8437
0
        }
8438
8439
      /* Pop the current state because it cannot handle the error token.  */
8440
0
      if (yyssp == yyss)
8441
0
        YYABORT;
8442
8443
8444
0
      yydestruct ("Error: popping",
8445
0
                  yystos[yystate], yyvsp);
8446
0
      YYPOPSTACK (1);
8447
0
      yystate = *yyssp;
8448
0
      YY_STACK_PRINT (yyss, yyssp);
8449
0
    }
8450
8451
0
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
8452
0
  *++yyvsp = yylval;
8453
0
  YY_IGNORE_MAYBE_UNINITIALIZED_END
8454
8455
8456
  /* Shift the error token.  */
8457
0
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
8458
8459
0
  yystate = yyn;
8460
0
  goto yynewstate;
8461
8462
8463
/*-------------------------------------.
8464
| yyacceptlab -- YYACCEPT comes here.  |
8465
`-------------------------------------*/
8466
0
yyacceptlab:
8467
0
  yyresult = 0;
8468
0
  goto yyreturn;
8469
8470
8471
/*-----------------------------------.
8472
| yyabortlab -- YYABORT comes here.  |
8473
`-----------------------------------*/
8474
0
yyabortlab:
8475
0
  yyresult = 1;
8476
0
  goto yyreturn;
8477
8478
8479
0
#if !defined yyoverflow || YYERROR_VERBOSE
8480
/*-------------------------------------------------.
8481
| yyexhaustedlab -- memory exhaustion comes here.  |
8482
`-------------------------------------------------*/
8483
0
yyexhaustedlab:
8484
0
  yyerror (YY_("memory exhausted"));
8485
0
  yyresult = 2;
8486
  /* Fall through.  */
8487
0
#endif
8488
8489
8490
/*-----------------------------------------------------.
8491
| yyreturn -- parsing is finished, return the result.  |
8492
`-----------------------------------------------------*/
8493
0
yyreturn:
8494
0
  if (yychar != YYEMPTY)
8495
0
    {
8496
      /* Make sure we have latest lookahead translation.  See comments at
8497
         user semantic actions for why this is necessary.  */
8498
0
      yytoken = YYTRANSLATE (yychar);
8499
0
      yydestruct ("Cleanup: discarding lookahead",
8500
0
                  yytoken, &yylval);
8501
0
    }
8502
  /* Do not reclaim the symbols of the rule whose action triggered
8503
     this YYABORT or YYACCEPT.  */
8504
0
  YYPOPSTACK (yylen);
8505
0
  YY_STACK_PRINT (yyss, yyssp);
8506
0
  while (yyssp != yyss)
8507
0
    {
8508
0
      yydestruct ("Cleanup: popping",
8509
0
                  yystos[+*yyssp], yyvsp);
8510
0
      YYPOPSTACK (1);
8511
0
    }
8512
0
#ifndef yyoverflow
8513
0
  if (yyss != yyssa)
8514
0
    YYSTACK_FREE (yyss);
8515
0
#endif
8516
#if YYERROR_VERBOSE
8517
  if (yymsg != yymsgbuf)
8518
    YYSTACK_FREE (yymsg);
8519
#endif
8520
0
  return yyresult;
8521
0
}
8522
#line 4305 "./util/configparser.y"
8523
8524
8525
/* parse helper routines could be here */
8526
static void
8527
validate_respip_action(const char* action)
8528
0
{
8529
0
  if(strcmp(action, "deny")!=0 &&
8530
0
    strcmp(action, "redirect")!=0 &&
8531
0
    strcmp(action, "inform")!=0 &&
8532
0
    strcmp(action, "inform_deny")!=0 &&
8533
0
    strcmp(action, "always_transparent")!=0 &&
8534
0
    strcmp(action, "always_refuse")!=0 &&
8535
0
    strcmp(action, "always_nxdomain")!=0)
8536
0
  {
8537
0
    yyerror("response-ip action: expected deny, redirect, "
8538
0
      "inform, inform_deny, always_transparent, "
8539
0
      "always_refuse or always_nxdomain");
8540
0
  }
8541
0
}
8542
8543
static void
8544
validate_acl_action(const char* action)
8545
0
{
8546
0
  if(strcmp(action, "deny")!=0 &&
8547
0
    strcmp(action, "refuse")!=0 &&
8548
0
    strcmp(action, "deny_non_local")!=0 &&
8549
0
    strcmp(action, "refuse_non_local")!=0 &&
8550
0
    strcmp(action, "allow_setrd")!=0 &&
8551
0
    strcmp(action, "allow")!=0 &&
8552
0
    strcmp(action, "allow_snoop")!=0 &&
8553
0
    strcmp(action, "allow_cookie")!=0)
8554
0
  {
8555
0
    yyerror("expected deny, refuse, deny_non_local, "
8556
0
      "refuse_non_local, allow, allow_setrd, "
8557
0
      "allow_snoop or allow_cookie as access control action");
8558
0
  }
8559
0
}