Coverage Report

Created: 2026-01-25 06:11

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
    VAR_LOG_THREAD_ID = 634
525
  };
526
#endif
527
/* Tokens.  */
528
#define SPACE 258
529
#define LETTER 259
530
#define NEWLINE 260
531
#define COMMENT 261
532
#define COLON 262
533
#define ANY 263
534
#define ZONESTR 264
535
#define STRING_ARG 265
536
#define VAR_FORCE_TOPLEVEL 266
537
#define VAR_SERVER 267
538
#define VAR_VERBOSITY 268
539
#define VAR_NUM_THREADS 269
540
#define VAR_PORT 270
541
#define VAR_OUTGOING_RANGE 271
542
#define VAR_INTERFACE 272
543
#define VAR_PREFER_IP4 273
544
#define VAR_DO_IP4 274
545
#define VAR_DO_IP6 275
546
#define VAR_DO_NAT64 276
547
#define VAR_PREFER_IP6 277
548
#define VAR_DO_UDP 278
549
#define VAR_DO_TCP 279
550
#define VAR_TCP_MSS 280
551
#define VAR_OUTGOING_TCP_MSS 281
552
#define VAR_TCP_IDLE_TIMEOUT 282
553
#define VAR_EDNS_TCP_KEEPALIVE 283
554
#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 284
555
#define VAR_SOCK_QUEUE_TIMEOUT 285
556
#define VAR_CHROOT 286
557
#define VAR_USERNAME 287
558
#define VAR_DIRECTORY 288
559
#define VAR_LOGFILE 289
560
#define VAR_PIDFILE 290
561
#define VAR_MSG_CACHE_SIZE 291
562
#define VAR_MSG_CACHE_SLABS 292
563
#define VAR_NUM_QUERIES_PER_THREAD 293
564
#define VAR_RRSET_CACHE_SIZE 294
565
#define VAR_RRSET_CACHE_SLABS 295
566
#define VAR_OUTGOING_NUM_TCP 296
567
#define VAR_INFRA_HOST_TTL 297
568
#define VAR_INFRA_LAME_TTL 298
569
#define VAR_INFRA_CACHE_SLABS 299
570
#define VAR_INFRA_CACHE_NUMHOSTS 300
571
#define VAR_INFRA_CACHE_LAME_SIZE 301
572
#define VAR_NAME 302
573
#define VAR_STUB_ZONE 303
574
#define VAR_STUB_HOST 304
575
#define VAR_STUB_ADDR 305
576
#define VAR_TARGET_FETCH_POLICY 306
577
#define VAR_HARDEN_SHORT_BUFSIZE 307
578
#define VAR_HARDEN_LARGE_QUERIES 308
579
#define VAR_FORWARD_ZONE 309
580
#define VAR_FORWARD_HOST 310
581
#define VAR_FORWARD_ADDR 311
582
#define VAR_DO_NOT_QUERY_ADDRESS 312
583
#define VAR_HIDE_IDENTITY 313
584
#define VAR_HIDE_VERSION 314
585
#define VAR_IDENTITY 315
586
#define VAR_VERSION 316
587
#define VAR_HARDEN_GLUE 317
588
#define VAR_MODULE_CONF 318
589
#define VAR_TRUST_ANCHOR_FILE 319
590
#define VAR_TRUST_ANCHOR 320
591
#define VAR_VAL_OVERRIDE_DATE 321
592
#define VAR_BOGUS_TTL 322
593
#define VAR_VAL_CLEAN_ADDITIONAL 323
594
#define VAR_VAL_PERMISSIVE_MODE 324
595
#define VAR_INCOMING_NUM_TCP 325
596
#define VAR_MSG_BUFFER_SIZE 326
597
#define VAR_KEY_CACHE_SIZE 327
598
#define VAR_KEY_CACHE_SLABS 328
599
#define VAR_TRUSTED_KEYS_FILE 329
600
#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 330
601
#define VAR_USE_SYSLOG 331
602
#define VAR_OUTGOING_INTERFACE 332
603
#define VAR_ROOT_HINTS 333
604
#define VAR_DO_NOT_QUERY_LOCALHOST 334
605
#define VAR_CACHE_MAX_TTL 335
606
#define VAR_HARDEN_DNSSEC_STRIPPED 336
607
#define VAR_ACCESS_CONTROL 337
608
#define VAR_LOCAL_ZONE 338
609
#define VAR_LOCAL_DATA 339
610
#define VAR_INTERFACE_AUTOMATIC 340
611
#define VAR_STATISTICS_INTERVAL 341
612
#define VAR_DO_DAEMONIZE 342
613
#define VAR_USE_CAPS_FOR_ID 343
614
#define VAR_STATISTICS_CUMULATIVE 344
615
#define VAR_OUTGOING_PORT_PERMIT 345
616
#define VAR_OUTGOING_PORT_AVOID 346
617
#define VAR_DLV_ANCHOR_FILE 347
618
#define VAR_DLV_ANCHOR 348
619
#define VAR_NEG_CACHE_SIZE 349
620
#define VAR_HARDEN_REFERRAL_PATH 350
621
#define VAR_PRIVATE_ADDRESS 351
622
#define VAR_PRIVATE_DOMAIN 352
623
#define VAR_REMOTE_CONTROL 353
624
#define VAR_CONTROL_ENABLE 354
625
#define VAR_CONTROL_INTERFACE 355
626
#define VAR_CONTROL_PORT 356
627
#define VAR_SERVER_KEY_FILE 357
628
#define VAR_SERVER_CERT_FILE 358
629
#define VAR_CONTROL_KEY_FILE 359
630
#define VAR_CONTROL_CERT_FILE 360
631
#define VAR_CONTROL_USE_CERT 361
632
#define VAR_TCP_REUSE_TIMEOUT 362
633
#define VAR_MAX_REUSE_TCP_QUERIES 363
634
#define VAR_EXTENDED_STATISTICS 364
635
#define VAR_LOCAL_DATA_PTR 365
636
#define VAR_JOSTLE_TIMEOUT 366
637
#define VAR_STUB_PRIME 367
638
#define VAR_UNWANTED_REPLY_THRESHOLD 368
639
#define VAR_LOG_TIME_ASCII 369
640
#define VAR_DOMAIN_INSECURE 370
641
#define VAR_PYTHON 371
642
#define VAR_PYTHON_SCRIPT 372
643
#define VAR_VAL_SIG_SKEW_MIN 373
644
#define VAR_VAL_SIG_SKEW_MAX 374
645
#define VAR_VAL_MAX_RESTART 375
646
#define VAR_CACHE_MIN_TTL 376
647
#define VAR_VAL_LOG_LEVEL 377
648
#define VAR_AUTO_TRUST_ANCHOR_FILE 378
649
#define VAR_KEEP_MISSING 379
650
#define VAR_ADD_HOLDDOWN 380
651
#define VAR_DEL_HOLDDOWN 381
652
#define VAR_SO_RCVBUF 382
653
#define VAR_EDNS_BUFFER_SIZE 383
654
#define VAR_PREFETCH 384
655
#define VAR_PREFETCH_KEY 385
656
#define VAR_SO_SNDBUF 386
657
#define VAR_SO_REUSEPORT 387
658
#define VAR_HARDEN_BELOW_NXDOMAIN 388
659
#define VAR_IGNORE_CD_FLAG 389
660
#define VAR_LOG_QUERIES 390
661
#define VAR_LOG_REPLIES 391
662
#define VAR_LOG_LOCAL_ACTIONS 392
663
#define VAR_TCP_UPSTREAM 393
664
#define VAR_SSL_UPSTREAM 394
665
#define VAR_TCP_AUTH_QUERY_TIMEOUT 395
666
#define VAR_SSL_SERVICE_KEY 396
667
#define VAR_SSL_SERVICE_PEM 397
668
#define VAR_SSL_PORT 398
669
#define VAR_FORWARD_FIRST 399
670
#define VAR_STUB_SSL_UPSTREAM 400
671
#define VAR_FORWARD_SSL_UPSTREAM 401
672
#define VAR_TLS_CERT_BUNDLE 402
673
#define VAR_STUB_TCP_UPSTREAM 403
674
#define VAR_FORWARD_TCP_UPSTREAM 404
675
#define VAR_HTTPS_PORT 405
676
#define VAR_HTTP_ENDPOINT 406
677
#define VAR_HTTP_MAX_STREAMS 407
678
#define VAR_HTTP_QUERY_BUFFER_SIZE 408
679
#define VAR_HTTP_RESPONSE_BUFFER_SIZE 409
680
#define VAR_HTTP_NODELAY 410
681
#define VAR_HTTP_NOTLS_DOWNSTREAM 411
682
#define VAR_STUB_FIRST 412
683
#define VAR_MINIMAL_RESPONSES 413
684
#define VAR_RRSET_ROUNDROBIN 414
685
#define VAR_MAX_UDP_SIZE 415
686
#define VAR_DELAY_CLOSE 416
687
#define VAR_UDP_CONNECT 417
688
#define VAR_UNBLOCK_LAN_ZONES 418
689
#define VAR_INSECURE_LAN_ZONES 419
690
#define VAR_INFRA_CACHE_MIN_RTT 420
691
#define VAR_INFRA_CACHE_MAX_RTT 421
692
#define VAR_INFRA_KEEP_PROBING 422
693
#define VAR_DNS64_PREFIX 423
694
#define VAR_DNS64_SYNTHALL 424
695
#define VAR_DNS64_IGNORE_AAAA 425
696
#define VAR_NAT64_PREFIX 426
697
#define VAR_DNSTAP 427
698
#define VAR_DNSTAP_ENABLE 428
699
#define VAR_DNSTAP_SOCKET_PATH 429
700
#define VAR_DNSTAP_IP 430
701
#define VAR_DNSTAP_TLS 431
702
#define VAR_DNSTAP_TLS_SERVER_NAME 432
703
#define VAR_DNSTAP_TLS_CERT_BUNDLE 433
704
#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 434
705
#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 435
706
#define VAR_DNSTAP_SEND_IDENTITY 436
707
#define VAR_DNSTAP_SEND_VERSION 437
708
#define VAR_DNSTAP_BIDIRECTIONAL 438
709
#define VAR_DNSTAP_IDENTITY 439
710
#define VAR_DNSTAP_VERSION 440
711
#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 441
712
#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 442
713
#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 443
714
#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 444
715
#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 445
716
#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 446
717
#define VAR_DNSTAP_SAMPLE_RATE 447
718
#define VAR_RESPONSE_IP_TAG 448
719
#define VAR_RESPONSE_IP 449
720
#define VAR_RESPONSE_IP_DATA 450
721
#define VAR_HARDEN_ALGO_DOWNGRADE 451
722
#define VAR_IP_TRANSPARENT 452
723
#define VAR_IP_DSCP 453
724
#define VAR_DISABLE_DNSSEC_LAME_CHECK 454
725
#define VAR_IP_RATELIMIT 455
726
#define VAR_IP_RATELIMIT_SLABS 456
727
#define VAR_IP_RATELIMIT_SIZE 457
728
#define VAR_RATELIMIT 458
729
#define VAR_RATELIMIT_SLABS 459
730
#define VAR_RATELIMIT_SIZE 460
731
#define VAR_OUTBOUND_MSG_RETRY 461
732
#define VAR_MAX_SENT_COUNT 462
733
#define VAR_MAX_QUERY_RESTARTS 463
734
#define VAR_RATELIMIT_FOR_DOMAIN 464
735
#define VAR_RATELIMIT_BELOW_DOMAIN 465
736
#define VAR_IP_RATELIMIT_FACTOR 466
737
#define VAR_RATELIMIT_FACTOR 467
738
#define VAR_IP_RATELIMIT_BACKOFF 468
739
#define VAR_RATELIMIT_BACKOFF 469
740
#define VAR_SEND_CLIENT_SUBNET 470
741
#define VAR_CLIENT_SUBNET_ZONE 471
742
#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 472
743
#define VAR_CLIENT_SUBNET_OPCODE 473
744
#define VAR_MAX_CLIENT_SUBNET_IPV4 474
745
#define VAR_MAX_CLIENT_SUBNET_IPV6 475
746
#define VAR_MIN_CLIENT_SUBNET_IPV4 476
747
#define VAR_MIN_CLIENT_SUBNET_IPV6 477
748
#define VAR_MAX_ECS_TREE_SIZE_IPV4 478
749
#define VAR_MAX_ECS_TREE_SIZE_IPV6 479
750
#define VAR_CAPS_WHITELIST 480
751
#define VAR_CACHE_MAX_NEGATIVE_TTL 481
752
#define VAR_PERMIT_SMALL_HOLDDOWN 482
753
#define VAR_CACHE_MIN_NEGATIVE_TTL 483
754
#define VAR_QNAME_MINIMISATION 484
755
#define VAR_QNAME_MINIMISATION_STRICT 485
756
#define VAR_IP_FREEBIND 486
757
#define VAR_DEFINE_TAG 487
758
#define VAR_LOCAL_ZONE_TAG 488
759
#define VAR_ACCESS_CONTROL_TAG 489
760
#define VAR_LOCAL_ZONE_OVERRIDE 490
761
#define VAR_ACCESS_CONTROL_TAG_ACTION 491
762
#define VAR_ACCESS_CONTROL_TAG_DATA 492
763
#define VAR_VIEW 493
764
#define VAR_ACCESS_CONTROL_VIEW 494
765
#define VAR_VIEW_FIRST 495
766
#define VAR_SERVE_EXPIRED 496
767
#define VAR_SERVE_EXPIRED_TTL 497
768
#define VAR_SERVE_EXPIRED_TTL_RESET 498
769
#define VAR_SERVE_EXPIRED_REPLY_TTL 499
770
#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 500
771
#define VAR_EDE_SERVE_EXPIRED 501
772
#define VAR_SERVE_ORIGINAL_TTL 502
773
#define VAR_FAKE_DSA 503
774
#define VAR_FAKE_SHA1 504
775
#define VAR_LOG_IDENTITY 505
776
#define VAR_HIDE_TRUSTANCHOR 506
777
#define VAR_HIDE_HTTP_USER_AGENT 507
778
#define VAR_HTTP_USER_AGENT 508
779
#define VAR_TRUST_ANCHOR_SIGNALING 509
780
#define VAR_AGGRESSIVE_NSEC 510
781
#define VAR_USE_SYSTEMD 511
782
#define VAR_SHM_ENABLE 512
783
#define VAR_SHM_KEY 513
784
#define VAR_ROOT_KEY_SENTINEL 514
785
#define VAR_DNSCRYPT 515
786
#define VAR_DNSCRYPT_ENABLE 516
787
#define VAR_DNSCRYPT_PORT 517
788
#define VAR_DNSCRYPT_PROVIDER 518
789
#define VAR_DNSCRYPT_SECRET_KEY 519
790
#define VAR_DNSCRYPT_PROVIDER_CERT 520
791
#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 521
792
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 522
793
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 523
794
#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 524
795
#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 525
796
#define VAR_PAD_RESPONSES 526
797
#define VAR_PAD_RESPONSES_BLOCK_SIZE 527
798
#define VAR_PAD_QUERIES 528
799
#define VAR_PAD_QUERIES_BLOCK_SIZE 529
800
#define VAR_IPSECMOD_ENABLED 530
801
#define VAR_IPSECMOD_HOOK 531
802
#define VAR_IPSECMOD_IGNORE_BOGUS 532
803
#define VAR_IPSECMOD_MAX_TTL 533
804
#define VAR_IPSECMOD_WHITELIST 534
805
#define VAR_IPSECMOD_STRICT 535
806
#define VAR_CACHEDB 536
807
#define VAR_CACHEDB_BACKEND 537
808
#define VAR_CACHEDB_SECRETSEED 538
809
#define VAR_CACHEDB_REDISHOST 539
810
#define VAR_CACHEDB_REDISREPLICAHOST 540
811
#define VAR_CACHEDB_REDISPORT 541
812
#define VAR_CACHEDB_REDISREPLICAPORT 542
813
#define VAR_CACHEDB_REDISTIMEOUT 543
814
#define VAR_CACHEDB_REDISREPLICATIMEOUT 544
815
#define VAR_CACHEDB_REDISEXPIRERECORDS 545
816
#define VAR_CACHEDB_REDISPATH 546
817
#define VAR_CACHEDB_REDISREPLICAPATH 547
818
#define VAR_CACHEDB_REDISPASSWORD 548
819
#define VAR_CACHEDB_REDISREPLICAPASSWORD 549
820
#define VAR_CACHEDB_REDISLOGICALDB 550
821
#define VAR_CACHEDB_REDISREPLICALOGICALDB 551
822
#define VAR_CACHEDB_REDISCOMMANDTIMEOUT 552
823
#define VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT 553
824
#define VAR_CACHEDB_REDISCONNECTTIMEOUT 554
825
#define VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT 555
826
#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 556
827
#define VAR_FOR_UPSTREAM 557
828
#define VAR_AUTH_ZONE 558
829
#define VAR_ZONEFILE 559
830
#define VAR_MASTER 560
831
#define VAR_URL 561
832
#define VAR_FOR_DOWNSTREAM 562
833
#define VAR_FALLBACK_ENABLED 563
834
#define VAR_TLS_ADDITIONAL_PORT 564
835
#define VAR_LOW_RTT 565
836
#define VAR_LOW_RTT_PERMIL 566
837
#define VAR_FAST_SERVER_PERMIL 567
838
#define VAR_FAST_SERVER_NUM 568
839
#define VAR_ALLOW_NOTIFY 569
840
#define VAR_TLS_WIN_CERT 570
841
#define VAR_TCP_CONNECTION_LIMIT 571
842
#define VAR_ANSWER_COOKIE 572
843
#define VAR_COOKIE_SECRET 573
844
#define VAR_IP_RATELIMIT_COOKIE 574
845
#define VAR_FORWARD_NO_CACHE 575
846
#define VAR_STUB_NO_CACHE 576
847
#define VAR_LOG_SERVFAIL 577
848
#define VAR_DENY_ANY 578
849
#define VAR_UNKNOWN_SERVER_TIME_LIMIT 579
850
#define VAR_LOG_TAG_QUERYREPLY 580
851
#define VAR_DISCARD_TIMEOUT 581
852
#define VAR_WAIT_LIMIT 582
853
#define VAR_WAIT_LIMIT_COOKIE 583
854
#define VAR_WAIT_LIMIT_NETBLOCK 584
855
#define VAR_WAIT_LIMIT_COOKIE_NETBLOCK 585
856
#define VAR_STREAM_WAIT_SIZE 586
857
#define VAR_TLS_CIPHERS 587
858
#define VAR_TLS_CIPHERSUITES 588
859
#define VAR_TLS_USE_SNI 589
860
#define VAR_TLS_USE_SYSTEM_POLICY_VERSIONS 590
861
#define VAR_IPSET 591
862
#define VAR_IPSET_NAME_V4 592
863
#define VAR_IPSET_NAME_V6 593
864
#define VAR_TLS_SESSION_TICKET_KEYS 594
865
#define VAR_RPZ 595
866
#define VAR_TAGS 596
867
#define VAR_RPZ_ACTION_OVERRIDE 597
868
#define VAR_RPZ_CNAME_OVERRIDE 598
869
#define VAR_RPZ_LOG 599
870
#define VAR_RPZ_LOG_NAME 600
871
#define VAR_DYNLIB 601
872
#define VAR_DYNLIB_FILE 602
873
#define VAR_EDNS_CLIENT_STRING 603
874
#define VAR_EDNS_CLIENT_STRING_OPCODE 604
875
#define VAR_NSID 605
876
#define VAR_ZONEMD_PERMISSIVE_MODE 606
877
#define VAR_ZONEMD_CHECK 607
878
#define VAR_ZONEMD_REJECT_ABSENCE 608
879
#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 609
880
#define VAR_INTERFACE_AUTOMATIC_PORTS 610
881
#define VAR_EDE 611
882
#define VAR_DNS_ERROR_REPORTING 612
883
#define VAR_INTERFACE_ACTION 613
884
#define VAR_INTERFACE_VIEW 614
885
#define VAR_INTERFACE_TAG 615
886
#define VAR_INTERFACE_TAG_ACTION 616
887
#define VAR_INTERFACE_TAG_DATA 617
888
#define VAR_QUIC_PORT 618
889
#define VAR_QUIC_SIZE 619
890
#define VAR_PROXY_PROTOCOL_PORT 620
891
#define VAR_STATISTICS_INHIBIT_ZERO 621
892
#define VAR_HARDEN_UNKNOWN_ADDITIONAL 622
893
#define VAR_DISABLE_EDNS_DO 623
894
#define VAR_CACHEDB_NO_STORE 624
895
#define VAR_LOG_DESTADDR 625
896
#define VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED 626
897
#define VAR_COOKIE_SECRET_FILE 627
898
#define VAR_ITER_SCRUB_NS 628
899
#define VAR_ITER_SCRUB_CNAME 629
900
#define VAR_MAX_GLOBAL_QUOTA 630
901
#define VAR_HARDEN_UNVERIFIED_GLUE 631
902
#define VAR_LOG_TIME_ISO 632
903
#define VAR_ITER_SCRUB_PROMISCUOUS 633
904
#define VAR_LOG_THREAD_ID 634
905
906
/* Value type.  */
907
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
908
union YYSTYPE
909
{
910
#line 68 "./util/configparser.y"
911
912
  char* str;
913
914
#line 915 "util/configparser.c"
915
916
};
917
typedef union YYSTYPE YYSTYPE;
918
# define YYSTYPE_IS_TRIVIAL 1
919
# define YYSTYPE_IS_DECLARED 1
920
#endif
921
922
923
extern YYSTYPE yylval;
924
925
int yyparse (void);
926
927
#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
928
929
930
931
#ifdef short
932
# undef short
933
#endif
934
935
/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
936
   <limits.h> and (if available) <stdint.h> are included
937
   so that the code can choose integer types of a good width.  */
938
939
#ifndef __PTRDIFF_MAX__
940
# include <limits.h> /* INFRINGES ON USER NAME SPACE */
941
# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
942
#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
943
#  define YY_STDINT_H
944
# endif
945
#endif
946
947
/* Narrow types that promote to a signed type and that can represent a
948
   signed or unsigned integer of at least N bits.  In tables they can
949
   save space and decrease cache pressure.  Promoting to a signed type
950
   helps avoid bugs in integer arithmetic.  */
951
952
#ifdef __INT_LEAST8_MAX__
953
typedef __INT_LEAST8_TYPE__ yytype_int8;
954
#elif defined YY_STDINT_H
955
typedef int_least8_t yytype_int8;
956
#else
957
typedef signed char yytype_int8;
958
#endif
959
960
#ifdef __INT_LEAST16_MAX__
961
typedef __INT_LEAST16_TYPE__ yytype_int16;
962
#elif defined YY_STDINT_H
963
typedef int_least16_t yytype_int16;
964
#else
965
typedef short yytype_int16;
966
#endif
967
968
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
969
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
970
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
971
       && UINT_LEAST8_MAX <= INT_MAX)
972
typedef uint_least8_t yytype_uint8;
973
#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
974
typedef unsigned char yytype_uint8;
975
#else
976
typedef short yytype_uint8;
977
#endif
978
979
#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
980
typedef __UINT_LEAST16_TYPE__ yytype_uint16;
981
#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
982
       && UINT_LEAST16_MAX <= INT_MAX)
983
typedef uint_least16_t yytype_uint16;
984
#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
985
typedef unsigned short yytype_uint16;
986
#else
987
typedef int yytype_uint16;
988
#endif
989
990
#ifndef YYPTRDIFF_T
991
# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
992
0
#  define YYPTRDIFF_T __PTRDIFF_TYPE__
993
#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
994
# elif defined PTRDIFF_MAX
995
#  ifndef ptrdiff_t
996
#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
997
#  endif
998
#  define YYPTRDIFF_T ptrdiff_t
999
#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
1000
# else
1001
#  define YYPTRDIFF_T long
1002
#  define YYPTRDIFF_MAXIMUM LONG_MAX
1003
# endif
1004
#endif
1005
1006
#ifndef YYSIZE_T
1007
# ifdef __SIZE_TYPE__
1008
#  define YYSIZE_T __SIZE_TYPE__
1009
# elif defined size_t
1010
#  define YYSIZE_T size_t
1011
# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
1012
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1013
#  define YYSIZE_T size_t
1014
# else
1015
#  define YYSIZE_T unsigned
1016
# endif
1017
#endif
1018
1019
#define YYSIZE_MAXIMUM                                  \
1020
  YY_CAST (YYPTRDIFF_T,                                 \
1021
           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
1022
            ? YYPTRDIFF_MAXIMUM                         \
1023
            : YY_CAST (YYSIZE_T, -1)))
1024
1025
0
#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
1026
1027
/* Stored state numbers (used for stacks). */
1028
typedef yytype_int16 yy_state_t;
1029
1030
/* State numbers in computations.  */
1031
typedef int yy_state_fast_t;
1032
1033
#ifndef YY_
1034
# if defined YYENABLE_NLS && YYENABLE_NLS
1035
#  if ENABLE_NLS
1036
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1037
#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
1038
#  endif
1039
# endif
1040
# ifndef YY_
1041
0
#  define YY_(Msgid) Msgid
1042
# endif
1043
#endif
1044
1045
#ifndef YY_ATTRIBUTE_PURE
1046
# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
1047
#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
1048
# else
1049
#  define YY_ATTRIBUTE_PURE
1050
# endif
1051
#endif
1052
1053
#ifndef YY_ATTRIBUTE_UNUSED
1054
# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
1055
#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
1056
# else
1057
#  define YY_ATTRIBUTE_UNUSED
1058
# endif
1059
#endif
1060
1061
/* Suppress unused-variable warnings by "using" E.  */
1062
#if ! defined lint || defined __GNUC__
1063
0
# define YYUSE(E) ((void) (E))
1064
#else
1065
# define YYUSE(E) /* empty */
1066
#endif
1067
1068
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
1069
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
1070
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
1071
    _Pragma ("GCC diagnostic push")                                     \
1072
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
1073
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1074
# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
1075
    _Pragma ("GCC diagnostic pop")
1076
#else
1077
# define YY_INITIAL_VALUE(Value) Value
1078
#endif
1079
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1080
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1081
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
1082
#endif
1083
#ifndef YY_INITIAL_VALUE
1084
# define YY_INITIAL_VALUE(Value) /* Nothing. */
1085
#endif
1086
1087
#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1088
# define YY_IGNORE_USELESS_CAST_BEGIN                          \
1089
    _Pragma ("GCC diagnostic push")                            \
1090
    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1091
# define YY_IGNORE_USELESS_CAST_END            \
1092
    _Pragma ("GCC diagnostic pop")
1093
#endif
1094
#ifndef YY_IGNORE_USELESS_CAST_BEGIN
1095
# define YY_IGNORE_USELESS_CAST_BEGIN
1096
# define YY_IGNORE_USELESS_CAST_END
1097
#endif
1098
1099
1100
0
#define YY_ASSERT(E) ((void) (0 && (E)))
1101
1102
#if ! defined yyoverflow || YYERROR_VERBOSE
1103
1104
/* The parser invokes alloca or malloc; define the necessary symbols.  */
1105
1106
# ifdef YYSTACK_USE_ALLOCA
1107
#  if YYSTACK_USE_ALLOCA
1108
#   ifdef __GNUC__
1109
#    define YYSTACK_ALLOC __builtin_alloca
1110
#   elif defined __BUILTIN_VA_ARG_INCR
1111
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1112
#   elif defined _AIX
1113
#    define YYSTACK_ALLOC __alloca
1114
#   elif defined _MSC_VER
1115
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1116
#    define alloca _alloca
1117
#   else
1118
#    define YYSTACK_ALLOC alloca
1119
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1120
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1121
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
1122
#     ifndef EXIT_SUCCESS
1123
#      define EXIT_SUCCESS 0
1124
#     endif
1125
#    endif
1126
#   endif
1127
#  endif
1128
# endif
1129
1130
# ifdef YYSTACK_ALLOC
1131
   /* Pacify GCC's 'empty if-body' warning.  */
1132
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1133
#  ifndef YYSTACK_ALLOC_MAXIMUM
1134
    /* The OS might guarantee only one guard page at the bottom of the stack,
1135
       and a page size can be as small as 4096 bytes.  So we cannot safely
1136
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
1137
       to allow for a few compiler-allocated temporary stack slots.  */
1138
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1139
#  endif
1140
# else
1141
#  define YYSTACK_ALLOC YYMALLOC
1142
0
#  define YYSTACK_FREE YYFREE
1143
#  ifndef YYSTACK_ALLOC_MAXIMUM
1144
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1145
#  endif
1146
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
1147
       && ! ((defined YYMALLOC || defined malloc) \
1148
             && (defined YYFREE || defined free)))
1149
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1150
#   ifndef EXIT_SUCCESS
1151
#    define EXIT_SUCCESS 0
1152
#   endif
1153
#  endif
1154
#  ifndef YYMALLOC
1155
#   define YYMALLOC malloc
1156
#   if ! defined malloc && ! defined EXIT_SUCCESS
1157
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1158
#   endif
1159
#  endif
1160
#  ifndef YYFREE
1161
0
#   define YYFREE free
1162
#   if ! defined free && ! defined EXIT_SUCCESS
1163
void free (void *); /* INFRINGES ON USER NAME SPACE */
1164
#   endif
1165
#  endif
1166
# endif
1167
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1168
1169
1170
#if (! defined yyoverflow \
1171
     && (! defined __cplusplus \
1172
         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1173
1174
/* A type that is properly aligned for any stack member.  */
1175
union yyalloc
1176
{
1177
  yy_state_t yyss_alloc;
1178
  YYSTYPE yyvs_alloc;
1179
};
1180
1181
/* The size of the maximum gap between one aligned stack and the next.  */
1182
0
# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1183
1184
/* The size of an array large to enough to hold all stacks, each with
1185
   N elements.  */
1186
# define YYSTACK_BYTES(N) \
1187
     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
1188
      + YYSTACK_GAP_MAXIMUM)
1189
1190
# define YYCOPY_NEEDED 1
1191
1192
/* Relocate STACK from its old location to the new one.  The
1193
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
1194
   elements in the stack, and YYPTR gives the new location of the
1195
   stack.  Advance YYPTR to a properly aligned location for the next
1196
   stack.  */
1197
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
1198
0
    do                                                                  \
1199
0
      {                                                                 \
1200
0
        YYPTRDIFF_T yynewbytes;                                         \
1201
0
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
1202
0
        Stack = &yyptr->Stack_alloc;                                    \
1203
0
        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1204
0
        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
1205
0
      }                                                                 \
1206
0
    while (0)
1207
1208
#endif
1209
1210
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1211
/* Copy COUNT objects from SRC to DST.  The source and destination do
1212
   not overlap.  */
1213
# ifndef YYCOPY
1214
#  if defined __GNUC__ && 1 < __GNUC__
1215
#   define YYCOPY(Dst, Src, Count) \
1216
0
      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1217
#  else
1218
#   define YYCOPY(Dst, Src, Count)              \
1219
      do                                        \
1220
        {                                       \
1221
          YYPTRDIFF_T yyi;                      \
1222
          for (yyi = 0; yyi < (Count); yyi++)   \
1223
            (Dst)[yyi] = (Src)[yyi];            \
1224
        }                                       \
1225
      while (0)
1226
#  endif
1227
# endif
1228
#endif /* !YYCOPY_NEEDED */
1229
1230
/* YYFINAL -- State number of the termination state.  */
1231
0
#define YYFINAL  2
1232
/* YYLAST -- Last index in YYTABLE.  */
1233
0
#define YYLAST   811
1234
1235
/* YYNTOKENS -- Number of terminals.  */
1236
0
#define YYNTOKENS  380
1237
/* YYNNTS -- Number of nonterminals.  */
1238
#define YYNNTS  408
1239
/* YYNRULES -- Number of rules.  */
1240
#define YYNRULES  790
1241
/* YYNSTATES -- Number of states.  */
1242
#define YYNSTATES  1183
1243
1244
0
#define YYUNDEFTOK  2
1245
0
#define YYMAXUTOK   634
1246
1247
1248
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1249
   as returned by yylex, with out-of-bounds checking.  */
1250
#define YYTRANSLATE(YYX)                                                \
1251
0
  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1252
1253
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1254
   as returned by yylex.  */
1255
static const yytype_int16 yytranslate[] =
1256
{
1257
       0,     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,     2,     2,     2,     2,
1281
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1282
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
1283
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
1284
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
1285
      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
1286
      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
1287
      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
1288
      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1289
      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1290
      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
1291
      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
1292
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
1293
     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
1294
     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
1295
     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
1296
     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
1297
     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
1298
     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
1299
     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
1300
     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
1301
     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
1302
     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
1303
     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
1304
     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
1305
     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
1306
     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
1307
     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
1308
     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1309
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1310
     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1311
     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1312
     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1313
     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1314
     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1315
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1316
     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1317
     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1318
     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1319
     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1320
     375,   376,   377,   378,   379
1321
};
1322
1323
#if YYDEBUG
1324
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
1325
static const yytype_int16 yyrline[] =
1326
{
1327
       0,   222,   222,   222,   223,   223,   224,   224,   225,   225,
1328
     225,   226,   226,   227,   227,   228,   228,   229,   231,   238,
1329
     244,   245,   246,   246,   246,   247,   247,   248,   248,   248,
1330
     249,   249,   249,   250,   250,   250,   251,   251,   252,   253,
1331
     253,   253,   254,   254,   254,   255,   255,   256,   256,   257,
1332
     257,   258,   258,   259,   259,   260,   260,   261,   261,   262,
1333
     262,   263,   263,   263,   264,   264,   265,   265,   265,   266,
1334
     266,   266,   267,   267,   268,   268,   269,   269,   270,   270,
1335
     271,   271,   271,   272,   272,   273,   273,   274,   274,   274,
1336
     275,   275,   276,   276,   277,   277,   278,   278,   278,   279,
1337
     279,   280,   280,   281,   281,   282,   282,   283,   283,   284,
1338
     284,   285,   285,   286,   286,   287,   287,   287,   288,   288,
1339
     288,   289,   289,   289,   290,   290,   290,   290,   291,   291,
1340
     292,   292,   292,   293,   293,   293,   294,   294,   295,   295,
1341
     296,   296,   296,   297,   297,   297,   298,   298,   299,   299,
1342
     299,   300,   301,   301,   301,   302,   302,   302,   303,   303,
1343
     304,   304,   305,   305,   306,   307,   307,   308,   308,   309,
1344
     309,   310,   310,   311,   311,   312,   312,   313,   313,   314,
1345
     314,   315,   315,   316,   316,   317,   318,   318,   319,   319,
1346
     319,   320,   320,   321,   321,   322,   322,   323,   323,   323,
1347
     324,   324,   325,   326,   326,   327,   327,   328,   329,   329,
1348
     330,   330,   331,   331,   331,   332,   332,   333,   333,   333,
1349
     334,   334,   334,   335,   335,   336,   337,   337,   338,   338,
1350
     339,   339,   340,   340,   341,   341,   341,   342,   342,   342,
1351
     343,   343,   343,   344,   344,   345,   345,   345,   346,   346,
1352
     347,   347,   348,   348,   349,   349,   349,   350,   350,   351,
1353
     352,   352,   353,   353,   354,   354,   355,   355,   356,   356,
1354
     357,   358,   358,   359,   359,   360,   360,   361,   361,   361,
1355
     362,   362,   362,   364,   372,   386,   387,   388,   388,   388,
1356
     388,   388,   389,   389,   389,   391,   399,   413,   414,   415,
1357
     415,   415,   415,   416,   416,   416,   418,   426,   440,   441,
1358
     442,   442,   442,   442,   443,   443,   443,   445,   466,   467,
1359
     468,   468,   468,   468,   469,   469,   469,   470,   470,   470,
1360
     473,   492,   509,   517,   527,   534,   544,   563,   564,   565,
1361
     565,   565,   565,   565,   566,   566,   566,   567,   567,   567,
1362
     567,   569,   578,   587,   598,   607,   616,   625,   634,   645,
1363
     654,   666,   680,   695,   706,   723,   740,   757,   774,   789,
1364
     804,   817,   832,   841,   850,   859,   868,   877,   886,   893,
1365
     902,   911,   920,   929,   938,   947,   956,   965,   974,   987,
1366
     998,  1009,  1020,  1029,  1042,  1055,  1064,  1073,  1082,  1089,
1367
    1096,  1105,  1112,  1121,  1129,  1136,  1143,  1151,  1160,  1169,
1368
    1177,  1195,  1203,  1211,  1219,  1227,  1235,  1251,  1258,  1267,
1369
    1276,  1290,  1299,  1308,  1317,  1326,  1335,  1344,  1353,  1362,
1370
    1371,  1378,  1385,  1411,  1419,  1426,  1433,  1440,  1447,  1455,
1371
    1463,  1471,  1478,  1489,  1500,  1507,  1516,  1525,  1534,  1543,
1372
    1550,  1557,  1564,  1580,  1588,  1596,  1606,  1616,  1626,  1640,
1373
    1648,  1661,  1672,  1680,  1693,  1702,  1711,  1720,  1729,  1739,
1374
    1749,  1757,  1770,  1779,  1787,  1796,  1804,  1817,  1826,  1835,
1375
    1845,  1852,  1862,  1872,  1882,  1892,  1902,  1912,  1922,  1932,
1376
    1942,  1952,  1959,  1966,  1973,  1982,  1991,  2000,  2009,  2016,
1377
    2026,  2034,  2043,  2050,  2068,  2081,  2094,  2107,  2116,  2125,
1378
    2134,  2143,  2152,  2162,  2172,  2183,  2192,  2201,  2210,  2219,
1379
    2228,  2237,  2246,  2255,  2264,  2277,  2290,  2299,  2306,  2315,
1380
    2324,  2333,  2342,  2352,  2360,  2373,  2381,  2437,  2444,  2459,
1381
    2469,  2479,  2486,  2493,  2500,  2507,  2522,  2537,  2544,  2551,
1382
    2560,  2568,  2575,  2589,  2610,  2631,  2643,  2655,  2667,  2676,
1383
    2697,  2709,  2721,  2730,  2751,  2760,  2769,  2778,  2786,  2794,
1384
    2807,  2820,  2835,  2850,  2859,  2868,  2878,  2888,  2897,  2906,
1385
    2915,  2921,  2930,  2939,  2949,  2959,  2969,  2978,  2988,  2997,
1386
    3010,  3023,  3035,  3049,  3061,  3075,  3084,  3095,  3104,  3113,
1387
    3120,  3130,  3137,  3144,  3153,  3162,  3172,  3182,  3192,  3202,
1388
    3209,  3216,  3225,  3234,  3244,  3254,  3264,  3271,  3278,  3285,
1389
    3293,  3303,  3313,  3323,  3333,  3343,  3353,  3409,  3419,  3427,
1390
    3435,  3450,  3459,  3465,  3466,  3467,  3467,  3467,  3468,  3468,
1391
    3468,  3469,  3469,  3471,  3481,  3490,  3497,  3504,  3511,  3518,
1392
    3525,  3532,  3538,  3539,  3540,  3540,  3540,  3541,  3541,  3541,
1393
    3542,  3543,  3543,  3544,  3544,  3545,  3545,  3546,  3547,  3548,
1394
    3549,  3550,  3551,  3552,  3554,  3563,  3573,  3580,  3587,  3596,
1395
    3603,  3610,  3617,  3624,  3633,  3642,  3649,  3656,  3666,  3676,
1396
    3686,  3696,  3706,  3716,  3727,  3733,  3734,  3735,  3737,  3744,
1397
    3750,  3751,  3752,  3754,  3761,  3771,  3778,  3787,  3795,  3801,
1398
    3802,  3804,  3804,  3804,  3805,  3805,  3806,  3807,  3808,  3809,
1399
    3810,  3812,  3821,  3830,  3837,  3846,  3853,  3862,  3870,  3883,
1400
    3891,  3904,  3910,  3911,  3912,  3912,  3913,  3913,  3914,  3914,
1401
    3915,  3915,  3916,  3916,  3917,  3917,  3918,  3918,  3919,  3919,
1402
    3920,  3920,  3921,  3921,  3922,  3924,  3936,  3948,  3961,  3974,
1403
    3986,  3998,  4013,  4028,  4040,  4052,  4064,  4076,  4089,  4102,
1404
    4115,  4128,  4141,  4154,  4167,  4182,  4197,  4208,  4217,  4233,
1405
    4240,  4249,  4258,  4267,  4277,  4283,  4284,  4285,  4285,  4287,
1406
    4302
1407
};
1408
#endif
1409
1410
#if YYDEBUG || YYERROR_VERBOSE || 0
1411
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1412
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
1413
static const char *const yytname[] =
1414
{
1415
  "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT",
1416
  "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL",
1417
  "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT",
1418
  "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4",
1419
  "VAR_DO_IP6", "VAR_DO_NAT64", "VAR_PREFER_IP6", "VAR_DO_UDP",
1420
  "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS",
1421
  "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE",
1422
  "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_SOCK_QUEUE_TIMEOUT", "VAR_CHROOT",
1423
  "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
1424
  "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS",
1425
  "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE",
1426
  "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL",
1427
  "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS",
1428
  "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME",
1429
  "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR",
1430
  "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE",
1431
  "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST",
1432
  "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY",
1433
  "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE",
1434
  "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR",
1435
  "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL",
1436
  "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
1437
  "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
1438
  "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
1439
  "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
1440
  "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL",
1441
  "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC",
1442
  "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID",
1443
  "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT",
1444
  "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR",
1445
  "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS",
1446
  "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
1447
  "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
1448
  "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
1449
  "VAR_CONTROL_USE_CERT", "VAR_TCP_REUSE_TIMEOUT",
1450
  "VAR_MAX_REUSE_TCP_QUERIES", "VAR_EXTENDED_STATISTICS",
1451
  "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME",
1452
  "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
1453
  "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT",
1454
  "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "VAR_VAL_MAX_RESTART",
1455
  "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE",
1456
  "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN",
1457
  "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH",
1458
  "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT",
1459
  "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES",
1460
  "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM",
1461
  "VAR_SSL_UPSTREAM", "VAR_TCP_AUTH_QUERY_TIMEOUT", "VAR_SSL_SERVICE_KEY",
1462
  "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
1463
  "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM",
1464
  "VAR_TLS_CERT_BUNDLE", "VAR_STUB_TCP_UPSTREAM",
1465
  "VAR_FORWARD_TCP_UPSTREAM", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT",
1466
  "VAR_HTTP_MAX_STREAMS", "VAR_HTTP_QUERY_BUFFER_SIZE",
1467
  "VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY",
1468
  "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
1469
  "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE",
1470
  "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
1471
  "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_CACHE_MAX_RTT",
1472
  "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
1473
  "VAR_DNS64_IGNORE_AAAA", "VAR_NAT64_PREFIX", "VAR_DNSTAP",
1474
  "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP",
1475
  "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME",
1476
  "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE",
1477
  "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY",
1478
  "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL",
1479
  "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
1480
  "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
1481
  "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
1482
  "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
1483
  "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
1484
  "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
1485
  "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_DNSTAP_SAMPLE_RATE",
1486
  "VAR_RESPONSE_IP_TAG", "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA",
1487
  "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_IP_DSCP",
1488
  "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT",
1489
  "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT",
1490
  "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_OUTBOUND_MSG_RETRY",
1491
  "VAR_MAX_SENT_COUNT", "VAR_MAX_QUERY_RESTARTS",
1492
  "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
1493
  "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
1494
  "VAR_IP_RATELIMIT_BACKOFF", "VAR_RATELIMIT_BACKOFF",
1495
  "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE",
1496
  "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE",
1497
  "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
1498
  "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6",
1499
  "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
1500
  "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
1501
  "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_CACHE_MIN_NEGATIVE_TTL",
1502
  "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT",
1503
  "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG",
1504
  "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE",
1505
  "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA",
1506
  "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST",
1507
  "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
1508
  "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
1509
  "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_EDE_SERVE_EXPIRED",
1510
  "VAR_SERVE_ORIGINAL_TTL", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
1511
  "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_HIDE_HTTP_USER_AGENT",
1512
  "VAR_HTTP_USER_AGENT", "VAR_TRUST_ANCHOR_SIGNALING",
1513
  "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
1514
  "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT",
1515
  "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER",
1516
  "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT",
1517
  "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED",
1518
  "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE",
1519
  "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS",
1520
  "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS",
1521
  "VAR_PAD_RESPONSES", "VAR_PAD_RESPONSES_BLOCK_SIZE", "VAR_PAD_QUERIES",
1522
  "VAR_PAD_QUERIES_BLOCK_SIZE", "VAR_IPSECMOD_ENABLED",
1523
  "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL",
1524
  "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB",
1525
  "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST",
1526
  "VAR_CACHEDB_REDISREPLICAHOST", "VAR_CACHEDB_REDISPORT",
1527
  "VAR_CACHEDB_REDISREPLICAPORT", "VAR_CACHEDB_REDISTIMEOUT",
1528
  "VAR_CACHEDB_REDISREPLICATIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS",
1529
  "VAR_CACHEDB_REDISPATH", "VAR_CACHEDB_REDISREPLICAPATH",
1530
  "VAR_CACHEDB_REDISPASSWORD", "VAR_CACHEDB_REDISREPLICAPASSWORD",
1531
  "VAR_CACHEDB_REDISLOGICALDB", "VAR_CACHEDB_REDISREPLICALOGICALDB",
1532
  "VAR_CACHEDB_REDISCOMMANDTIMEOUT",
1533
  "VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT",
1534
  "VAR_CACHEDB_REDISCONNECTTIMEOUT",
1535
  "VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT",
1536
  "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM",
1537
  "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL",
1538
  "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT",
1539
  "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL",
1540
  "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT",
1541
  "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", "VAR_COOKIE_SECRET",
1542
  "VAR_IP_RATELIMIT_COOKIE", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE",
1543
  "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT",
1544
  "VAR_LOG_TAG_QUERYREPLY", "VAR_DISCARD_TIMEOUT", "VAR_WAIT_LIMIT",
1545
  "VAR_WAIT_LIMIT_COOKIE", "VAR_WAIT_LIMIT_NETBLOCK",
1546
  "VAR_WAIT_LIMIT_COOKIE_NETBLOCK", "VAR_STREAM_WAIT_SIZE",
1547
  "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI",
1548
  "VAR_TLS_USE_SYSTEM_POLICY_VERSIONS", "VAR_IPSET", "VAR_IPSET_NAME_V4",
1549
  "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ",
1550
  "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE",
1551
  "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE",
1552
  "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID",
1553
  "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK",
1554
  "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA",
1555
  "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_DNS_ERROR_REPORTING",
1556
  "VAR_INTERFACE_ACTION", "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG",
1557
  "VAR_INTERFACE_TAG_ACTION", "VAR_INTERFACE_TAG_DATA", "VAR_QUIC_PORT",
1558
  "VAR_QUIC_SIZE", "VAR_PROXY_PROTOCOL_PORT",
1559
  "VAR_STATISTICS_INHIBIT_ZERO", "VAR_HARDEN_UNKNOWN_ADDITIONAL",
1560
  "VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "VAR_LOG_DESTADDR",
1561
  "VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED", "VAR_COOKIE_SECRET_FILE",
1562
  "VAR_ITER_SCRUB_NS", "VAR_ITER_SCRUB_CNAME", "VAR_MAX_GLOBAL_QUOTA",
1563
  "VAR_HARDEN_UNVERIFIED_GLUE", "VAR_LOG_TIME_ISO",
1564
  "VAR_ITER_SCRUB_PROMISCUOUS", "VAR_LOG_THREAD_ID", "$accept",
1565
  "toplevelvars", "toplevelvar", "force_toplevel", "serverstart",
1566
  "contents_server", "content_server", "stub_clause", "stubstart",
1567
  "contents_stub", "content_stub", "forward_clause", "forwardstart",
1568
  "contents_forward", "content_forward", "view_clause", "viewstart",
1569
  "contents_view", "content_view", "authstart", "contents_auth",
1570
  "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override",
1571
  "rpz_log", "rpz_log_name", "rpz_signal_nxdomain_ra", "rpzstart",
1572
  "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity",
1573
  "server_statistics_interval", "server_statistics_cumulative",
1574
  "server_extended_statistics", "server_statistics_inhibit_zero",
1575
  "server_shm_enable", "server_shm_key", "server_port",
1576
  "server_send_client_subnet", "server_client_subnet_zone",
1577
  "server_client_subnet_always_forward", "server_client_subnet_opcode",
1578
  "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
1579
  "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
1580
  "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6",
1581
  "server_interface", "server_outgoing_interface", "server_outgoing_range",
1582
  "server_outgoing_port_permit", "server_outgoing_port_avoid",
1583
  "server_outgoing_num_tcp", "server_incoming_num_tcp",
1584
  "server_interface_automatic", "server_interface_automatic_ports",
1585
  "server_do_ip4", "server_do_ip6", "server_do_nat64", "server_do_udp",
1586
  "server_do_tcp", "server_prefer_ip4", "server_prefer_ip6",
1587
  "server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_idle_timeout",
1588
  "server_max_reuse_tcp_queries", "server_tcp_reuse_timeout",
1589
  "server_tcp_auth_query_timeout", "server_tcp_keepalive",
1590
  "server_tcp_keepalive_timeout", "server_sock_queue_timeout",
1591
  "server_tcp_upstream", "server_udp_upstream_without_downstream",
1592
  "server_ssl_upstream", "server_ssl_service_key",
1593
  "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
1594
  "server_tls_win_cert", "server_tls_additional_port",
1595
  "server_tls_ciphers", "server_tls_ciphersuites",
1596
  "server_tls_session_ticket_keys", "server_tls_use_sni",
1597
  "server_tls_use_system_policy_versions", "server_https_port",
1598
  "server_http_endpoint", "server_http_max_streams",
1599
  "server_http_query_buffer_size", "server_http_response_buffer_size",
1600
  "server_http_nodelay", "server_http_notls_downstream",
1601
  "server_quic_port", "server_quic_size", "server_use_systemd",
1602
  "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
1603
  "server_log_time_iso", "server_log_queries", "server_log_replies",
1604
  "server_log_tag_queryreply", "server_log_servfail",
1605
  "server_log_destaddr", "server_log_thread_id",
1606
  "server_log_local_actions", "server_chroot", "server_username",
1607
  "server_directory", "server_logfile", "server_pidfile",
1608
  "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor",
1609
  "server_auto_trust_anchor_file", "server_trust_anchor_file",
1610
  "server_trusted_keys_file", "server_trust_anchor",
1611
  "server_trust_anchor_signaling", "server_root_key_sentinel",
1612
  "server_domain_insecure", "server_hide_identity", "server_hide_version",
1613
  "server_hide_trustanchor", "server_hide_http_user_agent",
1614
  "server_identity", "server_version", "server_http_user_agent",
1615
  "server_nsid", "server_so_rcvbuf", "server_so_sndbuf",
1616
  "server_so_reuseport", "server_ip_transparent", "server_ip_freebind",
1617
  "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size",
1618
  "server_msg_buffer_size", "server_msg_cache_size",
1619
  "server_msg_cache_slabs", "server_num_queries_per_thread",
1620
  "server_jostle_timeout", "server_delay_close", "server_udp_connect",
1621
  "server_unblock_lan_zones", "server_insecure_lan_zones",
1622
  "server_rrset_cache_size", "server_rrset_cache_slabs",
1623
  "server_infra_host_ttl", "server_infra_lame_ttl",
1624
  "server_infra_cache_numhosts", "server_infra_cache_lame_size",
1625
  "server_infra_cache_slabs", "server_infra_cache_min_rtt",
1626
  "server_infra_cache_max_rtt", "server_infra_keep_probing",
1627
  "server_target_fetch_policy", "server_harden_short_bufsize",
1628
  "server_harden_large_queries", "server_harden_glue",
1629
  "server_harden_unverified_glue", "server_harden_dnssec_stripped",
1630
  "server_harden_below_nxdomain", "server_harden_referral_path",
1631
  "server_harden_algo_downgrade", "server_harden_unknown_additional",
1632
  "server_use_caps_for_id", "server_caps_whitelist",
1633
  "server_private_address", "server_private_domain", "server_prefetch",
1634
  "server_prefetch_key", "server_deny_any",
1635
  "server_unwanted_reply_threshold", "server_do_not_query_address",
1636
  "server_do_not_query_localhost", "server_access_control",
1637
  "server_interface_action", "server_module_conf",
1638
  "server_val_override_date", "server_val_sig_skew_min",
1639
  "server_val_sig_skew_max", "server_val_max_restart",
1640
  "server_cache_max_ttl", "server_cache_max_negative_ttl",
1641
  "server_cache_min_negative_ttl", "server_cache_min_ttl",
1642
  "server_bogus_ttl", "server_val_clean_additional",
1643
  "server_val_permissive_mode", "server_aggressive_nsec",
1644
  "server_ignore_cd_flag", "server_disable_edns_do",
1645
  "server_serve_expired", "server_serve_expired_ttl",
1646
  "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl",
1647
  "server_serve_expired_client_timeout", "server_ede_serve_expired",
1648
  "server_serve_original_ttl", "server_fake_dsa", "server_fake_sha1",
1649
  "server_val_log_level", "server_val_nsec3_keysize_iterations",
1650
  "server_zonemd_permissive_mode", "server_add_holddown",
1651
  "server_del_holddown", "server_keep_missing",
1652
  "server_permit_small_holddown", "server_key_cache_size",
1653
  "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
1654
  "server_local_data", "server_local_data_ptr", "server_minimal_responses",
1655
  "server_rrset_roundrobin", "server_unknown_server_time_limit",
1656
  "server_discard_timeout", "server_wait_limit",
1657
  "server_wait_limit_cookie", "server_wait_limit_netblock",
1658
  "server_wait_limit_cookie_netblock", "server_max_udp_size",
1659
  "server_dns64_prefix", "server_dns64_synthall",
1660
  "server_dns64_ignore_aaaa", "server_nat64_prefix", "server_define_tag",
1661
  "server_local_zone_tag", "server_access_control_tag",
1662
  "server_access_control_tag_action", "server_access_control_tag_data",
1663
  "server_local_zone_override", "server_access_control_view",
1664
  "server_interface_tag", "server_interface_tag_action",
1665
  "server_interface_tag_data", "server_interface_view",
1666
  "server_response_ip_tag", "server_ip_ratelimit",
1667
  "server_ip_ratelimit_cookie", "server_ratelimit",
1668
  "server_ip_ratelimit_size", "server_ratelimit_size",
1669
  "server_ip_ratelimit_slabs", "server_ratelimit_slabs",
1670
  "server_ratelimit_for_domain", "server_ratelimit_below_domain",
1671
  "server_ip_ratelimit_factor", "server_ratelimit_factor",
1672
  "server_ip_ratelimit_backoff", "server_ratelimit_backoff",
1673
  "server_outbound_msg_retry", "server_max_sent_count",
1674
  "server_max_query_restarts", "server_low_rtt", "server_fast_server_num",
1675
  "server_fast_server_permil", "server_qname_minimisation",
1676
  "server_qname_minimisation_strict", "server_pad_responses",
1677
  "server_pad_responses_block_size", "server_pad_queries",
1678
  "server_pad_queries_block_size", "server_ipsecmod_enabled",
1679
  "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
1680
  "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
1681
  "server_ipsecmod_strict", "server_edns_client_string",
1682
  "server_edns_client_string_opcode", "server_ede",
1683
  "server_dns_error_reporting", "server_proxy_protocol_port", "stub_name",
1684
  "stub_host", "stub_addr", "stub_first", "stub_no_cache",
1685
  "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", "forward_name",
1686
  "forward_host", "forward_addr", "forward_first", "forward_no_cache",
1687
  "forward_ssl_upstream", "forward_tcp_upstream", "auth_name",
1688
  "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
1689
  "auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream",
1690
  "auth_for_upstream", "auth_fallback_enabled", "view_name",
1691
  "view_local_zone", "view_response_ip", "view_response_ip_data",
1692
  "view_local_data", "view_local_data_ptr", "view_first", "rcstart",
1693
  "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
1694
  "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
1695
  "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
1696
  "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
1697
  "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
1698
  "dt_dnstap_tls", "dt_dnstap_tls_server_name",
1699
  "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
1700
  "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
1701
  "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
1702
  "dt_dnstap_log_resolver_query_messages",
1703
  "dt_dnstap_log_resolver_response_messages",
1704
  "dt_dnstap_log_client_query_messages",
1705
  "dt_dnstap_log_client_response_messages",
1706
  "dt_dnstap_log_forwarder_query_messages",
1707
  "dt_dnstap_log_forwarder_response_messages", "dt_dnstap_sample_rate",
1708
  "pythonstart", "contents_py", "content_py", "py_script", "dynlibstart",
1709
  "contents_dl", "content_dl", "dl_file",
1710
  "server_disable_dnssec_lame_check", "server_log_identity",
1711
  "server_response_ip", "server_response_ip_data", "dnscstart",
1712
  "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
1713
  "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
1714
  "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
1715
  "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
1716
  "dnsc_dnscrypt_shared_secret_cache_slabs",
1717
  "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
1718
  "cachedbstart", "contents_cachedb", "content_cachedb",
1719
  "cachedb_backend_name", "cachedb_secret_seed", "cachedb_no_store",
1720
  "cachedb_check_when_serve_expired", "redis_server_host",
1721
  "redis_replica_server_host", "redis_server_port",
1722
  "redis_replica_server_port", "redis_server_path",
1723
  "redis_replica_server_path", "redis_server_password",
1724
  "redis_replica_server_password", "redis_timeout",
1725
  "redis_replica_timeout", "redis_command_timeout",
1726
  "redis_replica_command_timeout", "redis_connect_timeout",
1727
  "redis_replica_connect_timeout", "redis_expire_records",
1728
  "redis_logical_db", "redis_replica_logical_db",
1729
  "server_tcp_connection_limit", "server_answer_cookie",
1730
  "server_cookie_secret", "server_cookie_secret_file",
1731
  "server_iter_scrub_ns", "server_iter_scrub_cname",
1732
  "server_max_global_quota", "server_iter_scrub_promiscuous", "ipsetstart",
1733
  "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
1734
};
1735
#endif
1736
1737
# ifdef YYPRINT
1738
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
1739
   (internal) symbol number NUM (which must be that of a token).  */
1740
static const yytype_int16 yytoknum[] =
1741
{
1742
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1743
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1744
     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1745
     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1746
     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1747
     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1748
     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1749
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1750
     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1751
     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1752
     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1753
     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1754
     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
1755
     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
1756
     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
1757
     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
1758
     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
1759
     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
1760
     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
1761
     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
1762
     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
1763
     465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
1764
     475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
1765
     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
1766
     495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
1767
     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
1768
     515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
1769
     525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
1770
     535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
1771
     545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
1772
     555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
1773
     565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
1774
     575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
1775
     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
1776
     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
1777
     605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
1778
     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
1779
     625,   626,   627,   628,   629,   630,   631,   632,   633,   634
1780
};
1781
# endif
1782
1783
0
#define YYPACT_NINF (-311)
1784
1785
#define yypact_value_is_default(Yyn) \
1786
0
  ((Yyn) == YYPACT_NINF)
1787
1788
#define YYTABLE_NINF (-1)
1789
1790
#define yytable_value_is_error(Yyn) \
1791
0
  0
1792
1793
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1794
     STATE-NUM.  */
1795
static const yytype_int16 yypact[] =
1796
{
1797
    -311,   275,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1798
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1799
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1800
    -311,  -311,  -311,  -311,  -311,   -13,   222,   234,   293,   112,
1801
      88,   -14,   294,   -81,  -310,   143,  -122,  -303,    31,    32,
1802
      33,    83,    89,    93,    94,   121,   122,   123,   126,   134,
1803
     169,   215,   217,   238,   240,   241,   242,   243,   244,   245,
1804
     246,   247,   258,   260,   263,   264,   266,   267,   268,   269,
1805
     270,   272,   273,   274,   281,   282,   283,   284,   285,   288,
1806
     291,   297,   298,   314,   315,   317,   318,   320,   321,   322,
1807
     323,   329,   331,   346,   348,   358,   359,   361,   362,   364,
1808
     365,   371,   372,   374,   375,   376,   377,   378,   379,   380,
1809
     386,   387,   388,   389,   390,   391,   405,   411,   412,   413,
1810
     414,   415,   417,   418,   424,   425,   426,   427,   428,   429,
1811
     430,   431,   433,   434,   435,   436,   438,   439,   440,   441,
1812
     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
1813
     452,   453,   456,   479,   480,   481,   482,   483,   484,   485,
1814
     486,   487,   488,   489,   490,   491,   492,   493,   494,   495,
1815
     496,   497,   498,   499,   500,   501,   502,   504,   505,   506,
1816
     507,   508,   509,   510,   511,   512,   513,   514,   515,   516,
1817
     517,   518,   519,   520,   521,   522,   524,   526,   527,   528,
1818
     529,   530,   531,   532,   534,   535,   536,   537,   538,   539,
1819
     540,   541,   542,   543,   545,   547,   548,   549,   550,   551,
1820
     552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
1821
     562,   563,   564,   565,   566,   567,   569,   570,   571,   572,
1822
     573,   574,   575,   576,   577,   578,   579,   580,   581,   582,
1823
     583,   584,   585,   586,   587,   588,   589,   590,   591,   592,
1824
     593,   594,   595,   596,   597,   598,   599,   600,   602,   603,
1825
     604,   606,   607,   608,   609,   610,   612,   613,   614,   615,
1826
     616,   617,   618,   619,   620,   621,   622,   623,   624,   625,
1827
     626,   627,   628,   629,   630,   631,   632,   633,   634,  -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,  -311,
1849
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1850
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1851
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1852
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1853
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1854
    -311,   635,   636,   637,   638,   639,   640,   641,   642,  -311,
1855
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   643,   644,
1856
     645,   646,   647,   648,   649,  -311,  -311,  -311,  -311,  -311,
1857
    -311,  -311,  -311,   650,   651,   652,   653,   654,   655,   656,
1858
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   657,   658,
1859
     659,   660,   661,   662,   663,   664,   665,   666,  -311,  -311,
1860
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   667,
1861
     668,   669,   670,   671,   672,  -311,  -311,  -311,  -311,  -311,
1862
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,   673,   674,
1863
     675,   676,   677,   678,   679,   680,  -311,  -311,  -311,  -311,
1864
    -311,  -311,  -311,  -311,  -311,   681,   682,   683,   684,   685,
1865
     686,   687,   688,   689,   690,   691,   692,   693,   694,   695,
1866
     696,   697,   698,   699,   700,  -311,  -311,  -311,  -311,  -311,
1867
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1868
    -311,  -311,  -311,  -311,  -311,  -311,   701,  -311,  -311,   702,
1869
    -311,  -311,   703,   704,   705,   706,   707,   708,   709,   710,
1870
     711,   712,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1871
    -311,  -311,  -311,   713,   714,   715,   716,   717,   718,   719,
1872
     720,   721,   722,   723,   724,   725,   726,   727,   728,   729,
1873
     730,   731,   732,   733,  -311,  -311,  -311,  -311,  -311,  -311,
1874
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1875
    -311,  -311,  -311,  -311,  -311,  -311,   734,   735,  -311,  -311,
1876
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1877
    -311,  -311,  -311,  -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,   736,   737,  -311,  -311,  -311,  -311,  -311,
1883
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1884
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1885
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1886
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1887
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1888
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1889
    -311,  -311,  -311,  -311,  -311,   738,   739,   740,  -311,  -311,
1890
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1891
    -311,   741,   742,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1892
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1893
    -311,  -311,  -311,  -311,  -311,   743,   744,   745,   746,   747,
1894
     748,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1895
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1896
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1897
    -311,  -311,  -311,  -311,  -311,  -311,   749,  -311,  -311,  -311,
1898
    -311,  -311,  -311,  -311,  -311,  -311,  -311,   750,   751,  -311,
1899
    -311,  -311,  -311,  -311,  -311,   752,  -311,  -311,  -311,  -311,
1900
    -311,  -311,   753,   754,   755,   756,   757,  -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,   758,  -311,
1904
    -311,   759,   760,  -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,  -311,
1908
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1909
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1910
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1911
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1912
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
1913
    -311,  -311,   761,   762,   763,  -311,  -311,  -311,  -311,  -311,
1914
    -311,  -311,  -311,   764,   765,  -311,  -311,  -311,  -311,  -311,
1915
    -311,  -311,  -311
1916
};
1917
1918
  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1919
     Performed when YYTABLE does not specify something else to do.  Zero
1920
     means the default is an error.  */
1921
static const yytype_int16 yydefact[] =
1922
{
1923
       2,     0,     1,    18,    19,   284,   296,   632,   694,   651,
1924
     307,   708,   731,   317,   784,   336,   699,     3,    17,    21,
1925
       5,   286,     6,   298,    10,   309,   319,   338,   634,   653,
1926
     696,   701,   710,   733,   786,     4,   283,   295,   306,    14,
1927
      15,     8,     9,     7,    16,    11,    12,    13,     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,     0,     0,
1948
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1949
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1950
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1951
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1952
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1953
       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
1954
      22,    23,    90,    93,   102,   272,   220,   221,    24,   173,
1955
     174,   175,   176,   177,   178,   179,   180,   181,   182,    39,
1956
      81,    25,    94,    95,    50,    74,    89,   268,    26,    27,
1957
      28,    31,    32,    29,    30,    33,    34,    35,   263,   264,
1958
     265,    36,    37,    38,   126,   232,   127,   130,   131,   132,
1959
     234,   239,   235,   251,   252,   253,   257,   259,   133,   134,
1960
     135,   136,   137,   138,   139,   266,   267,   216,    91,    80,
1961
     106,   281,   124,   125,   244,   241,   275,   129,   128,    40,
1962
      41,    42,    43,    44,    82,    96,    97,   113,    68,    78,
1963
      69,   224,   225,   107,    60,    61,   223,    64,    62,    63,
1964
      65,   261,   117,   121,   143,   155,   188,   158,   250,   118,
1965
      75,    45,    46,    47,   104,   144,   145,   146,   147,    48,
1966
      49,    51,    52,    54,    55,    53,   152,   153,   159,    56,
1967
      57,    58,    66,   280,    85,   122,    99,   154,   273,    92,
1968
     183,   100,   101,   119,   120,   242,   105,    59,    83,    86,
1969
     197,    67,    70,   108,   109,   110,    84,   184,   185,   111,
1970
      71,    72,    73,   233,   123,   274,   207,   208,   209,   210,
1971
     211,   212,   213,   214,   222,   112,    79,   262,   114,   115,
1972
     116,   186,    76,    77,    98,    87,    88,   103,   140,   141,
1973
     243,   245,   246,   247,   248,   249,   142,   148,   149,   150,
1974
     151,   189,   190,   192,   194,   195,   193,   196,   199,   200,
1975
     201,   198,   217,   156,   256,   157,   162,   163,   160,   161,
1976
     164,   165,   167,   166,   169,   168,   170,   171,   172,   236,
1977
     238,   237,   187,   202,   203,   204,   205,   206,   226,   228,
1978
     227,   229,   230,   231,   258,   260,   269,   270,   271,   191,
1979
     215,   218,   219,   240,   254,   255,   276,   277,   278,   279,
1980
     282,     0,     0,     0,     0,     0,     0,     0,     0,   285,
1981
     287,   288,   289,   291,   292,   293,   294,   290,     0,     0,
1982
       0,     0,     0,     0,     0,   297,   299,   300,   301,   302,
1983
     303,   304,   305,     0,     0,     0,     0,     0,     0,     0,
1984
     308,   310,   311,   314,   315,   312,   316,   313,     0,     0,
1985
       0,     0,     0,     0,     0,     0,     0,     0,   318,   320,
1986
     321,   322,   323,   327,   328,   329,   324,   325,   326,     0,
1987
       0,     0,     0,     0,     0,   341,   345,   346,   347,   348,
1988
     349,   337,   339,   340,   342,   343,   344,   350,     0,     0,
1989
       0,     0,     0,     0,     0,     0,   633,   635,   637,   636,
1990
     642,   638,   639,   640,   641,     0,     0,     0,     0,     0,
1991
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1992
       0,     0,     0,     0,     0,   652,   654,   656,   655,   657,
1993
     658,   659,   660,   661,   662,   663,   664,   665,   666,   667,
1994
     668,   669,   670,   671,   672,   673,     0,   695,   697,     0,
1995
     700,   702,     0,     0,     0,     0,     0,     0,     0,     0,
1996
       0,     0,   709,   711,   712,   713,   715,   716,   714,   717,
1997
     718,   719,   720,     0,     0,     0,     0,     0,     0,     0,
1998
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1999
       0,     0,     0,     0,   732,   734,   735,   752,   754,   736,
2000
     737,   738,   739,   746,   747,   748,   749,   740,   741,   742,
2001
     743,   744,   745,   753,   750,   751,     0,     0,   785,   787,
2002
     788,   352,   351,   359,   372,   370,   384,   379,   380,   381,
2003
     385,   382,   383,   386,   387,   388,   392,   393,   394,   430,
2004
     431,   432,   433,   434,   462,   463,   464,   470,   471,   375,
2005
     472,   473,   476,   474,   475,   480,   481,   482,   498,   445,
2006
     446,   449,   450,   483,   502,   439,   441,   503,   511,   512,
2007
     513,   376,   461,   533,   534,   440,   527,   420,   371,   435,
2008
     499,   507,   485,     0,     0,   537,   377,   353,   419,   490,
2009
     354,   373,   374,   436,   437,   535,   487,   492,   493,   390,
2010
     389,   355,   538,   465,   497,   421,   444,   504,   505,   506,
2011
     510,   526,   438,   531,   529,   530,   453,   460,   494,   495,
2012
     454,   455,   486,   515,   423,   424,   429,   395,   397,   391,
2013
     398,   399,   400,   401,   409,   410,   411,   412,   413,   414,
2014
     415,   539,   540,   547,   466,   467,   468,   469,   477,   478,
2015
     479,   548,   549,   550,   551,     0,     0,     0,   488,   456,
2016
     458,   704,   564,   569,   567,   566,   570,   568,   577,   578,
2017
     579,     0,     0,   573,   574,   575,   576,   360,   361,   362,
2018
     363,   364,   365,   366,   367,   368,   369,   491,   508,   532,
2019
     509,   583,   584,   457,   552,     0,     0,     0,     0,     0,
2020
       0,   517,   518,   519,   520,   521,   522,   523,   524,   525,
2021
     705,   447,   448,   451,   442,   514,   418,   357,   358,   443,
2022
     585,   586,   587,   588,   589,   591,   590,   592,   593,   594,
2023
     396,   403,   580,   582,   581,   402,     0,   777,   778,   565,
2024
     426,   496,   541,   425,   542,   543,   544,     0,     0,   459,
2025
     404,   405,   407,   408,   406,     0,   596,   452,   528,   378,
2026
     597,   598,     0,     0,     0,     0,     0,   416,   417,   599,
2027
     356,   489,   516,   427,   779,   780,   781,   782,   484,   422,
2028
     783,   428,   600,   601,   602,   607,   605,   606,   603,   604,
2029
     608,   609,   610,   611,   613,   614,   612,   625,     0,   629,
2030
     630,     0,     0,   631,   615,   623,   616,   617,   618,   622,
2031
     624,   619,   620,   621,   330,   331,   332,   333,   334,   335,
2032
     643,   645,   644,   647,   648,   649,   650,   646,   674,   676,
2033
     677,   678,   679,   680,   681,   682,   683,   684,   675,   685,
2034
     686,   687,   688,   689,   690,   691,   692,   693,   698,   703,
2035
     721,   722,   723,   726,   724,   725,   727,   728,   729,   730,
2036
     755,   756,   759,   760,   761,   762,   767,   768,   773,   763,
2037
     764,   765,   766,   774,   775,   769,   770,   771,   772,   757,
2038
     758,   789,   790,   500,   536,   563,   706,   707,   571,   572,
2039
     553,   554,     0,     0,     0,   558,   776,   545,   546,   595,
2040
     501,   562,   559,     0,     0,   626,   627,   628,   557,   555,
2041
     556,   560,   561
2042
};
2043
2044
  /* YYPGOTO[NTERM-NUM].  */
2045
static const yytype_int16 yypgoto[] =
2046
{
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,  -311,  -311,  -311,  -311,  -311,  -311,
2070
    -311,  -311,  -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,   766,   767,   768,   769,   770,
2077
    -311,  -311,   771,  -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,  -311,  -311,  -311,
2081
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2082
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2083
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2084
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2085
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2086
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311,
2087
    -311,  -311,  -311,  -311,  -311,  -311,  -311,  -311
2088
};
2089
2090
  /* YYDEFGOTO[NTERM-NUM].  */
2091
static const yytype_int16 yydefgoto[] =
2092
{
2093
      -1,     1,    17,    18,    19,    35,   309,    20,    21,    36,
2094
     579,    22,    23,    37,   595,    24,    25,    38,   610,    26,
2095
      39,   628,   645,   646,   647,   648,   649,   650,    27,    40,
2096
     651,   310,   311,   312,   313,   314,   315,   316,   317,   318,
2097
     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
2098
     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
2099
     339,   340,   341,   342,   343,   344,   345,   346,   347,   348,
2100
     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
2101
     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
2102
     369,   370,   371,   372,   373,   374,   375,   376,   377,   378,
2103
     379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
2104
     389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
2105
     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
2106
     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
2107
     419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
2108
     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
2109
     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
2110
     449,   450,   451,   452,   453,   454,   455,   456,   457,   458,
2111
     459,   460,   461,   462,   463,   464,   465,   466,   467,   468,
2112
     469,   470,   471,   472,   473,   474,   475,   476,   477,   478,
2113
     479,   480,   481,   482,   483,   484,   485,   486,   487,   488,
2114
     489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
2115
     499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
2116
     509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
2117
     519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
2118
     529,   530,   531,   532,   533,   534,   535,   536,   537,   538,
2119
     539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
2120
     549,   550,   551,   552,   553,   554,   555,   556,   557,   558,
2121
     580,   581,   582,   583,   584,   585,   586,   587,   596,   597,
2122
     598,   599,   600,   601,   602,   629,   630,   631,   632,   633,
2123
     634,   635,   636,   637,   638,   611,   612,   613,   614,   615,
2124
     616,   617,    28,    41,   666,   667,   668,   669,   670,   671,
2125
     672,   673,   674,    29,    42,   695,   696,   697,   698,   699,
2126
     700,   701,   702,   703,   704,   705,   706,   707,   708,   709,
2127
     710,   711,   712,   713,   714,   715,    30,    43,   717,   718,
2128
      31,    44,   720,   721,   559,   560,   561,   562,    32,    45,
2129
     732,   733,   734,   735,   736,   737,   738,   739,   740,   741,
2130
     742,    33,    46,   764,   765,   766,   767,   768,   769,   770,
2131
     771,   772,   773,   774,   775,   776,   777,   778,   779,   780,
2132
     781,   782,   783,   784,   785,   563,   564,   565,   566,   567,
2133
     568,   569,   570,    34,    47,   788,   789,   790
2134
};
2135
2136
  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
2137
     positive, shift that token.  If negative, reduce the rule whose
2138
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
2139
static const yytype_int16 yytable[] =
2140
{
2141
      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
2142
      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
2143
      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
2144
      78,    79,    80,    81,   786,   787,   716,   719,    82,    83,
2145
      84,   791,   792,   793,    85,    86,    87,    88,    89,    90,
2146
      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
2147
     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
2148
     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
2149
     121,   122,   123,   124,   125,   658,   659,   660,   661,   662,
2150
     663,   664,   665,   794,   126,   127,   128,   129,   130,   795,
2151
     131,   132,   133,   796,   797,   134,   135,   136,   137,   138,
2152
     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
2153
     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
2154
     159,   798,   799,   800,   160,   618,   801,   161,   162,   163,
2155
     164,   165,   166,   167,   802,   168,   169,   170,   171,   172,
2156
     173,   174,   175,   176,   177,   178,   179,   180,   181,   618,
2157
     743,   744,   745,   746,   747,   748,   749,   750,   751,   752,
2158
     753,   754,   755,   756,   757,   758,   759,   760,   761,   803,
2159
     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
2160
     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
2161
     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
2162
     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
2163
     222,   223,   224,   225,   226,   804,   227,   805,   228,   229,
2164
     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
2165
     240,   241,   242,   243,   244,   245,   246,   762,   806,   763,
2166
     807,   808,   809,   810,   811,   812,   813,   814,   247,   248,
2167
     249,   250,   251,   252,   253,   254,   255,   256,   815,   571,
2168
     816,   572,   573,   817,   818,     2,   819,   820,   821,   822,
2169
     823,   588,   824,   825,   826,     0,     3,     4,   257,   589,
2170
     590,   827,   828,   829,   830,   831,   258,   259,   832,   260,
2171
     261,   833,   262,   263,   264,   265,   266,   834,   835,   267,
2172
     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
2173
     278,   279,   280,     5,   836,   837,   281,   838,   839,     6,
2174
     840,   841,   842,   843,   574,   282,   283,   284,   285,   844,
2175
     603,   845,   286,   287,   288,   289,   290,   291,   292,   293,
2176
     294,   295,   296,   297,   298,   299,   846,   300,   847,   301,
2177
     302,   303,   304,   305,   306,   307,   308,   575,   848,   849,
2178
     576,   850,   851,     7,   852,   853,   604,   605,   591,   577,
2179
     592,   854,   855,   593,   856,   857,   858,   859,   860,   861,
2180
     862,     8,   620,   621,   622,   623,   863,   864,   865,   866,
2181
     867,   868,   625,   606,   722,   723,   724,   725,   726,   727,
2182
     728,   729,   730,   731,   619,   869,   620,   621,   622,   623,
2183
     624,   870,   871,   872,   873,   874,   625,   875,   876,   639,
2184
     640,   641,   642,   643,   877,   878,   879,   880,   881,   882,
2185
     883,   884,   644,   885,   886,   887,   888,     9,   889,   890,
2186
     891,   892,   893,   894,   895,   896,   897,   898,   899,   900,
2187
     901,   902,   903,   904,   626,   627,   905,   675,   676,   677,
2188
     678,   679,   680,   681,   682,   683,   684,   685,   686,   687,
2189
     688,   689,   690,   691,   692,   693,   694,   607,   608,   906,
2190
     907,   908,   909,   910,   911,   912,   913,   914,   915,   916,
2191
     917,   918,   919,   920,   921,   922,   923,   924,   925,   926,
2192
     927,   928,   929,    10,   930,   931,   932,   933,   934,   935,
2193
     936,   937,   938,   939,   940,   941,   942,   943,   944,   945,
2194
     946,   947,   948,   609,   949,    11,   950,   951,   952,   953,
2195
     954,   955,   956,   578,   957,   958,   959,   960,   961,   962,
2196
     963,   964,   965,   966,   594,   967,    12,   968,   969,   970,
2197
     971,   972,   973,   974,   975,   976,   977,   978,   979,   980,
2198
     981,   982,   983,   984,   985,   986,   987,   988,    13,   989,
2199
     990,   991,   992,   993,   994,   995,   996,   997,   998,   999,
2200
    1000,  1001,  1002,  1003,  1004,  1005,  1006,  1007,  1008,  1009,
2201
    1010,  1011,  1012,  1013,  1014,  1015,  1016,  1017,  1018,  1019,
2202
    1020,    14,  1021,  1022,  1023,    15,  1024,  1025,  1026,  1027,
2203
    1028,    16,  1029,  1030,  1031,  1032,  1033,  1034,  1035,  1036,
2204
    1037,  1038,  1039,  1040,  1041,  1042,  1043,  1044,  1045,  1046,
2205
    1047,  1048,  1049,  1050,  1051,  1052,  1053,  1054,  1055,  1056,
2206
    1057,  1058,  1059,  1060,  1061,  1062,  1063,  1064,  1065,  1066,
2207
    1067,  1068,  1069,  1070,  1071,  1072,  1073,  1074,  1075,  1076,
2208
    1077,  1078,  1079,  1080,  1081,  1082,  1083,  1084,  1085,  1086,
2209
    1087,  1088,  1089,  1090,  1091,  1092,  1093,  1094,  1095,  1096,
2210
    1097,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,  1106,
2211
    1107,  1108,  1109,  1110,  1111,  1112,  1113,  1114,  1115,  1116,
2212
    1117,  1118,  1119,  1120,  1121,  1122,  1123,  1124,  1125,  1126,
2213
    1127,  1128,  1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,
2214
    1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,
2215
    1147,  1148,  1149,  1150,  1151,  1152,  1153,  1154,  1155,  1156,
2216
    1157,  1158,  1159,  1160,  1161,  1162,  1163,  1164,  1165,  1166,
2217
    1167,  1168,  1169,  1170,  1171,  1172,  1173,  1174,  1175,  1176,
2218
    1177,  1178,  1179,  1180,  1181,  1182,     0,     0,     0,     0,
2219
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2220
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2221
       0,     0,     0,     0,     0,     0,   652,   653,   654,   655,
2222
     656,   657
2223
};
2224
2225
static const yytype_int16 yycheck[] =
2226
{
2227
      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
2228
      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
2229
      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
2230
      43,    44,    45,    46,   337,   338,   117,   347,    51,    52,
2231
      53,    10,    10,    10,    57,    58,    59,    60,    61,    62,
2232
      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
2233
      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
2234
      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
2235
      93,    94,    95,    96,    97,    99,   100,   101,   102,   103,
2236
     104,   105,   106,    10,   107,   108,   109,   110,   111,    10,
2237
     113,   114,   115,    10,    10,   118,   119,   120,   121,   122,
2238
     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
2239
     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
2240
     143,    10,    10,    10,   147,    47,    10,   150,   151,   152,
2241
     153,   154,   155,   156,    10,   158,   159,   160,   161,   162,
2242
     163,   164,   165,   166,   167,   168,   169,   170,   171,    47,
2243
     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
2244
     292,   293,   294,   295,   296,   297,   298,   299,   300,    10,
2245
     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
2246
     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
2247
     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
2248
     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
2249
     233,   234,   235,   236,   237,    10,   239,    10,   241,   242,
2250
     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
2251
     253,   254,   255,   256,   257,   258,   259,   369,    10,   371,
2252
      10,    10,    10,    10,    10,    10,    10,    10,   271,   272,
2253
     273,   274,   275,   276,   277,   278,   279,   280,    10,    47,
2254
      10,    49,    50,    10,    10,     0,    10,    10,    10,    10,
2255
      10,    47,    10,    10,    10,    -1,    11,    12,   301,    55,
2256
      56,    10,    10,    10,    10,    10,   309,   310,    10,   312,
2257
     313,    10,   315,   316,   317,   318,   319,    10,    10,   322,
2258
     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
2259
     333,   334,   335,    48,    10,    10,   339,    10,    10,    54,
2260
      10,    10,    10,    10,   112,   348,   349,   350,   351,    10,
2261
      47,    10,   355,   356,   357,   358,   359,   360,   361,   362,
2262
     363,   364,   365,   366,   367,   368,    10,   370,    10,   372,
2263
     373,   374,   375,   376,   377,   378,   379,   145,    10,    10,
2264
     148,    10,    10,    98,    10,    10,    83,    84,   144,   157,
2265
     146,    10,    10,   149,    10,    10,    10,    10,    10,    10,
2266
      10,   116,   304,   305,   306,   307,    10,    10,    10,    10,
2267
      10,    10,   314,   110,   261,   262,   263,   264,   265,   266,
2268
     267,   268,   269,   270,   302,    10,   304,   305,   306,   307,
2269
     308,    10,    10,    10,    10,    10,   314,    10,    10,   341,
2270
     342,   343,   344,   345,    10,    10,    10,    10,    10,    10,
2271
      10,    10,   354,    10,    10,    10,    10,   172,    10,    10,
2272
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2273
      10,    10,    10,    10,   352,   353,    10,   173,   174,   175,
2274
     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
2275
     186,   187,   188,   189,   190,   191,   192,   194,   195,    10,
2276
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2277
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2278
      10,    10,    10,   238,    10,    10,    10,    10,    10,    10,
2279
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2280
      10,    10,    10,   240,    10,   260,    10,    10,    10,    10,
2281
      10,    10,    10,   321,    10,    10,    10,    10,    10,    10,
2282
      10,    10,    10,    10,   320,    10,   281,    10,    10,    10,
2283
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2284
      10,    10,    10,    10,    10,    10,    10,    10,   303,    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,   336,    10,    10,    10,   340,    10,    10,    10,    10,
2289
      10,   346,    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,    10,    10,    10,    10,    10,    10,
2297
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2298
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2299
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2300
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2301
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2302
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2303
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2304
      10,    10,    10,    10,    10,    10,    -1,    -1,    -1,    -1,
2305
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2306
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2307
      -1,    -1,    -1,    -1,    -1,    -1,    40,    40,    40,    40,
2308
      40,    40
2309
};
2310
2311
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2312
     symbol of state STATE-NUM.  */
2313
static const yytype_int16 yystos[] =
2314
{
2315
       0,   381,     0,    11,    12,    48,    54,    98,   116,   172,
2316
     238,   260,   281,   303,   336,   340,   346,   382,   383,   384,
2317
     387,   388,   391,   392,   395,   396,   399,   408,   692,   703,
2318
     726,   730,   738,   751,   783,   385,   389,   393,   397,   400,
2319
     409,   693,   704,   727,   731,   739,   752,   784,    13,    14,
2320
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
2321
      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
2322
      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
2323
      45,    46,    51,    52,    53,    57,    58,    59,    60,    61,
2324
      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
2325
      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
2326
      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
2327
      92,    93,    94,    95,    96,    97,   107,   108,   109,   110,
2328
     111,   113,   114,   115,   118,   119,   120,   121,   122,   123,
2329
     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
2330
     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
2331
     147,   150,   151,   152,   153,   154,   155,   156,   158,   159,
2332
     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
2333
     170,   171,   193,   194,   195,   196,   197,   198,   199,   200,
2334
     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
2335
     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
2336
     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
2337
     231,   232,   233,   234,   235,   236,   237,   239,   241,   242,
2338
     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
2339
     253,   254,   255,   256,   257,   258,   259,   271,   272,   273,
2340
     274,   275,   276,   277,   278,   279,   280,   301,   309,   310,
2341
     312,   313,   315,   316,   317,   318,   319,   322,   323,   324,
2342
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
2343
     335,   339,   348,   349,   350,   351,   355,   356,   357,   358,
2344
     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
2345
     370,   372,   373,   374,   375,   376,   377,   378,   379,   386,
2346
     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
2347
     421,   422,   423,   424,   425,   426,   427,   428,   429,   430,
2348
     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
2349
     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
2350
     451,   452,   453,   454,   455,   456,   457,   458,   459,   460,
2351
     461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
2352
     471,   472,   473,   474,   475,   476,   477,   478,   479,   480,
2353
     481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
2354
     491,   492,   493,   494,   495,   496,   497,   498,   499,   500,
2355
     501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
2356
     511,   512,   513,   514,   515,   516,   517,   518,   519,   520,
2357
     521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
2358
     531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
2359
     541,   542,   543,   544,   545,   546,   547,   548,   549,   550,
2360
     551,   552,   553,   554,   555,   556,   557,   558,   559,   560,
2361
     561,   562,   563,   564,   565,   566,   567,   568,   569,   570,
2362
     571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
2363
     581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
2364
     591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
2365
     601,   602,   603,   604,   605,   606,   607,   608,   609,   610,
2366
     611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
2367
     621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
2368
     631,   632,   633,   634,   635,   636,   637,   638,   639,   640,
2369
     641,   642,   643,   644,   645,   646,   647,   648,   649,   650,
2370
     651,   652,   653,   654,   655,   656,   657,   658,   659,   734,
2371
     735,   736,   737,   775,   776,   777,   778,   779,   780,   781,
2372
     782,    47,    49,    50,   112,   145,   148,   157,   321,   390,
2373
     660,   661,   662,   663,   664,   665,   666,   667,    47,    55,
2374
      56,   144,   146,   149,   320,   394,   668,   669,   670,   671,
2375
     672,   673,   674,    47,    83,    84,   110,   194,   195,   240,
2376
     398,   685,   686,   687,   688,   689,   690,   691,    47,   302,
2377
     304,   305,   306,   307,   308,   314,   352,   353,   401,   675,
2378
     676,   677,   678,   679,   680,   681,   682,   683,   684,   341,
2379
     342,   343,   344,   345,   354,   402,   403,   404,   405,   406,
2380
     407,   410,   675,   676,   677,   678,   679,   682,    99,   100,
2381
     101,   102,   103,   104,   105,   106,   694,   695,   696,   697,
2382
     698,   699,   700,   701,   702,   173,   174,   175,   176,   177,
2383
     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
2384
     188,   189,   190,   191,   192,   705,   706,   707,   708,   709,
2385
     710,   711,   712,   713,   714,   715,   716,   717,   718,   719,
2386
     720,   721,   722,   723,   724,   725,   117,   728,   729,   347,
2387
     732,   733,   261,   262,   263,   264,   265,   266,   267,   268,
2388
     269,   270,   740,   741,   742,   743,   744,   745,   746,   747,
2389
     748,   749,   750,   282,   283,   284,   285,   286,   287,   288,
2390
     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
2391
     299,   300,   369,   371,   753,   754,   755,   756,   757,   758,
2392
     759,   760,   761,   762,   763,   764,   765,   766,   767,   768,
2393
     769,   770,   771,   772,   773,   774,   337,   338,   785,   786,
2394
     787,    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
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2425
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2426
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2427
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2428
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2429
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2430
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2431
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2432
      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2433
      10,    10,    10
2434
};
2435
2436
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
2437
static const yytype_int16 yyr1[] =
2438
{
2439
       0,   380,   381,   381,   382,   382,   382,   382,   382,   382,
2440
     382,   382,   382,   382,   382,   382,   382,   382,   383,   384,
2441
     385,   385,   386,   386,   386,   386,   386,   386,   386,   386,
2442
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2443
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2444
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2445
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2446
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2447
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2448
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2449
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2450
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2451
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2452
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2453
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2454
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2455
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2456
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2457
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2458
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2459
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2460
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2461
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2462
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2463
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2464
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2465
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2466
     386,   386,   386,   386,   386,   386,   386,   386,   386,   386,
2467
     386,   386,   386,   387,   388,   389,   389,   390,   390,   390,
2468
     390,   390,   390,   390,   390,   391,   392,   393,   393,   394,
2469
     394,   394,   394,   394,   394,   394,   395,   396,   397,   397,
2470
     398,   398,   398,   398,   398,   398,   398,   399,   400,   400,
2471
     401,   401,   401,   401,   401,   401,   401,   401,   401,   401,
2472
     402,   403,   404,   405,   406,   407,   408,   409,   409,   410,
2473
     410,   410,   410,   410,   410,   410,   410,   410,   410,   410,
2474
     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
2475
     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
2476
     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
2477
     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
2478
     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
2479
     460,   461,   462,   463,   464,   465,   466,   467,   468,   469,
2480
     470,   471,   472,   473,   474,   475,   476,   477,   478,   479,
2481
     480,   481,   482,   483,   484,   485,   486,   487,   488,   489,
2482
     490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
2483
     500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
2484
     510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
2485
     520,   521,   522,   523,   524,   525,   526,   527,   528,   529,
2486
     530,   531,   532,   533,   534,   535,   536,   537,   538,   539,
2487
     540,   541,   542,   543,   544,   545,   546,   547,   548,   549,
2488
     550,   551,   552,   553,   554,   555,   556,   557,   558,   559,
2489
     560,   561,   562,   563,   564,   565,   566,   567,   568,   569,
2490
     570,   571,   572,   573,   574,   575,   576,   577,   578,   579,
2491
     580,   581,   582,   583,   584,   585,   586,   587,   588,   589,
2492
     590,   591,   592,   593,   594,   595,   596,   597,   598,   599,
2493
     600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
2494
     610,   611,   612,   613,   614,   615,   616,   617,   618,   619,
2495
     620,   621,   622,   623,   624,   625,   626,   627,   628,   629,
2496
     630,   631,   632,   633,   634,   635,   636,   637,   638,   639,
2497
     640,   641,   642,   643,   644,   645,   646,   647,   648,   649,
2498
     650,   651,   652,   653,   654,   655,   656,   657,   658,   659,
2499
     660,   661,   662,   663,   664,   665,   666,   667,   668,   669,
2500
     670,   671,   672,   673,   674,   675,   676,   677,   678,   679,
2501
     680,   681,   682,   683,   684,   685,   686,   687,   688,   689,
2502
     690,   691,   692,   693,   693,   694,   694,   694,   694,   694,
2503
     694,   694,   694,   695,   696,   697,   698,   699,   700,   701,
2504
     702,   703,   704,   704,   705,   705,   705,   705,   705,   705,
2505
     705,   705,   705,   705,   705,   705,   705,   705,   705,   705,
2506
     705,   705,   705,   705,   706,   707,   708,   709,   710,   711,
2507
     712,   713,   714,   715,   716,   717,   718,   719,   720,   721,
2508
     722,   723,   724,   725,   726,   727,   727,   728,   729,   730,
2509
     731,   731,   732,   733,   734,   735,   736,   737,   738,   739,
2510
     739,   740,   740,   740,   740,   740,   740,   740,   740,   740,
2511
     740,   741,   742,   743,   744,   745,   746,   747,   748,   749,
2512
     750,   751,   752,   752,   753,   753,   753,   753,   753,   753,
2513
     753,   753,   753,   753,   753,   753,   753,   753,   753,   753,
2514
     753,   753,   753,   753,   753,   754,   755,   756,   757,   758,
2515
     759,   760,   761,   762,   763,   764,   765,   766,   767,   768,
2516
     769,   770,   771,   772,   773,   774,   775,   776,   777,   778,
2517
     779,   780,   781,   782,   783,   784,   784,   785,   785,   786,
2518
     787
2519
};
2520
2521
  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
2522
static const yytype_int8 yyr2[] =
2523
{
2524
       0,     2,     0,     2,     2,     1,     1,     2,     2,     2,
2525
       1,     2,     2,     2,     2,     2,     2,     1,     1,     1,
2526
       2,     0,     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,     1,     1,     1,     1,     1,     1,     1,     1,
2542
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2543
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2544
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2545
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2546
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2547
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2548
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2549
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2550
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2551
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2552
       1,     1,     1,     2,     1,     2,     0,     1,     1,     1,
2553
       1,     1,     1,     1,     1,     2,     1,     2,     0,     1,
2554
       1,     1,     1,     1,     1,     1,     2,     1,     2,     0,
2555
       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
2556
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2557
       2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
2558
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2559
       1,     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,     2,     2,
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,     2,     2,     2,     2,     2,     2,
2567
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2568
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2569
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2570
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2571
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2572
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2573
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2574
       3,     3,     2,     2,     2,     2,     2,     2,     2,     2,
2575
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2576
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2577
       2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
2578
       2,     2,     2,     2,     2,     3,     3,     2,     2,     2,
2579
       2,     2,     2,     3,     3,     4,     4,     4,     3,     3,
2580
       4,     4,     3,     3,     2,     2,     2,     2,     2,     2,
2581
       2,     3,     3,     2,     2,     2,     2,     2,     2,     2,
2582
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2583
       2,     2,     2,     2,     2,     3,     2,     2,     2,     2,
2584
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2585
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2586
       2,     2,     2,     2,     2,     2,     3,     3,     3,     2,
2587
       2,     2,     1,     2,     0,     1,     1,     1,     1,     1,
2588
       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
2589
       2,     1,     2,     0,     1,     1,     1,     1,     1,     1,
2590
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2591
       1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
2592
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2593
       2,     2,     2,     2,     1,     2,     0,     1,     2,     1,
2594
       2,     0,     1,     2,     2,     2,     3,     3,     1,     2,
2595
       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2596
       1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2597
       2,     1,     2,     0,     1,     1,     1,     1,     1,     1,
2598
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2599
       1,     1,     1,     1,     1,     2,     2,     2,     2,     2,
2600
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2601
       2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
2602
       2,     2,     2,     2,     1,     2,     0,     1,     1,     2,
2603
       2
2604
};
2605
2606
2607
#define yyerrok         (yyerrstatus = 0)
2608
#define yyclearin       (yychar = YYEMPTY)
2609
0
#define YYEMPTY         (-2)
2610
0
#define YYEOF           0
2611
2612
0
#define YYACCEPT        goto yyacceptlab
2613
0
#define YYABORT         goto yyabortlab
2614
0
#define YYERROR         goto yyerrorlab
2615
2616
2617
#define YYRECOVERING()  (!!yyerrstatus)
2618
2619
#define YYBACKUP(Token, Value)                                    \
2620
  do                                                              \
2621
    if (yychar == YYEMPTY)                                        \
2622
      {                                                           \
2623
        yychar = (Token);                                         \
2624
        yylval = (Value);                                         \
2625
        YYPOPSTACK (yylen);                                       \
2626
        yystate = *yyssp;                                         \
2627
        goto yybackup;                                            \
2628
      }                                                           \
2629
    else                                                          \
2630
      {                                                           \
2631
        yyerror (YY_("syntax error: cannot back up")); \
2632
        YYERROR;                                                  \
2633
      }                                                           \
2634
  while (0)
2635
2636
/* Error token number */
2637
0
#define YYTERROR        1
2638
#define YYERRCODE       256
2639
2640
2641
2642
/* Enable debugging if requested.  */
2643
#if YYDEBUG
2644
2645
# ifndef YYFPRINTF
2646
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2647
#  define YYFPRINTF fprintf
2648
# endif
2649
2650
# define YYDPRINTF(Args)                        \
2651
do {                                            \
2652
  if (yydebug)                                  \
2653
    YYFPRINTF Args;                             \
2654
} while (0)
2655
2656
/* This macro is provided for backward compatibility. */
2657
#ifndef YY_LOCATION_PRINT
2658
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2659
#endif
2660
2661
2662
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
2663
do {                                                                      \
2664
  if (yydebug)                                                            \
2665
    {                                                                     \
2666
      YYFPRINTF (stderr, "%s ", Title);                                   \
2667
      yy_symbol_print (stderr,                                            \
2668
                  Type, Value); \
2669
      YYFPRINTF (stderr, "\n");                                           \
2670
    }                                                                     \
2671
} while (0)
2672
2673
2674
/*-----------------------------------.
2675
| Print this symbol's value on YYO.  |
2676
`-----------------------------------*/
2677
2678
static void
2679
yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
2680
{
2681
  FILE *yyoutput = yyo;
2682
  YYUSE (yyoutput);
2683
  if (!yyvaluep)
2684
    return;
2685
# ifdef YYPRINT
2686
  if (yytype < YYNTOKENS)
2687
    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
2688
# endif
2689
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2690
  YYUSE (yytype);
2691
  YY_IGNORE_MAYBE_UNINITIALIZED_END
2692
}
2693
2694
2695
/*---------------------------.
2696
| Print this symbol on YYO.  |
2697
`---------------------------*/
2698
2699
static void
2700
yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
2701
{
2702
  YYFPRINTF (yyo, "%s %s (",
2703
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
2704
2705
  yy_symbol_value_print (yyo, yytype, yyvaluep);
2706
  YYFPRINTF (yyo, ")");
2707
}
2708
2709
/*------------------------------------------------------------------.
2710
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2711
| TOP (included).                                                   |
2712
`------------------------------------------------------------------*/
2713
2714
static void
2715
yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2716
{
2717
  YYFPRINTF (stderr, "Stack now");
2718
  for (; yybottom <= yytop; yybottom++)
2719
    {
2720
      int yybot = *yybottom;
2721
      YYFPRINTF (stderr, " %d", yybot);
2722
    }
2723
  YYFPRINTF (stderr, "\n");
2724
}
2725
2726
# define YY_STACK_PRINT(Bottom, Top)                            \
2727
do {                                                            \
2728
  if (yydebug)                                                  \
2729
    yy_stack_print ((Bottom), (Top));                           \
2730
} while (0)
2731
2732
2733
/*------------------------------------------------.
2734
| Report that the YYRULE is going to be reduced.  |
2735
`------------------------------------------------*/
2736
2737
static void
2738
yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
2739
{
2740
  int yylno = yyrline[yyrule];
2741
  int yynrhs = yyr2[yyrule];
2742
  int yyi;
2743
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2744
             yyrule - 1, yylno);
2745
  /* The symbols being reduced.  */
2746
  for (yyi = 0; yyi < yynrhs; yyi++)
2747
    {
2748
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
2749
      yy_symbol_print (stderr,
2750
                       yystos[+yyssp[yyi + 1 - yynrhs]],
2751
                       &yyvsp[(yyi + 1) - (yynrhs)]
2752
                                              );
2753
      YYFPRINTF (stderr, "\n");
2754
    }
2755
}
2756
2757
# define YY_REDUCE_PRINT(Rule)          \
2758
do {                                    \
2759
  if (yydebug)                          \
2760
    yy_reduce_print (yyssp, yyvsp, Rule); \
2761
} while (0)
2762
2763
/* Nonzero means print parse trace.  It is left uninitialized so that
2764
   multiple parsers can coexist.  */
2765
int yydebug;
2766
#else /* !YYDEBUG */
2767
# define YYDPRINTF(Args)
2768
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2769
# define YY_STACK_PRINT(Bottom, Top)
2770
# define YY_REDUCE_PRINT(Rule)
2771
#endif /* !YYDEBUG */
2772
2773
2774
/* YYINITDEPTH -- initial size of the parser's stacks.  */
2775
#ifndef YYINITDEPTH
2776
0
# define YYINITDEPTH 200
2777
#endif
2778
2779
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2780
   if the built-in stack extension method is used).
2781
2782
   Do not make this value too large; the results are undefined if
2783
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2784
   evaluated with infinite-precision integer arithmetic.  */
2785
2786
#ifndef YYMAXDEPTH
2787
0
# define YYMAXDEPTH 10000
2788
#endif
2789
2790
2791
#if YYERROR_VERBOSE
2792
2793
# ifndef yystrlen
2794
#  if defined __GLIBC__ && defined _STRING_H
2795
#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
2796
#  else
2797
/* Return the length of YYSTR.  */
2798
static YYPTRDIFF_T
2799
yystrlen (const char *yystr)
2800
{
2801
  YYPTRDIFF_T yylen;
2802
  for (yylen = 0; yystr[yylen]; yylen++)
2803
    continue;
2804
  return yylen;
2805
}
2806
#  endif
2807
# endif
2808
2809
# ifndef yystpcpy
2810
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2811
#   define yystpcpy stpcpy
2812
#  else
2813
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2814
   YYDEST.  */
2815
static char *
2816
yystpcpy (char *yydest, const char *yysrc)
2817
{
2818
  char *yyd = yydest;
2819
  const char *yys = yysrc;
2820
2821
  while ((*yyd++ = *yys++) != '\0')
2822
    continue;
2823
2824
  return yyd - 1;
2825
}
2826
#  endif
2827
# endif
2828
2829
# ifndef yytnamerr
2830
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2831
   quotes and backslashes, so that it's suitable for yyerror.  The
2832
   heuristic is that double-quoting is unnecessary unless the string
2833
   contains an apostrophe, a comma, or backslash (other than
2834
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
2835
   null, do not copy; instead, return the length of what the result
2836
   would have been.  */
2837
static YYPTRDIFF_T
2838
yytnamerr (char *yyres, const char *yystr)
2839
{
2840
  if (*yystr == '"')
2841
    {
2842
      YYPTRDIFF_T yyn = 0;
2843
      char const *yyp = yystr;
2844
2845
      for (;;)
2846
        switch (*++yyp)
2847
          {
2848
          case '\'':
2849
          case ',':
2850
            goto do_not_strip_quotes;
2851
2852
          case '\\':
2853
            if (*++yyp != '\\')
2854
              goto do_not_strip_quotes;
2855
            else
2856
              goto append;
2857
2858
          append:
2859
          default:
2860
            if (yyres)
2861
              yyres[yyn] = *yyp;
2862
            yyn++;
2863
            break;
2864
2865
          case '"':
2866
            if (yyres)
2867
              yyres[yyn] = '\0';
2868
            return yyn;
2869
          }
2870
    do_not_strip_quotes: ;
2871
    }
2872
2873
  if (yyres)
2874
    return yystpcpy (yyres, yystr) - yyres;
2875
  else
2876
    return yystrlen (yystr);
2877
}
2878
# endif
2879
2880
/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
2881
   about the unexpected token YYTOKEN for the state stack whose top is
2882
   YYSSP.
2883
2884
   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
2885
   not large enough to hold the message.  In that case, also set
2886
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
2887
   required number of bytes is too large to store.  */
2888
static int
2889
yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
2890
                yy_state_t *yyssp, int yytoken)
2891
{
2892
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
2893
  /* Internationalized format string. */
2894
  const char *yyformat = YY_NULLPTR;
2895
  /* Arguments of yyformat: reported tokens (one for the "unexpected",
2896
     one per "expected"). */
2897
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
2898
  /* Actual size of YYARG. */
2899
  int yycount = 0;
2900
  /* Cumulated lengths of YYARG.  */
2901
  YYPTRDIFF_T yysize = 0;
2902
2903
  /* There are many possibilities here to consider:
2904
     - If this state is a consistent state with a default action, then
2905
       the only way this function was invoked is if the default action
2906
       is an error action.  In that case, don't check for expected
2907
       tokens because there are none.
2908
     - The only way there can be no lookahead present (in yychar) is if
2909
       this state is a consistent state with a default action.  Thus,
2910
       detecting the absence of a lookahead is sufficient to determine
2911
       that there is no unexpected or expected token to report.  In that
2912
       case, just report a simple "syntax error".
2913
     - Don't assume there isn't a lookahead just because this state is a
2914
       consistent state with a default action.  There might have been a
2915
       previous inconsistent state, consistent state with a non-default
2916
       action, or user semantic action that manipulated yychar.
2917
     - Of course, the expected token list depends on states to have
2918
       correct lookahead information, and it depends on the parser not
2919
       to perform extra reductions after fetching a lookahead from the
2920
       scanner and before detecting a syntax error.  Thus, state merging
2921
       (from LALR or IELR) and default reductions corrupt the expected
2922
       token list.  However, the list is correct for canonical LR with
2923
       one exception: it will still contain any token that will not be
2924
       accepted due to an error action in a later state.
2925
  */
2926
  if (yytoken != YYEMPTY)
2927
    {
2928
      int yyn = yypact[+*yyssp];
2929
      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
2930
      yysize = yysize0;
2931
      yyarg[yycount++] = yytname[yytoken];
2932
      if (!yypact_value_is_default (yyn))
2933
        {
2934
          /* Start YYX at -YYN if negative to avoid negative indexes in
2935
             YYCHECK.  In other words, skip the first -YYN actions for
2936
             this state because they are default actions.  */
2937
          int yyxbegin = yyn < 0 ? -yyn : 0;
2938
          /* Stay within bounds of both yycheck and yytname.  */
2939
          int yychecklim = YYLAST - yyn + 1;
2940
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2941
          int yyx;
2942
2943
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2944
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
2945
                && !yytable_value_is_error (yytable[yyx + yyn]))
2946
              {
2947
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
2948
                  {
2949
                    yycount = 1;
2950
                    yysize = yysize0;
2951
                    break;
2952
                  }
2953
                yyarg[yycount++] = yytname[yyx];
2954
                {
2955
                  YYPTRDIFF_T yysize1
2956
                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
2957
                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2958
                    yysize = yysize1;
2959
                  else
2960
                    return 2;
2961
                }
2962
              }
2963
        }
2964
    }
2965
2966
  switch (yycount)
2967
    {
2968
# define YYCASE_(N, S)                      \
2969
      case N:                               \
2970
        yyformat = S;                       \
2971
      break
2972
    default: /* Avoid compiler warnings. */
2973
      YYCASE_(0, YY_("syntax error"));
2974
      YYCASE_(1, YY_("syntax error, unexpected %s"));
2975
      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2976
      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2977
      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2978
      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2979
# undef YYCASE_
2980
    }
2981
2982
  {
2983
    /* Don't count the "%s"s in the final size, but reserve room for
2984
       the terminator.  */
2985
    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
2986
    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
2987
      yysize = yysize1;
2988
    else
2989
      return 2;
2990
  }
2991
2992
  if (*yymsg_alloc < yysize)
2993
    {
2994
      *yymsg_alloc = 2 * yysize;
2995
      if (! (yysize <= *yymsg_alloc
2996
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
2997
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
2998
      return 1;
2999
    }
3000
3001
  /* Avoid sprintf, as that infringes on the user's name space.
3002
     Don't have undefined behavior even if the translation
3003
     produced a string with the wrong number of "%s"s.  */
3004
  {
3005
    char *yyp = *yymsg;
3006
    int yyi = 0;
3007
    while ((*yyp = *yyformat) != '\0')
3008
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
3009
        {
3010
          yyp += yytnamerr (yyp, yyarg[yyi++]);
3011
          yyformat += 2;
3012
        }
3013
      else
3014
        {
3015
          ++yyp;
3016
          ++yyformat;
3017
        }
3018
  }
3019
  return 0;
3020
}
3021
#endif /* YYERROR_VERBOSE */
3022
3023
/*-----------------------------------------------.
3024
| Release the memory associated to this symbol.  |
3025
`-----------------------------------------------*/
3026
3027
static void
3028
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
3029
0
{
3030
0
  YYUSE (yyvaluep);
3031
0
  if (!yymsg)
3032
0
    yymsg = "Deleting";
3033
0
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
3034
3035
0
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
3036
0
  YYUSE (yytype);
3037
0
  YY_IGNORE_MAYBE_UNINITIALIZED_END
3038
0
}
3039
3040
3041
3042
3043
/* The lookahead symbol.  */
3044
int yychar;
3045
3046
/* The semantic value of the lookahead symbol.  */
3047
YYSTYPE yylval;
3048
/* Number of syntax errors so far.  */
3049
int yynerrs;
3050
3051
3052
/*----------.
3053
| yyparse.  |
3054
`----------*/
3055
3056
int
3057
yyparse (void)
3058
0
{
3059
0
    yy_state_fast_t yystate;
3060
    /* Number of tokens to shift before error messages enabled.  */
3061
0
    int yyerrstatus;
3062
3063
    /* The stacks and their tools:
3064
       'yyss': related to states.
3065
       'yyvs': related to semantic values.
3066
3067
       Refer to the stacks through separate pointers, to allow yyoverflow
3068
       to reallocate them elsewhere.  */
3069
3070
    /* The state stack.  */
3071
0
    yy_state_t yyssa[YYINITDEPTH];
3072
0
    yy_state_t *yyss;
3073
0
    yy_state_t *yyssp;
3074
3075
    /* The semantic value stack.  */
3076
0
    YYSTYPE yyvsa[YYINITDEPTH];
3077
0
    YYSTYPE *yyvs;
3078
0
    YYSTYPE *yyvsp;
3079
3080
0
    YYPTRDIFF_T yystacksize;
3081
3082
0
  int yyn;
3083
0
  int yyresult;
3084
  /* Lookahead token as an internal (translated) token number.  */
3085
0
  int yytoken = 0;
3086
  /* The variables used to return semantic value and location from the
3087
     action routines.  */
3088
0
  YYSTYPE yyval;
3089
3090
#if YYERROR_VERBOSE
3091
  /* Buffer for error messages, and its allocated size.  */
3092
  char yymsgbuf[128];
3093
  char *yymsg = yymsgbuf;
3094
  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
3095
#endif
3096
3097
0
#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
3098
3099
  /* The number of symbols on the RHS of the reduced rule.
3100
     Keep to zero when no symbol should be popped.  */
3101
0
  int yylen = 0;
3102
3103
0
  yyssp = yyss = yyssa;
3104
0
  yyvsp = yyvs = yyvsa;
3105
0
  yystacksize = YYINITDEPTH;
3106
3107
0
  YYDPRINTF ((stderr, "Starting parse\n"));
3108
3109
0
  yystate = 0;
3110
0
  yyerrstatus = 0;
3111
0
  yynerrs = 0;
3112
0
  yychar = YYEMPTY; /* Cause a token to be read.  */
3113
0
  goto yysetstate;
3114
3115
3116
/*------------------------------------------------------------.
3117
| yynewstate -- push a new state, which is found in yystate.  |
3118
`------------------------------------------------------------*/
3119
0
yynewstate:
3120
  /* In all cases, when you get here, the value and location stacks
3121
     have just been pushed.  So pushing a state here evens the stacks.  */
3122
0
  yyssp++;
3123
3124
3125
/*--------------------------------------------------------------------.
3126
| yysetstate -- set current state (the top of the stack) to yystate.  |
3127
`--------------------------------------------------------------------*/
3128
0
yysetstate:
3129
0
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3130
0
  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
3131
0
  YY_IGNORE_USELESS_CAST_BEGIN
3132
0
  *yyssp = YY_CAST (yy_state_t, yystate);
3133
0
  YY_IGNORE_USELESS_CAST_END
3134
3135
0
  if (yyss + yystacksize - 1 <= yyssp)
3136
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
3137
    goto yyexhaustedlab;
3138
#else
3139
0
    {
3140
      /* Get the current used size of the three stacks, in elements.  */
3141
0
      YYPTRDIFF_T yysize = yyssp - yyss + 1;
3142
3143
# if defined yyoverflow
3144
      {
3145
        /* Give user a chance to reallocate the stack.  Use copies of
3146
           these so that the &'s don't force the real ones into
3147
           memory.  */
3148
        yy_state_t *yyss1 = yyss;
3149
        YYSTYPE *yyvs1 = yyvs;
3150
3151
        /* Each stack pointer address is followed by the size of the
3152
           data in use in that stack, in bytes.  This used to be a
3153
           conditional around just the two extra args, but that might
3154
           be undefined if yyoverflow is a macro.  */
3155
        yyoverflow (YY_("memory exhausted"),
3156
                    &yyss1, yysize * YYSIZEOF (*yyssp),
3157
                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
3158
                    &yystacksize);
3159
        yyss = yyss1;
3160
        yyvs = yyvs1;
3161
      }
3162
# else /* defined YYSTACK_RELOCATE */
3163
      /* Extend the stack our own way.  */
3164
0
      if (YYMAXDEPTH <= yystacksize)
3165
0
        goto yyexhaustedlab;
3166
0
      yystacksize *= 2;
3167
0
      if (YYMAXDEPTH < yystacksize)
3168
0
        yystacksize = YYMAXDEPTH;
3169
3170
0
      {
3171
0
        yy_state_t *yyss1 = yyss;
3172
0
        union yyalloc *yyptr =
3173
0
          YY_CAST (union yyalloc *,
3174
0
                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
3175
0
        if (! yyptr)
3176
0
          goto yyexhaustedlab;
3177
0
        YYSTACK_RELOCATE (yyss_alloc, yyss);
3178
0
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
3179
0
# undef YYSTACK_RELOCATE
3180
0
        if (yyss1 != yyssa)
3181
0
          YYSTACK_FREE (yyss1);
3182
0
      }
3183
0
# endif
3184
3185
0
      yyssp = yyss + yysize - 1;
3186
0
      yyvsp = yyvs + yysize - 1;
3187
3188
0
      YY_IGNORE_USELESS_CAST_BEGIN
3189
0
      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
3190
0
                  YY_CAST (long, yystacksize)));
3191
0
      YY_IGNORE_USELESS_CAST_END
3192
3193
0
      if (yyss + yystacksize - 1 <= yyssp)
3194
0
        YYABORT;
3195
0
    }
3196
0
#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
3197
3198
0
  if (yystate == YYFINAL)
3199
0
    YYACCEPT;
3200
3201
0
  goto yybackup;
3202
3203
3204
/*-----------.
3205
| yybackup.  |
3206
`-----------*/
3207
0
yybackup:
3208
  /* Do appropriate processing given the current state.  Read a
3209
     lookahead token if we need one and don't already have one.  */
3210
3211
  /* First try to decide what to do without reference to lookahead token.  */
3212
0
  yyn = yypact[yystate];
3213
0
  if (yypact_value_is_default (yyn))
3214
0
    goto yydefault;
3215
3216
  /* Not known => get a lookahead token if don't already have one.  */
3217
3218
  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
3219
0
  if (yychar == YYEMPTY)
3220
0
    {
3221
0
      YYDPRINTF ((stderr, "Reading a token: "));
3222
0
      yychar = yylex ();
3223
0
    }
3224
3225
0
  if (yychar <= YYEOF)
3226
0
    {
3227
0
      yychar = yytoken = YYEOF;
3228
0
      YYDPRINTF ((stderr, "Now at end of input.\n"));
3229
0
    }
3230
0
  else
3231
0
    {
3232
0
      yytoken = YYTRANSLATE (yychar);
3233
0
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3234
0
    }
3235
3236
  /* If the proper action on seeing token YYTOKEN is to reduce or to
3237
     detect an error, take that action.  */
3238
0
  yyn += yytoken;
3239
0
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3240
0
    goto yydefault;
3241
0
  yyn = yytable[yyn];
3242
0
  if (yyn <= 0)
3243
0
    {
3244
0
      if (yytable_value_is_error (yyn))
3245
0
        goto yyerrlab;
3246
0
      yyn = -yyn;
3247
0
      goto yyreduce;
3248
0
    }
3249
3250
  /* Count tokens shifted since error; after three, turn off error
3251
     status.  */
3252
0
  if (yyerrstatus)
3253
0
    yyerrstatus--;
3254
3255
  /* Shift the lookahead token.  */
3256
0
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
3257
0
  yystate = yyn;
3258
0
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
3259
0
  *++yyvsp = yylval;
3260
0
  YY_IGNORE_MAYBE_UNINITIALIZED_END
3261
3262
  /* Discard the shifted token.  */
3263
0
  yychar = YYEMPTY;
3264
0
  goto yynewstate;
3265
3266
3267
/*-----------------------------------------------------------.
3268
| yydefault -- do the default action for the current state.  |
3269
`-----------------------------------------------------------*/
3270
0
yydefault:
3271
0
  yyn = yydefact[yystate];
3272
0
  if (yyn == 0)
3273
0
    goto yyerrlab;
3274
0
  goto yyreduce;
3275
3276
3277
/*-----------------------------.
3278
| yyreduce -- do a reduction.  |
3279
`-----------------------------*/
3280
0
yyreduce:
3281
  /* yyn is the number of a rule to reduce with.  */
3282
0
  yylen = yyr2[yyn];
3283
3284
  /* If YYLEN is nonzero, implement the default value of the action:
3285
     '$$ = $1'.
3286
3287
     Otherwise, the following line sets YYVAL to garbage.
3288
     This behavior is undocumented and Bison
3289
     users should not rely upon it.  Assigning to YYVAL
3290
     unconditionally makes the parser a bit smaller, and it avoids a
3291
     GCC warning that YYVAL may be used uninitialized.  */
3292
0
  yyval = yyvsp[1-yylen];
3293
3294
3295
0
  YY_REDUCE_PRINT (yyn);
3296
0
  switch (yyn)
3297
0
    {
3298
0
  case 18:
3299
0
#line 232 "./util/configparser.y"
3300
0
        {
3301
0
    OUTYY(("\nP(force-toplevel)\n"));
3302
0
    cfg_parser->started_toplevel = 0;
3303
0
  }
3304
0
#line 3305 "util/configparser.c"
3305
0
    break;
3306
3307
0
  case 19:
3308
0
#line 239 "./util/configparser.y"
3309
0
        {
3310
0
    OUTYY(("\nP(server:)\n"));
3311
0
    cfg_parser->started_toplevel = 1;
3312
0
  }
3313
0
#line 3314 "util/configparser.c"
3314
0
    break;
3315
3316
0
  case 283:
3317
0
#line 365 "./util/configparser.y"
3318
0
        {
3319
    /* stub end */
3320
0
    if(cfg_parser->cfg->stubs &&
3321
0
      !cfg_parser->cfg->stubs->name)
3322
0
      yyerror("stub-zone without name");
3323
0
  }
3324
0
#line 3325 "util/configparser.c"
3325
0
    break;
3326
3327
0
  case 284:
3328
0
#line 373 "./util/configparser.y"
3329
0
        {
3330
0
    struct config_stub* s;
3331
0
    OUTYY(("\nP(stub_zone:)\n"));
3332
0
    cfg_parser->started_toplevel = 1;
3333
0
    s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
3334
0
    if(s) {
3335
0
      s->next = cfg_parser->cfg->stubs;
3336
0
      cfg_parser->cfg->stubs = s;
3337
0
    } else {
3338
0
      yyerror("out of memory");
3339
0
    }
3340
0
  }
3341
0
#line 3342 "util/configparser.c"
3342
0
    break;
3343
3344
0
  case 295:
3345
0
#line 392 "./util/configparser.y"
3346
0
        {
3347
    /* forward end */
3348
0
    if(cfg_parser->cfg->forwards &&
3349
0
      !cfg_parser->cfg->forwards->name)
3350
0
      yyerror("forward-zone without name");
3351
0
  }
3352
0
#line 3353 "util/configparser.c"
3353
0
    break;
3354
3355
0
  case 296:
3356
0
#line 400 "./util/configparser.y"
3357
0
        {
3358
0
    struct config_stub* s;
3359
0
    OUTYY(("\nP(forward_zone:)\n"));
3360
0
    cfg_parser->started_toplevel = 1;
3361
0
    s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
3362
0
    if(s) {
3363
0
      s->next = cfg_parser->cfg->forwards;
3364
0
      cfg_parser->cfg->forwards = s;
3365
0
    } else {
3366
0
      yyerror("out of memory");
3367
0
    }
3368
0
  }
3369
0
#line 3370 "util/configparser.c"
3370
0
    break;
3371
3372
0
  case 306:
3373
0
#line 419 "./util/configparser.y"
3374
0
        {
3375
    /* view end */
3376
0
    if(cfg_parser->cfg->views &&
3377
0
      !cfg_parser->cfg->views->name)
3378
0
      yyerror("view without name");
3379
0
  }
3380
0
#line 3381 "util/configparser.c"
3381
0
    break;
3382
3383
0
  case 307:
3384
0
#line 427 "./util/configparser.y"
3385
0
        {
3386
0
    struct config_view* s;
3387
0
    OUTYY(("\nP(view:)\n"));
3388
0
    cfg_parser->started_toplevel = 1;
3389
0
    s = (struct config_view*)calloc(1, sizeof(struct config_view));
3390
0
    if(s) {
3391
0
      s->next = cfg_parser->cfg->views;
3392
0
      cfg_parser->cfg->views = s;
3393
0
    } else {
3394
0
      yyerror("out of memory");
3395
0
    }
3396
0
  }
3397
0
#line 3398 "util/configparser.c"
3398
0
    break;
3399
3400
0
  case 317:
3401
0
#line 446 "./util/configparser.y"
3402
0
        {
3403
0
    struct config_auth* s;
3404
0
    OUTYY(("\nP(auth_zone:)\n"));
3405
0
    cfg_parser->started_toplevel = 1;
3406
0
    s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
3407
0
    if(s) {
3408
0
      s->next = cfg_parser->cfg->auths;
3409
0
      cfg_parser->cfg->auths = s;
3410
      /* defaults for auth zone */
3411
0
      s->for_downstream = 1;
3412
0
      s->for_upstream = 1;
3413
0
      s->fallback_enabled = 0;
3414
0
      s->zonemd_check = 0;
3415
0
      s->zonemd_reject_absence = 0;
3416
0
      s->isrpz = 0;
3417
0
    } else {
3418
0
      yyerror("out of memory");
3419
0
    }
3420
0
  }
3421
0
#line 3422 "util/configparser.c"
3422
0
    break;
3423
3424
0
  case 330:
3425
0
#line 474 "./util/configparser.y"
3426
0
        {
3427
0
    uint8_t* bitlist;
3428
0
    size_t len = 0;
3429
0
    OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
3430
0
    bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
3431
0
      &len);
3432
0
    free((yyvsp[0].str));
3433
0
    if(!bitlist) {
3434
0
      yyerror("could not parse tags, (define-tag them first)");
3435
0
    }
3436
0
    if(bitlist) {
3437
0
      cfg_parser->cfg->auths->rpz_taglist = bitlist;
3438
0
      cfg_parser->cfg->auths->rpz_taglistlen = len;
3439
3440
0
    }
3441
0
  }
3442
0
#line 3443 "util/configparser.c"
3443
0
    break;
3444
3445
0
  case 331:
3446
0
#line 493 "./util/configparser.y"
3447
0
        {
3448
0
    OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
3449
0
    if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
3450
0
       strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 &&
3451
0
       strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) {
3452
0
      yyerror("rpz-action-override action: expected nxdomain, "
3453
0
        "nodata, passthru, drop, cname or disabled");
3454
0
      free((yyvsp[0].str));
3455
0
      cfg_parser->cfg->auths->rpz_action_override = NULL;
3456
0
    }
3457
0
    else {
3458
0
      cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
3459
0
    }
3460
0
  }
3461
0
#line 3462 "util/configparser.c"
3462
0
    break;
3463
3464
0
  case 332:
3465
0
#line 510 "./util/configparser.y"
3466
0
        {
3467
0
    OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
3468
0
    free(cfg_parser->cfg->auths->rpz_cname);
3469
0
    cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
3470
0
  }
3471
0
#line 3472 "util/configparser.c"
3472
0
    break;
3473
3474
0
  case 333:
3475
0
#line 518 "./util/configparser.y"
3476
0
        {
3477
0
    OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
3478
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3479
0
      yyerror("expected yes or no.");
3480
0
    else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
3481
0
    free((yyvsp[0].str));
3482
0
  }
3483
0
#line 3484 "util/configparser.c"
3484
0
    break;
3485
3486
0
  case 334:
3487
0
#line 528 "./util/configparser.y"
3488
0
        {
3489
0
    OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
3490
0
    free(cfg_parser->cfg->auths->rpz_log_name);
3491
0
    cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
3492
0
  }
3493
0
#line 3494 "util/configparser.c"
3494
0
    break;
3495
3496
0
  case 335:
3497
0
#line 535 "./util/configparser.y"
3498
0
        {
3499
0
    OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str)));
3500
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3501
0
      yyerror("expected yes or no.");
3502
0
    else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
3503
0
    free((yyvsp[0].str));
3504
0
  }
3505
0
#line 3506 "util/configparser.c"
3506
0
    break;
3507
3508
0
  case 336:
3509
0
#line 545 "./util/configparser.y"
3510
0
        {
3511
0
    struct config_auth* s;
3512
0
    OUTYY(("\nP(rpz:)\n"));
3513
0
    cfg_parser->started_toplevel = 1;
3514
0
    s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
3515
0
    if(s) {
3516
0
      s->next = cfg_parser->cfg->auths;
3517
0
      cfg_parser->cfg->auths = s;
3518
      /* defaults for RPZ auth zone */
3519
0
      s->for_downstream = 0;
3520
0
      s->for_upstream = 0;
3521
0
      s->fallback_enabled = 0;
3522
0
      s->isrpz = 1;
3523
0
    } else {
3524
0
      yyerror("out of memory");
3525
0
    }
3526
0
  }
3527
0
#line 3528 "util/configparser.c"
3528
0
    break;
3529
3530
0
  case 351:
3531
0
#line 570 "./util/configparser.y"
3532
0
        {
3533
0
    OUTYY(("P(server_num_threads:%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->num_threads = 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 579 "./util/configparser.y"
3544
0
        {
3545
0
    OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
3546
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3547
0
      yyerror("number expected");
3548
0
    else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
3549
0
    free((yyvsp[0].str));
3550
0
  }
3551
0
#line 3552 "util/configparser.c"
3552
0
    break;
3553
3554
0
  case 353:
3555
0
#line 588 "./util/configparser.y"
3556
0
        {
3557
0
    OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
3558
0
    if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3559
0
      cfg_parser->cfg->stat_interval = 0;
3560
0
    else if(atoi((yyvsp[0].str)) == 0)
3561
0
      yyerror("number expected");
3562
0
    else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
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 599 "./util/configparser.y"
3570
0
        {
3571
0
    OUTYY(("P(server_statistics_cumulative:%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_cumulative = (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 608 "./util/configparser.y"
3582
0
        {
3583
0
    OUTYY(("P(server_extended_statistics:%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_extended = (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 617 "./util/configparser.y"
3594
0
        {
3595
0
    OUTYY(("P(server_statistics_inhibit_zero:%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->stat_inhibit_zero = (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 626 "./util/configparser.y"
3606
0
        {
3607
0
    OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
3608
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3609
0
      yyerror("expected yes or no.");
3610
0
    else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
3611
0
    free((yyvsp[0].str));
3612
0
  }
3613
0
#line 3614 "util/configparser.c"
3614
0
    break;
3615
3616
0
  case 358:
3617
0
#line 635 "./util/configparser.y"
3618
0
        {
3619
0
    OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
3620
0
    if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3621
0
      cfg_parser->cfg->shm_key = 0;
3622
0
    else if(atoi((yyvsp[0].str)) == 0)
3623
0
      yyerror("number expected");
3624
0
    else cfg_parser->cfg->shm_key = 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 646 "./util/configparser.y"
3632
0
        {
3633
0
    OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
3634
0
    if(atoi((yyvsp[0].str)) == 0)
3635
0
      yyerror("port number expected");
3636
0
    else cfg_parser->cfg->port = atoi((yyvsp[0].str));
3637
0
    free((yyvsp[0].str));
3638
0
  }
3639
0
#line 3640 "util/configparser.c"
3640
0
    break;
3641
3642
0
  case 360:
3643
0
#line 655 "./util/configparser.y"
3644
0
        {
3645
  #ifdef CLIENT_SUBNET
3646
    OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
3647
    if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
3648
      fatal_exit("out of memory adding client-subnet");
3649
  #else
3650
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3651
0
    free((yyvsp[0].str));
3652
0
  #endif
3653
0
  }
3654
0
#line 3655 "util/configparser.c"
3655
0
    break;
3656
3657
0
  case 361:
3658
0
#line 667 "./util/configparser.y"
3659
0
        {
3660
  #ifdef CLIENT_SUBNET
3661
    OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
3662
    if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
3663
      (yyvsp[0].str)))
3664
      fatal_exit("out of memory adding client-subnet-zone");
3665
  #else
3666
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3667
0
    free((yyvsp[0].str));
3668
0
  #endif
3669
0
  }
3670
0
#line 3671 "util/configparser.c"
3671
0
    break;
3672
3673
0
  case 362:
3674
0
#line 681 "./util/configparser.y"
3675
0
        {
3676
  #ifdef CLIENT_SUBNET
3677
    OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
3678
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3679
      yyerror("expected yes or no.");
3680
    else
3681
      cfg_parser->cfg->client_subnet_always_forward =
3682
        (strcmp((yyvsp[0].str), "yes")==0);
3683
  #else
3684
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3685
0
  #endif
3686
0
    free((yyvsp[0].str));
3687
0
  }
3688
0
#line 3689 "util/configparser.c"
3689
0
    break;
3690
3691
0
  case 363:
3692
0
#line 696 "./util/configparser.y"
3693
0
        {
3694
  #ifdef CLIENT_SUBNET
3695
    OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
3696
    OUTYY(("P(Deprecated option, ignoring)\n"));
3697
  #else
3698
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3699
0
  #endif
3700
0
    free((yyvsp[0].str));
3701
0
  }
3702
0
#line 3703 "util/configparser.c"
3703
0
    break;
3704
3705
0
  case 364:
3706
0
#line 707 "./util/configparser.y"
3707
0
        {
3708
  #ifdef CLIENT_SUBNET
3709
    OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3710
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3711
      yyerror("IPv4 subnet length expected");
3712
    else if (atoi((yyvsp[0].str)) > 32)
3713
      cfg_parser->cfg->max_client_subnet_ipv4 = 32;
3714
    else if (atoi((yyvsp[0].str)) < 0)
3715
      cfg_parser->cfg->max_client_subnet_ipv4 = 0;
3716
    else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3717
  #else
3718
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3719
0
  #endif
3720
0
    free((yyvsp[0].str));
3721
0
  }
3722
0
#line 3723 "util/configparser.c"
3723
0
    break;
3724
3725
0
  case 365:
3726
0
#line 724 "./util/configparser.y"
3727
0
        {
3728
  #ifdef CLIENT_SUBNET
3729
    OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3730
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3731
      yyerror("Ipv6 subnet length expected");
3732
    else if (atoi((yyvsp[0].str)) > 128)
3733
      cfg_parser->cfg->max_client_subnet_ipv6 = 128;
3734
    else if (atoi((yyvsp[0].str)) < 0)
3735
      cfg_parser->cfg->max_client_subnet_ipv6 = 0;
3736
    else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3737
  #else
3738
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3739
0
  #endif
3740
0
    free((yyvsp[0].str));
3741
0
  }
3742
0
#line 3743 "util/configparser.c"
3743
0
    break;
3744
3745
0
  case 366:
3746
0
#line 741 "./util/configparser.y"
3747
0
        {
3748
  #ifdef CLIENT_SUBNET
3749
    OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3750
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3751
      yyerror("IPv4 subnet length expected");
3752
    else if (atoi((yyvsp[0].str)) > 32)
3753
      cfg_parser->cfg->min_client_subnet_ipv4 = 32;
3754
    else if (atoi((yyvsp[0].str)) < 0)
3755
      cfg_parser->cfg->min_client_subnet_ipv4 = 0;
3756
    else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3757
  #else
3758
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3759
0
  #endif
3760
0
    free((yyvsp[0].str));
3761
0
  }
3762
0
#line 3763 "util/configparser.c"
3763
0
    break;
3764
3765
0
  case 367:
3766
0
#line 758 "./util/configparser.y"
3767
0
        {
3768
  #ifdef CLIENT_SUBNET
3769
    OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3770
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3771
      yyerror("Ipv6 subnet length expected");
3772
    else if (atoi((yyvsp[0].str)) > 128)
3773
      cfg_parser->cfg->min_client_subnet_ipv6 = 128;
3774
    else if (atoi((yyvsp[0].str)) < 0)
3775
      cfg_parser->cfg->min_client_subnet_ipv6 = 0;
3776
    else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3777
  #else
3778
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3779
0
  #endif
3780
0
    free((yyvsp[0].str));
3781
0
  }
3782
0
#line 3783 "util/configparser.c"
3783
0
    break;
3784
3785
0
  case 368:
3786
0
#line 775 "./util/configparser.y"
3787
0
        {
3788
  #ifdef CLIENT_SUBNET
3789
    OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
3790
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3791
      yyerror("IPv4 ECS tree size expected");
3792
    else if (atoi((yyvsp[0].str)) < 0)
3793
      cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
3794
    else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str));
3795
  #else
3796
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3797
0
  #endif
3798
0
    free((yyvsp[0].str));
3799
0
  }
3800
0
#line 3801 "util/configparser.c"
3801
0
    break;
3802
3803
0
  case 369:
3804
0
#line 790 "./util/configparser.y"
3805
0
        {
3806
  #ifdef CLIENT_SUBNET
3807
    OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
3808
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3809
      yyerror("IPv6 ECS tree size expected");
3810
    else if (atoi((yyvsp[0].str)) < 0)
3811
      cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
3812
    else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str));
3813
  #else
3814
0
    OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3815
0
  #endif
3816
0
    free((yyvsp[0].str));
3817
0
  }
3818
0
#line 3819 "util/configparser.c"
3819
0
    break;
3820
3821
0
  case 370:
3822
0
#line 805 "./util/configparser.y"
3823
0
        {
3824
0
    OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
3825
0
    if(cfg_parser->cfg->num_ifs == 0)
3826
0
      cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
3827
0
    else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
3828
0
        (cfg_parser->cfg->num_ifs+1)*sizeof(char*));
3829
0
    if(!cfg_parser->cfg->ifs)
3830
0
      yyerror("out of memory");
3831
0
    else
3832
0
      cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
3833
0
  }
3834
0
#line 3835 "util/configparser.c"
3835
0
    break;
3836
3837
0
  case 371:
3838
0
#line 818 "./util/configparser.y"
3839
0
        {
3840
0
    OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
3841
0
    if(cfg_parser->cfg->num_out_ifs == 0)
3842
0
      cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
3843
0
    else cfg_parser->cfg->out_ifs = realloc(
3844
0
      cfg_parser->cfg->out_ifs,
3845
0
      (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
3846
0
    if(!cfg_parser->cfg->out_ifs)
3847
0
      yyerror("out of memory");
3848
0
    else
3849
0
      cfg_parser->cfg->out_ifs[
3850
0
        cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
3851
0
  }
3852
0
#line 3853 "util/configparser.c"
3853
0
    break;
3854
3855
0
  case 372:
3856
0
#line 833 "./util/configparser.y"
3857
0
        {
3858
0
    OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
3859
0
    if(atoi((yyvsp[0].str)) == 0)
3860
0
      yyerror("number expected");
3861
0
    else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
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 842 "./util/configparser.y"
3869
0
        {
3870
0
    OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
3871
0
    if(!cfg_mark_ports((yyvsp[0].str), 1,
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 851 "./util/configparser.y"
3881
0
        {
3882
0
    OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
3883
0
    if(!cfg_mark_ports((yyvsp[0].str), 0,
3884
0
      cfg_parser->cfg->outgoing_avail_ports, 65536))
3885
0
      yyerror("port number or range (\"low-high\") expected");
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 860 "./util/configparser.y"
3893
0
        {
3894
0
    OUTYY(("P(server_outgoing_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->outgoing_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 869 "./util/configparser.y"
3905
0
        {
3906
0
    OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
3907
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3908
0
      yyerror("number expected");
3909
0
    else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
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 878 "./util/configparser.y"
3917
0
        {
3918
0
    OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
3919
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3920
0
      yyerror("expected yes or no.");
3921
0
    else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
3922
0
    free((yyvsp[0].str));
3923
0
  }
3924
0
#line 3925 "util/configparser.c"
3925
0
    break;
3926
3927
0
  case 378:
3928
0
#line 887 "./util/configparser.y"
3929
0
        {
3930
0
    OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str)));
3931
0
    free(cfg_parser->cfg->if_automatic_ports);
3932
0
    cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str);
3933
0
  }
3934
0
#line 3935 "util/configparser.c"
3935
0
    break;
3936
3937
0
  case 379:
3938
0
#line 894 "./util/configparser.y"
3939
0
        {
3940
0
    OUTYY(("P(server_do_ip4:%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_ip4 = (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 903 "./util/configparser.y"
3951
0
        {
3952
0
    OUTYY(("P(server_do_ip6:%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_ip6 = (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 912 "./util/configparser.y"
3963
0
        {
3964
0
    OUTYY(("P(server_do_nat64:%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_nat64 = (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 921 "./util/configparser.y"
3975
0
        {
3976
0
    OUTYY(("P(server_do_udp:%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_udp = (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 930 "./util/configparser.y"
3987
0
        {
3988
0
    OUTYY(("P(server_do_tcp:%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->do_tcp = (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 939 "./util/configparser.y"
3999
0
        {
4000
0
    OUTYY(("P(server_prefer_ip4:%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_ip4 = (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 948 "./util/configparser.y"
4011
0
        {
4012
0
    OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
4013
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4014
0
      yyerror("expected yes or no.");
4015
0
    else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
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 957 "./util/configparser.y"
4023
0
        {
4024
0
    OUTYY(("P(server_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->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 966 "./util/configparser.y"
4035
0
        {
4036
0
    OUTYY(("P(server_outgoing_tcp_mss:%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 cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
4040
0
    free((yyvsp[0].str));
4041
0
  }
4042
0
#line 4043 "util/configparser.c"
4043
0
    break;
4044
4045
0
  case 388:
4046
0
#line 975 "./util/configparser.y"
4047
0
        {
4048
0
    OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
4049
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4050
0
      yyerror("number expected");
4051
0
    else if (atoi((yyvsp[0].str)) > 120000)
4052
0
      cfg_parser->cfg->tcp_idle_timeout = 120000;
4053
0
    else if (atoi((yyvsp[0].str)) < 1)
4054
0
      cfg_parser->cfg->tcp_idle_timeout = 1;
4055
0
    else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
4056
0
    free((yyvsp[0].str));
4057
0
  }
4058
0
#line 4059 "util/configparser.c"
4059
0
    break;
4060
4061
0
  case 389:
4062
0
#line 988 "./util/configparser.y"
4063
0
        {
4064
0
    OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str)));
4065
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4066
0
      yyerror("number expected");
4067
0
    else if (atoi((yyvsp[0].str)) < 1)
4068
0
      cfg_parser->cfg->max_reuse_tcp_queries = 0;
4069
0
    else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
4070
0
    free((yyvsp[0].str));
4071
0
  }
4072
0
#line 4073 "util/configparser.c"
4073
0
    break;
4074
4075
0
  case 390:
4076
0
#line 999 "./util/configparser.y"
4077
0
        {
4078
0
    OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str)));
4079
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4080
0
      yyerror("number expected");
4081
0
    else if (atoi((yyvsp[0].str)) < 1)
4082
0
      cfg_parser->cfg->tcp_reuse_timeout = 0;
4083
0
    else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
4084
0
    free((yyvsp[0].str));
4085
0
  }
4086
0
#line 4087 "util/configparser.c"
4087
0
    break;
4088
4089
0
  case 391:
4090
0
#line 1010 "./util/configparser.y"
4091
0
        {
4092
0
    OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str)));
4093
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4094
0
      yyerror("number expected");
4095
0
    else if (atoi((yyvsp[0].str)) < 1)
4096
0
      cfg_parser->cfg->tcp_auth_query_timeout = 0;
4097
0
    else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
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 1021 "./util/configparser.y"
4105
0
        {
4106
0
    OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
4107
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4108
0
      yyerror("expected yes or no.");
4109
0
    else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
4110
0
    free((yyvsp[0].str));
4111
0
  }
4112
0
#line 4113 "util/configparser.c"
4113
0
    break;
4114
4115
0
  case 393:
4116
0
#line 1030 "./util/configparser.y"
4117
0
        {
4118
0
    OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
4119
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4120
0
      yyerror("number expected");
4121
0
    else if (atoi((yyvsp[0].str)) > 6553500)
4122
0
      cfg_parser->cfg->tcp_keepalive_timeout = 6553500;
4123
0
    else if (atoi((yyvsp[0].str)) < 1)
4124
0
      cfg_parser->cfg->tcp_keepalive_timeout = 0;
4125
0
    else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
4126
0
    free((yyvsp[0].str));
4127
0
  }
4128
0
#line 4129 "util/configparser.c"
4129
0
    break;
4130
4131
0
  case 394:
4132
0
#line 1043 "./util/configparser.y"
4133
0
        {
4134
0
    OUTYY(("P(server_sock_queue_timeout:%s)\n", (yyvsp[0].str)));
4135
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4136
0
      yyerror("number expected");
4137
0
    else if (atoi((yyvsp[0].str)) > 6553500)
4138
0
      cfg_parser->cfg->sock_queue_timeout = 6553500;
4139
0
    else if (atoi((yyvsp[0].str)) < 1)
4140
0
      cfg_parser->cfg->sock_queue_timeout = 0;
4141
0
    else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str));
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 1056 "./util/configparser.y"
4149
0
        {
4150
0
    OUTYY(("P(server_tcp_upstream:%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->tcp_upstream = (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 1065 "./util/configparser.y"
4161
0
        {
4162
0
    OUTYY(("P(server_udp_upstream_without_downstream:%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->udp_upstream_without_downstream = (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 1074 "./util/configparser.y"
4173
0
        {
4174
0
    OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
4175
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4176
0
      yyerror("expected yes or no.");
4177
0
    else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
4178
0
    free((yyvsp[0].str));
4179
0
  }
4180
0
#line 4181 "util/configparser.c"
4181
0
    break;
4182
4183
0
  case 398:
4184
0
#line 1083 "./util/configparser.y"
4185
0
        {
4186
0
    OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
4187
0
    free(cfg_parser->cfg->ssl_service_key);
4188
0
    cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
4189
0
  }
4190
0
#line 4191 "util/configparser.c"
4191
0
    break;
4192
4193
0
  case 399:
4194
0
#line 1090 "./util/configparser.y"
4195
0
        {
4196
0
    OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
4197
0
    free(cfg_parser->cfg->ssl_service_pem);
4198
0
    cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
4199
0
  }
4200
0
#line 4201 "util/configparser.c"
4201
0
    break;
4202
4203
0
  case 400:
4204
0
#line 1097 "./util/configparser.y"
4205
0
        {
4206
0
    OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
4207
0
    if(atoi((yyvsp[0].str)) == 0)
4208
0
      yyerror("port number expected");
4209
0
    else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
4210
0
    free((yyvsp[0].str));
4211
0
  }
4212
0
#line 4213 "util/configparser.c"
4213
0
    break;
4214
4215
0
  case 401:
4216
0
#line 1106 "./util/configparser.y"
4217
0
        {
4218
0
    OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
4219
0
    free(cfg_parser->cfg->tls_cert_bundle);
4220
0
    cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
4221
0
  }
4222
0
#line 4223 "util/configparser.c"
4223
0
    break;
4224
4225
0
  case 402:
4226
0
#line 1113 "./util/configparser.y"
4227
0
        {
4228
0
    OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
4229
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4230
0
      yyerror("expected yes or no.");
4231
0
    else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
4232
0
    free((yyvsp[0].str));
4233
0
  }
4234
0
#line 4235 "util/configparser.c"
4235
0
    break;
4236
4237
0
  case 403:
4238
0
#line 1122 "./util/configparser.y"
4239
0
        {
4240
0
    OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
4241
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
4242
0
      (yyvsp[0].str)))
4243
0
      yyerror("out of memory");
4244
0
  }
4245
0
#line 4246 "util/configparser.c"
4246
0
    break;
4247
4248
0
  case 404:
4249
0
#line 1130 "./util/configparser.y"
4250
0
        {
4251
0
    OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
4252
0
    free(cfg_parser->cfg->tls_ciphers);
4253
0
    cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
4254
0
  }
4255
0
#line 4256 "util/configparser.c"
4256
0
    break;
4257
4258
0
  case 405:
4259
0
#line 1137 "./util/configparser.y"
4260
0
        {
4261
0
    OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
4262
0
    free(cfg_parser->cfg->tls_ciphersuites);
4263
0
    cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
4264
0
  }
4265
0
#line 4266 "util/configparser.c"
4266
0
    break;
4267
4268
0
  case 406:
4269
0
#line 1144 "./util/configparser.y"
4270
0
        {
4271
0
    OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
4272
0
    if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
4273
0
      (yyvsp[0].str)))
4274
0
      yyerror("out of memory");
4275
0
  }
4276
0
#line 4277 "util/configparser.c"
4277
0
    break;
4278
4279
0
  case 407:
4280
0
#line 1152 "./util/configparser.y"
4281
0
        {
4282
0
    OUTYY(("P(server_tls_use_sni:%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_sni = (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 1161 "./util/configparser.y"
4293
0
        {
4294
0
    OUTYY(("P(server_tls_use_system_policy_versions:%s)\n", (yyvsp[0].str)));
4295
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4296
0
      yyerror("expected yes or no.");
4297
0
    else cfg_parser->cfg->tls_use_system_policy_versions = (strcmp((yyvsp[0].str), "yes")==0);
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 1170 "./util/configparser.y"
4305
0
        {
4306
0
    OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
4307
0
    if(atoi((yyvsp[0].str)) == 0)
4308
0
      yyerror("port number expected");
4309
0
    else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
4310
0
    free((yyvsp[0].str));
4311
0
  }
4312
0
#line 4313 "util/configparser.c"
4313
0
    break;
4314
4315
0
  case 410:
4316
0
#line 1178 "./util/configparser.y"
4317
0
        {
4318
0
    OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
4319
0
    free(cfg_parser->cfg->http_endpoint);
4320
0
    if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') {
4321
0
      cfg_parser->cfg->http_endpoint = malloc(strlen((yyvsp[0].str))+2);
4322
0
      if(cfg_parser->cfg->http_endpoint) {
4323
0
        cfg_parser->cfg->http_endpoint[0] = '/';
4324
0
        memmove(cfg_parser->cfg->http_endpoint+1, (yyvsp[0].str),
4325
0
          strlen((yyvsp[0].str))+1);
4326
0
      } else {
4327
0
        yyerror("out of memory");
4328
0
      }
4329
0
      free((yyvsp[0].str));
4330
0
    } else {
4331
0
      cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
4332
0
    }
4333
0
  }
4334
0
#line 4335 "util/configparser.c"
4335
0
    break;
4336
4337
0
  case 411:
4338
0
#line 1196 "./util/configparser.y"
4339
0
        {
4340
0
    OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
4341
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4342
0
      yyerror("number expected");
4343
0
    else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
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 1204 "./util/configparser.y"
4351
0
        {
4352
0
    OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
4353
0
    if(!cfg_parse_memsize((yyvsp[0].str),
4354
0
      &cfg_parser->cfg->http_query_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 1212 "./util/configparser.y"
4363
0
        {
4364
0
    OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
4365
0
    if(!cfg_parse_memsize((yyvsp[0].str),
4366
0
      &cfg_parser->cfg->http_response_buffer_size))
4367
0
      yyerror("memory size expected");
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 1220 "./util/configparser.y"
4375
0
        {
4376
0
    OUTYY(("P(server_http_nodelay:%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_nodelay = (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 1228 "./util/configparser.y"
4387
0
        {
4388
0
    OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
4389
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4390
0
      yyerror("expected yes or no.");
4391
0
    else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
4392
0
    free((yyvsp[0].str));
4393
0
  }
4394
0
#line 4395 "util/configparser.c"
4395
0
    break;
4396
4397
0
  case 416:
4398
0
#line 1236 "./util/configparser.y"
4399
0
        {
4400
0
    OUTYY(("P(server_quic_port:%s)\n", (yyvsp[0].str)));
4401
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str),"0")!=0)
4402
0
      yyerror("port number expected");
4403
0
    else {
4404
0
      cfg_parser->cfg->quic_port = atoi((yyvsp[0].str));
4405
0
#ifndef HAVE_NGTCP2
4406
0
      if (cfg_parser->cfg->quic_port != 0)
4407
0
        log_warn("%s:%d: Unbound is not compiled with "
4408
0
          "ngtcp2. This is required to use DNS "
4409
0
          "over QUIC.", cfg_parser->filename, cfg_parser->line);
4410
0
#endif
4411
0
    }
4412
0
    free((yyvsp[0].str));
4413
0
  }
4414
0
#line 4415 "util/configparser.c"
4415
0
    break;
4416
4417
0
  case 417:
4418
0
#line 1252 "./util/configparser.y"
4419
0
        {
4420
0
    OUTYY(("P(server_quic_size:%s)\n", (yyvsp[0].str)));
4421
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->quic_size))
4422
0
      yyerror("memory size expected");
4423
0
    free((yyvsp[0].str));
4424
0
  }
4425
0
#line 4426 "util/configparser.c"
4426
0
    break;
4427
4428
0
  case 418:
4429
0
#line 1259 "./util/configparser.y"
4430
0
        {
4431
0
    OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
4432
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4433
0
      yyerror("expected yes or no.");
4434
0
    else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
4435
0
    free((yyvsp[0].str));
4436
0
  }
4437
0
#line 4438 "util/configparser.c"
4438
0
    break;
4439
4440
0
  case 419:
4441
0
#line 1268 "./util/configparser.y"
4442
0
        {
4443
0
    OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
4444
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4445
0
      yyerror("expected yes or no.");
4446
0
    else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
4447
0
    free((yyvsp[0].str));
4448
0
  }
4449
0
#line 4450 "util/configparser.c"
4450
0
    break;
4451
4452
0
  case 420:
4453
0
#line 1277 "./util/configparser.y"
4454
0
        {
4455
0
    OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
4456
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4457
0
      yyerror("expected yes or no.");
4458
0
    else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0);
4459
#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
4460
    if(strcmp((yyvsp[0].str), "yes") == 0)
4461
      yyerror("no syslog services are available. "
4462
        "(reconfigure and compile to add)");
4463
#endif
4464
0
    free((yyvsp[0].str));
4465
0
  }
4466
0
#line 4467 "util/configparser.c"
4467
0
    break;
4468
4469
0
  case 421:
4470
0
#line 1291 "./util/configparser.y"
4471
0
        {
4472
0
    OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
4473
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4474
0
      yyerror("expected yes or no.");
4475
0
    else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
4476
0
    free((yyvsp[0].str));
4477
0
  }
4478
0
#line 4479 "util/configparser.c"
4479
0
    break;
4480
4481
0
  case 422:
4482
0
#line 1300 "./util/configparser.y"
4483
0
        {
4484
0
    OUTYY(("P(server_log_time_iso:%s)\n", (yyvsp[0].str)));
4485
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4486
0
      yyerror("expected yes or no.");
4487
0
    else cfg_parser->cfg->log_time_iso = (strcmp((yyvsp[0].str), "yes")==0);
4488
0
    free((yyvsp[0].str));
4489
0
  }
4490
0
#line 4491 "util/configparser.c"
4491
0
    break;
4492
4493
0
  case 423:
4494
0
#line 1309 "./util/configparser.y"
4495
0
        {
4496
0
    OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
4497
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4498
0
      yyerror("expected yes or no.");
4499
0
    else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
4500
0
    free((yyvsp[0].str));
4501
0
  }
4502
0
#line 4503 "util/configparser.c"
4503
0
    break;
4504
4505
0
  case 424:
4506
0
#line 1318 "./util/configparser.y"
4507
0
        {
4508
0
    OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
4509
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4510
0
      yyerror("expected yes or no.");
4511
0
    else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
4512
0
    free((yyvsp[0].str));
4513
0
  }
4514
0
#line 4515 "util/configparser.c"
4515
0
    break;
4516
4517
0
  case 425:
4518
0
#line 1327 "./util/configparser.y"
4519
0
        {
4520
0
    OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
4521
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4522
0
      yyerror("expected yes or no.");
4523
0
    else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
4524
0
    free((yyvsp[0].str));
4525
0
  }
4526
0
#line 4527 "util/configparser.c"
4527
0
    break;
4528
4529
0
  case 426:
4530
0
#line 1336 "./util/configparser.y"
4531
0
        {
4532
0
    OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
4533
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4534
0
      yyerror("expected yes or no.");
4535
0
    else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
4536
0
    free((yyvsp[0].str));
4537
0
  }
4538
0
#line 4539 "util/configparser.c"
4539
0
    break;
4540
4541
0
  case 427:
4542
0
#line 1345 "./util/configparser.y"
4543
0
        {
4544
0
    OUTYY(("P(server_log_destaddr:%s)\n", (yyvsp[0].str)));
4545
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4546
0
      yyerror("expected yes or no.");
4547
0
    else cfg_parser->cfg->log_destaddr = (strcmp((yyvsp[0].str), "yes")==0);
4548
0
    free((yyvsp[0].str));
4549
0
  }
4550
0
#line 4551 "util/configparser.c"
4551
0
    break;
4552
4553
0
  case 428:
4554
0
#line 1354 "./util/configparser.y"
4555
0
        {
4556
0
    OUTYY(("P(server_log_thread_id:%s)\n", (yyvsp[0].str)));
4557
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4558
0
      yyerror("expected yes or no.");
4559
0
    else cfg_parser->cfg->log_thread_id = (strcmp((yyvsp[0].str), "yes")==0);
4560
0
    free((yyvsp[0].str));
4561
0
  }
4562
0
#line 4563 "util/configparser.c"
4563
0
    break;
4564
4565
0
  case 429:
4566
0
#line 1363 "./util/configparser.y"
4567
0
        {
4568
0
    OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
4569
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4570
0
      yyerror("expected yes or no.");
4571
0
    else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
4572
0
    free((yyvsp[0].str));
4573
0
  }
4574
0
#line 4575 "util/configparser.c"
4575
0
    break;
4576
4577
0
  case 430:
4578
0
#line 1372 "./util/configparser.y"
4579
0
        {
4580
0
    OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
4581
0
    free(cfg_parser->cfg->chrootdir);
4582
0
    cfg_parser->cfg->chrootdir = (yyvsp[0].str);
4583
0
  }
4584
0
#line 4585 "util/configparser.c"
4585
0
    break;
4586
4587
0
  case 431:
4588
0
#line 1379 "./util/configparser.y"
4589
0
        {
4590
0
    OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
4591
0
    free(cfg_parser->cfg->username);
4592
0
    cfg_parser->cfg->username = (yyvsp[0].str);
4593
0
  }
4594
0
#line 4595 "util/configparser.c"
4595
0
    break;
4596
4597
0
  case 432:
4598
0
#line 1386 "./util/configparser.y"
4599
0
        {
4600
0
    OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
4601
0
    free(cfg_parser->cfg->directory);
4602
0
    cfg_parser->cfg->directory = (yyvsp[0].str);
4603
    /* change there right away for includes relative to this */
4604
0
    if((yyvsp[0].str)[0]) {
4605
0
      char* d;
4606
#ifdef UB_ON_WINDOWS
4607
      w_config_adjust_directory(cfg_parser->cfg);
4608
#endif
4609
0
      d = cfg_parser->cfg->directory;
4610
      /* adjust directory if we have already chroot,
4611
       * like, we reread after sighup */
4612
0
      if(cfg_parser->chroot && cfg_parser->chroot[0] &&
4613
0
        strncmp(d, cfg_parser->chroot, strlen(
4614
0
        cfg_parser->chroot)) == 0)
4615
0
        d += strlen(cfg_parser->chroot);
4616
0
      if(d[0]) {
4617
0
        if(chdir(d))
4618
0
        log_err("cannot chdir to directory: %s (%s)",
4619
0
          d, strerror(errno));
4620
0
      }
4621
0
    }
4622
0
  }
4623
0
#line 4624 "util/configparser.c"
4624
0
    break;
4625
4626
0
  case 433:
4627
0
#line 1412 "./util/configparser.y"
4628
0
        {
4629
0
    OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
4630
0
    free(cfg_parser->cfg->logfile);
4631
0
    cfg_parser->cfg->logfile = (yyvsp[0].str);
4632
0
    cfg_parser->cfg->use_syslog = 0;
4633
0
  }
4634
0
#line 4635 "util/configparser.c"
4635
0
    break;
4636
4637
0
  case 434:
4638
0
#line 1420 "./util/configparser.y"
4639
0
        {
4640
0
    OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
4641
0
    free(cfg_parser->cfg->pidfile);
4642
0
    cfg_parser->cfg->pidfile = (yyvsp[0].str);
4643
0
  }
4644
0
#line 4645 "util/configparser.c"
4645
0
    break;
4646
4647
0
  case 435:
4648
0
#line 1427 "./util/configparser.y"
4649
0
        {
4650
0
    OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
4651
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
4652
0
      yyerror("out of memory");
4653
0
  }
4654
0
#line 4655 "util/configparser.c"
4655
0
    break;
4656
4657
0
  case 436:
4658
0
#line 1434 "./util/configparser.y"
4659
0
        {
4660
0
    OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
4661
0
    log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
4662
0
    free((yyvsp[0].str));
4663
0
  }
4664
0
#line 4665 "util/configparser.c"
4665
0
    break;
4666
4667
0
  case 437:
4668
0
#line 1441 "./util/configparser.y"
4669
0
        {
4670
0
    OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
4671
0
    log_warn("option dlv-anchor ignored: DLV is decommissioned");
4672
0
    free((yyvsp[0].str));
4673
0
  }
4674
0
#line 4675 "util/configparser.c"
4675
0
    break;
4676
4677
0
  case 438:
4678
0
#line 1448 "./util/configparser.y"
4679
0
        {
4680
0
    OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
4681
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->
4682
0
      auto_trust_anchor_file_list, (yyvsp[0].str)))
4683
0
      yyerror("out of memory");
4684
0
  }
4685
0
#line 4686 "util/configparser.c"
4686
0
    break;
4687
4688
0
  case 439:
4689
0
#line 1456 "./util/configparser.y"
4690
0
        {
4691
0
    OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
4692
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->
4693
0
      trust_anchor_file_list, (yyvsp[0].str)))
4694
0
      yyerror("out of memory");
4695
0
  }
4696
0
#line 4697 "util/configparser.c"
4697
0
    break;
4698
4699
0
  case 440:
4700
0
#line 1464 "./util/configparser.y"
4701
0
        {
4702
0
    OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
4703
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->
4704
0
      trusted_keys_file_list, (yyvsp[0].str)))
4705
0
      yyerror("out of memory");
4706
0
  }
4707
0
#line 4708 "util/configparser.c"
4708
0
    break;
4709
4710
0
  case 441:
4711
0
#line 1472 "./util/configparser.y"
4712
0
        {
4713
0
    OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
4714
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
4715
0
      yyerror("out of memory");
4716
0
  }
4717
0
#line 4718 "util/configparser.c"
4718
0
    break;
4719
4720
0
  case 442:
4721
0
#line 1479 "./util/configparser.y"
4722
0
        {
4723
0
    OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
4724
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4725
0
      yyerror("expected yes or no.");
4726
0
    else
4727
0
      cfg_parser->cfg->trust_anchor_signaling =
4728
0
        (strcmp((yyvsp[0].str), "yes")==0);
4729
0
    free((yyvsp[0].str));
4730
0
  }
4731
0
#line 4732 "util/configparser.c"
4732
0
    break;
4733
4734
0
  case 443:
4735
0
#line 1490 "./util/configparser.y"
4736
0
        {
4737
0
    OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
4738
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4739
0
      yyerror("expected yes or no.");
4740
0
    else
4741
0
      cfg_parser->cfg->root_key_sentinel =
4742
0
        (strcmp((yyvsp[0].str), "yes")==0);
4743
0
    free((yyvsp[0].str));
4744
0
  }
4745
0
#line 4746 "util/configparser.c"
4746
0
    break;
4747
4748
0
  case 444:
4749
0
#line 1501 "./util/configparser.y"
4750
0
        {
4751
0
    OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
4752
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
4753
0
      yyerror("out of memory");
4754
0
  }
4755
0
#line 4756 "util/configparser.c"
4756
0
    break;
4757
4758
0
  case 445:
4759
0
#line 1508 "./util/configparser.y"
4760
0
        {
4761
0
    OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
4762
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4763
0
      yyerror("expected yes or no.");
4764
0
    else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
4765
0
    free((yyvsp[0].str));
4766
0
  }
4767
0
#line 4768 "util/configparser.c"
4768
0
    break;
4769
4770
0
  case 446:
4771
0
#line 1517 "./util/configparser.y"
4772
0
        {
4773
0
    OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
4774
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4775
0
      yyerror("expected yes or no.");
4776
0
    else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
4777
0
    free((yyvsp[0].str));
4778
0
  }
4779
0
#line 4780 "util/configparser.c"
4780
0
    break;
4781
4782
0
  case 447:
4783
0
#line 1526 "./util/configparser.y"
4784
0
        {
4785
0
    OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
4786
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4787
0
      yyerror("expected yes or no.");
4788
0
    else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
4789
0
    free((yyvsp[0].str));
4790
0
  }
4791
0
#line 4792 "util/configparser.c"
4792
0
    break;
4793
4794
0
  case 448:
4795
0
#line 1535 "./util/configparser.y"
4796
0
        {
4797
0
    OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str)));
4798
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4799
0
      yyerror("expected yes or no.");
4800
0
    else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
4801
0
    free((yyvsp[0].str));
4802
0
  }
4803
0
#line 4804 "util/configparser.c"
4804
0
    break;
4805
4806
0
  case 449:
4807
0
#line 1544 "./util/configparser.y"
4808
0
        {
4809
0
    OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
4810
0
    free(cfg_parser->cfg->identity);
4811
0
    cfg_parser->cfg->identity = (yyvsp[0].str);
4812
0
  }
4813
0
#line 4814 "util/configparser.c"
4814
0
    break;
4815
4816
0
  case 450:
4817
0
#line 1551 "./util/configparser.y"
4818
0
        {
4819
0
    OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
4820
0
    free(cfg_parser->cfg->version);
4821
0
    cfg_parser->cfg->version = (yyvsp[0].str);
4822
0
  }
4823
0
#line 4824 "util/configparser.c"
4824
0
    break;
4825
4826
0
  case 451:
4827
0
#line 1558 "./util/configparser.y"
4828
0
        {
4829
0
    OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str)));
4830
0
    free(cfg_parser->cfg->http_user_agent);
4831
0
    cfg_parser->cfg->http_user_agent = (yyvsp[0].str);
4832
0
  }
4833
0
#line 4834 "util/configparser.c"
4834
0
    break;
4835
4836
0
  case 452:
4837
0
#line 1565 "./util/configparser.y"
4838
0
        {
4839
0
    OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
4840
0
    free(cfg_parser->cfg->nsid_cfg_str);
4841
0
    cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str);
4842
0
    free(cfg_parser->cfg->nsid);
4843
0
    cfg_parser->cfg->nsid = NULL;
4844
0
    cfg_parser->cfg->nsid_len = 0;
4845
0
    if (*(yyvsp[0].str) == 0)
4846
0
      ; /* pass; empty string is not setting nsid */
4847
0
    else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid(
4848
0
          (yyvsp[0].str), &cfg_parser->cfg->nsid_len)))
4849
0
      yyerror("the NSID must be either a hex string or an "
4850
0
          "ascii character string prepended with ascii_.");
4851
0
  }
4852
0
#line 4853 "util/configparser.c"
4853
0
    break;
4854
4855
0
  case 453:
4856
0
#line 1581 "./util/configparser.y"
4857
0
        {
4858
0
    OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
4859
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
4860
0
      yyerror("buffer size expected");
4861
0
    free((yyvsp[0].str));
4862
0
  }
4863
0
#line 4864 "util/configparser.c"
4864
0
    break;
4865
4866
0
  case 454:
4867
0
#line 1589 "./util/configparser.y"
4868
0
        {
4869
0
    OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
4870
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
4871
0
      yyerror("buffer size expected");
4872
0
    free((yyvsp[0].str));
4873
0
  }
4874
0
#line 4875 "util/configparser.c"
4875
0
    break;
4876
4877
0
  case 455:
4878
0
#line 1597 "./util/configparser.y"
4879
0
        {
4880
0
    OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
4881
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4882
0
      yyerror("expected yes or no.");
4883
0
    else cfg_parser->cfg->so_reuseport =
4884
0
      (strcmp((yyvsp[0].str), "yes")==0);
4885
0
    free((yyvsp[0].str));
4886
0
  }
4887
0
#line 4888 "util/configparser.c"
4888
0
    break;
4889
4890
0
  case 456:
4891
0
#line 1607 "./util/configparser.y"
4892
0
        {
4893
0
    OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
4894
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4895
0
      yyerror("expected yes or no.");
4896
0
    else cfg_parser->cfg->ip_transparent =
4897
0
      (strcmp((yyvsp[0].str), "yes")==0);
4898
0
    free((yyvsp[0].str));
4899
0
  }
4900
0
#line 4901 "util/configparser.c"
4901
0
    break;
4902
4903
0
  case 457:
4904
0
#line 1617 "./util/configparser.y"
4905
0
        {
4906
0
    OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
4907
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4908
0
      yyerror("expected yes or no.");
4909
0
    else cfg_parser->cfg->ip_freebind =
4910
0
      (strcmp((yyvsp[0].str), "yes")==0);
4911
0
    free((yyvsp[0].str));
4912
0
  }
4913
0
#line 4914 "util/configparser.c"
4914
0
    break;
4915
4916
0
  case 458:
4917
0
#line 1627 "./util/configparser.y"
4918
0
        {
4919
0
    OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
4920
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4921
0
      yyerror("number expected");
4922
0
    else if (atoi((yyvsp[0].str)) > 63)
4923
0
      yyerror("value too large (max 63)");
4924
0
    else if (atoi((yyvsp[0].str)) < 0)
4925
0
      yyerror("value too small (min 0)");
4926
0
    else
4927
0
      cfg_parser->cfg->ip_dscp = 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 1641 "./util/configparser.y"
4935
0
        {
4936
0
    OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
4937
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
4938
0
      yyerror("memory size expected");
4939
0
    free((yyvsp[0].str));
4940
0
  }
4941
0
#line 4942 "util/configparser.c"
4942
0
    break;
4943
4944
0
  case 460:
4945
0
#line 1649 "./util/configparser.y"
4946
0
        {
4947
0
    OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
4948
0
    if(atoi((yyvsp[0].str)) == 0)
4949
0
      yyerror("number expected");
4950
0
    else if (atoi((yyvsp[0].str)) < 12)
4951
0
      yyerror("edns buffer size too small");
4952
0
    else if (atoi((yyvsp[0].str)) > 65535)
4953
0
      cfg_parser->cfg->edns_buffer_size = 65535;
4954
0
    else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
4955
0
    free((yyvsp[0].str));
4956
0
  }
4957
0
#line 4958 "util/configparser.c"
4958
0
    break;
4959
4960
0
  case 461:
4961
0
#line 1662 "./util/configparser.y"
4962
0
        {
4963
0
    OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
4964
0
    if(atoi((yyvsp[0].str)) == 0)
4965
0
      yyerror("number expected");
4966
0
    else if (atoi((yyvsp[0].str)) < 4096)
4967
0
      yyerror("message buffer size too small (use 4096)");
4968
0
    else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
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 1673 "./util/configparser.y"
4976
0
        {
4977
0
    OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
4978
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
4979
0
      yyerror("memory size expected");
4980
0
    free((yyvsp[0].str));
4981
0
  }
4982
0
#line 4983 "util/configparser.c"
4983
0
    break;
4984
4985
0
  case 463:
4986
0
#line 1681 "./util/configparser.y"
4987
0
        {
4988
0
    OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
4989
0
    if(atoi((yyvsp[0].str)) == 0) {
4990
0
      yyerror("number expected");
4991
0
    } else {
4992
0
      cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
4993
0
      if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
4994
0
        yyerror("must be a power of 2");
4995
0
    }
4996
0
    free((yyvsp[0].str));
4997
0
  }
4998
0
#line 4999 "util/configparser.c"
4999
0
    break;
5000
5001
0
  case 464:
5002
0
#line 1694 "./util/configparser.y"
5003
0
        {
5004
0
    OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
5005
0
    if(atoi((yyvsp[0].str)) == 0)
5006
0
      yyerror("number expected");
5007
0
    else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
5008
0
    free((yyvsp[0].str));
5009
0
  }
5010
0
#line 5011 "util/configparser.c"
5011
0
    break;
5012
5013
0
  case 465:
5014
0
#line 1703 "./util/configparser.y"
5015
0
        {
5016
0
    OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
5017
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5018
0
      yyerror("number expected");
5019
0
    else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
5020
0
    free((yyvsp[0].str));
5021
0
  }
5022
0
#line 5023 "util/configparser.c"
5023
0
    break;
5024
5025
0
  case 466:
5026
0
#line 1712 "./util/configparser.y"
5027
0
        {
5028
0
    OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
5029
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5030
0
      yyerror("number expected");
5031
0
    else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
5032
0
    free((yyvsp[0].str));
5033
0
  }
5034
0
#line 5035 "util/configparser.c"
5035
0
    break;
5036
5037
0
  case 467:
5038
0
#line 1721 "./util/configparser.y"
5039
0
        {
5040
0
    OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
5041
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5042
0
      yyerror("expected yes or no.");
5043
0
    else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
5044
0
    free((yyvsp[0].str));
5045
0
  }
5046
0
#line 5047 "util/configparser.c"
5047
0
    break;
5048
5049
0
  case 468:
5050
0
#line 1730 "./util/configparser.y"
5051
0
        {
5052
0
    OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
5053
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5054
0
      yyerror("expected yes or no.");
5055
0
    else cfg_parser->cfg->unblock_lan_zones =
5056
0
      (strcmp((yyvsp[0].str), "yes")==0);
5057
0
    free((yyvsp[0].str));
5058
0
  }
5059
0
#line 5060 "util/configparser.c"
5060
0
    break;
5061
5062
0
  case 469:
5063
0
#line 1740 "./util/configparser.y"
5064
0
        {
5065
0
    OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
5066
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5067
0
      yyerror("expected yes or no.");
5068
0
    else cfg_parser->cfg->insecure_lan_zones =
5069
0
      (strcmp((yyvsp[0].str), "yes")==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 1750 "./util/configparser.y"
5077
0
        {
5078
0
    OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
5079
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
5080
0
      yyerror("memory size expected");
5081
0
    free((yyvsp[0].str));
5082
0
  }
5083
0
#line 5084 "util/configparser.c"
5084
0
    break;
5085
5086
0
  case 471:
5087
0
#line 1758 "./util/configparser.y"
5088
0
        {
5089
0
    OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
5090
0
    if(atoi((yyvsp[0].str)) == 0) {
5091
0
      yyerror("number expected");
5092
0
    } else {
5093
0
      cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
5094
0
      if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
5095
0
        yyerror("must be a power of 2");
5096
0
    }
5097
0
    free((yyvsp[0].str));
5098
0
  }
5099
0
#line 5100 "util/configparser.c"
5100
0
    break;
5101
5102
0
  case 472:
5103
0
#line 1771 "./util/configparser.y"
5104
0
        {
5105
0
    OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
5106
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5107
0
      yyerror("number expected");
5108
0
    else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
5109
0
    free((yyvsp[0].str));
5110
0
  }
5111
0
#line 5112 "util/configparser.c"
5112
0
    break;
5113
5114
0
  case 473:
5115
0
#line 1780 "./util/configparser.y"
5116
0
        {
5117
0
    OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
5118
0
    verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
5119
0
      "removed, use infra-host-ttl)", (yyvsp[0].str));
5120
0
    free((yyvsp[0].str));
5121
0
  }
5122
0
#line 5123 "util/configparser.c"
5123
0
    break;
5124
5125
0
  case 474:
5126
0
#line 1788 "./util/configparser.y"
5127
0
        {
5128
0
    OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
5129
0
    if(atoi((yyvsp[0].str)) == 0)
5130
0
      yyerror("number expected");
5131
0
    else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
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 1797 "./util/configparser.y"
5139
0
        {
5140
0
    OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
5141
0
    verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
5142
0
      "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
5143
0
    free((yyvsp[0].str));
5144
0
  }
5145
0
#line 5146 "util/configparser.c"
5146
0
    break;
5147
5148
0
  case 476:
5149
0
#line 1805 "./util/configparser.y"
5150
0
        {
5151
0
    OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
5152
0
    if(atoi((yyvsp[0].str)) == 0) {
5153
0
      yyerror("number expected");
5154
0
    } else {
5155
0
      cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
5156
0
      if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
5157
0
        yyerror("must be a power of 2");
5158
0
    }
5159
0
    free((yyvsp[0].str));
5160
0
  }
5161
0
#line 5162 "util/configparser.c"
5162
0
    break;
5163
5164
0
  case 477:
5165
0
#line 1818 "./util/configparser.y"
5166
0
        {
5167
0
    OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
5168
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5169
0
      yyerror("number expected");
5170
0
    else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
5171
0
    free((yyvsp[0].str));
5172
0
  }
5173
0
#line 5174 "util/configparser.c"
5174
0
    break;
5175
5176
0
  case 478:
5177
0
#line 1827 "./util/configparser.y"
5178
0
        {
5179
0
    OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str)));
5180
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5181
0
      yyerror("number expected");
5182
0
    else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str));
5183
0
    free((yyvsp[0].str));
5184
0
  }
5185
0
#line 5186 "util/configparser.c"
5186
0
    break;
5187
5188
0
  case 479:
5189
0
#line 1836 "./util/configparser.y"
5190
0
        {
5191
0
    OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
5192
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5193
0
      yyerror("expected yes or no.");
5194
0
    else cfg_parser->cfg->infra_keep_probing =
5195
0
      (strcmp((yyvsp[0].str), "yes")==0);
5196
0
    free((yyvsp[0].str));
5197
0
  }
5198
0
#line 5199 "util/configparser.c"
5199
0
    break;
5200
5201
0
  case 480:
5202
0
#line 1846 "./util/configparser.y"
5203
0
        {
5204
0
    OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
5205
0
    free(cfg_parser->cfg->target_fetch_policy);
5206
0
    cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
5207
0
  }
5208
0
#line 5209 "util/configparser.c"
5209
0
    break;
5210
5211
0
  case 481:
5212
0
#line 1853 "./util/configparser.y"
5213
0
        {
5214
0
    OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
5215
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5216
0
      yyerror("expected yes or no.");
5217
0
    else cfg_parser->cfg->harden_short_bufsize =
5218
0
      (strcmp((yyvsp[0].str), "yes")==0);
5219
0
    free((yyvsp[0].str));
5220
0
  }
5221
0
#line 5222 "util/configparser.c"
5222
0
    break;
5223
5224
0
  case 482:
5225
0
#line 1863 "./util/configparser.y"
5226
0
        {
5227
0
    OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
5228
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5229
0
      yyerror("expected yes or no.");
5230
0
    else cfg_parser->cfg->harden_large_queries =
5231
0
      (strcmp((yyvsp[0].str), "yes")==0);
5232
0
    free((yyvsp[0].str));
5233
0
  }
5234
0
#line 5235 "util/configparser.c"
5235
0
    break;
5236
5237
0
  case 483:
5238
0
#line 1873 "./util/configparser.y"
5239
0
        {
5240
0
    OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
5241
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5242
0
      yyerror("expected yes or no.");
5243
0
    else cfg_parser->cfg->harden_glue =
5244
0
      (strcmp((yyvsp[0].str), "yes")==0);
5245
0
    free((yyvsp[0].str));
5246
0
  }
5247
0
#line 5248 "util/configparser.c"
5248
0
    break;
5249
5250
0
  case 484:
5251
0
#line 1883 "./util/configparser.y"
5252
0
       {
5253
0
               OUTYY(("P(server_harden_unverified_glue:%s)\n", (yyvsp[0].str)));
5254
0
               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5255
0
                       yyerror("expected yes or no.");
5256
0
               else cfg_parser->cfg->harden_unverified_glue =
5257
0
                       (strcmp((yyvsp[0].str), "yes")==0);
5258
0
               free((yyvsp[0].str));
5259
0
       }
5260
0
#line 5261 "util/configparser.c"
5261
0
    break;
5262
5263
0
  case 485:
5264
0
#line 1893 "./util/configparser.y"
5265
0
        {
5266
0
    OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
5267
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5268
0
      yyerror("expected yes or no.");
5269
0
    else cfg_parser->cfg->harden_dnssec_stripped =
5270
0
      (strcmp((yyvsp[0].str), "yes")==0);
5271
0
    free((yyvsp[0].str));
5272
0
  }
5273
0
#line 5274 "util/configparser.c"
5274
0
    break;
5275
5276
0
  case 486:
5277
0
#line 1903 "./util/configparser.y"
5278
0
        {
5279
0
    OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
5280
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5281
0
      yyerror("expected yes or no.");
5282
0
    else cfg_parser->cfg->harden_below_nxdomain =
5283
0
      (strcmp((yyvsp[0].str), "yes")==0);
5284
0
    free((yyvsp[0].str));
5285
0
  }
5286
0
#line 5287 "util/configparser.c"
5287
0
    break;
5288
5289
0
  case 487:
5290
0
#line 1913 "./util/configparser.y"
5291
0
        {
5292
0
    OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
5293
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5294
0
      yyerror("expected yes or no.");
5295
0
    else cfg_parser->cfg->harden_referral_path =
5296
0
      (strcmp((yyvsp[0].str), "yes")==0);
5297
0
    free((yyvsp[0].str));
5298
0
  }
5299
0
#line 5300 "util/configparser.c"
5300
0
    break;
5301
5302
0
  case 488:
5303
0
#line 1923 "./util/configparser.y"
5304
0
        {
5305
0
    OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
5306
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5307
0
      yyerror("expected yes or no.");
5308
0
    else cfg_parser->cfg->harden_algo_downgrade =
5309
0
      (strcmp((yyvsp[0].str), "yes")==0);
5310
0
    free((yyvsp[0].str));
5311
0
  }
5312
0
#line 5313 "util/configparser.c"
5313
0
    break;
5314
5315
0
  case 489:
5316
0
#line 1933 "./util/configparser.y"
5317
0
        {
5318
0
    OUTYY(("P(server_harden_unknown_additional:%s)\n", (yyvsp[0].str)));
5319
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5320
0
      yyerror("expected yes or no.");
5321
0
    else cfg_parser->cfg->harden_unknown_additional =
5322
0
      (strcmp((yyvsp[0].str), "yes")==0);
5323
0
    free((yyvsp[0].str));
5324
0
  }
5325
0
#line 5326 "util/configparser.c"
5326
0
    break;
5327
5328
0
  case 490:
5329
0
#line 1943 "./util/configparser.y"
5330
0
        {
5331
0
    OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
5332
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5333
0
      yyerror("expected yes or no.");
5334
0
    else cfg_parser->cfg->use_caps_bits_for_id =
5335
0
      (strcmp((yyvsp[0].str), "yes")==0);
5336
0
    free((yyvsp[0].str));
5337
0
  }
5338
0
#line 5339 "util/configparser.c"
5339
0
    break;
5340
5341
0
  case 491:
5342
0
#line 1953 "./util/configparser.y"
5343
0
        {
5344
0
    OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
5345
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
5346
0
      yyerror("out of memory");
5347
0
  }
5348
0
#line 5349 "util/configparser.c"
5349
0
    break;
5350
5351
0
  case 492:
5352
0
#line 1960 "./util/configparser.y"
5353
0
        {
5354
0
    OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
5355
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
5356
0
      yyerror("out of memory");
5357
0
  }
5358
0
#line 5359 "util/configparser.c"
5359
0
    break;
5360
5361
0
  case 493:
5362
0
#line 1967 "./util/configparser.y"
5363
0
        {
5364
0
    OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
5365
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
5366
0
      yyerror("out of memory");
5367
0
  }
5368
0
#line 5369 "util/configparser.c"
5369
0
    break;
5370
5371
0
  case 494:
5372
0
#line 1974 "./util/configparser.y"
5373
0
        {
5374
0
    OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
5375
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5376
0
      yyerror("expected yes or no.");
5377
0
    else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
5378
0
    free((yyvsp[0].str));
5379
0
  }
5380
0
#line 5381 "util/configparser.c"
5381
0
    break;
5382
5383
0
  case 495:
5384
0
#line 1983 "./util/configparser.y"
5385
0
        {
5386
0
    OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
5387
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5388
0
      yyerror("expected yes or no.");
5389
0
    else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
5390
0
    free((yyvsp[0].str));
5391
0
  }
5392
0
#line 5393 "util/configparser.c"
5393
0
    break;
5394
5395
0
  case 496:
5396
0
#line 1992 "./util/configparser.y"
5397
0
        {
5398
0
    OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
5399
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5400
0
      yyerror("expected yes or no.");
5401
0
    else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
5402
0
    free((yyvsp[0].str));
5403
0
  }
5404
0
#line 5405 "util/configparser.c"
5405
0
    break;
5406
5407
0
  case 497:
5408
0
#line 2001 "./util/configparser.y"
5409
0
        {
5410
0
    OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
5411
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5412
0
      yyerror("number expected");
5413
0
    else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
5414
0
    free((yyvsp[0].str));
5415
0
  }
5416
0
#line 5417 "util/configparser.c"
5417
0
    break;
5418
5419
0
  case 498:
5420
0
#line 2010 "./util/configparser.y"
5421
0
        {
5422
0
    OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
5423
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
5424
0
      yyerror("out of memory");
5425
0
  }
5426
0
#line 5427 "util/configparser.c"
5427
0
    break;
5428
5429
0
  case 499:
5430
0
#line 2017 "./util/configparser.y"
5431
0
        {
5432
0
    OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
5433
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5434
0
      yyerror("expected yes or no.");
5435
0
    else cfg_parser->cfg->donotquery_localhost =
5436
0
      (strcmp((yyvsp[0].str), "yes")==0);
5437
0
    free((yyvsp[0].str));
5438
0
  }
5439
0
#line 5440 "util/configparser.c"
5440
0
    break;
5441
5442
0
  case 500:
5443
0
#line 2027 "./util/configparser.y"
5444
0
        {
5445
0
    OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5446
0
    validate_acl_action((yyvsp[0].str));
5447
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
5448
0
      fatal_exit("out of memory adding acl");
5449
0
  }
5450
0
#line 5451 "util/configparser.c"
5451
0
    break;
5452
5453
0
  case 501:
5454
0
#line 2035 "./util/configparser.y"
5455
0
        {
5456
0
    OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5457
0
    validate_acl_action((yyvsp[0].str));
5458
0
    if(!cfg_str2list_insert(
5459
0
      &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str)))
5460
0
      fatal_exit("out of memory adding acl");
5461
0
  }
5462
0
#line 5463 "util/configparser.c"
5463
0
    break;
5464
5465
0
  case 502:
5466
0
#line 2044 "./util/configparser.y"
5467
0
        {
5468
0
    OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
5469
0
    free(cfg_parser->cfg->module_conf);
5470
0
    cfg_parser->cfg->module_conf = (yyvsp[0].str);
5471
0
  }
5472
0
#line 5473 "util/configparser.c"
5473
0
    break;
5474
5475
0
  case 503:
5476
0
#line 2051 "./util/configparser.y"
5477
0
        {
5478
0
    OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
5479
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5480
0
      cfg_parser->cfg->val_date_override = 0;
5481
0
    } else if(strlen((yyvsp[0].str)) == 14) {
5482
0
      cfg_parser->cfg->val_date_override =
5483
0
        cfg_convert_timeval((yyvsp[0].str));
5484
0
      if(!cfg_parser->cfg->val_date_override)
5485
0
        yyerror("bad date/time specification");
5486
0
    } else {
5487
0
      if(atoi((yyvsp[0].str)) == 0)
5488
0
        yyerror("number expected");
5489
0
      cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str));
5490
0
    }
5491
0
    free((yyvsp[0].str));
5492
0
  }
5493
0
#line 5494 "util/configparser.c"
5494
0
    break;
5495
5496
0
  case 504:
5497
0
#line 2069 "./util/configparser.y"
5498
0
        {
5499
0
    OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
5500
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5501
0
      cfg_parser->cfg->val_sig_skew_min = 0;
5502
0
    } else {
5503
0
      cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str));
5504
0
      if(!cfg_parser->cfg->val_sig_skew_min)
5505
0
        yyerror("number expected");
5506
0
    }
5507
0
    free((yyvsp[0].str));
5508
0
  }
5509
0
#line 5510 "util/configparser.c"
5510
0
    break;
5511
5512
0
  case 505:
5513
0
#line 2082 "./util/configparser.y"
5514
0
        {
5515
0
    OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
5516
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5517
0
      cfg_parser->cfg->val_sig_skew_max = 0;
5518
0
    } else {
5519
0
      cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str));
5520
0
      if(!cfg_parser->cfg->val_sig_skew_max)
5521
0
        yyerror("number expected");
5522
0
    }
5523
0
    free((yyvsp[0].str));
5524
0
  }
5525
0
#line 5526 "util/configparser.c"
5526
0
    break;
5527
5528
0
  case 506:
5529
0
#line 2095 "./util/configparser.y"
5530
0
        {
5531
0
    OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str)));
5532
0
    if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5533
0
      cfg_parser->cfg->val_max_restart = 0;
5534
0
    } else {
5535
0
      cfg_parser->cfg->val_max_restart = atoi((yyvsp[0].str));
5536
0
      if(!cfg_parser->cfg->val_max_restart)
5537
0
        yyerror("number expected");
5538
0
    }
5539
0
    free((yyvsp[0].str));
5540
0
  }
5541
0
#line 5542 "util/configparser.c"
5542
0
    break;
5543
5544
0
  case 507:
5545
0
#line 2108 "./util/configparser.y"
5546
0
        {
5547
0
    OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
5548
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5549
0
      yyerror("number expected");
5550
0
    else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
5551
0
    free((yyvsp[0].str));
5552
0
  }
5553
0
#line 5554 "util/configparser.c"
5554
0
    break;
5555
5556
0
  case 508:
5557
0
#line 2117 "./util/configparser.y"
5558
0
        {
5559
0
    OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
5560
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5561
0
      yyerror("number expected");
5562
0
    else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
5563
0
    free((yyvsp[0].str));
5564
0
  }
5565
0
#line 5566 "util/configparser.c"
5566
0
    break;
5567
5568
0
  case 509:
5569
0
#line 2126 "./util/configparser.y"
5570
0
        {
5571
0
    OUTYY(("P(server_cache_min_negative_ttl:%s)\n", (yyvsp[0].str)));
5572
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5573
0
      yyerror("number expected");
5574
0
    else cfg_parser->cfg->min_negative_ttl = atoi((yyvsp[0].str));
5575
0
    free((yyvsp[0].str));
5576
0
  }
5577
0
#line 5578 "util/configparser.c"
5578
0
    break;
5579
5580
0
  case 510:
5581
0
#line 2135 "./util/configparser.y"
5582
0
        {
5583
0
    OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
5584
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5585
0
      yyerror("number expected");
5586
0
    else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
5587
0
    free((yyvsp[0].str));
5588
0
  }
5589
0
#line 5590 "util/configparser.c"
5590
0
    break;
5591
5592
0
  case 511:
5593
0
#line 2144 "./util/configparser.y"
5594
0
        {
5595
0
    OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
5596
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5597
0
      yyerror("number expected");
5598
0
    else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
5599
0
    free((yyvsp[0].str));
5600
0
  }
5601
0
#line 5602 "util/configparser.c"
5602
0
    break;
5603
5604
0
  case 512:
5605
0
#line 2153 "./util/configparser.y"
5606
0
        {
5607
0
    OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
5608
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5609
0
      yyerror("expected yes or no.");
5610
0
    else cfg_parser->cfg->val_clean_additional =
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 2163 "./util/configparser.y"
5619
0
        {
5620
0
    OUTYY(("P(server_val_permissive_mode:%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->val_permissive_mode =
5624
0
      (strcmp((yyvsp[0].str), "yes")==0);
5625
0
    free((yyvsp[0].str));
5626
0
  }
5627
0
#line 5628 "util/configparser.c"
5628
0
    break;
5629
5630
0
  case 514:
5631
0
#line 2173 "./util/configparser.y"
5632
0
        {
5633
0
    OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
5634
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5635
0
      yyerror("expected yes or no.");
5636
0
    else
5637
0
      cfg_parser->cfg->aggressive_nsec =
5638
0
        (strcmp((yyvsp[0].str), "yes")==0);
5639
0
    free((yyvsp[0].str));
5640
0
  }
5641
0
#line 5642 "util/configparser.c"
5642
0
    break;
5643
5644
0
  case 515:
5645
0
#line 2184 "./util/configparser.y"
5646
0
        {
5647
0
    OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
5648
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5649
0
      yyerror("expected yes or no.");
5650
0
    else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
5651
0
    free((yyvsp[0].str));
5652
0
  }
5653
0
#line 5654 "util/configparser.c"
5654
0
    break;
5655
5656
0
  case 516:
5657
0
#line 2193 "./util/configparser.y"
5658
0
        {
5659
0
    OUTYY(("P(server_disable_edns_do:%s)\n", (yyvsp[0].str)));
5660
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5661
0
      yyerror("expected yes or no.");
5662
0
    else cfg_parser->cfg->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0);
5663
0
    free((yyvsp[0].str));
5664
0
  }
5665
0
#line 5666 "util/configparser.c"
5666
0
    break;
5667
5668
0
  case 517:
5669
0
#line 2202 "./util/configparser.y"
5670
0
        {
5671
0
    OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
5672
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5673
0
      yyerror("expected yes or no.");
5674
0
    else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
5675
0
    free((yyvsp[0].str));
5676
0
  }
5677
0
#line 5678 "util/configparser.c"
5678
0
    break;
5679
5680
0
  case 518:
5681
0
#line 2211 "./util/configparser.y"
5682
0
        {
5683
0
    OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
5684
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5685
0
      yyerror("number expected");
5686
0
    else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
5687
0
    free((yyvsp[0].str));
5688
0
  }
5689
0
#line 5690 "util/configparser.c"
5690
0
    break;
5691
5692
0
  case 519:
5693
0
#line 2220 "./util/configparser.y"
5694
0
        {
5695
0
    OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
5696
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5697
0
      yyerror("expected yes or no.");
5698
0
    else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
5699
0
    free((yyvsp[0].str));
5700
0
  }
5701
0
#line 5702 "util/configparser.c"
5702
0
    break;
5703
5704
0
  case 520:
5705
0
#line 2229 "./util/configparser.y"
5706
0
        {
5707
0
    OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
5708
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5709
0
      yyerror("number expected");
5710
0
    else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
5711
0
    free((yyvsp[0].str));
5712
0
  }
5713
0
#line 5714 "util/configparser.c"
5714
0
    break;
5715
5716
0
  case 521:
5717
0
#line 2238 "./util/configparser.y"
5718
0
        {
5719
0
    OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
5720
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5721
0
      yyerror("number expected");
5722
0
    else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
5723
0
    free((yyvsp[0].str));
5724
0
  }
5725
0
#line 5726 "util/configparser.c"
5726
0
    break;
5727
5728
0
  case 522:
5729
0
#line 2247 "./util/configparser.y"
5730
0
        {
5731
0
    OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str)));
5732
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5733
0
      yyerror("expected yes or no.");
5734
0
    else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
5735
0
    free((yyvsp[0].str));
5736
0
  }
5737
0
#line 5738 "util/configparser.c"
5738
0
    break;
5739
5740
0
  case 523:
5741
0
#line 2256 "./util/configparser.y"
5742
0
        {
5743
0
    OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str)));
5744
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5745
0
      yyerror("expected yes or no.");
5746
0
    else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
5747
0
    free((yyvsp[0].str));
5748
0
  }
5749
0
#line 5750 "util/configparser.c"
5750
0
    break;
5751
5752
0
  case 524:
5753
0
#line 2265 "./util/configparser.y"
5754
0
        {
5755
0
    OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
5756
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5757
0
      yyerror("expected yes or no.");
5758
0
#if defined(HAVE_SSL) || defined(HAVE_NETTLE)
5759
0
    else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0);
5760
0
    if(fake_dsa)
5761
0
      log_warn("test option fake_dsa is enabled");
5762
0
#endif
5763
0
    free((yyvsp[0].str));
5764
0
  }
5765
0
#line 5766 "util/configparser.c"
5766
0
    break;
5767
5768
0
  case 525:
5769
0
#line 2278 "./util/configparser.y"
5770
0
        {
5771
0
    OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
5772
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5773
0
      yyerror("expected yes or no.");
5774
0
#if defined(HAVE_SSL) || defined(HAVE_NETTLE)
5775
0
    else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0);
5776
0
    if(fake_sha1)
5777
0
      log_warn("test option fake_sha1 is enabled");
5778
0
#endif
5779
0
    free((yyvsp[0].str));
5780
0
  }
5781
0
#line 5782 "util/configparser.c"
5782
0
    break;
5783
5784
0
  case 526:
5785
0
#line 2291 "./util/configparser.y"
5786
0
        {
5787
0
    OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
5788
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5789
0
      yyerror("number expected");
5790
0
    else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
5791
0
    free((yyvsp[0].str));
5792
0
  }
5793
0
#line 5794 "util/configparser.c"
5794
0
    break;
5795
5796
0
  case 527:
5797
0
#line 2300 "./util/configparser.y"
5798
0
        {
5799
0
    OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
5800
0
    free(cfg_parser->cfg->val_nsec3_key_iterations);
5801
0
    cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
5802
0
  }
5803
0
#line 5804 "util/configparser.c"
5804
0
    break;
5805
5806
0
  case 528:
5807
0
#line 2307 "./util/configparser.y"
5808
0
        {
5809
0
    OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str)));
5810
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5811
0
      yyerror("expected yes or no.");
5812
0
    else  cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
5813
0
    free((yyvsp[0].str));
5814
0
  }
5815
0
#line 5816 "util/configparser.c"
5816
0
    break;
5817
5818
0
  case 529:
5819
0
#line 2316 "./util/configparser.y"
5820
0
        {
5821
0
    OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
5822
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5823
0
      yyerror("number expected");
5824
0
    else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
5825
0
    free((yyvsp[0].str));
5826
0
  }
5827
0
#line 5828 "util/configparser.c"
5828
0
    break;
5829
5830
0
  case 530:
5831
0
#line 2325 "./util/configparser.y"
5832
0
        {
5833
0
    OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
5834
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5835
0
      yyerror("number expected");
5836
0
    else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
5837
0
    free((yyvsp[0].str));
5838
0
  }
5839
0
#line 5840 "util/configparser.c"
5840
0
    break;
5841
5842
0
  case 531:
5843
0
#line 2334 "./util/configparser.y"
5844
0
        {
5845
0
    OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
5846
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5847
0
      yyerror("number expected");
5848
0
    else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
5849
0
    free((yyvsp[0].str));
5850
0
  }
5851
0
#line 5852 "util/configparser.c"
5852
0
    break;
5853
5854
0
  case 532:
5855
0
#line 2343 "./util/configparser.y"
5856
0
        {
5857
0
    OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
5858
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5859
0
      yyerror("expected yes or no.");
5860
0
    else cfg_parser->cfg->permit_small_holddown =
5861
0
      (strcmp((yyvsp[0].str), "yes")==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 2353 "./util/configparser.y"
5869
0
        {
5870
0
    OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
5871
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_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 2361 "./util/configparser.y"
5880
0
        {
5881
0
    OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
5882
0
    if(atoi((yyvsp[0].str)) == 0) {
5883
0
      yyerror("number expected");
5884
0
    } else {
5885
0
      cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
5886
0
      if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
5887
0
        yyerror("must be a power of 2");
5888
0
    }
5889
0
    free((yyvsp[0].str));
5890
0
  }
5891
0
#line 5892 "util/configparser.c"
5892
0
    break;
5893
5894
0
  case 535:
5895
0
#line 2374 "./util/configparser.y"
5896
0
        {
5897
0
    OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
5898
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
5899
0
      yyerror("memory size expected");
5900
0
    free((yyvsp[0].str));
5901
0
  }
5902
0
#line 5903 "util/configparser.c"
5903
0
    break;
5904
5905
0
  case 536:
5906
0
#line 2382 "./util/configparser.y"
5907
0
        {
5908
0
    OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5909
0
    if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
5910
0
       strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
5911
0
       strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
5912
0
       && strcmp((yyvsp[0].str), "typetransparent")!=0
5913
0
       && strcmp((yyvsp[0].str), "always_transparent")!=0
5914
0
       && strcmp((yyvsp[0].str), "block_a")!=0
5915
0
       && strcmp((yyvsp[0].str), "always_refuse")!=0
5916
0
       && strcmp((yyvsp[0].str), "always_nxdomain")!=0
5917
0
       && strcmp((yyvsp[0].str), "always_nodata")!=0
5918
0
       && strcmp((yyvsp[0].str), "always_deny")!=0
5919
0
       && strcmp((yyvsp[0].str), "always_null")!=0
5920
0
       && strcmp((yyvsp[0].str), "noview")!=0
5921
0
       && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
5922
0
       && strcmp((yyvsp[0].str), "inform_redirect") != 0
5923
0
       && strcmp((yyvsp[0].str), "ipset") != 0) {
5924
0
      yyerror("local-zone type: expected static, deny, "
5925
0
        "refuse, redirect, transparent, "
5926
0
        "typetransparent, inform, inform_deny, "
5927
0
        "inform_redirect, always_transparent, block_a,"
5928
0
        "always_refuse, always_nxdomain, "
5929
0
        "always_nodata, always_deny, always_null, "
5930
0
        "noview, nodefault or ipset");
5931
0
      free((yyvsp[-1].str));
5932
0
      free((yyvsp[0].str));
5933
0
    } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
5934
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->
5935
0
        local_zones_nodefault, (yyvsp[-1].str)))
5936
0
        fatal_exit("out of memory adding local-zone");
5937
0
      free((yyvsp[0].str));
5938
#ifdef USE_IPSET
5939
    } else if(strcmp((yyvsp[0].str), "ipset")==0) {
5940
      size_t len = strlen((yyvsp[-1].str));
5941
      /* Make sure to add the trailing dot.
5942
       * These are str compared to domain names. */
5943
      if((yyvsp[-1].str)[len-1] != '.') {
5944
        if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
5945
          fatal_exit("out of memory adding local-zone");
5946
        }
5947
        (yyvsp[-1].str)[len] = '.';
5948
        (yyvsp[-1].str)[len+1] = 0;
5949
      }
5950
      if(!cfg_strlist_insert(&cfg_parser->cfg->
5951
        local_zones_ipset, (yyvsp[-1].str)))
5952
        fatal_exit("out of memory adding local-zone");
5953
      free((yyvsp[0].str));
5954
#endif
5955
0
    } else {
5956
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
5957
0
        (yyvsp[-1].str), (yyvsp[0].str)))
5958
0
        fatal_exit("out of memory adding local-zone");
5959
0
    }
5960
0
  }
5961
0
#line 5962 "util/configparser.c"
5962
0
    break;
5963
5964
0
  case 537:
5965
0
#line 2438 "./util/configparser.y"
5966
0
        {
5967
0
    OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
5968
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
5969
0
      fatal_exit("out of memory adding local-data");
5970
0
  }
5971
0
#line 5972 "util/configparser.c"
5972
0
    break;
5973
5974
0
  case 538:
5975
0
#line 2445 "./util/configparser.y"
5976
0
        {
5977
0
    char* ptr;
5978
0
    OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
5979
0
    ptr = cfg_ptr_reverse((yyvsp[0].str));
5980
0
    free((yyvsp[0].str));
5981
0
    if(ptr) {
5982
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->
5983
0
        local_data, ptr))
5984
0
        fatal_exit("out of memory adding local-data");
5985
0
    } else {
5986
0
      yyerror("local-data-ptr could not be reversed");
5987
0
    }
5988
0
  }
5989
0
#line 5990 "util/configparser.c"
5990
0
    break;
5991
5992
0
  case 539:
5993
0
#line 2460 "./util/configparser.y"
5994
0
        {
5995
0
    OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
5996
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5997
0
      yyerror("expected yes or no.");
5998
0
    else cfg_parser->cfg->minimal_responses =
5999
0
      (strcmp((yyvsp[0].str), "yes")==0);
6000
0
    free((yyvsp[0].str));
6001
0
  }
6002
0
#line 6003 "util/configparser.c"
6003
0
    break;
6004
6005
0
  case 540:
6006
0
#line 2470 "./util/configparser.y"
6007
0
        {
6008
0
    OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
6009
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6010
0
      yyerror("expected yes or no.");
6011
0
    else cfg_parser->cfg->rrset_roundrobin =
6012
0
      (strcmp((yyvsp[0].str), "yes")==0);
6013
0
    free((yyvsp[0].str));
6014
0
  }
6015
0
#line 6016 "util/configparser.c"
6016
0
    break;
6017
6018
0
  case 541:
6019
0
#line 2480 "./util/configparser.y"
6020
0
        {
6021
0
    OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
6022
0
    cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
6023
0
    free((yyvsp[0].str));
6024
0
  }
6025
0
#line 6026 "util/configparser.c"
6026
0
    break;
6027
6028
0
  case 542:
6029
0
#line 2487 "./util/configparser.y"
6030
0
        {
6031
0
    OUTYY(("P(server_discard_timeout:%s)\n", (yyvsp[0].str)));
6032
0
    cfg_parser->cfg->discard_timeout = atoi((yyvsp[0].str));
6033
0
    free((yyvsp[0].str));
6034
0
  }
6035
0
#line 6036 "util/configparser.c"
6036
0
    break;
6037
6038
0
  case 543:
6039
0
#line 2494 "./util/configparser.y"
6040
0
        {
6041
0
    OUTYY(("P(server_wait_limit:%s)\n", (yyvsp[0].str)));
6042
0
    cfg_parser->cfg->wait_limit = atoi((yyvsp[0].str));
6043
0
    free((yyvsp[0].str));
6044
0
  }
6045
0
#line 6046 "util/configparser.c"
6046
0
    break;
6047
6048
0
  case 544:
6049
0
#line 2501 "./util/configparser.y"
6050
0
        {
6051
0
    OUTYY(("P(server_wait_limit_cookie:%s)\n", (yyvsp[0].str)));
6052
0
    cfg_parser->cfg->wait_limit_cookie = atoi((yyvsp[0].str));
6053
0
    free((yyvsp[0].str));
6054
0
  }
6055
0
#line 6056 "util/configparser.c"
6056
0
    break;
6057
6058
0
  case 545:
6059
0
#line 2508 "./util/configparser.y"
6060
0
        {
6061
0
    OUTYY(("P(server_wait_limit_netblock:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6062
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6063
0
      yyerror("number expected");
6064
0
      free((yyvsp[-1].str));
6065
0
      free((yyvsp[0].str));
6066
0
    } else {
6067
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6068
0
        wait_limit_netblock, (yyvsp[-1].str), (yyvsp[0].str)))
6069
0
        fatal_exit("out of memory adding "
6070
0
          "wait-limit-netblock");
6071
0
    }
6072
0
  }
6073
0
#line 6074 "util/configparser.c"
6074
0
    break;
6075
6076
0
  case 546:
6077
0
#line 2523 "./util/configparser.y"
6078
0
        {
6079
0
    OUTYY(("P(server_wait_limit_cookie_netblock:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6080
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6081
0
      yyerror("number expected");
6082
0
      free((yyvsp[-1].str));
6083
0
      free((yyvsp[0].str));
6084
0
    } else {
6085
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6086
0
        wait_limit_cookie_netblock, (yyvsp[-1].str), (yyvsp[0].str)))
6087
0
        fatal_exit("out of memory adding "
6088
0
          "wait-limit-cookie-netblock");
6089
0
    }
6090
0
  }
6091
0
#line 6092 "util/configparser.c"
6092
0
    break;
6093
6094
0
  case 547:
6095
0
#line 2538 "./util/configparser.y"
6096
0
        {
6097
0
    OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
6098
0
    cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
6099
0
    free((yyvsp[0].str));
6100
0
  }
6101
0
#line 6102 "util/configparser.c"
6102
0
    break;
6103
6104
0
  case 548:
6105
0
#line 2545 "./util/configparser.y"
6106
0
        {
6107
0
    OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
6108
0
    free(cfg_parser->cfg->dns64_prefix);
6109
0
    cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
6110
0
  }
6111
0
#line 6112 "util/configparser.c"
6112
0
    break;
6113
6114
0
  case 549:
6115
0
#line 2552 "./util/configparser.y"
6116
0
        {
6117
0
    OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
6118
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6119
0
      yyerror("expected yes or no.");
6120
0
    else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
6121
0
    free((yyvsp[0].str));
6122
0
  }
6123
0
#line 6124 "util/configparser.c"
6124
0
    break;
6125
6126
0
  case 550:
6127
0
#line 2561 "./util/configparser.y"
6128
0
        {
6129
0
    OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
6130
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
6131
0
      (yyvsp[0].str)))
6132
0
      fatal_exit("out of memory adding dns64-ignore-aaaa");
6133
0
  }
6134
0
#line 6135 "util/configparser.c"
6135
0
    break;
6136
6137
0
  case 551:
6138
0
#line 2569 "./util/configparser.y"
6139
0
        {
6140
0
    OUTYY(("P(nat64_prefix:%s)\n", (yyvsp[0].str)));
6141
0
    free(cfg_parser->cfg->nat64_prefix);
6142
0
    cfg_parser->cfg->nat64_prefix = (yyvsp[0].str);
6143
0
  }
6144
0
#line 6145 "util/configparser.c"
6145
0
    break;
6146
6147
0
  case 552:
6148
0
#line 2576 "./util/configparser.y"
6149
0
        {
6150
0
    char* p, *s = (yyvsp[0].str);
6151
0
    OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
6152
0
    while((p=strsep(&s, " \t\n")) != NULL) {
6153
0
      if(*p) {
6154
0
        if(!config_add_tag(cfg_parser->cfg, p))
6155
0
          yyerror("could not define-tag, "
6156
0
            "out of memory");
6157
0
      }
6158
0
    }
6159
0
    free((yyvsp[0].str));
6160
0
  }
6161
0
#line 6162 "util/configparser.c"
6162
0
    break;
6163
6164
0
  case 553:
6165
0
#line 2590 "./util/configparser.y"
6166
0
        {
6167
0
    size_t len = 0;
6168
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6169
0
      &len);
6170
0
    free((yyvsp[0].str));
6171
0
    OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
6172
0
    if(!bitlist) {
6173
0
      yyerror("could not parse tags, (define-tag them first)");
6174
0
      free((yyvsp[-1].str));
6175
0
    }
6176
0
    if(bitlist) {
6177
0
      if(!cfg_strbytelist_insert(
6178
0
        &cfg_parser->cfg->local_zone_tags,
6179
0
        (yyvsp[-1].str), bitlist, len)) {
6180
0
        yyerror("out of memory");
6181
0
        free((yyvsp[-1].str));
6182
0
      }
6183
0
    }
6184
0
  }
6185
0
#line 6186 "util/configparser.c"
6186
0
    break;
6187
6188
0
  case 554:
6189
0
#line 2611 "./util/configparser.y"
6190
0
        {
6191
0
    size_t len = 0;
6192
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6193
0
      &len);
6194
0
    free((yyvsp[0].str));
6195
0
    OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
6196
0
    if(!bitlist) {
6197
0
      yyerror("could not parse tags, (define-tag them first)");
6198
0
      free((yyvsp[-1].str));
6199
0
    }
6200
0
    if(bitlist) {
6201
0
      if(!cfg_strbytelist_insert(
6202
0
        &cfg_parser->cfg->acl_tags,
6203
0
        (yyvsp[-1].str), bitlist, len)) {
6204
0
        yyerror("out of memory");
6205
0
        free((yyvsp[-1].str));
6206
0
      }
6207
0
    }
6208
0
  }
6209
0
#line 6210 "util/configparser.c"
6210
0
    break;
6211
6212
0
  case 555:
6213
0
#line 2632 "./util/configparser.y"
6214
0
        {
6215
0
    OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6216
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
6217
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6218
0
      yyerror("out of memory");
6219
0
      free((yyvsp[-2].str));
6220
0
      free((yyvsp[-1].str));
6221
0
      free((yyvsp[0].str));
6222
0
    }
6223
0
  }
6224
0
#line 6225 "util/configparser.c"
6225
0
    break;
6226
6227
0
  case 556:
6228
0
#line 2644 "./util/configparser.y"
6229
0
        {
6230
0
    OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6231
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
6232
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6233
0
      yyerror("out of memory");
6234
0
      free((yyvsp[-2].str));
6235
0
      free((yyvsp[-1].str));
6236
0
      free((yyvsp[0].str));
6237
0
    }
6238
0
  }
6239
0
#line 6240 "util/configparser.c"
6240
0
    break;
6241
6242
0
  case 557:
6243
0
#line 2656 "./util/configparser.y"
6244
0
        {
6245
0
    OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6246
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
6247
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6248
0
      yyerror("out of memory");
6249
0
      free((yyvsp[-2].str));
6250
0
      free((yyvsp[-1].str));
6251
0
      free((yyvsp[0].str));
6252
0
    }
6253
0
  }
6254
0
#line 6255 "util/configparser.c"
6255
0
    break;
6256
6257
0
  case 558:
6258
0
#line 2668 "./util/configparser.y"
6259
0
        {
6260
0
    OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6261
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
6262
0
      (yyvsp[-1].str), (yyvsp[0].str))) {
6263
0
      yyerror("out of memory");
6264
0
    }
6265
0
  }
6266
0
#line 6267 "util/configparser.c"
6267
0
    break;
6268
6269
0
  case 559:
6270
0
#line 2677 "./util/configparser.y"
6271
0
        {
6272
0
    size_t len = 0;
6273
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6274
0
      &len);
6275
0
    free((yyvsp[0].str));
6276
0
    OUTYY(("P(server_interface_tag:%s)\n", (yyvsp[-1].str)));
6277
0
    if(!bitlist) {
6278
0
      yyerror("could not parse tags, (define-tag them first)");
6279
0
      free((yyvsp[-1].str));
6280
0
    }
6281
0
    if(bitlist) {
6282
0
      if(!cfg_strbytelist_insert(
6283
0
        &cfg_parser->cfg->interface_tags,
6284
0
        (yyvsp[-1].str), bitlist, len)) {
6285
0
        yyerror("out of memory");
6286
0
        free((yyvsp[-1].str));
6287
0
      }
6288
0
    }
6289
0
  }
6290
0
#line 6291 "util/configparser.c"
6291
0
    break;
6292
6293
0
  case 560:
6294
0
#line 2698 "./util/configparser.y"
6295
0
        {
6296
0
    OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6297
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions,
6298
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6299
0
      yyerror("out of memory");
6300
0
      free((yyvsp[-2].str));
6301
0
      free((yyvsp[-1].str));
6302
0
      free((yyvsp[0].str));
6303
0
    }
6304
0
  }
6305
0
#line 6306 "util/configparser.c"
6306
0
    break;
6307
6308
0
  case 561:
6309
0
#line 2710 "./util/configparser.y"
6310
0
        {
6311
0
    OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
6312
0
    if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas,
6313
0
      (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
6314
0
      yyerror("out of memory");
6315
0
      free((yyvsp[-2].str));
6316
0
      free((yyvsp[-1].str));
6317
0
      free((yyvsp[0].str));
6318
0
    }
6319
0
  }
6320
0
#line 6321 "util/configparser.c"
6321
0
    break;
6322
6323
0
  case 562:
6324
0
#line 2722 "./util/configparser.y"
6325
0
        {
6326
0
    OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6327
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view,
6328
0
      (yyvsp[-1].str), (yyvsp[0].str))) {
6329
0
      yyerror("out of memory");
6330
0
    }
6331
0
  }
6332
0
#line 6333 "util/configparser.c"
6333
0
    break;
6334
6335
0
  case 563:
6336
0
#line 2731 "./util/configparser.y"
6337
0
        {
6338
0
    size_t len = 0;
6339
0
    uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
6340
0
      &len);
6341
0
    free((yyvsp[0].str));
6342
0
    OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str)));
6343
0
    if(!bitlist) {
6344
0
      yyerror("could not parse tags, (define-tag them first)");
6345
0
      free((yyvsp[-1].str));
6346
0
    }
6347
0
    if(bitlist) {
6348
0
      if(!cfg_strbytelist_insert(
6349
0
        &cfg_parser->cfg->respip_tags,
6350
0
        (yyvsp[-1].str), bitlist, len)) {
6351
0
        yyerror("out of memory");
6352
0
        free((yyvsp[-1].str));
6353
0
      }
6354
0
    }
6355
0
  }
6356
0
#line 6357 "util/configparser.c"
6357
0
    break;
6358
6359
0
  case 564:
6360
0
#line 2752 "./util/configparser.y"
6361
0
        {
6362
0
    OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
6363
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6364
0
      yyerror("number expected");
6365
0
    else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
6366
0
    free((yyvsp[0].str));
6367
0
  }
6368
0
#line 6369 "util/configparser.c"
6369
0
    break;
6370
6371
0
  case 565:
6372
0
#line 2761 "./util/configparser.y"
6373
0
        {
6374
0
    OUTYY(("P(server_ip_ratelimit_cookie:%s)\n", (yyvsp[0].str)));
6375
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6376
0
      yyerror("number expected");
6377
0
    else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str));
6378
0
    free((yyvsp[0].str));
6379
0
  }
6380
0
#line 6381 "util/configparser.c"
6381
0
    break;
6382
6383
0
  case 566:
6384
0
#line 2770 "./util/configparser.y"
6385
0
        {
6386
0
    OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
6387
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6388
0
      yyerror("number expected");
6389
0
    else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
6390
0
    free((yyvsp[0].str));
6391
0
  }
6392
0
#line 6393 "util/configparser.c"
6393
0
    break;
6394
6395
0
  case 567:
6396
0
#line 2779 "./util/configparser.y"
6397
0
        {
6398
0
    OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
6399
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
6400
0
      yyerror("memory size expected");
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 2787 "./util/configparser.y"
6408
0
        {
6409
0
    OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
6410
0
    if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
6411
0
      yyerror("memory size expected");
6412
0
    free((yyvsp[0].str));
6413
0
  }
6414
0
#line 6415 "util/configparser.c"
6415
0
    break;
6416
6417
0
  case 569:
6418
0
#line 2795 "./util/configparser.y"
6419
0
        {
6420
0
    OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
6421
0
    if(atoi((yyvsp[0].str)) == 0) {
6422
0
      yyerror("number expected");
6423
0
    } else {
6424
0
      cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
6425
0
      if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
6426
0
        yyerror("must be a power of 2");
6427
0
    }
6428
0
    free((yyvsp[0].str));
6429
0
  }
6430
0
#line 6431 "util/configparser.c"
6431
0
    break;
6432
6433
0
  case 570:
6434
0
#line 2808 "./util/configparser.y"
6435
0
        {
6436
0
    OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
6437
0
    if(atoi((yyvsp[0].str)) == 0) {
6438
0
      yyerror("number expected");
6439
0
    } else {
6440
0
      cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
6441
0
      if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
6442
0
        yyerror("must be a power of 2");
6443
0
    }
6444
0
    free((yyvsp[0].str));
6445
0
  }
6446
0
#line 6447 "util/configparser.c"
6447
0
    break;
6448
6449
0
  case 571:
6450
0
#line 2821 "./util/configparser.y"
6451
0
        {
6452
0
    OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6453
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6454
0
      yyerror("number expected");
6455
0
      free((yyvsp[-1].str));
6456
0
      free((yyvsp[0].str));
6457
0
    } else {
6458
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6459
0
        ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
6460
0
        fatal_exit("out of memory adding "
6461
0
          "ratelimit-for-domain");
6462
0
    }
6463
0
  }
6464
0
#line 6465 "util/configparser.c"
6465
0
    break;
6466
6467
0
  case 572:
6468
0
#line 2836 "./util/configparser.y"
6469
0
        {
6470
0
    OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6471
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
6472
0
      yyerror("number expected");
6473
0
      free((yyvsp[-1].str));
6474
0
      free((yyvsp[0].str));
6475
0
    } else {
6476
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->
6477
0
        ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
6478
0
        fatal_exit("out of memory adding "
6479
0
          "ratelimit-below-domain");
6480
0
    }
6481
0
  }
6482
0
#line 6483 "util/configparser.c"
6483
0
    break;
6484
6485
0
  case 573:
6486
0
#line 2851 "./util/configparser.y"
6487
0
        {
6488
0
    OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
6489
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6490
0
      yyerror("number expected");
6491
0
    else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
6492
0
    free((yyvsp[0].str));
6493
0
  }
6494
0
#line 6495 "util/configparser.c"
6495
0
    break;
6496
6497
0
  case 574:
6498
0
#line 2860 "./util/configparser.y"
6499
0
        {
6500
0
    OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
6501
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6502
0
      yyerror("number expected");
6503
0
    else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
6504
0
    free((yyvsp[0].str));
6505
0
  }
6506
0
#line 6507 "util/configparser.c"
6507
0
    break;
6508
6509
0
  case 575:
6510
0
#line 2869 "./util/configparser.y"
6511
0
        {
6512
0
    OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
6513
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6514
0
      yyerror("expected yes or no.");
6515
0
    else cfg_parser->cfg->ip_ratelimit_backoff =
6516
0
      (strcmp((yyvsp[0].str), "yes")==0);
6517
0
    free((yyvsp[0].str));
6518
0
  }
6519
0
#line 6520 "util/configparser.c"
6520
0
    break;
6521
6522
0
  case 576:
6523
0
#line 2879 "./util/configparser.y"
6524
0
        {
6525
0
    OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
6526
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6527
0
      yyerror("expected yes or no.");
6528
0
    else cfg_parser->cfg->ratelimit_backoff =
6529
0
      (strcmp((yyvsp[0].str), "yes")==0);
6530
0
    free((yyvsp[0].str));
6531
0
  }
6532
0
#line 6533 "util/configparser.c"
6533
0
    break;
6534
6535
0
  case 577:
6536
0
#line 2889 "./util/configparser.y"
6537
0
        {
6538
0
    OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str)));
6539
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6540
0
      yyerror("number expected");
6541
0
    else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
6542
0
    free((yyvsp[0].str));
6543
0
  }
6544
0
#line 6545 "util/configparser.c"
6545
0
    break;
6546
6547
0
  case 578:
6548
0
#line 2898 "./util/configparser.y"
6549
0
        {
6550
0
    OUTYY(("P(server_max_sent_count:%s)\n", (yyvsp[0].str)));
6551
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6552
0
      yyerror("number expected");
6553
0
    else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str));
6554
0
    free((yyvsp[0].str));
6555
0
  }
6556
0
#line 6557 "util/configparser.c"
6557
0
    break;
6558
6559
0
  case 579:
6560
0
#line 2907 "./util/configparser.y"
6561
0
        {
6562
0
    OUTYY(("P(server_max_query_restarts:%s)\n", (yyvsp[0].str)));
6563
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6564
0
      yyerror("number expected");
6565
0
    else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str));
6566
0
    free((yyvsp[0].str));
6567
0
  }
6568
0
#line 6569 "util/configparser.c"
6569
0
    break;
6570
6571
0
  case 580:
6572
0
#line 2916 "./util/configparser.y"
6573
0
        {
6574
0
    OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
6575
0
    free((yyvsp[0].str));
6576
0
  }
6577
0
#line 6578 "util/configparser.c"
6578
0
    break;
6579
6580
0
  case 581:
6581
0
#line 2922 "./util/configparser.y"
6582
0
        {
6583
0
    OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
6584
0
    if(atoi((yyvsp[0].str)) <= 0)
6585
0
      yyerror("number expected");
6586
0
    else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
6587
0
    free((yyvsp[0].str));
6588
0
  }
6589
0
#line 6590 "util/configparser.c"
6590
0
    break;
6591
6592
0
  case 582:
6593
0
#line 2931 "./util/configparser.y"
6594
0
        {
6595
0
    OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
6596
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6597
0
      yyerror("number expected");
6598
0
    else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
6599
0
    free((yyvsp[0].str));
6600
0
  }
6601
0
#line 6602 "util/configparser.c"
6602
0
    break;
6603
6604
0
  case 583:
6605
0
#line 2940 "./util/configparser.y"
6606
0
        {
6607
0
    OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
6608
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6609
0
      yyerror("expected yes or no.");
6610
0
    else cfg_parser->cfg->qname_minimisation =
6611
0
      (strcmp((yyvsp[0].str), "yes")==0);
6612
0
    free((yyvsp[0].str));
6613
0
  }
6614
0
#line 6615 "util/configparser.c"
6615
0
    break;
6616
6617
0
  case 584:
6618
0
#line 2950 "./util/configparser.y"
6619
0
        {
6620
0
    OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
6621
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6622
0
      yyerror("expected yes or no.");
6623
0
    else cfg_parser->cfg->qname_minimisation_strict =
6624
0
      (strcmp((yyvsp[0].str), "yes")==0);
6625
0
    free((yyvsp[0].str));
6626
0
  }
6627
0
#line 6628 "util/configparser.c"
6628
0
    break;
6629
6630
0
  case 585:
6631
0
#line 2960 "./util/configparser.y"
6632
0
        {
6633
0
    OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str)));
6634
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6635
0
      yyerror("expected yes or no.");
6636
0
    else cfg_parser->cfg->pad_responses =
6637
0
      (strcmp((yyvsp[0].str), "yes")==0);
6638
0
    free((yyvsp[0].str));
6639
0
  }
6640
0
#line 6641 "util/configparser.c"
6641
0
    break;
6642
6643
0
  case 586:
6644
0
#line 2970 "./util/configparser.y"
6645
0
        {
6646
0
    OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
6647
0
    if(atoi((yyvsp[0].str)) == 0)
6648
0
      yyerror("number expected");
6649
0
    else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
6650
0
    free((yyvsp[0].str));
6651
0
  }
6652
0
#line 6653 "util/configparser.c"
6653
0
    break;
6654
6655
0
  case 587:
6656
0
#line 2979 "./util/configparser.y"
6657
0
        {
6658
0
    OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str)));
6659
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6660
0
      yyerror("expected yes or no.");
6661
0
    else cfg_parser->cfg->pad_queries =
6662
0
      (strcmp((yyvsp[0].str), "yes")==0);
6663
0
    free((yyvsp[0].str));
6664
0
  }
6665
0
#line 6666 "util/configparser.c"
6666
0
    break;
6667
6668
0
  case 588:
6669
0
#line 2989 "./util/configparser.y"
6670
0
        {
6671
0
    OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
6672
0
    if(atoi((yyvsp[0].str)) == 0)
6673
0
      yyerror("number expected");
6674
0
    else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
6675
0
    free((yyvsp[0].str));
6676
0
  }
6677
0
#line 6678 "util/configparser.c"
6678
0
    break;
6679
6680
0
  case 589:
6681
0
#line 2998 "./util/configparser.y"
6682
0
        {
6683
  #ifdef USE_IPSECMOD
6684
    OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
6685
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6686
      yyerror("expected yes or no.");
6687
    else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0);
6688
  #else
6689
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6690
0
  #endif
6691
0
    free((yyvsp[0].str));
6692
0
  }
6693
0
#line 6694 "util/configparser.c"
6694
0
    break;
6695
6696
0
  case 590:
6697
0
#line 3011 "./util/configparser.y"
6698
0
        {
6699
  #ifdef USE_IPSECMOD
6700
    OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
6701
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6702
      yyerror("expected yes or no.");
6703
    else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0);
6704
  #else
6705
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6706
0
  #endif
6707
0
    free((yyvsp[0].str));
6708
0
  }
6709
0
#line 6710 "util/configparser.c"
6710
0
    break;
6711
6712
0
  case 591:
6713
0
#line 3024 "./util/configparser.y"
6714
0
        {
6715
  #ifdef USE_IPSECMOD
6716
    OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
6717
    free(cfg_parser->cfg->ipsecmod_hook);
6718
    cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str);
6719
  #else
6720
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6721
0
    free((yyvsp[0].str));
6722
0
  #endif
6723
0
  }
6724
0
#line 6725 "util/configparser.c"
6725
0
    break;
6726
6727
0
  case 592:
6728
0
#line 3036 "./util/configparser.y"
6729
0
        {
6730
  #ifdef USE_IPSECMOD
6731
    OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
6732
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6733
      yyerror("number expected");
6734
    else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str));
6735
    free((yyvsp[0].str));
6736
  #else
6737
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6738
0
    free((yyvsp[0].str));
6739
0
  #endif
6740
0
  }
6741
0
#line 6742 "util/configparser.c"
6742
0
    break;
6743
6744
0
  case 593:
6745
0
#line 3050 "./util/configparser.y"
6746
0
        {
6747
  #ifdef USE_IPSECMOD
6748
    OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
6749
    if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str)))
6750
      yyerror("out of memory");
6751
  #else
6752
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6753
0
    free((yyvsp[0].str));
6754
0
  #endif
6755
0
  }
6756
0
#line 6757 "util/configparser.c"
6757
0
    break;
6758
6759
0
  case 594:
6760
0
#line 3062 "./util/configparser.y"
6761
0
        {
6762
  #ifdef USE_IPSECMOD
6763
    OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
6764
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6765
      yyerror("expected yes or no.");
6766
    else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0);
6767
    free((yyvsp[0].str));
6768
  #else
6769
0
    OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6770
0
    free((yyvsp[0].str));
6771
0
  #endif
6772
0
  }
6773
0
#line 6774 "util/configparser.c"
6774
0
    break;
6775
6776
0
  case 595:
6777
0
#line 3076 "./util/configparser.y"
6778
0
        {
6779
0
    OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6780
0
    if(!cfg_str2list_insert(
6781
0
      &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
6782
0
      fatal_exit("out of memory adding "
6783
0
        "edns-client-string");
6784
0
  }
6785
0
#line 6786 "util/configparser.c"
6786
0
    break;
6787
6788
0
  case 596:
6789
0
#line 3085 "./util/configparser.y"
6790
0
        {
6791
0
    OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
6792
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6793
0
      yyerror("option code expected");
6794
0
    else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
6795
0
      yyerror("option code must be in interval [0, 65535]");
6796
0
    else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
6797
0
    free((yyvsp[0].str));
6798
0
  }
6799
0
#line 6800 "util/configparser.c"
6800
0
    break;
6801
6802
0
  case 597:
6803
0
#line 3096 "./util/configparser.y"
6804
0
        {
6805
0
    OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str)));
6806
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6807
0
      yyerror("expected yes or no.");
6808
0
    else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0);
6809
0
    free((yyvsp[0].str));
6810
0
  }
6811
0
#line 6812 "util/configparser.c"
6812
0
    break;
6813
6814
0
  case 598:
6815
0
#line 3105 "./util/configparser.y"
6816
0
        {
6817
0
    OUTYY(("P(server_dns_error_reporting:%s)\n", (yyvsp[0].str)));
6818
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6819
0
      yyerror("expected yes or no.");
6820
0
    else cfg_parser->cfg->dns_error_reporting = (strcmp((yyvsp[0].str), "yes")==0);
6821
0
    free((yyvsp[0].str));
6822
0
  }
6823
0
#line 6824 "util/configparser.c"
6824
0
    break;
6825
6826
0
  case 599:
6827
0
#line 3114 "./util/configparser.y"
6828
0
        {
6829
0
    OUTYY(("P(server_proxy_protocol_port:%s)\n", (yyvsp[0].str)));
6830
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, (yyvsp[0].str)))
6831
0
      yyerror("out of memory");
6832
0
  }
6833
0
#line 6834 "util/configparser.c"
6834
0
    break;
6835
6836
0
  case 600:
6837
0
#line 3121 "./util/configparser.y"
6838
0
        {
6839
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6840
0
    if(cfg_parser->cfg->stubs->name)
6841
0
      yyerror("stub name override, there must be one name "
6842
0
        "for one stub-zone");
6843
0
    free(cfg_parser->cfg->stubs->name);
6844
0
    cfg_parser->cfg->stubs->name = (yyvsp[0].str);
6845
0
  }
6846
0
#line 6847 "util/configparser.c"
6847
0
    break;
6848
6849
0
  case 601:
6850
0
#line 3131 "./util/configparser.y"
6851
0
        {
6852
0
    OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
6853
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
6854
0
      yyerror("out of memory");
6855
0
  }
6856
0
#line 6857 "util/configparser.c"
6857
0
    break;
6858
6859
0
  case 602:
6860
0
#line 3138 "./util/configparser.y"
6861
0
        {
6862
0
    OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
6863
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
6864
0
      yyerror("out of memory");
6865
0
  }
6866
0
#line 6867 "util/configparser.c"
6867
0
    break;
6868
6869
0
  case 603:
6870
0
#line 3145 "./util/configparser.y"
6871
0
        {
6872
0
    OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
6873
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6874
0
      yyerror("expected yes or no.");
6875
0
    else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6876
0
    free((yyvsp[0].str));
6877
0
  }
6878
0
#line 6879 "util/configparser.c"
6879
0
    break;
6880
6881
0
  case 604:
6882
0
#line 3154 "./util/configparser.y"
6883
0
        {
6884
0
    OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
6885
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6886
0
      yyerror("expected yes or no.");
6887
0
    else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
6888
0
    free((yyvsp[0].str));
6889
0
  }
6890
0
#line 6891 "util/configparser.c"
6891
0
    break;
6892
6893
0
  case 605:
6894
0
#line 3163 "./util/configparser.y"
6895
0
        {
6896
0
    OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
6897
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6898
0
      yyerror("expected yes or no.");
6899
0
    else cfg_parser->cfg->stubs->ssl_upstream =
6900
0
      (strcmp((yyvsp[0].str), "yes")==0);
6901
0
    free((yyvsp[0].str));
6902
0
  }
6903
0
#line 6904 "util/configparser.c"
6904
0
    break;
6905
6906
0
  case 606:
6907
0
#line 3173 "./util/configparser.y"
6908
0
        {
6909
0
                OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str)));
6910
0
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6911
0
                        yyerror("expected yes or no.");
6912
0
                else cfg_parser->cfg->stubs->tcp_upstream =
6913
0
                        (strcmp((yyvsp[0].str), "yes")==0);
6914
0
                free((yyvsp[0].str));
6915
0
        }
6916
0
#line 6917 "util/configparser.c"
6917
0
    break;
6918
6919
0
  case 607:
6920
0
#line 3183 "./util/configparser.y"
6921
0
        {
6922
0
    OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
6923
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6924
0
      yyerror("expected yes or no.");
6925
0
    else cfg_parser->cfg->stubs->isprime =
6926
0
      (strcmp((yyvsp[0].str), "yes")==0);
6927
0
    free((yyvsp[0].str));
6928
0
  }
6929
0
#line 6930 "util/configparser.c"
6930
0
    break;
6931
6932
0
  case 608:
6933
0
#line 3193 "./util/configparser.y"
6934
0
        {
6935
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6936
0
    if(cfg_parser->cfg->forwards->name)
6937
0
      yyerror("forward name override, there must be one "
6938
0
        "name for one forward-zone");
6939
0
    free(cfg_parser->cfg->forwards->name);
6940
0
    cfg_parser->cfg->forwards->name = (yyvsp[0].str);
6941
0
  }
6942
0
#line 6943 "util/configparser.c"
6943
0
    break;
6944
6945
0
  case 609:
6946
0
#line 3203 "./util/configparser.y"
6947
0
        {
6948
0
    OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
6949
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
6950
0
      yyerror("out of memory");
6951
0
  }
6952
0
#line 6953 "util/configparser.c"
6953
0
    break;
6954
6955
0
  case 610:
6956
0
#line 3210 "./util/configparser.y"
6957
0
        {
6958
0
    OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
6959
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
6960
0
      yyerror("out of memory");
6961
0
  }
6962
0
#line 6963 "util/configparser.c"
6963
0
    break;
6964
6965
0
  case 611:
6966
0
#line 3217 "./util/configparser.y"
6967
0
        {
6968
0
    OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
6969
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6970
0
      yyerror("expected yes or no.");
6971
0
    else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6972
0
    free((yyvsp[0].str));
6973
0
  }
6974
0
#line 6975 "util/configparser.c"
6975
0
    break;
6976
6977
0
  case 612:
6978
0
#line 3226 "./util/configparser.y"
6979
0
        {
6980
0
    OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
6981
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6982
0
      yyerror("expected yes or no.");
6983
0
    else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
6984
0
    free((yyvsp[0].str));
6985
0
  }
6986
0
#line 6987 "util/configparser.c"
6987
0
    break;
6988
6989
0
  case 613:
6990
0
#line 3235 "./util/configparser.y"
6991
0
        {
6992
0
    OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
6993
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6994
0
      yyerror("expected yes or no.");
6995
0
    else cfg_parser->cfg->forwards->ssl_upstream =
6996
0
      (strcmp((yyvsp[0].str), "yes")==0);
6997
0
    free((yyvsp[0].str));
6998
0
  }
6999
0
#line 7000 "util/configparser.c"
7000
0
    break;
7001
7002
0
  case 614:
7003
0
#line 3245 "./util/configparser.y"
7004
0
        {
7005
0
                OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str)));
7006
0
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7007
0
                        yyerror("expected yes or no.");
7008
0
                else cfg_parser->cfg->forwards->tcp_upstream =
7009
0
                        (strcmp((yyvsp[0].str), "yes")==0);
7010
0
                free((yyvsp[0].str));
7011
0
        }
7012
0
#line 7013 "util/configparser.c"
7013
0
    break;
7014
7015
0
  case 615:
7016
0
#line 3255 "./util/configparser.y"
7017
0
        {
7018
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
7019
0
    if(cfg_parser->cfg->auths->name)
7020
0
      yyerror("auth name override, there must be one name "
7021
0
        "for one auth-zone");
7022
0
    free(cfg_parser->cfg->auths->name);
7023
0
    cfg_parser->cfg->auths->name = (yyvsp[0].str);
7024
0
  }
7025
0
#line 7026 "util/configparser.c"
7026
0
    break;
7027
7028
0
  case 616:
7029
0
#line 3265 "./util/configparser.y"
7030
0
        {
7031
0
    OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
7032
0
    free(cfg_parser->cfg->auths->zonefile);
7033
0
    cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
7034
0
  }
7035
0
#line 7036 "util/configparser.c"
7036
0
    break;
7037
7038
0
  case 617:
7039
0
#line 3272 "./util/configparser.y"
7040
0
        {
7041
0
    OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
7042
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
7043
0
      yyerror("out of memory");
7044
0
  }
7045
0
#line 7046 "util/configparser.c"
7046
0
    break;
7047
7048
0
  case 618:
7049
0
#line 3279 "./util/configparser.y"
7050
0
        {
7051
0
    OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
7052
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
7053
0
      yyerror("out of memory");
7054
0
  }
7055
0
#line 7056 "util/configparser.c"
7056
0
    break;
7057
7058
0
  case 619:
7059
0
#line 3286 "./util/configparser.y"
7060
0
        {
7061
0
    OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
7062
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
7063
0
      (yyvsp[0].str)))
7064
0
      yyerror("out of memory");
7065
0
  }
7066
0
#line 7067 "util/configparser.c"
7067
0
    break;
7068
7069
0
  case 620:
7070
0
#line 3294 "./util/configparser.y"
7071
0
        {
7072
0
    OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str)));
7073
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7074
0
      yyerror("expected yes or no.");
7075
0
    else cfg_parser->cfg->auths->zonemd_check =
7076
0
      (strcmp((yyvsp[0].str), "yes")==0);
7077
0
    free((yyvsp[0].str));
7078
0
  }
7079
0
#line 7080 "util/configparser.c"
7080
0
    break;
7081
7082
0
  case 621:
7083
0
#line 3304 "./util/configparser.y"
7084
0
        {
7085
0
    OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str)));
7086
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7087
0
      yyerror("expected yes or no.");
7088
0
    else cfg_parser->cfg->auths->zonemd_reject_absence =
7089
0
      (strcmp((yyvsp[0].str), "yes")==0);
7090
0
    free((yyvsp[0].str));
7091
0
  }
7092
0
#line 7093 "util/configparser.c"
7093
0
    break;
7094
7095
0
  case 622:
7096
0
#line 3314 "./util/configparser.y"
7097
0
        {
7098
0
    OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
7099
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7100
0
      yyerror("expected yes or no.");
7101
0
    else cfg_parser->cfg->auths->for_downstream =
7102
0
      (strcmp((yyvsp[0].str), "yes")==0);
7103
0
    free((yyvsp[0].str));
7104
0
  }
7105
0
#line 7106 "util/configparser.c"
7106
0
    break;
7107
7108
0
  case 623:
7109
0
#line 3324 "./util/configparser.y"
7110
0
        {
7111
0
    OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
7112
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7113
0
      yyerror("expected yes or no.");
7114
0
    else cfg_parser->cfg->auths->for_upstream =
7115
0
      (strcmp((yyvsp[0].str), "yes")==0);
7116
0
    free((yyvsp[0].str));
7117
0
  }
7118
0
#line 7119 "util/configparser.c"
7119
0
    break;
7120
7121
0
  case 624:
7122
0
#line 3334 "./util/configparser.y"
7123
0
        {
7124
0
    OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
7125
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7126
0
      yyerror("expected yes or no.");
7127
0
    else cfg_parser->cfg->auths->fallback_enabled =
7128
0
      (strcmp((yyvsp[0].str), "yes")==0);
7129
0
    free((yyvsp[0].str));
7130
0
  }
7131
0
#line 7132 "util/configparser.c"
7132
0
    break;
7133
7134
0
  case 625:
7135
0
#line 3344 "./util/configparser.y"
7136
0
        {
7137
0
    OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
7138
0
    if(cfg_parser->cfg->views->name)
7139
0
      yyerror("view name override, there must be one "
7140
0
        "name for one view");
7141
0
    free(cfg_parser->cfg->views->name);
7142
0
    cfg_parser->cfg->views->name = (yyvsp[0].str);
7143
0
  }
7144
0
#line 7145 "util/configparser.c"
7145
0
    break;
7146
7147
0
  case 626:
7148
0
#line 3354 "./util/configparser.y"
7149
0
        {
7150
0
    OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7151
0
    if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
7152
0
       strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
7153
0
       strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
7154
0
       && strcmp((yyvsp[0].str), "typetransparent")!=0
7155
0
       && strcmp((yyvsp[0].str), "always_transparent")!=0
7156
0
       && strcmp((yyvsp[0].str), "always_refuse")!=0
7157
0
       && strcmp((yyvsp[0].str), "always_nxdomain")!=0
7158
0
       && strcmp((yyvsp[0].str), "always_nodata")!=0
7159
0
       && strcmp((yyvsp[0].str), "always_deny")!=0
7160
0
       && strcmp((yyvsp[0].str), "always_null")!=0
7161
0
       && strcmp((yyvsp[0].str), "noview")!=0
7162
0
       && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
7163
0
       && strcmp((yyvsp[0].str), "inform_redirect") != 0
7164
0
       && strcmp((yyvsp[0].str), "ipset") != 0) {
7165
0
      yyerror("local-zone type: expected static, deny, "
7166
0
        "refuse, redirect, transparent, "
7167
0
        "typetransparent, inform, inform_deny, "
7168
0
        "inform_redirect, always_transparent, "
7169
0
        "always_refuse, always_nxdomain, "
7170
0
        "always_nodata, always_deny, always_null, "
7171
0
        "noview, nodefault or ipset");
7172
0
      free((yyvsp[-1].str));
7173
0
      free((yyvsp[0].str));
7174
0
    } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
7175
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->views->
7176
0
        local_zones_nodefault, (yyvsp[-1].str)))
7177
0
        fatal_exit("out of memory adding local-zone");
7178
0
      free((yyvsp[0].str));
7179
#ifdef USE_IPSET
7180
    } else if(strcmp((yyvsp[0].str), "ipset")==0) {
7181
      size_t len = strlen((yyvsp[-1].str));
7182
      /* Make sure to add the trailing dot.
7183
       * These are str compared to domain names. */
7184
      if((yyvsp[-1].str)[len-1] != '.') {
7185
        if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
7186
          fatal_exit("out of memory adding local-zone");
7187
        }
7188
        (yyvsp[-1].str)[len] = '.';
7189
        (yyvsp[-1].str)[len+1] = 0;
7190
      }
7191
      if(!cfg_strlist_insert(&cfg_parser->cfg->views->
7192
        local_zones_ipset, (yyvsp[-1].str)))
7193
        fatal_exit("out of memory adding local-zone");
7194
      free((yyvsp[0].str));
7195
#endif
7196
0
    } else {
7197
0
      if(!cfg_str2list_insert(
7198
0
        &cfg_parser->cfg->views->local_zones,
7199
0
        (yyvsp[-1].str), (yyvsp[0].str)))
7200
0
        fatal_exit("out of memory adding local-zone");
7201
0
    }
7202
0
  }
7203
0
#line 7204 "util/configparser.c"
7204
0
    break;
7205
7206
0
  case 627:
7207
0
#line 3410 "./util/configparser.y"
7208
0
        {
7209
0
    OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7210
0
    validate_respip_action((yyvsp[0].str));
7211
0
    if(!cfg_str2list_insert(
7212
0
      &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str)))
7213
0
      fatal_exit("out of memory adding per-view "
7214
0
        "response-ip action");
7215
0
  }
7216
0
#line 7217 "util/configparser.c"
7217
0
    break;
7218
7219
0
  case 628:
7220
0
#line 3420 "./util/configparser.y"
7221
0
        {
7222
0
    OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
7223
0
    if(!cfg_str2list_insert(
7224
0
      &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
7225
0
      fatal_exit("out of memory adding response-ip-data");
7226
0
  }
7227
0
#line 7228 "util/configparser.c"
7228
0
    break;
7229
7230
0
  case 629:
7231
0
#line 3428 "./util/configparser.y"
7232
0
        {
7233
0
    OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
7234
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
7235
0
      fatal_exit("out of memory adding local-data");
7236
0
    }
7237
0
  }
7238
0
#line 7239 "util/configparser.c"
7239
0
    break;
7240
7241
0
  case 630:
7242
0
#line 3436 "./util/configparser.y"
7243
0
        {
7244
0
    char* ptr;
7245
0
    OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
7246
0
    ptr = cfg_ptr_reverse((yyvsp[0].str));
7247
0
    free((yyvsp[0].str));
7248
0
    if(ptr) {
7249
0
      if(!cfg_strlist_insert(&cfg_parser->cfg->views->
7250
0
        local_data, ptr))
7251
0
        fatal_exit("out of memory adding local-data");
7252
0
    } else {
7253
0
      yyerror("local-data-ptr could not be reversed");
7254
0
    }
7255
0
  }
7256
0
#line 7257 "util/configparser.c"
7257
0
    break;
7258
7259
0
  case 631:
7260
0
#line 3451 "./util/configparser.y"
7261
0
        {
7262
0
    OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
7263
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7264
0
      yyerror("expected yes or no.");
7265
0
    else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
7266
0
    free((yyvsp[0].str));
7267
0
  }
7268
0
#line 7269 "util/configparser.c"
7269
0
    break;
7270
7271
0
  case 632:
7272
0
#line 3460 "./util/configparser.y"
7273
0
        {
7274
0
    OUTYY(("\nP(remote-control:)\n"));
7275
0
    cfg_parser->started_toplevel = 1;
7276
0
  }
7277
0
#line 7278 "util/configparser.c"
7278
0
    break;
7279
7280
0
  case 643:
7281
0
#line 3472 "./util/configparser.y"
7282
0
        {
7283
0
    OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
7284
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7285
0
      yyerror("expected yes or no.");
7286
0
    else cfg_parser->cfg->remote_control_enable =
7287
0
      (strcmp((yyvsp[0].str), "yes")==0);
7288
0
    free((yyvsp[0].str));
7289
0
  }
7290
0
#line 7291 "util/configparser.c"
7291
0
    break;
7292
7293
0
  case 644:
7294
0
#line 3482 "./util/configparser.y"
7295
0
        {
7296
0
    OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
7297
0
    if(atoi((yyvsp[0].str)) == 0)
7298
0
      yyerror("control port number expected");
7299
0
    else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
7300
0
    free((yyvsp[0].str));
7301
0
  }
7302
0
#line 7303 "util/configparser.c"
7303
0
    break;
7304
7305
0
  case 645:
7306
0
#line 3491 "./util/configparser.y"
7307
0
        {
7308
0
    OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
7309
0
    if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
7310
0
      yyerror("out of memory");
7311
0
  }
7312
0
#line 7313 "util/configparser.c"
7313
0
    break;
7314
7315
0
  case 646:
7316
0
#line 3498 "./util/configparser.y"
7317
0
        {
7318
0
    OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
7319
0
    cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
7320
0
    free((yyvsp[0].str));
7321
0
  }
7322
0
#line 7323 "util/configparser.c"
7323
0
    break;
7324
7325
0
  case 647:
7326
0
#line 3505 "./util/configparser.y"
7327
0
        {
7328
0
    OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
7329
0
    free(cfg_parser->cfg->server_key_file);
7330
0
    cfg_parser->cfg->server_key_file = (yyvsp[0].str);
7331
0
  }
7332
0
#line 7333 "util/configparser.c"
7333
0
    break;
7334
7335
0
  case 648:
7336
0
#line 3512 "./util/configparser.y"
7337
0
        {
7338
0
    OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
7339
0
    free(cfg_parser->cfg->server_cert_file);
7340
0
    cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
7341
0
  }
7342
0
#line 7343 "util/configparser.c"
7343
0
    break;
7344
7345
0
  case 649:
7346
0
#line 3519 "./util/configparser.y"
7347
0
        {
7348
0
    OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
7349
0
    free(cfg_parser->cfg->control_key_file);
7350
0
    cfg_parser->cfg->control_key_file = (yyvsp[0].str);
7351
0
  }
7352
0
#line 7353 "util/configparser.c"
7353
0
    break;
7354
7355
0
  case 650:
7356
0
#line 3526 "./util/configparser.y"
7357
0
        {
7358
0
    OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
7359
0
    free(cfg_parser->cfg->control_cert_file);
7360
0
    cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
7361
0
  }
7362
0
#line 7363 "util/configparser.c"
7363
0
    break;
7364
7365
0
  case 651:
7366
0
#line 3533 "./util/configparser.y"
7367
0
        {
7368
0
    OUTYY(("\nP(dnstap:)\n"));
7369
0
    cfg_parser->started_toplevel = 1;
7370
0
  }
7371
0
#line 7372 "util/configparser.c"
7372
0
    break;
7373
7374
0
  case 674:
7375
0
#line 3555 "./util/configparser.y"
7376
0
        {
7377
0
    OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
7378
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7379
0
      yyerror("expected yes or no.");
7380
0
    else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
7381
0
    free((yyvsp[0].str));
7382
0
  }
7383
0
#line 7384 "util/configparser.c"
7384
0
    break;
7385
7386
0
  case 675:
7387
0
#line 3564 "./util/configparser.y"
7388
0
        {
7389
0
    OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
7390
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7391
0
      yyerror("expected yes or no.");
7392
0
    else cfg_parser->cfg->dnstap_bidirectional =
7393
0
      (strcmp((yyvsp[0].str), "yes")==0);
7394
0
    free((yyvsp[0].str));
7395
0
  }
7396
0
#line 7397 "util/configparser.c"
7397
0
    break;
7398
7399
0
  case 676:
7400
0
#line 3574 "./util/configparser.y"
7401
0
        {
7402
0
    OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
7403
0
    free(cfg_parser->cfg->dnstap_socket_path);
7404
0
    cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
7405
0
  }
7406
0
#line 7407 "util/configparser.c"
7407
0
    break;
7408
7409
0
  case 677:
7410
0
#line 3581 "./util/configparser.y"
7411
0
        {
7412
0
    OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
7413
0
    free(cfg_parser->cfg->dnstap_ip);
7414
0
    cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
7415
0
  }
7416
0
#line 7417 "util/configparser.c"
7417
0
    break;
7418
7419
0
  case 678:
7420
0
#line 3588 "./util/configparser.y"
7421
0
        {
7422
0
    OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
7423
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7424
0
      yyerror("expected yes or no.");
7425
0
    else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
7426
0
    free((yyvsp[0].str));
7427
0
  }
7428
0
#line 7429 "util/configparser.c"
7429
0
    break;
7430
7431
0
  case 679:
7432
0
#line 3597 "./util/configparser.y"
7433
0
        {
7434
0
    OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
7435
0
    free(cfg_parser->cfg->dnstap_tls_server_name);
7436
0
    cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
7437
0
  }
7438
0
#line 7439 "util/configparser.c"
7439
0
    break;
7440
7441
0
  case 680:
7442
0
#line 3604 "./util/configparser.y"
7443
0
        {
7444
0
    OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
7445
0
    free(cfg_parser->cfg->dnstap_tls_cert_bundle);
7446
0
    cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
7447
0
  }
7448
0
#line 7449 "util/configparser.c"
7449
0
    break;
7450
7451
0
  case 681:
7452
0
#line 3611 "./util/configparser.y"
7453
0
        {
7454
0
    OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
7455
0
    free(cfg_parser->cfg->dnstap_tls_client_key_file);
7456
0
    cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
7457
0
  }
7458
0
#line 7459 "util/configparser.c"
7459
0
    break;
7460
7461
0
  case 682:
7462
0
#line 3618 "./util/configparser.y"
7463
0
        {
7464
0
    OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
7465
0
    free(cfg_parser->cfg->dnstap_tls_client_cert_file);
7466
0
    cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
7467
0
  }
7468
0
#line 7469 "util/configparser.c"
7469
0
    break;
7470
7471
0
  case 683:
7472
0
#line 3625 "./util/configparser.y"
7473
0
        {
7474
0
    OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
7475
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7476
0
      yyerror("expected yes or no.");
7477
0
    else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
7478
0
    free((yyvsp[0].str));
7479
0
  }
7480
0
#line 7481 "util/configparser.c"
7481
0
    break;
7482
7483
0
  case 684:
7484
0
#line 3634 "./util/configparser.y"
7485
0
        {
7486
0
    OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
7487
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7488
0
      yyerror("expected yes or no.");
7489
0
    else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
7490
0
    free((yyvsp[0].str));
7491
0
  }
7492
0
#line 7493 "util/configparser.c"
7493
0
    break;
7494
7495
0
  case 685:
7496
0
#line 3643 "./util/configparser.y"
7497
0
        {
7498
0
    OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
7499
0
    free(cfg_parser->cfg->dnstap_identity);
7500
0
    cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
7501
0
  }
7502
0
#line 7503 "util/configparser.c"
7503
0
    break;
7504
7505
0
  case 686:
7506
0
#line 3650 "./util/configparser.y"
7507
0
        {
7508
0
    OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
7509
0
    free(cfg_parser->cfg->dnstap_version);
7510
0
    cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
7511
0
  }
7512
0
#line 7513 "util/configparser.c"
7513
0
    break;
7514
7515
0
  case 687:
7516
0
#line 3657 "./util/configparser.y"
7517
0
        {
7518
0
    OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
7519
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7520
0
      yyerror("expected yes or no.");
7521
0
    else cfg_parser->cfg->dnstap_log_resolver_query_messages =
7522
0
      (strcmp((yyvsp[0].str), "yes")==0);
7523
0
    free((yyvsp[0].str));
7524
0
  }
7525
0
#line 7526 "util/configparser.c"
7526
0
    break;
7527
7528
0
  case 688:
7529
0
#line 3667 "./util/configparser.y"
7530
0
        {
7531
0
    OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
7532
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7533
0
      yyerror("expected yes or no.");
7534
0
    else cfg_parser->cfg->dnstap_log_resolver_response_messages =
7535
0
      (strcmp((yyvsp[0].str), "yes")==0);
7536
0
    free((yyvsp[0].str));
7537
0
  }
7538
0
#line 7539 "util/configparser.c"
7539
0
    break;
7540
7541
0
  case 689:
7542
0
#line 3677 "./util/configparser.y"
7543
0
        {
7544
0
    OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
7545
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7546
0
      yyerror("expected yes or no.");
7547
0
    else cfg_parser->cfg->dnstap_log_client_query_messages =
7548
0
      (strcmp((yyvsp[0].str), "yes")==0);
7549
0
    free((yyvsp[0].str));
7550
0
  }
7551
0
#line 7552 "util/configparser.c"
7552
0
    break;
7553
7554
0
  case 690:
7555
0
#line 3687 "./util/configparser.y"
7556
0
        {
7557
0
    OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
7558
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7559
0
      yyerror("expected yes or no.");
7560
0
    else cfg_parser->cfg->dnstap_log_client_response_messages =
7561
0
      (strcmp((yyvsp[0].str), "yes")==0);
7562
0
    free((yyvsp[0].str));
7563
0
  }
7564
0
#line 7565 "util/configparser.c"
7565
0
    break;
7566
7567
0
  case 691:
7568
0
#line 3697 "./util/configparser.y"
7569
0
        {
7570
0
    OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
7571
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7572
0
      yyerror("expected yes or no.");
7573
0
    else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
7574
0
      (strcmp((yyvsp[0].str), "yes")==0);
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 3707 "./util/configparser.y"
7582
0
        {
7583
0
    OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
7584
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7585
0
      yyerror("expected yes or no.");
7586
0
    else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
7587
0
      (strcmp((yyvsp[0].str), "yes")==0);
7588
0
    free((yyvsp[0].str));
7589
0
  }
7590
0
#line 7591 "util/configparser.c"
7591
0
    break;
7592
7593
0
  case 693:
7594
0
#line 3717 "./util/configparser.y"
7595
0
        {
7596
0
    OUTYY(("P(dt_dnstap_sample_rate:%s)\n", (yyvsp[0].str)));
7597
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
7598
0
      yyerror("number expected");
7599
0
    else if(atoi((yyvsp[0].str)) < 0)
7600
0
      yyerror("dnstap sample rate too small");
7601
0
    else  cfg_parser->cfg->dnstap_sample_rate = atoi((yyvsp[0].str));
7602
0
    free((yyvsp[0].str));
7603
0
  }
7604
0
#line 7605 "util/configparser.c"
7605
0
    break;
7606
7607
0
  case 694:
7608
0
#line 3728 "./util/configparser.y"
7609
0
        {
7610
0
    OUTYY(("\nP(python:)\n"));
7611
0
    cfg_parser->started_toplevel = 1;
7612
0
  }
7613
0
#line 7614 "util/configparser.c"
7614
0
    break;
7615
7616
0
  case 698:
7617
0
#line 3738 "./util/configparser.y"
7618
0
        {
7619
0
    OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
7620
0
    if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
7621
0
      yyerror("out of memory");
7622
0
  }
7623
0
#line 7624 "util/configparser.c"
7624
0
    break;
7625
7626
0
  case 699:
7627
0
#line 3745 "./util/configparser.y"
7628
0
        {
7629
0
    OUTYY(("\nP(dynlib:)\n"));
7630
0
    cfg_parser->started_toplevel = 1;
7631
0
  }
7632
0
#line 7633 "util/configparser.c"
7633
0
    break;
7634
7635
0
  case 703:
7636
0
#line 3755 "./util/configparser.y"
7637
0
        {
7638
0
    OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
7639
0
    if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
7640
0
      yyerror("out of memory");
7641
0
  }
7642
0
#line 7643 "util/configparser.c"
7643
0
    break;
7644
7645
0
  case 704:
7646
0
#line 3762 "./util/configparser.y"
7647
0
        {
7648
0
    OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
7649
0
    if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7650
0
      yyerror("expected yes or no.");
7651
0
    else cfg_parser->cfg->disable_dnssec_lame_check =
7652
0
      (strcmp((yyvsp[0].str), "yes")==0);
7653
0
    free((yyvsp[0].str));
7654
0
  }
7655
0
#line 7656 "util/configparser.c"
7656
0
    break;
7657
7658
0
  case 705:
7659
0
#line 3772 "./util/configparser.y"
7660
0
        {
7661
0
    OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
7662
0
    free(cfg_parser->cfg->log_identity);
7663
0
    cfg_parser->cfg->log_identity = (yyvsp[0].str);
7664
0
  }
7665
0
#line 7666 "util/configparser.c"
7666
0
    break;
7667
7668
0
  case 706:
7669
0
#line 3779 "./util/configparser.y"
7670
0
        {
7671
0
    OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7672
0
    validate_respip_action((yyvsp[0].str));
7673
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
7674
0
      (yyvsp[-1].str), (yyvsp[0].str)))
7675
0
      fatal_exit("out of memory adding response-ip");
7676
0
  }
7677
0
#line 7678 "util/configparser.c"
7678
0
    break;
7679
7680
0
  case 707:
7681
0
#line 3788 "./util/configparser.y"
7682
0
        {
7683
0
    OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
7684
0
    if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
7685
0
      (yyvsp[-1].str), (yyvsp[0].str)))
7686
0
      fatal_exit("out of memory adding response-ip-data");
7687
0
  }
7688
0
#line 7689 "util/configparser.c"
7689
0
    break;
7690
7691
0
  case 708:
7692
0
#line 3796 "./util/configparser.y"
7693
0
        {
7694
0
    OUTYY(("\nP(dnscrypt:)\n"));
7695
0
    cfg_parser->started_toplevel = 1;
7696
0
  }
7697
0
#line 7698 "util/configparser.c"
7698
0
    break;
7699
7700
0
  case 721:
7701
0
#line 3813 "./util/configparser.y"
7702
0
        {
7703
0
    OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
7704
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7705
0
      yyerror("expected yes or no.");
7706
0
    else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
7707
0
    free((yyvsp[0].str));
7708
0
  }
7709
0
#line 7710 "util/configparser.c"
7710
0
    break;
7711
7712
0
  case 722:
7713
0
#line 3822 "./util/configparser.y"
7714
0
        {
7715
0
    OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
7716
0
    if(atoi((yyvsp[0].str)) == 0)
7717
0
      yyerror("port number expected");
7718
0
    else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
7719
0
    free((yyvsp[0].str));
7720
0
  }
7721
0
#line 7722 "util/configparser.c"
7722
0
    break;
7723
7724
0
  case 723:
7725
0
#line 3831 "./util/configparser.y"
7726
0
        {
7727
0
    OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
7728
0
    free(cfg_parser->cfg->dnscrypt_provider);
7729
0
    cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
7730
0
  }
7731
0
#line 7732 "util/configparser.c"
7732
0
    break;
7733
7734
0
  case 724:
7735
0
#line 3838 "./util/configparser.y"
7736
0
        {
7737
0
    OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
7738
0
    if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
7739
0
      log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
7740
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
7741
0
      fatal_exit("out of memory adding dnscrypt-provider-cert");
7742
0
  }
7743
0
#line 7744 "util/configparser.c"
7744
0
    break;
7745
7746
0
  case 725:
7747
0
#line 3847 "./util/configparser.y"
7748
0
        {
7749
0
    OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
7750
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
7751
0
      fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
7752
0
  }
7753
0
#line 7754 "util/configparser.c"
7754
0
    break;
7755
7756
0
  case 726:
7757
0
#line 3854 "./util/configparser.y"
7758
0
        {
7759
0
    OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
7760
0
    if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
7761
0
      log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
7762
0
    if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
7763
0
      fatal_exit("out of memory adding dnscrypt-secret-key");
7764
0
  }
7765
0
#line 7766 "util/configparser.c"
7766
0
    break;
7767
7768
0
  case 727:
7769
0
#line 3863 "./util/configparser.y"
7770
0
  {
7771
0
  OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
7772
0
  if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_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 3871 "./util/configparser.y"
7781
0
  {
7782
0
  OUTYY(("P(dnscrypt_shared_secret_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_shared_secret_cache_slabs = atoi((yyvsp[0].str));
7787
0
    if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_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 3884 "./util/configparser.y"
7797
0
  {
7798
0
  OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
7799
0
  if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
7800
0
    yyerror("memory size expected");
7801
0
  free((yyvsp[0].str));
7802
0
  }
7803
0
#line 7804 "util/configparser.c"
7804
0
    break;
7805
7806
0
  case 730:
7807
0
#line 3892 "./util/configparser.y"
7808
0
  {
7809
0
  OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
7810
0
  if(atoi((yyvsp[0].str)) == 0) {
7811
0
    yyerror("number expected");
7812
0
  } else {
7813
0
    cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
7814
0
    if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
7815
0
      yyerror("must be a power of 2");
7816
0
  }
7817
0
  free((yyvsp[0].str));
7818
0
  }
7819
0
#line 7820 "util/configparser.c"
7820
0
    break;
7821
7822
0
  case 731:
7823
0
#line 3905 "./util/configparser.y"
7824
0
        {
7825
0
    OUTYY(("\nP(cachedb:)\n"));
7826
0
    cfg_parser->started_toplevel = 1;
7827
0
  }
7828
0
#line 7829 "util/configparser.c"
7829
0
    break;
7830
7831
0
  case 755:
7832
0
#line 3925 "./util/configparser.y"
7833
0
        {
7834
  #ifdef USE_CACHEDB
7835
    OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
7836
    free(cfg_parser->cfg->cachedb_backend);
7837
    cfg_parser->cfg->cachedb_backend = (yyvsp[0].str);
7838
  #else
7839
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7840
0
    free((yyvsp[0].str));
7841
0
  #endif
7842
0
  }
7843
0
#line 7844 "util/configparser.c"
7844
0
    break;
7845
7846
0
  case 756:
7847
0
#line 3937 "./util/configparser.y"
7848
0
        {
7849
  #ifdef USE_CACHEDB
7850
    OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
7851
    free(cfg_parser->cfg->cachedb_secret);
7852
    cfg_parser->cfg->cachedb_secret = (yyvsp[0].str);
7853
  #else
7854
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7855
0
    free((yyvsp[0].str));
7856
0
  #endif
7857
0
  }
7858
0
#line 7859 "util/configparser.c"
7859
0
    break;
7860
7861
0
  case 757:
7862
0
#line 3949 "./util/configparser.y"
7863
0
        {
7864
  #ifdef USE_CACHEDB
7865
    OUTYY(("P(cachedb_no_store:%s)\n", (yyvsp[0].str)));
7866
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7867
      yyerror("expected yes or no.");
7868
    else cfg_parser->cfg->cachedb_no_store = (strcmp((yyvsp[0].str), "yes")==0);
7869
  #else
7870
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7871
0
  #endif
7872
0
    free((yyvsp[0].str));
7873
0
  }
7874
0
#line 7875 "util/configparser.c"
7875
0
    break;
7876
7877
0
  case 758:
7878
0
#line 3962 "./util/configparser.y"
7879
0
        {
7880
  #ifdef USE_CACHEDB
7881
    OUTYY(("P(cachedb_check_when_serve_expired:%s)\n", (yyvsp[0].str)));
7882
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7883
      yyerror("expected yes or no.");
7884
    else cfg_parser->cfg->cachedb_check_when_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
7885
  #else
7886
0
    OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7887
0
  #endif
7888
0
    free((yyvsp[0].str));
7889
0
  }
7890
0
#line 7891 "util/configparser.c"
7891
0
    break;
7892
7893
0
  case 759:
7894
0
#line 3975 "./util/configparser.y"
7895
0
        {
7896
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7897
    OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
7898
    free(cfg_parser->cfg->redis_server_host);
7899
    cfg_parser->cfg->redis_server_host = (yyvsp[0].str);
7900
  #else
7901
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7902
0
    free((yyvsp[0].str));
7903
0
  #endif
7904
0
  }
7905
0
#line 7906 "util/configparser.c"
7906
0
    break;
7907
7908
0
  case 760:
7909
0
#line 3987 "./util/configparser.y"
7910
0
        {
7911
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7912
    OUTYY(("P(redis_replica_server_host:%s)\n", (yyvsp[0].str)));
7913
    free(cfg_parser->cfg->redis_replica_server_host);
7914
    cfg_parser->cfg->redis_replica_server_host = (yyvsp[0].str);
7915
  #else
7916
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7917
0
    free((yyvsp[0].str));
7918
0
  #endif
7919
0
  }
7920
0
#line 7921 "util/configparser.c"
7921
0
    break;
7922
7923
0
  case 761:
7924
0
#line 3999 "./util/configparser.y"
7925
0
        {
7926
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7927
    int port;
7928
    OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
7929
    port = atoi((yyvsp[0].str));
7930
    if(port == 0 || port < 0 || port > 65535)
7931
      yyerror("valid redis server port number expected");
7932
    else cfg_parser->cfg->redis_server_port = port;
7933
  #else
7934
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7935
0
  #endif
7936
0
    free((yyvsp[0].str));
7937
0
  }
7938
0
#line 7939 "util/configparser.c"
7939
0
    break;
7940
7941
0
  case 762:
7942
0
#line 4014 "./util/configparser.y"
7943
0
        {
7944
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7945
    int port;
7946
    OUTYY(("P(redis_replica_server_port:%s)\n", (yyvsp[0].str)));
7947
    port = atoi((yyvsp[0].str));
7948
    if(port == 0 || port < 0 || port > 65535)
7949
      yyerror("valid redis server port number expected");
7950
    else cfg_parser->cfg->redis_replica_server_port = port;
7951
  #else
7952
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7953
0
  #endif
7954
0
    free((yyvsp[0].str));
7955
0
  }
7956
0
#line 7957 "util/configparser.c"
7957
0
    break;
7958
7959
0
  case 763:
7960
0
#line 4029 "./util/configparser.y"
7961
0
        {
7962
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7963
    OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str)));
7964
    free(cfg_parser->cfg->redis_server_path);
7965
    cfg_parser->cfg->redis_server_path = (yyvsp[0].str);
7966
  #else
7967
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7968
0
    free((yyvsp[0].str));
7969
0
  #endif
7970
0
  }
7971
0
#line 7972 "util/configparser.c"
7972
0
    break;
7973
7974
0
  case 764:
7975
0
#line 4041 "./util/configparser.y"
7976
0
        {
7977
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7978
    OUTYY(("P(redis_replica_server_path:%s)\n", (yyvsp[0].str)));
7979
    free(cfg_parser->cfg->redis_replica_server_path);
7980
    cfg_parser->cfg->redis_replica_server_path = (yyvsp[0].str);
7981
  #else
7982
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7983
0
    free((yyvsp[0].str));
7984
0
  #endif
7985
0
  }
7986
0
#line 7987 "util/configparser.c"
7987
0
    break;
7988
7989
0
  case 765:
7990
0
#line 4053 "./util/configparser.y"
7991
0
        {
7992
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
7993
    OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str)));
7994
    free(cfg_parser->cfg->redis_server_password);
7995
    cfg_parser->cfg->redis_server_password = (yyvsp[0].str);
7996
  #else
7997
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7998
0
    free((yyvsp[0].str));
7999
0
  #endif
8000
0
  }
8001
0
#line 8002 "util/configparser.c"
8002
0
    break;
8003
8004
0
  case 766:
8005
0
#line 4065 "./util/configparser.y"
8006
0
        {
8007
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8008
    OUTYY(("P(redis_replica_server_password:%s)\n", (yyvsp[0].str)));
8009
    free(cfg_parser->cfg->redis_replica_server_password);
8010
    cfg_parser->cfg->redis_replica_server_password = (yyvsp[0].str);
8011
  #else
8012
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8013
0
    free((yyvsp[0].str));
8014
0
  #endif
8015
0
  }
8016
0
#line 8017 "util/configparser.c"
8017
0
    break;
8018
8019
0
  case 767:
8020
0
#line 4077 "./util/configparser.y"
8021
0
        {
8022
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8023
    OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
8024
    if(atoi((yyvsp[0].str)) == 0)
8025
      yyerror("redis timeout value expected");
8026
    else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str));
8027
  #else
8028
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8029
0
  #endif
8030
0
    free((yyvsp[0].str));
8031
0
  }
8032
0
#line 8033 "util/configparser.c"
8033
0
    break;
8034
8035
0
  case 768:
8036
0
#line 4090 "./util/configparser.y"
8037
0
        {
8038
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8039
    OUTYY(("P(redis_replica_timeout:%s)\n", (yyvsp[0].str)));
8040
    if(atoi((yyvsp[0].str)) == 0)
8041
      yyerror("redis timeout value expected");
8042
    else cfg_parser->cfg->redis_replica_timeout = atoi((yyvsp[0].str));
8043
  #else
8044
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8045
0
  #endif
8046
0
    free((yyvsp[0].str));
8047
0
  }
8048
0
#line 8049 "util/configparser.c"
8049
0
    break;
8050
8051
0
  case 769:
8052
0
#line 4103 "./util/configparser.y"
8053
0
        {
8054
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8055
    OUTYY(("P(redis_command_timeout:%s)\n", (yyvsp[0].str)));
8056
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8057
      yyerror("redis command timeout value expected");
8058
    else cfg_parser->cfg->redis_command_timeout = atoi((yyvsp[0].str));
8059
  #else
8060
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8061
0
  #endif
8062
0
    free((yyvsp[0].str));
8063
0
  }
8064
0
#line 8065 "util/configparser.c"
8065
0
    break;
8066
8067
0
  case 770:
8068
0
#line 4116 "./util/configparser.y"
8069
0
        {
8070
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8071
    OUTYY(("P(redis_replica_command_timeout:%s)\n", (yyvsp[0].str)));
8072
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8073
      yyerror("redis command timeout value expected");
8074
    else cfg_parser->cfg->redis_replica_command_timeout = atoi((yyvsp[0].str));
8075
  #else
8076
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8077
0
  #endif
8078
0
    free((yyvsp[0].str));
8079
0
  }
8080
0
#line 8081 "util/configparser.c"
8081
0
    break;
8082
8083
0
  case 771:
8084
0
#line 4129 "./util/configparser.y"
8085
0
        {
8086
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8087
    OUTYY(("P(redis_connect_timeout:%s)\n", (yyvsp[0].str)));
8088
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8089
      yyerror("redis connect timeout value expected");
8090
    else cfg_parser->cfg->redis_connect_timeout = atoi((yyvsp[0].str));
8091
  #else
8092
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8093
0
  #endif
8094
0
    free((yyvsp[0].str));
8095
0
  }
8096
0
#line 8097 "util/configparser.c"
8097
0
    break;
8098
8099
0
  case 772:
8100
0
#line 4142 "./util/configparser.y"
8101
0
        {
8102
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8103
    OUTYY(("P(redis_replica_connect_timeout:%s)\n", (yyvsp[0].str)));
8104
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8105
      yyerror("redis connect timeout value expected");
8106
    else cfg_parser->cfg->redis_replica_connect_timeout = atoi((yyvsp[0].str));
8107
  #else
8108
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8109
0
  #endif
8110
0
    free((yyvsp[0].str));
8111
0
  }
8112
0
#line 8113 "util/configparser.c"
8113
0
    break;
8114
8115
0
  case 773:
8116
0
#line 4155 "./util/configparser.y"
8117
0
        {
8118
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8119
    OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
8120
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
8121
      yyerror("expected yes or no.");
8122
    else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0);
8123
  #else
8124
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8125
0
  #endif
8126
0
    free((yyvsp[0].str));
8127
0
  }
8128
0
#line 8129 "util/configparser.c"
8129
0
    break;
8130
8131
0
  case 774:
8132
0
#line 4168 "./util/configparser.y"
8133
0
        {
8134
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8135
    int db;
8136
    OUTYY(("P(redis_logical_db:%s)\n", (yyvsp[0].str)));
8137
    db = atoi((yyvsp[0].str));
8138
    if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0)
8139
      yyerror("valid redis logical database index expected");
8140
    else cfg_parser->cfg->redis_logical_db = db;
8141
  #else
8142
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8143
0
  #endif
8144
0
    free((yyvsp[0].str));
8145
0
  }
8146
0
#line 8147 "util/configparser.c"
8147
0
    break;
8148
8149
0
  case 775:
8150
0
#line 4183 "./util/configparser.y"
8151
0
        {
8152
  #if defined(USE_CACHEDB) && defined(USE_REDIS)
8153
    int db;
8154
    OUTYY(("P(redis_replica_logical_db:%s)\n", (yyvsp[0].str)));
8155
    db = atoi((yyvsp[0].str));
8156
    if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0)
8157
      yyerror("valid redis logical database index expected");
8158
    else cfg_parser->cfg->redis_replica_logical_db = db;
8159
  #else
8160
0
    OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
8161
0
  #endif
8162
0
    free((yyvsp[0].str));
8163
0
  }
8164
0
#line 8165 "util/configparser.c"
8165
0
    break;
8166
8167
0
  case 776:
8168
0
#line 4198 "./util/configparser.y"
8169
0
        {
8170
0
    OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
8171
0
    if (atoi((yyvsp[0].str)) < 0)
8172
0
      yyerror("positive number expected");
8173
0
    else {
8174
0
      if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str)))
8175
0
        fatal_exit("out of memory adding tcp connection limit");
8176
0
    }
8177
0
  }
8178
0
#line 8179 "util/configparser.c"
8179
0
    break;
8180
8181
0
  case 777:
8182
0
#line 4209 "./util/configparser.y"
8183
0
        {
8184
0
    OUTYY(("P(server_answer_cookie:%s)\n", (yyvsp[0].str)));
8185
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
8186
0
      yyerror("expected yes or no.");
8187
0
    else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0);
8188
0
    free((yyvsp[0].str));
8189
0
  }
8190
0
#line 8191 "util/configparser.c"
8191
0
    break;
8192
8193
0
  case 778:
8194
0
#line 4218 "./util/configparser.y"
8195
0
        {
8196
0
    uint8_t secret[32];
8197
0
    size_t secret_len = sizeof(secret);
8198
8199
0
    OUTYY(("P(server_cookie_secret:%s)\n", (yyvsp[0].str)));
8200
0
    if(sldns_str2wire_hex_buf((yyvsp[0].str), secret, &secret_len)
8201
0
    || (secret_len != 16))
8202
0
      yyerror("expected 128 bit hex string");
8203
0
    else {
8204
0
      cfg_parser->cfg->cookie_secret_len = secret_len;
8205
0
      memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret));
8206
0
    }
8207
0
    free((yyvsp[0].str));
8208
0
  }
8209
0
#line 8210 "util/configparser.c"
8210
0
    break;
8211
8212
0
  case 779:
8213
0
#line 4234 "./util/configparser.y"
8214
0
        {
8215
0
    OUTYY(("P(cookie_secret_file:%s)\n", (yyvsp[0].str)));
8216
0
    free(cfg_parser->cfg->cookie_secret_file);
8217
0
    cfg_parser->cfg->cookie_secret_file = (yyvsp[0].str);
8218
0
  }
8219
0
#line 8220 "util/configparser.c"
8220
0
    break;
8221
8222
0
  case 780:
8223
0
#line 4241 "./util/configparser.y"
8224
0
        {
8225
0
    OUTYY(("P(server_iter_scrub_ns:%s)\n", (yyvsp[0].str)));
8226
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8227
0
      yyerror("number expected");
8228
0
    else cfg_parser->cfg->iter_scrub_ns = atoi((yyvsp[0].str));
8229
0
    free((yyvsp[0].str));
8230
0
  }
8231
0
#line 8232 "util/configparser.c"
8232
0
    break;
8233
8234
0
  case 781:
8235
0
#line 4250 "./util/configparser.y"
8236
0
        {
8237
0
    OUTYY(("P(server_iter_scrub_cname:%s)\n", (yyvsp[0].str)));
8238
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8239
0
      yyerror("number expected");
8240
0
    else cfg_parser->cfg->iter_scrub_cname = atoi((yyvsp[0].str));
8241
0
    free((yyvsp[0].str));
8242
0
  }
8243
0
#line 8244 "util/configparser.c"
8244
0
    break;
8245
8246
0
  case 782:
8247
0
#line 4259 "./util/configparser.y"
8248
0
        {
8249
0
    OUTYY(("P(server_max_global_quota:%s)\n", (yyvsp[0].str)));
8250
0
    if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
8251
0
      yyerror("number expected");
8252
0
    else cfg_parser->cfg->max_global_quota = atoi((yyvsp[0].str));
8253
0
    free((yyvsp[0].str));
8254
0
  }
8255
0
#line 8256 "util/configparser.c"
8256
0
    break;
8257
8258
0
  case 783:
8259
0
#line 4268 "./util/configparser.y"
8260
0
        {
8261
0
    OUTYY(("P(server_iter_scrub_promiscuous:%s)\n", (yyvsp[0].str)));
8262
0
    if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
8263
0
      yyerror("expected yes or no.");
8264
0
    else cfg_parser->cfg->iter_scrub_promiscuous =
8265
0
      (strcmp((yyvsp[0].str), "yes")==0);
8266
0
    free((yyvsp[0].str));
8267
0
  }
8268
0
#line 8269 "util/configparser.c"
8269
0
    break;
8270
8271
0
  case 784:
8272
0
#line 4278 "./util/configparser.y"
8273
0
        {
8274
0
    OUTYY(("\nP(ipset:)\n"));
8275
0
    cfg_parser->started_toplevel = 1;
8276
0
  }
8277
0
#line 8278 "util/configparser.c"
8278
0
    break;
8279
8280
0
  case 789:
8281
0
#line 4288 "./util/configparser.y"
8282
0
        {
8283
  #ifdef USE_IPSET
8284
    OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
8285
    if(cfg_parser->cfg->ipset_name_v4)
8286
      yyerror("ipset name v4 override, there must be one "
8287
        "name for ip v4");
8288
    free(cfg_parser->cfg->ipset_name_v4);
8289
    cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
8290
  #else
8291
0
    OUTYY(("P(Compiled without ipset, ignoring)\n"));
8292
0
    free((yyvsp[0].str));
8293
0
  #endif
8294
0
  }
8295
0
#line 8296 "util/configparser.c"
8296
0
    break;
8297
8298
0
  case 790:
8299
0
#line 4303 "./util/configparser.y"
8300
0
        {
8301
  #ifdef USE_IPSET
8302
    OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
8303
    if(cfg_parser->cfg->ipset_name_v6)
8304
      yyerror("ipset name v6 override, there must be one "
8305
        "name for ip v6");
8306
    free(cfg_parser->cfg->ipset_name_v6);
8307
    cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
8308
  #else
8309
0
    OUTYY(("P(Compiled without ipset, ignoring)\n"));
8310
0
    free((yyvsp[0].str));
8311
0
  #endif
8312
0
  }
8313
0
#line 8314 "util/configparser.c"
8314
0
    break;
8315
8316
8317
0
#line 8318 "util/configparser.c"
8318
8319
0
      default: break;
8320
0
    }
8321
  /* User semantic actions sometimes alter yychar, and that requires
8322
     that yytoken be updated with the new translation.  We take the
8323
     approach of translating immediately before every use of yytoken.
8324
     One alternative is translating here after every semantic action,
8325
     but that translation would be missed if the semantic action invokes
8326
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
8327
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
8328
     incorrect destructor might then be invoked immediately.  In the
8329
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
8330
     to an incorrect destructor call or verbose syntax error message
8331
     before the lookahead is translated.  */
8332
0
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
8333
8334
0
  YYPOPSTACK (yylen);
8335
0
  yylen = 0;
8336
0
  YY_STACK_PRINT (yyss, yyssp);
8337
8338
0
  *++yyvsp = yyval;
8339
8340
  /* Now 'shift' the result of the reduction.  Determine what state
8341
     that goes to, based on the state we popped back to and the rule
8342
     number reduced by.  */
8343
0
  {
8344
0
    const int yylhs = yyr1[yyn] - YYNTOKENS;
8345
0
    const int yyi = yypgoto[yylhs] + *yyssp;
8346
0
    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
8347
0
               ? yytable[yyi]
8348
0
               : yydefgoto[yylhs]);
8349
0
  }
8350
8351
0
  goto yynewstate;
8352
8353
8354
/*--------------------------------------.
8355
| yyerrlab -- here on detecting error.  |
8356
`--------------------------------------*/
8357
0
yyerrlab:
8358
  /* Make sure we have latest lookahead translation.  See comments at
8359
     user semantic actions for why this is necessary.  */
8360
0
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
8361
8362
  /* If not already recovering from an error, report this error.  */
8363
0
  if (!yyerrstatus)
8364
0
    {
8365
0
      ++yynerrs;
8366
0
#if ! YYERROR_VERBOSE
8367
0
      yyerror (YY_("syntax error"));
8368
#else
8369
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
8370
                                        yyssp, yytoken)
8371
      {
8372
        char const *yymsgp = YY_("syntax error");
8373
        int yysyntax_error_status;
8374
        yysyntax_error_status = YYSYNTAX_ERROR;
8375
        if (yysyntax_error_status == 0)
8376
          yymsgp = yymsg;
8377
        else if (yysyntax_error_status == 1)
8378
          {
8379
            if (yymsg != yymsgbuf)
8380
              YYSTACK_FREE (yymsg);
8381
            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
8382
            if (!yymsg)
8383
              {
8384
                yymsg = yymsgbuf;
8385
                yymsg_alloc = sizeof yymsgbuf;
8386
                yysyntax_error_status = 2;
8387
              }
8388
            else
8389
              {
8390
                yysyntax_error_status = YYSYNTAX_ERROR;
8391
                yymsgp = yymsg;
8392
              }
8393
          }
8394
        yyerror (yymsgp);
8395
        if (yysyntax_error_status == 2)
8396
          goto yyexhaustedlab;
8397
      }
8398
# undef YYSYNTAX_ERROR
8399
#endif
8400
0
    }
8401
8402
8403
8404
0
  if (yyerrstatus == 3)
8405
0
    {
8406
      /* If just tried and failed to reuse lookahead token after an
8407
         error, discard it.  */
8408
8409
0
      if (yychar <= YYEOF)
8410
0
        {
8411
          /* Return failure if at end of input.  */
8412
0
          if (yychar == YYEOF)
8413
0
            YYABORT;
8414
0
        }
8415
0
      else
8416
0
        {
8417
0
          yydestruct ("Error: discarding",
8418
0
                      yytoken, &yylval);
8419
0
          yychar = YYEMPTY;
8420
0
        }
8421
0
    }
8422
8423
  /* Else will try to reuse lookahead token after shifting the error
8424
     token.  */
8425
0
  goto yyerrlab1;
8426
8427
8428
/*---------------------------------------------------.
8429
| yyerrorlab -- error raised explicitly by YYERROR.  |
8430
`---------------------------------------------------*/
8431
0
yyerrorlab:
8432
  /* Pacify compilers when the user code never invokes YYERROR and the
8433
     label yyerrorlab therefore never appears in user code.  */
8434
0
  if (0)
8435
0
    YYERROR;
8436
8437
  /* Do not reclaim the symbols of the rule whose action triggered
8438
     this YYERROR.  */
8439
0
  YYPOPSTACK (yylen);
8440
0
  yylen = 0;
8441
0
  YY_STACK_PRINT (yyss, yyssp);
8442
0
  yystate = *yyssp;
8443
0
  goto yyerrlab1;
8444
8445
8446
/*-------------------------------------------------------------.
8447
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
8448
`-------------------------------------------------------------*/
8449
0
yyerrlab1:
8450
0
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
8451
8452
0
  for (;;)
8453
0
    {
8454
0
      yyn = yypact[yystate];
8455
0
      if (!yypact_value_is_default (yyn))
8456
0
        {
8457
0
          yyn += YYTERROR;
8458
0
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
8459
0
            {
8460
0
              yyn = yytable[yyn];
8461
0
              if (0 < yyn)
8462
0
                break;
8463
0
            }
8464
0
        }
8465
8466
      /* Pop the current state because it cannot handle the error token.  */
8467
0
      if (yyssp == yyss)
8468
0
        YYABORT;
8469
8470
8471
0
      yydestruct ("Error: popping",
8472
0
                  yystos[yystate], yyvsp);
8473
0
      YYPOPSTACK (1);
8474
0
      yystate = *yyssp;
8475
0
      YY_STACK_PRINT (yyss, yyssp);
8476
0
    }
8477
8478
0
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
8479
0
  *++yyvsp = yylval;
8480
0
  YY_IGNORE_MAYBE_UNINITIALIZED_END
8481
8482
8483
  /* Shift the error token.  */
8484
0
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
8485
8486
0
  yystate = yyn;
8487
0
  goto yynewstate;
8488
8489
8490
/*-------------------------------------.
8491
| yyacceptlab -- YYACCEPT comes here.  |
8492
`-------------------------------------*/
8493
0
yyacceptlab:
8494
0
  yyresult = 0;
8495
0
  goto yyreturn;
8496
8497
8498
/*-----------------------------------.
8499
| yyabortlab -- YYABORT comes here.  |
8500
`-----------------------------------*/
8501
0
yyabortlab:
8502
0
  yyresult = 1;
8503
0
  goto yyreturn;
8504
8505
8506
0
#if !defined yyoverflow || YYERROR_VERBOSE
8507
/*-------------------------------------------------.
8508
| yyexhaustedlab -- memory exhaustion comes here.  |
8509
`-------------------------------------------------*/
8510
0
yyexhaustedlab:
8511
0
  yyerror (YY_("memory exhausted"));
8512
0
  yyresult = 2;
8513
  /* Fall through.  */
8514
0
#endif
8515
8516
8517
/*-----------------------------------------------------.
8518
| yyreturn -- parsing is finished, return the result.  |
8519
`-----------------------------------------------------*/
8520
0
yyreturn:
8521
0
  if (yychar != YYEMPTY)
8522
0
    {
8523
      /* Make sure we have latest lookahead translation.  See comments at
8524
         user semantic actions for why this is necessary.  */
8525
0
      yytoken = YYTRANSLATE (yychar);
8526
0
      yydestruct ("Cleanup: discarding lookahead",
8527
0
                  yytoken, &yylval);
8528
0
    }
8529
  /* Do not reclaim the symbols of the rule whose action triggered
8530
     this YYABORT or YYACCEPT.  */
8531
0
  YYPOPSTACK (yylen);
8532
0
  YY_STACK_PRINT (yyss, yyssp);
8533
0
  while (yyssp != yyss)
8534
0
    {
8535
0
      yydestruct ("Cleanup: popping",
8536
0
                  yystos[+*yyssp], yyvsp);
8537
0
      YYPOPSTACK (1);
8538
0
    }
8539
0
#ifndef yyoverflow
8540
0
  if (yyss != yyssa)
8541
0
    YYSTACK_FREE (yyss);
8542
0
#endif
8543
#if YYERROR_VERBOSE
8544
  if (yymsg != yymsgbuf)
8545
    YYSTACK_FREE (yymsg);
8546
#endif
8547
0
  return yyresult;
8548
0
}
8549
#line 4317 "./util/configparser.y"
8550
8551
8552
/* parse helper routines could be here */
8553
static void
8554
validate_respip_action(const char* action)
8555
0
{
8556
0
  if(strcmp(action, "deny")!=0 &&
8557
0
    strcmp(action, "redirect")!=0 &&
8558
0
    strcmp(action, "inform")!=0 &&
8559
0
    strcmp(action, "inform_deny")!=0 &&
8560
0
    strcmp(action, "always_transparent")!=0 &&
8561
0
    strcmp(action, "always_refuse")!=0 &&
8562
0
    strcmp(action, "always_nxdomain")!=0)
8563
0
  {
8564
0
    yyerror("response-ip action: expected deny, redirect, "
8565
0
      "inform, inform_deny, always_transparent, "
8566
0
      "always_refuse or always_nxdomain");
8567
0
  }
8568
0
}
8569
8570
static void
8571
validate_acl_action(const char* action)
8572
0
{
8573
0
  if(strcmp(action, "deny")!=0 &&
8574
0
    strcmp(action, "refuse")!=0 &&
8575
0
    strcmp(action, "deny_non_local")!=0 &&
8576
0
    strcmp(action, "refuse_non_local")!=0 &&
8577
0
    strcmp(action, "allow_setrd")!=0 &&
8578
0
    strcmp(action, "allow")!=0 &&
8579
0
    strcmp(action, "allow_snoop")!=0 &&
8580
0
    strcmp(action, "allow_cookie")!=0)
8581
0
  {
8582
0
    yyerror("expected deny, refuse, deny_non_local, "
8583
0
      "refuse_non_local, allow, allow_setrd, "
8584
0
      "allow_snoop or allow_cookie as access control action");
8585
0
  }
8586
0
}