Coverage Report

Created: 2025-07-11 06:08

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