Coverage Report

Created: 2025-10-10 06:37

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