1#ifndef lint
2static const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
3#endif
4
5#define YYBYACC 1
6#define YYMAJOR 1
7#define YYMINOR 9
8
9#define YYEMPTY        (-1)
10#define yyclearin      (yychar = YYEMPTY)
11#define yyerrok        (yyerrflag = 0)
12#define YYRECOVERING() (yyerrflag != 0)
13
14#define YYPREFIX "yy"
15
16#define YYPURE 0
17
18#line 39 "util/configparser.y"
19#include "config.h"
20
21#include <stdarg.h>
22#include <stdio.h>
23#include <string.h>
24#include <stdlib.h>
25#include <assert.h>
26
27#include "util/configyyrename.h"
28#include "util/config_file.h"
29#include "util/net_help.h"
30
31int ub_c_lex(void);
32void ub_c_error(const char *message);
33
34/* these need to be global, otherwise they cannot be used inside yacc */
35extern struct config_parser_state* cfg_parser;
36
37#if 0
38#define OUTYY(s)  printf s /* used ONLY when debugging */
39#else
40#define OUTYY(s)
41#endif
42
43#line 64 "util/configparser.y"
44#ifdef YYSTYPE
45#undef  YYSTYPE_IS_DECLARED
46#define YYSTYPE_IS_DECLARED 1
47#endif
48#ifndef YYSTYPE_IS_DECLARED
49#define YYSTYPE_IS_DECLARED 1
50typedef union {
51	char*	str;
52} YYSTYPE;
53#endif /* !YYSTYPE_IS_DECLARED */
54#line 54 "util/configparser.c"
55
56/* compatibility with bison */
57#ifdef YYPARSE_PARAM
58/* compatibility with FreeBSD */
59# ifdef YYPARSE_PARAM_TYPE
60#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
61# else
62#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
63# endif
64#else
65# define YYPARSE_DECL() yyparse(void)
66#endif
67
68/* Parameters sent to lex. */
69#ifdef YYLEX_PARAM
70# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
71# define YYLEX yylex(YYLEX_PARAM)
72#else
73# define YYLEX_DECL() yylex(void)
74# define YYLEX yylex()
75#endif
76
77/* Parameters sent to yyerror. */
78#ifndef YYERROR_DECL
79#define YYERROR_DECL() yyerror(const char *s)
80#endif
81#ifndef YYERROR_CALL
82#define YYERROR_CALL(msg) yyerror(msg)
83#endif
84
85extern int YYPARSE_DECL();
86
87#define SPACE 257
88#define LETTER 258
89#define NEWLINE 259
90#define COMMENT 260
91#define COLON 261
92#define ANY 262
93#define ZONESTR 263
94#define STRING_ARG 264
95#define VAR_SERVER 265
96#define VAR_VERBOSITY 266
97#define VAR_NUM_THREADS 267
98#define VAR_PORT 268
99#define VAR_OUTGOING_RANGE 269
100#define VAR_INTERFACE 270
101#define VAR_DO_IP4 271
102#define VAR_DO_IP6 272
103#define VAR_DO_UDP 273
104#define VAR_DO_TCP 274
105#define VAR_CHROOT 275
106#define VAR_USERNAME 276
107#define VAR_DIRECTORY 277
108#define VAR_LOGFILE 278
109#define VAR_PIDFILE 279
110#define VAR_MSG_CACHE_SIZE 280
111#define VAR_MSG_CACHE_SLABS 281
112#define VAR_NUM_QUERIES_PER_THREAD 282
113#define VAR_RRSET_CACHE_SIZE 283
114#define VAR_RRSET_CACHE_SLABS 284
115#define VAR_OUTGOING_NUM_TCP 285
116#define VAR_INFRA_HOST_TTL 286
117#define VAR_INFRA_LAME_TTL 287
118#define VAR_INFRA_CACHE_SLABS 288
119#define VAR_INFRA_CACHE_NUMHOSTS 289
120#define VAR_INFRA_CACHE_LAME_SIZE 290
121#define VAR_NAME 291
122#define VAR_STUB_ZONE 292
123#define VAR_STUB_HOST 293
124#define VAR_STUB_ADDR 294
125#define VAR_TARGET_FETCH_POLICY 295
126#define VAR_HARDEN_SHORT_BUFSIZE 296
127#define VAR_HARDEN_LARGE_QUERIES 297
128#define VAR_FORWARD_ZONE 298
129#define VAR_FORWARD_HOST 299
130#define VAR_FORWARD_ADDR 300
131#define VAR_DO_NOT_QUERY_ADDRESS 301
132#define VAR_HIDE_IDENTITY 302
133#define VAR_HIDE_VERSION 303
134#define VAR_IDENTITY 304
135#define VAR_VERSION 305
136#define VAR_HARDEN_GLUE 306
137#define VAR_MODULE_CONF 307
138#define VAR_TRUST_ANCHOR_FILE 308
139#define VAR_TRUST_ANCHOR 309
140#define VAR_VAL_OVERRIDE_DATE 310
141#define VAR_BOGUS_TTL 311
142#define VAR_VAL_CLEAN_ADDITIONAL 312
143#define VAR_VAL_PERMISSIVE_MODE 313
144#define VAR_INCOMING_NUM_TCP 314
145#define VAR_MSG_BUFFER_SIZE 315
146#define VAR_KEY_CACHE_SIZE 316
147#define VAR_KEY_CACHE_SLABS 317
148#define VAR_TRUSTED_KEYS_FILE 318
149#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319
150#define VAR_USE_SYSLOG 320
151#define VAR_OUTGOING_INTERFACE 321
152#define VAR_ROOT_HINTS 322
153#define VAR_DO_NOT_QUERY_LOCALHOST 323
154#define VAR_CACHE_MAX_TTL 324
155#define VAR_HARDEN_DNSSEC_STRIPPED 325
156#define VAR_ACCESS_CONTROL 326
157#define VAR_LOCAL_ZONE 327
158#define VAR_LOCAL_DATA 328
159#define VAR_INTERFACE_AUTOMATIC 329
160#define VAR_STATISTICS_INTERVAL 330
161#define VAR_DO_DAEMONIZE 331
162#define VAR_USE_CAPS_FOR_ID 332
163#define VAR_STATISTICS_CUMULATIVE 333
164#define VAR_OUTGOING_PORT_PERMIT 334
165#define VAR_OUTGOING_PORT_AVOID 335
166#define VAR_DLV_ANCHOR_FILE 336
167#define VAR_DLV_ANCHOR 337
168#define VAR_NEG_CACHE_SIZE 338
169#define VAR_HARDEN_REFERRAL_PATH 339
170#define VAR_PRIVATE_ADDRESS 340
171#define VAR_PRIVATE_DOMAIN 341
172#define VAR_REMOTE_CONTROL 342
173#define VAR_CONTROL_ENABLE 343
174#define VAR_CONTROL_INTERFACE 344
175#define VAR_CONTROL_PORT 345
176#define VAR_SERVER_KEY_FILE 346
177#define VAR_SERVER_CERT_FILE 347
178#define VAR_CONTROL_KEY_FILE 348
179#define VAR_CONTROL_CERT_FILE 349
180#define VAR_EXTENDED_STATISTICS 350
181#define VAR_LOCAL_DATA_PTR 351
182#define VAR_JOSTLE_TIMEOUT 352
183#define VAR_STUB_PRIME 353
184#define VAR_UNWANTED_REPLY_THRESHOLD 354
185#define VAR_LOG_TIME_ASCII 355
186#define VAR_DOMAIN_INSECURE 356
187#define VAR_PYTHON 357
188#define VAR_PYTHON_SCRIPT 358
189#define VAR_VAL_SIG_SKEW_MIN 359
190#define VAR_VAL_SIG_SKEW_MAX 360
191#define VAR_CACHE_MIN_TTL 361
192#define VAR_VAL_LOG_LEVEL 362
193#define VAR_AUTO_TRUST_ANCHOR_FILE 363
194#define VAR_KEEP_MISSING 364
195#define VAR_ADD_HOLDDOWN 365
196#define VAR_DEL_HOLDDOWN 366
197#define VAR_SO_RCVBUF 367
198#define VAR_EDNS_BUFFER_SIZE 368
199#define VAR_PREFETCH 369
200#define VAR_PREFETCH_KEY 370
201#define VAR_SO_SNDBUF 371
202#define VAR_HARDEN_BELOW_NXDOMAIN 372
203#define VAR_IGNORE_CD_FLAG 373
204#define VAR_LOG_QUERIES 374
205#define VAR_TCP_UPSTREAM 375
206#define VAR_SSL_UPSTREAM 376
207#define VAR_SSL_SERVICE_KEY 377
208#define VAR_SSL_SERVICE_PEM 378
209#define VAR_SSL_PORT 379
210#define VAR_FORWARD_FIRST 380
211#define VAR_STUB_FIRST 381
212#define VAR_MINIMAL_RESPONSES 382
213#define VAR_RRSET_ROUNDROBIN 383
214#define YYERRCODE 256
215static const short yylhs[] = {                           -1,
216    0,    0,    1,    1,    1,    1,    1,    2,    3,    3,
217   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
218   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
219   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
220   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
221   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
222   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
223   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
224   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
225   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
226   12,   12,   12,   12,   12,   12,   12,   12,    4,    5,
227    5,  111,  111,  111,  111,  111,    6,    7,    7,  117,
228  117,  117,  117,   13,   14,   70,   73,   82,   15,   21,
229   61,   16,   74,   75,   32,   54,   69,   17,   18,   19,
230   20,  104,  105,  106,  107,  108,   71,   60,   86,  103,
231   22,   23,   24,   25,   26,   62,   76,   77,   92,   48,
232   58,   49,   87,   42,   43,   44,   45,   96,  100,   97,
233   55,   27,   28,   29,   84,   30,   31,   33,   34,   36,
234   37,   35,   38,   39,   40,   46,   65,  101,   79,   72,
235   80,   81,   98,   99,   85,   41,   63,   66,   47,   50,
236   88,   89,   64,   90,   51,   52,   53,  102,   91,   59,
237   93,   94,   95,   56,   57,   78,   67,   68,   83,  109,
238  110,  112,  113,  114,  116,  115,  118,  119,  120,  121,
239   10,   11,   11,  122,  122,  122,  122,  122,  122,  122,
240  123,  125,  124,  126,  127,  128,  129,    8,    9,    9,
241  130,  131,
242};
243static const short yylen[] = {                            2,
244    0,    2,    2,    2,    2,    2,    2,    1,    2,    0,
245    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
246    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
247    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
248    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
249    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
250    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
251    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
252    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
253    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
254    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
255    0,    1,    1,    1,    1,    1,    1,    2,    0,    1,
256    1,    1,    1,    2,    2,    2,    2,    2,    2,    2,
257    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
258    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
259    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
260    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
261    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
262    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
263    2,    2,    2,    2,    2,    2,    2,    3,    2,    2,
264    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
265    2,    2,    2,    2,    2,    2,    3,    2,    2,    2,
266    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
267    1,    2,    0,    1,    1,    1,    1,    1,    1,    1,
268    2,    2,    2,    2,    2,    2,    2,    1,    2,    0,
269    1,    2,
270};
271static const short yydefred[] = {                         1,
272    0,    8,  109,  117,  231,  248,    2,   10,  111,  119,
273  250,  233,    0,    0,    0,    0,    0,    0,    0,    0,
274    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
275    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
276    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
277    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
278    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
279    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
280    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
281    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
282    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
283    0,    0,    0,    0,    0,    9,   11,   12,   13,   14,
284   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,
285   25,   26,   27,   28,   29,   30,   31,   32,   33,   34,
286   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
287   45,   46,   47,   48,   49,   50,   51,   52,   53,   54,
288   55,   56,   57,   58,   59,   60,   61,   62,   63,   64,
289   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,
290   75,   76,   77,   78,   79,   80,   81,   82,   83,   84,
291   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
292   95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
293  105,  106,  107,  108,    0,    0,    0,    0,    0,  110,
294  112,  113,  114,  115,  116,    0,    0,    0,    0,  118,
295  120,  121,  122,  123,    0,  249,  251,    0,    0,    0,
296    0,    0,    0,    0,  232,  234,  235,  236,  237,  238,
297  239,  240,  125,  124,  129,  132,  130,  138,  139,  140,
298  141,  151,  152,  153,  154,  155,  172,  173,  174,  176,
299  177,  135,  178,  179,  182,  180,  181,  183,  184,  185,
300  196,  164,  165,  166,  167,  186,  199,  160,  162,  200,
301  205,  206,  207,  136,  171,  214,  215,  161,  210,  148,
302  131,  156,  197,  203,  187,    0,    0,  218,  137,  126,
303  147,  190,  127,  133,  134,  157,  158,  216,  189,  191,
304  192,  128,  219,  175,  195,  149,  163,  201,  202,  204,
305  209,  159,  213,  211,  212,  168,  170,  193,  194,  169,
306  188,  208,  150,  142,  143,  144,  145,  146,  220,  221,
307  222,  223,  224,  226,  225,  227,  228,  229,  230,  252,
308  241,  243,  242,  244,  245,  246,  247,  198,  217,
309};
310static const short yydgoto[] = {                          1,
311    7,    8,   13,    9,   14,   10,   15,   11,   16,   12,
312   17,  116,  117,  118,  119,  120,  121,  122,  123,  124,
313  125,  126,  127,  128,  129,  130,  131,  132,  133,  134,
314  135,  136,  137,  138,  139,  140,  141,  142,  143,  144,
315  145,  146,  147,  148,  149,  150,  151,  152,  153,  154,
316  155,  156,  157,  158,  159,  160,  161,  162,  163,  164,
317  165,  166,  167,  168,  169,  170,  171,  172,  173,  174,
318  175,  176,  177,  178,  179,  180,  181,  182,  183,  184,
319  185,  186,  187,  188,  189,  190,  191,  192,  193,  194,
320  195,  196,  197,  198,  199,  200,  201,  202,  203,  204,
321  205,  206,  207,  208,  209,  210,  211,  212,  213,  214,
322  220,  221,  222,  223,  224,  225,  230,  231,  232,  233,
323  234,  245,  246,  247,  248,  249,  250,  251,  252,  236,
324  237,
325};
326static const short yysindex[] = {                         0,
327 -172,    0,    0,    0,    0,    0,    0,    0,    0,    0,
328    0,    0, -260, -209, -202, -358, -216, -233, -232, -231,
329 -230, -226, -225, -224, -181, -178, -177, -176, -143, -140,
330 -139, -130, -129, -128, -127, -126, -125, -124, -123, -122,
331 -121, -119, -118, -117, -116, -115, -114, -113, -112, -111,
332 -110, -109, -108, -107, -106, -105, -104, -103, -102, -101,
333 -100,  -99,  -98,  -97,  -96,  -95,  -93,  -91,  -90,  -89,
334  -88,  -87,  -85,  -84,  -83,  -82,  -81,  -80,  -78,  -77,
335  -76,  -75,  -74,  -73,  -72,  -71,  -70,  -69,  -68,  -67,
336  -66,  -65,  -64,  -63,  -62,  -61,  -60,  -59,  -58,  -57,
337  -56,  -55,  -54,  -53,  -52,  -51,  -50,  -49,  -48,  -47,
338  -46,  -45,  -44,  -43,  -42,    0,    0,    0,    0,    0,
339    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
340    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
341    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
342    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
343    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
344    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
345    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
346    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
347    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
348    0,    0,    0,    0,  -41,  -40,  -39,  -38,  -37,    0,
349    0,    0,    0,    0,    0,  -36,  -35,  -34,  -33,    0,
350    0,    0,    0,    0,  -32,    0,    0,  -31,  -30,  -29,
351  -28,  -27,  -26,  -25,    0,    0,    0,    0,    0,    0,
352    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
353    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
354    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
355    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
356    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
357    0,    0,    0,    0,    0,  -24,  -23,    0,    0,    0,
358    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
359    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
360    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
361    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
362    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
363    0,    0,    0,    0,    0,    0,    0,    0,    0,
364};
365static const short yyrindex[] = {                         0,
366    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
367    0,    0,    1,    2,    3,    4,    5,    0,    0,    0,
368    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
369    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
370    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
371    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
372    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
373    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
374    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
375    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
376    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
377    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
378    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
379    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
380    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
381    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
382    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
383    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
384    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
385    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
386    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
387    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
388    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
389    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
390    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
391    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
392    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
393    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
394    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
395    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
396    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
397    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
398    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
399    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
400    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
401    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
402    0,    0,    0,    0,    0,    0,    0,    0,    0,
403};
404static const short yygindex[] = {                         0,
405    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
406    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
407    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
408    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
409    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
410    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
411    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
412    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
413    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
414    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
415    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
416    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
417    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
418    0,
419};
420#define YYTABLESIZE 362
421static const short yytable[] = {                        235,
422    3,    4,    5,    6,    7,   18,   19,   20,   21,   22,
423   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
424   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
425  253,  254,  255,  256,   43,   44,   45,  257,  258,  259,
426   46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
427   56,   57,   58,   59,   60,   61,   62,   63,   64,   65,
428   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,
429   76,   77,   78,   79,   80,   81,   82,   83,   84,   85,
430   86,  215,  260,  216,  217,  261,  262,  263,  226,   87,
431   88,   89,    2,   90,   91,   92,  227,  228,   93,   94,
432   95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
433  105,  106,  107,  108,  109,  110,  111,  112,  113,    3,
434  264,  114,  115,  265,  266,    4,  238,  239,  240,  241,
435  242,  243,  244,  267,  268,  269,  270,  271,  272,  273,
436  274,  275,  276,  218,  277,  278,  279,  280,  281,  282,
437  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,
438  293,  294,  295,  296,  297,  298,  299,  300,  301,    5,
439  302,  219,  303,  304,  305,  306,  307,  229,  308,  309,
440  310,  311,  312,  313,    6,  314,  315,  316,  317,  318,
441  319,  320,  321,  322,  323,  324,  325,  326,  327,  328,
442  329,  330,  331,  332,  333,  334,  335,  336,  337,  338,
443  339,  340,  341,  342,  343,  344,  345,  346,  347,  348,
444  349,  350,  351,  352,  353,  354,  355,  356,  357,  358,
445  359,  360,  361,  362,  363,  364,  365,  366,  367,  368,
446  369,    0,    0,    0,    0,    0,    0,    0,    0,    0,
447    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
448    0,    0,    0,    0,    0,    3,    4,    5,    6,    7,
449    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
450    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
451    0,    0,    3,    4,    5,    6,    7,    0,    3,    4,
452    5,    6,    7,    0,    0,    0,    0,    0,    0,    0,
453    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
454    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
455    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
456    0,    0,    3,    4,    5,    6,    7,    0,    0,    0,
457    0,    0,    0,    0,    0,    0,    0,    3,    4,    5,
458    6,    7,
459};
460static const short yycheck[] = {                        358,
461    0,    0,    0,    0,    0,  266,  267,  268,  269,  270,
462  271,  272,  273,  274,  275,  276,  277,  278,  279,  280,
463  281,  282,  283,  284,  285,  286,  287,  288,  289,  290,
464  264,  264,  264,  264,  295,  296,  297,  264,  264,  264,
465  301,  302,  303,  304,  305,  306,  307,  308,  309,  310,
466  311,  312,  313,  314,  315,  316,  317,  318,  319,  320,
467  321,  322,  323,  324,  325,  326,  327,  328,  329,  330,
468  331,  332,  333,  334,  335,  336,  337,  338,  339,  340,
469  341,  291,  264,  293,  294,  264,  264,  264,  291,  350,
470  351,  352,  265,  354,  355,  356,  299,  300,  359,  360,
471  361,  362,  363,  364,  365,  366,  367,  368,  369,  370,
472  371,  372,  373,  374,  375,  376,  377,  378,  379,  292,
473  264,  382,  383,  264,  264,  298,  343,  344,  345,  346,
474  347,  348,  349,  264,  264,  264,  264,  264,  264,  264,
475  264,  264,  264,  353,  264,  264,  264,  264,  264,  264,
476  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
477  264,  264,  264,  264,  264,  264,  264,  264,  264,  342,
478  264,  381,  264,  264,  264,  264,  264,  380,  264,  264,
479  264,  264,  264,  264,  357,  264,  264,  264,  264,  264,
480  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
481  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
482  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
483  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
484  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
485  264,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
486   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
487   -1,   -1,   -1,   -1,   -1,  265,  265,  265,  265,  265,
488   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
489   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
490   -1,   -1,  292,  292,  292,  292,  292,   -1,  298,  298,
491  298,  298,  298,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
492   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
493   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
494   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
495   -1,   -1,  342,  342,  342,  342,  342,   -1,   -1,   -1,
496   -1,   -1,   -1,   -1,   -1,   -1,   -1,  357,  357,  357,
497  357,  357,
498};
499#define YYFINAL 1
500#ifndef YYDEBUG
501#define YYDEBUG 0
502#endif
503#define YYMAXTOKEN 383
504#if YYDEBUG
505static const char *yyname[] = {
506
507"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5090,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SPACE","LETTER","NEWLINE",
514"COMMENT","COLON","ANY","ZONESTR","STRING_ARG","VAR_SERVER","VAR_VERBOSITY",
515"VAR_NUM_THREADS","VAR_PORT","VAR_OUTGOING_RANGE","VAR_INTERFACE","VAR_DO_IP4",
516"VAR_DO_IP6","VAR_DO_UDP","VAR_DO_TCP","VAR_CHROOT","VAR_USERNAME",
517"VAR_DIRECTORY","VAR_LOGFILE","VAR_PIDFILE","VAR_MSG_CACHE_SIZE",
518"VAR_MSG_CACHE_SLABS","VAR_NUM_QUERIES_PER_THREAD","VAR_RRSET_CACHE_SIZE",
519"VAR_RRSET_CACHE_SLABS","VAR_OUTGOING_NUM_TCP","VAR_INFRA_HOST_TTL",
520"VAR_INFRA_LAME_TTL","VAR_INFRA_CACHE_SLABS","VAR_INFRA_CACHE_NUMHOSTS",
521"VAR_INFRA_CACHE_LAME_SIZE","VAR_NAME","VAR_STUB_ZONE","VAR_STUB_HOST",
522"VAR_STUB_ADDR","VAR_TARGET_FETCH_POLICY","VAR_HARDEN_SHORT_BUFSIZE",
523"VAR_HARDEN_LARGE_QUERIES","VAR_FORWARD_ZONE","VAR_FORWARD_HOST",
524"VAR_FORWARD_ADDR","VAR_DO_NOT_QUERY_ADDRESS","VAR_HIDE_IDENTITY",
525"VAR_HIDE_VERSION","VAR_IDENTITY","VAR_VERSION","VAR_HARDEN_GLUE",
526"VAR_MODULE_CONF","VAR_TRUST_ANCHOR_FILE","VAR_TRUST_ANCHOR",
527"VAR_VAL_OVERRIDE_DATE","VAR_BOGUS_TTL","VAR_VAL_CLEAN_ADDITIONAL",
528"VAR_VAL_PERMISSIVE_MODE","VAR_INCOMING_NUM_TCP","VAR_MSG_BUFFER_SIZE",
529"VAR_KEY_CACHE_SIZE","VAR_KEY_CACHE_SLABS","VAR_TRUSTED_KEYS_FILE",
530"VAR_VAL_NSEC3_KEYSIZE_ITERATIONS","VAR_USE_SYSLOG","VAR_OUTGOING_INTERFACE",
531"VAR_ROOT_HINTS","VAR_DO_NOT_QUERY_LOCALHOST","VAR_CACHE_MAX_TTL",
532"VAR_HARDEN_DNSSEC_STRIPPED","VAR_ACCESS_CONTROL","VAR_LOCAL_ZONE",
533"VAR_LOCAL_DATA","VAR_INTERFACE_AUTOMATIC","VAR_STATISTICS_INTERVAL",
534"VAR_DO_DAEMONIZE","VAR_USE_CAPS_FOR_ID","VAR_STATISTICS_CUMULATIVE",
535"VAR_OUTGOING_PORT_PERMIT","VAR_OUTGOING_PORT_AVOID","VAR_DLV_ANCHOR_FILE",
536"VAR_DLV_ANCHOR","VAR_NEG_CACHE_SIZE","VAR_HARDEN_REFERRAL_PATH",
537"VAR_PRIVATE_ADDRESS","VAR_PRIVATE_DOMAIN","VAR_REMOTE_CONTROL",
538"VAR_CONTROL_ENABLE","VAR_CONTROL_INTERFACE","VAR_CONTROL_PORT",
539"VAR_SERVER_KEY_FILE","VAR_SERVER_CERT_FILE","VAR_CONTROL_KEY_FILE",
540"VAR_CONTROL_CERT_FILE","VAR_EXTENDED_STATISTICS","VAR_LOCAL_DATA_PTR",
541"VAR_JOSTLE_TIMEOUT","VAR_STUB_PRIME","VAR_UNWANTED_REPLY_THRESHOLD",
542"VAR_LOG_TIME_ASCII","VAR_DOMAIN_INSECURE","VAR_PYTHON","VAR_PYTHON_SCRIPT",
543"VAR_VAL_SIG_SKEW_MIN","VAR_VAL_SIG_SKEW_MAX","VAR_CACHE_MIN_TTL",
544"VAR_VAL_LOG_LEVEL","VAR_AUTO_TRUST_ANCHOR_FILE","VAR_KEEP_MISSING",
545"VAR_ADD_HOLDDOWN","VAR_DEL_HOLDDOWN","VAR_SO_RCVBUF","VAR_EDNS_BUFFER_SIZE",
546"VAR_PREFETCH","VAR_PREFETCH_KEY","VAR_SO_SNDBUF","VAR_HARDEN_BELOW_NXDOMAIN",
547"VAR_IGNORE_CD_FLAG","VAR_LOG_QUERIES","VAR_TCP_UPSTREAM","VAR_SSL_UPSTREAM",
548"VAR_SSL_SERVICE_KEY","VAR_SSL_SERVICE_PEM","VAR_SSL_PORT","VAR_FORWARD_FIRST",
549"VAR_STUB_FIRST","VAR_MINIMAL_RESPONSES","VAR_RRSET_ROUNDROBIN",
550};
551static const char *yyrule[] = {
552"$accept : toplevelvars",
553"toplevelvars :",
554"toplevelvars : toplevelvars toplevelvar",
555"toplevelvar : serverstart contents_server",
556"toplevelvar : stubstart contents_stub",
557"toplevelvar : forwardstart contents_forward",
558"toplevelvar : pythonstart contents_py",
559"toplevelvar : rcstart contents_rc",
560"serverstart : VAR_SERVER",
561"contents_server : contents_server content_server",
562"contents_server :",
563"content_server : server_num_threads",
564"content_server : server_verbosity",
565"content_server : server_port",
566"content_server : server_outgoing_range",
567"content_server : server_do_ip4",
568"content_server : server_do_ip6",
569"content_server : server_do_udp",
570"content_server : server_do_tcp",
571"content_server : server_interface",
572"content_server : server_chroot",
573"content_server : server_username",
574"content_server : server_directory",
575"content_server : server_logfile",
576"content_server : server_pidfile",
577"content_server : server_msg_cache_size",
578"content_server : server_msg_cache_slabs",
579"content_server : server_num_queries_per_thread",
580"content_server : server_rrset_cache_size",
581"content_server : server_rrset_cache_slabs",
582"content_server : server_outgoing_num_tcp",
583"content_server : server_infra_host_ttl",
584"content_server : server_infra_lame_ttl",
585"content_server : server_infra_cache_slabs",
586"content_server : server_infra_cache_numhosts",
587"content_server : server_infra_cache_lame_size",
588"content_server : server_target_fetch_policy",
589"content_server : server_harden_short_bufsize",
590"content_server : server_harden_large_queries",
591"content_server : server_do_not_query_address",
592"content_server : server_hide_identity",
593"content_server : server_hide_version",
594"content_server : server_identity",
595"content_server : server_version",
596"content_server : server_harden_glue",
597"content_server : server_module_conf",
598"content_server : server_trust_anchor_file",
599"content_server : server_trust_anchor",
600"content_server : server_val_override_date",
601"content_server : server_bogus_ttl",
602"content_server : server_val_clean_additional",
603"content_server : server_val_permissive_mode",
604"content_server : server_incoming_num_tcp",
605"content_server : server_msg_buffer_size",
606"content_server : server_key_cache_size",
607"content_server : server_key_cache_slabs",
608"content_server : server_trusted_keys_file",
609"content_server : server_val_nsec3_keysize_iterations",
610"content_server : server_use_syslog",
611"content_server : server_outgoing_interface",
612"content_server : server_root_hints",
613"content_server : server_do_not_query_localhost",
614"content_server : server_cache_max_ttl",
615"content_server : server_harden_dnssec_stripped",
616"content_server : server_access_control",
617"content_server : server_local_zone",
618"content_server : server_local_data",
619"content_server : server_interface_automatic",
620"content_server : server_statistics_interval",
621"content_server : server_do_daemonize",
622"content_server : server_use_caps_for_id",
623"content_server : server_statistics_cumulative",
624"content_server : server_outgoing_port_permit",
625"content_server : server_outgoing_port_avoid",
626"content_server : server_dlv_anchor_file",
627"content_server : server_dlv_anchor",
628"content_server : server_neg_cache_size",
629"content_server : server_harden_referral_path",
630"content_server : server_private_address",
631"content_server : server_private_domain",
632"content_server : server_extended_statistics",
633"content_server : server_local_data_ptr",
634"content_server : server_jostle_timeout",
635"content_server : server_unwanted_reply_threshold",
636"content_server : server_log_time_ascii",
637"content_server : server_domain_insecure",
638"content_server : server_val_sig_skew_min",
639"content_server : server_val_sig_skew_max",
640"content_server : server_cache_min_ttl",
641"content_server : server_val_log_level",
642"content_server : server_auto_trust_anchor_file",
643"content_server : server_add_holddown",
644"content_server : server_del_holddown",
645"content_server : server_keep_missing",
646"content_server : server_so_rcvbuf",
647"content_server : server_edns_buffer_size",
648"content_server : server_prefetch",
649"content_server : server_prefetch_key",
650"content_server : server_so_sndbuf",
651"content_server : server_harden_below_nxdomain",
652"content_server : server_ignore_cd_flag",
653"content_server : server_log_queries",
654"content_server : server_tcp_upstream",
655"content_server : server_ssl_upstream",
656"content_server : server_ssl_service_key",
657"content_server : server_ssl_service_pem",
658"content_server : server_ssl_port",
659"content_server : server_minimal_responses",
660"content_server : server_rrset_roundrobin",
661"stubstart : VAR_STUB_ZONE",
662"contents_stub : contents_stub content_stub",
663"contents_stub :",
664"content_stub : stub_name",
665"content_stub : stub_host",
666"content_stub : stub_addr",
667"content_stub : stub_prime",
668"content_stub : stub_first",
669"forwardstart : VAR_FORWARD_ZONE",
670"contents_forward : contents_forward content_forward",
671"contents_forward :",
672"content_forward : forward_name",
673"content_forward : forward_host",
674"content_forward : forward_addr",
675"content_forward : forward_first",
676"server_num_threads : VAR_NUM_THREADS STRING_ARG",
677"server_verbosity : VAR_VERBOSITY STRING_ARG",
678"server_statistics_interval : VAR_STATISTICS_INTERVAL STRING_ARG",
679"server_statistics_cumulative : VAR_STATISTICS_CUMULATIVE STRING_ARG",
680"server_extended_statistics : VAR_EXTENDED_STATISTICS STRING_ARG",
681"server_port : VAR_PORT STRING_ARG",
682"server_interface : VAR_INTERFACE STRING_ARG",
683"server_outgoing_interface : VAR_OUTGOING_INTERFACE STRING_ARG",
684"server_outgoing_range : VAR_OUTGOING_RANGE STRING_ARG",
685"server_outgoing_port_permit : VAR_OUTGOING_PORT_PERMIT STRING_ARG",
686"server_outgoing_port_avoid : VAR_OUTGOING_PORT_AVOID STRING_ARG",
687"server_outgoing_num_tcp : VAR_OUTGOING_NUM_TCP STRING_ARG",
688"server_incoming_num_tcp : VAR_INCOMING_NUM_TCP STRING_ARG",
689"server_interface_automatic : VAR_INTERFACE_AUTOMATIC STRING_ARG",
690"server_do_ip4 : VAR_DO_IP4 STRING_ARG",
691"server_do_ip6 : VAR_DO_IP6 STRING_ARG",
692"server_do_udp : VAR_DO_UDP STRING_ARG",
693"server_do_tcp : VAR_DO_TCP STRING_ARG",
694"server_tcp_upstream : VAR_TCP_UPSTREAM STRING_ARG",
695"server_ssl_upstream : VAR_SSL_UPSTREAM STRING_ARG",
696"server_ssl_service_key : VAR_SSL_SERVICE_KEY STRING_ARG",
697"server_ssl_service_pem : VAR_SSL_SERVICE_PEM STRING_ARG",
698"server_ssl_port : VAR_SSL_PORT STRING_ARG",
699"server_do_daemonize : VAR_DO_DAEMONIZE STRING_ARG",
700"server_use_syslog : VAR_USE_SYSLOG STRING_ARG",
701"server_log_time_ascii : VAR_LOG_TIME_ASCII STRING_ARG",
702"server_log_queries : VAR_LOG_QUERIES STRING_ARG",
703"server_chroot : VAR_CHROOT STRING_ARG",
704"server_username : VAR_USERNAME STRING_ARG",
705"server_directory : VAR_DIRECTORY STRING_ARG",
706"server_logfile : VAR_LOGFILE STRING_ARG",
707"server_pidfile : VAR_PIDFILE STRING_ARG",
708"server_root_hints : VAR_ROOT_HINTS STRING_ARG",
709"server_dlv_anchor_file : VAR_DLV_ANCHOR_FILE STRING_ARG",
710"server_dlv_anchor : VAR_DLV_ANCHOR STRING_ARG",
711"server_auto_trust_anchor_file : VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG",
712"server_trust_anchor_file : VAR_TRUST_ANCHOR_FILE STRING_ARG",
713"server_trusted_keys_file : VAR_TRUSTED_KEYS_FILE STRING_ARG",
714"server_trust_anchor : VAR_TRUST_ANCHOR STRING_ARG",
715"server_domain_insecure : VAR_DOMAIN_INSECURE STRING_ARG",
716"server_hide_identity : VAR_HIDE_IDENTITY STRING_ARG",
717"server_hide_version : VAR_HIDE_VERSION STRING_ARG",
718"server_identity : VAR_IDENTITY STRING_ARG",
719"server_version : VAR_VERSION STRING_ARG",
720"server_so_rcvbuf : VAR_SO_RCVBUF STRING_ARG",
721"server_so_sndbuf : VAR_SO_SNDBUF STRING_ARG",
722"server_edns_buffer_size : VAR_EDNS_BUFFER_SIZE STRING_ARG",
723"server_msg_buffer_size : VAR_MSG_BUFFER_SIZE STRING_ARG",
724"server_msg_cache_size : VAR_MSG_CACHE_SIZE STRING_ARG",
725"server_msg_cache_slabs : VAR_MSG_CACHE_SLABS STRING_ARG",
726"server_num_queries_per_thread : VAR_NUM_QUERIES_PER_THREAD STRING_ARG",
727"server_jostle_timeout : VAR_JOSTLE_TIMEOUT STRING_ARG",
728"server_rrset_cache_size : VAR_RRSET_CACHE_SIZE STRING_ARG",
729"server_rrset_cache_slabs : VAR_RRSET_CACHE_SLABS STRING_ARG",
730"server_infra_host_ttl : VAR_INFRA_HOST_TTL STRING_ARG",
731"server_infra_lame_ttl : VAR_INFRA_LAME_TTL STRING_ARG",
732"server_infra_cache_numhosts : VAR_INFRA_CACHE_NUMHOSTS STRING_ARG",
733"server_infra_cache_lame_size : VAR_INFRA_CACHE_LAME_SIZE STRING_ARG",
734"server_infra_cache_slabs : VAR_INFRA_CACHE_SLABS STRING_ARG",
735"server_target_fetch_policy : VAR_TARGET_FETCH_POLICY STRING_ARG",
736"server_harden_short_bufsize : VAR_HARDEN_SHORT_BUFSIZE STRING_ARG",
737"server_harden_large_queries : VAR_HARDEN_LARGE_QUERIES STRING_ARG",
738"server_harden_glue : VAR_HARDEN_GLUE STRING_ARG",
739"server_harden_dnssec_stripped : VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG",
740"server_harden_below_nxdomain : VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG",
741"server_harden_referral_path : VAR_HARDEN_REFERRAL_PATH STRING_ARG",
742"server_use_caps_for_id : VAR_USE_CAPS_FOR_ID STRING_ARG",
743"server_private_address : VAR_PRIVATE_ADDRESS STRING_ARG",
744"server_private_domain : VAR_PRIVATE_DOMAIN STRING_ARG",
745"server_prefetch : VAR_PREFETCH STRING_ARG",
746"server_prefetch_key : VAR_PREFETCH_KEY STRING_ARG",
747"server_unwanted_reply_threshold : VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG",
748"server_do_not_query_address : VAR_DO_NOT_QUERY_ADDRESS STRING_ARG",
749"server_do_not_query_localhost : VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG",
750"server_access_control : VAR_ACCESS_CONTROL STRING_ARG STRING_ARG",
751"server_module_conf : VAR_MODULE_CONF STRING_ARG",
752"server_val_override_date : VAR_VAL_OVERRIDE_DATE STRING_ARG",
753"server_val_sig_skew_min : VAR_VAL_SIG_SKEW_MIN STRING_ARG",
754"server_val_sig_skew_max : VAR_VAL_SIG_SKEW_MAX STRING_ARG",
755"server_cache_max_ttl : VAR_CACHE_MAX_TTL STRING_ARG",
756"server_cache_min_ttl : VAR_CACHE_MIN_TTL STRING_ARG",
757"server_bogus_ttl : VAR_BOGUS_TTL STRING_ARG",
758"server_val_clean_additional : VAR_VAL_CLEAN_ADDITIONAL STRING_ARG",
759"server_val_permissive_mode : VAR_VAL_PERMISSIVE_MODE STRING_ARG",
760"server_ignore_cd_flag : VAR_IGNORE_CD_FLAG STRING_ARG",
761"server_val_log_level : VAR_VAL_LOG_LEVEL STRING_ARG",
762"server_val_nsec3_keysize_iterations : VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG",
763"server_add_holddown : VAR_ADD_HOLDDOWN STRING_ARG",
764"server_del_holddown : VAR_DEL_HOLDDOWN STRING_ARG",
765"server_keep_missing : VAR_KEEP_MISSING STRING_ARG",
766"server_key_cache_size : VAR_KEY_CACHE_SIZE STRING_ARG",
767"server_key_cache_slabs : VAR_KEY_CACHE_SLABS STRING_ARG",
768"server_neg_cache_size : VAR_NEG_CACHE_SIZE STRING_ARG",
769"server_local_zone : VAR_LOCAL_ZONE STRING_ARG STRING_ARG",
770"server_local_data : VAR_LOCAL_DATA STRING_ARG",
771"server_local_data_ptr : VAR_LOCAL_DATA_PTR STRING_ARG",
772"server_minimal_responses : VAR_MINIMAL_RESPONSES STRING_ARG",
773"server_rrset_roundrobin : VAR_RRSET_ROUNDROBIN STRING_ARG",
774"stub_name : VAR_NAME STRING_ARG",
775"stub_host : VAR_STUB_HOST STRING_ARG",
776"stub_addr : VAR_STUB_ADDR STRING_ARG",
777"stub_first : VAR_STUB_FIRST STRING_ARG",
778"stub_prime : VAR_STUB_PRIME STRING_ARG",
779"forward_name : VAR_NAME STRING_ARG",
780"forward_host : VAR_FORWARD_HOST STRING_ARG",
781"forward_addr : VAR_FORWARD_ADDR STRING_ARG",
782"forward_first : VAR_FORWARD_FIRST STRING_ARG",
783"rcstart : VAR_REMOTE_CONTROL",
784"contents_rc : contents_rc content_rc",
785"contents_rc :",
786"content_rc : rc_control_enable",
787"content_rc : rc_control_interface",
788"content_rc : rc_control_port",
789"content_rc : rc_server_key_file",
790"content_rc : rc_server_cert_file",
791"content_rc : rc_control_key_file",
792"content_rc : rc_control_cert_file",
793"rc_control_enable : VAR_CONTROL_ENABLE STRING_ARG",
794"rc_control_port : VAR_CONTROL_PORT STRING_ARG",
795"rc_control_interface : VAR_CONTROL_INTERFACE STRING_ARG",
796"rc_server_key_file : VAR_SERVER_KEY_FILE STRING_ARG",
797"rc_server_cert_file : VAR_SERVER_CERT_FILE STRING_ARG",
798"rc_control_key_file : VAR_CONTROL_KEY_FILE STRING_ARG",
799"rc_control_cert_file : VAR_CONTROL_CERT_FILE STRING_ARG",
800"pythonstart : VAR_PYTHON",
801"contents_py : contents_py content_py",
802"contents_py :",
803"content_py : py_script",
804"py_script : VAR_PYTHON_SCRIPT STRING_ARG",
805
806};
807#endif
808
809int      yydebug;
810int      yynerrs;
811
812int      yyerrflag;
813int      yychar;
814YYSTYPE  yyval;
815YYSTYPE  yylval;
816
817/* define the initial stack-sizes */
818#ifdef YYSTACKSIZE
819#undef YYMAXDEPTH
820#define YYMAXDEPTH  YYSTACKSIZE
821#else
822#ifdef YYMAXDEPTH
823#define YYSTACKSIZE YYMAXDEPTH
824#else
825#define YYSTACKSIZE 500
826#define YYMAXDEPTH  500
827#endif
828#endif
829
830#define YYINITSTACKSIZE 500
831
832typedef struct {
833    unsigned stacksize;
834    short    *s_base;
835    short    *s_mark;
836    short    *s_last;
837    YYSTYPE  *l_base;
838    YYSTYPE  *l_mark;
839} YYSTACKDATA;
840/* variables for the parser stack */
841static YYSTACKDATA yystack;
842#line 1277 "util/configparser.y"
843
844/* parse helper routines could be here */
845#line 845 "util/configparser.c"
846
847#if YYDEBUG
848#include <stdio.h>		/* needed for printf */
849#endif
850
851#include <stdlib.h>	/* needed for malloc, etc */
852#include <string.h>	/* needed for memset */
853
854/* allocate initial stack or double stack size, up to YYMAXDEPTH */
855static int yygrowstack(YYSTACKDATA *data)
856{
857    int i;
858    unsigned newsize;
859    short *newss;
860    YYSTYPE *newvs;
861
862    if ((newsize = data->stacksize) == 0)
863        newsize = YYINITSTACKSIZE;
864    else if (newsize >= YYMAXDEPTH)
865        return -1;
866    else if ((newsize *= 2) > YYMAXDEPTH)
867        newsize = YYMAXDEPTH;
868
869    i = (int) (data->s_mark - data->s_base);
870    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
871    if (newss == 0)
872        return -1;
873
874    data->s_base = newss;
875    data->s_mark = newss + i;
876
877    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
878    if (newvs == 0)
879        return -1;
880
881    data->l_base = newvs;
882    data->l_mark = newvs + i;
883
884    data->stacksize = newsize;
885    data->s_last = data->s_base + newsize - 1;
886    return 0;
887}
888
889#if YYPURE || defined(YY_NO_LEAKS)
890static void yyfreestack(YYSTACKDATA *data)
891{
892    free(data->s_base);
893    free(data->l_base);
894    memset(data, 0, sizeof(*data));
895}
896#else
897#define yyfreestack(data) /* nothing */
898#endif
899
900#define YYABORT  goto yyabort
901#define YYREJECT goto yyabort
902#define YYACCEPT goto yyaccept
903#define YYERROR  goto yyerrlab
904
905int
906YYPARSE_DECL()
907{
908    int yym, yyn, yystate;
909#if YYDEBUG
910    const char *yys;
911
912    if ((yys = getenv("YYDEBUG")) != 0)
913    {
914        yyn = *yys;
915        if (yyn >= '0' && yyn <= '9')
916            yydebug = yyn - '0';
917    }
918#endif
919
920    yynerrs = 0;
921    yyerrflag = 0;
922    yychar = YYEMPTY;
923    yystate = 0;
924
925#if YYPURE
926    memset(&yystack, 0, sizeof(yystack));
927#endif
928
929    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
930    yystack.s_mark = yystack.s_base;
931    yystack.l_mark = yystack.l_base;
932    yystate = 0;
933    *yystack.s_mark = 0;
934
935yyloop:
936    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
937    if (yychar < 0)
938    {
939        if ((yychar = YYLEX) < 0) yychar = 0;
940#if YYDEBUG
941        if (yydebug)
942        {
943            yys = 0;
944            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
945            if (!yys) yys = "illegal-symbol";
946            printf("%sdebug: state %d, reading %d (%s)\n",
947                    YYPREFIX, yystate, yychar, yys);
948        }
949#endif
950    }
951    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
952            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
953    {
954#if YYDEBUG
955        if (yydebug)
956            printf("%sdebug: state %d, shifting to state %d\n",
957                    YYPREFIX, yystate, yytable[yyn]);
958#endif
959        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
960        {
961            goto yyoverflow;
962        }
963        yystate = yytable[yyn];
964        *++yystack.s_mark = yytable[yyn];
965        *++yystack.l_mark = yylval;
966        yychar = YYEMPTY;
967        if (yyerrflag > 0)  --yyerrflag;
968        goto yyloop;
969    }
970    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
971            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
972    {
973        yyn = yytable[yyn];
974        goto yyreduce;
975    }
976    if (yyerrflag) goto yyinrecovery;
977
978    yyerror("syntax error");
979
980    goto yyerrlab;
981
982yyerrlab:
983    ++yynerrs;
984
985yyinrecovery:
986    if (yyerrflag < 3)
987    {
988        yyerrflag = 3;
989        for (;;)
990        {
991            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
992                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
993            {
994#if YYDEBUG
995                if (yydebug)
996                    printf("%sdebug: state %d, error recovery shifting\
997 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
998#endif
999                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
1000                {
1001                    goto yyoverflow;
1002                }
1003                yystate = yytable[yyn];
1004                *++yystack.s_mark = yytable[yyn];
1005                *++yystack.l_mark = yylval;
1006                goto yyloop;
1007            }
1008            else
1009            {
1010#if YYDEBUG
1011                if (yydebug)
1012                    printf("%sdebug: error recovery discarding state %d\n",
1013                            YYPREFIX, *yystack.s_mark);
1014#endif
1015                if (yystack.s_mark <= yystack.s_base) goto yyabort;
1016                --yystack.s_mark;
1017                --yystack.l_mark;
1018            }
1019        }
1020    }
1021    else
1022    {
1023        if (yychar == 0) goto yyabort;
1024#if YYDEBUG
1025        if (yydebug)
1026        {
1027            yys = 0;
1028            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1029            if (!yys) yys = "illegal-symbol";
1030            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
1031                    YYPREFIX, yystate, yychar, yys);
1032        }
1033#endif
1034        yychar = YYEMPTY;
1035        goto yyloop;
1036    }
1037
1038yyreduce:
1039#if YYDEBUG
1040    if (yydebug)
1041        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
1042                YYPREFIX, yystate, yyn, yyrule[yyn]);
1043#endif
1044    yym = yylen[yyn];
1045    if (yym)
1046        yyval = yystack.l_mark[1-yym];
1047    else
1048        memset(&yyval, 0, sizeof yyval);
1049    switch (yyn)
1050    {
1051case 8:
1052#line 118 "util/configparser.y"
1053	{
1054		OUTYY(("\nP(server:)\n"));
1055	}
1056break;
1057case 109:
1058#line 167 "util/configparser.y"
1059	{
1060		struct config_stub* s;
1061		OUTYY(("\nP(stub_zone:)\n"));
1062		s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
1063		if(s) {
1064			s->next = cfg_parser->cfg->stubs;
1065			cfg_parser->cfg->stubs = s;
1066		} else
1067			yyerror("out of memory");
1068	}
1069break;
1070case 117:
1071#line 183 "util/configparser.y"
1072	{
1073		struct config_stub* s;
1074		OUTYY(("\nP(forward_zone:)\n"));
1075		s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
1076		if(s) {
1077			s->next = cfg_parser->cfg->forwards;
1078			cfg_parser->cfg->forwards = s;
1079		} else
1080			yyerror("out of memory");
1081	}
1082break;
1083case 124:
1084#line 199 "util/configparser.y"
1085	{
1086		OUTYY(("P(server_num_threads:%s)\n", yystack.l_mark[0].str));
1087		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1088			yyerror("number expected");
1089		else cfg_parser->cfg->num_threads = atoi(yystack.l_mark[0].str);
1090		free(yystack.l_mark[0].str);
1091	}
1092break;
1093case 125:
1094#line 208 "util/configparser.y"
1095	{
1096		OUTYY(("P(server_verbosity:%s)\n", yystack.l_mark[0].str));
1097		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1098			yyerror("number expected");
1099		else cfg_parser->cfg->verbosity = atoi(yystack.l_mark[0].str);
1100		free(yystack.l_mark[0].str);
1101	}
1102break;
1103case 126:
1104#line 217 "util/configparser.y"
1105	{
1106		OUTYY(("P(server_statistics_interval:%s)\n", yystack.l_mark[0].str));
1107		if(strcmp(yystack.l_mark[0].str, "") == 0 || strcmp(yystack.l_mark[0].str, "0") == 0)
1108			cfg_parser->cfg->stat_interval = 0;
1109		else if(atoi(yystack.l_mark[0].str) == 0)
1110			yyerror("number expected");
1111		else cfg_parser->cfg->stat_interval = atoi(yystack.l_mark[0].str);
1112		free(yystack.l_mark[0].str);
1113	}
1114break;
1115case 127:
1116#line 228 "util/configparser.y"
1117	{
1118		OUTYY(("P(server_statistics_cumulative:%s)\n", yystack.l_mark[0].str));
1119		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1120			yyerror("expected yes or no.");
1121		else cfg_parser->cfg->stat_cumulative = (strcmp(yystack.l_mark[0].str, "yes")==0);
1122		free(yystack.l_mark[0].str);
1123	}
1124break;
1125case 128:
1126#line 237 "util/configparser.y"
1127	{
1128		OUTYY(("P(server_extended_statistics:%s)\n", yystack.l_mark[0].str));
1129		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1130			yyerror("expected yes or no.");
1131		else cfg_parser->cfg->stat_extended = (strcmp(yystack.l_mark[0].str, "yes")==0);
1132		free(yystack.l_mark[0].str);
1133	}
1134break;
1135case 129:
1136#line 246 "util/configparser.y"
1137	{
1138		OUTYY(("P(server_port:%s)\n", yystack.l_mark[0].str));
1139		if(atoi(yystack.l_mark[0].str) == 0)
1140			yyerror("port number expected");
1141		else cfg_parser->cfg->port = atoi(yystack.l_mark[0].str);
1142		free(yystack.l_mark[0].str);
1143	}
1144break;
1145case 130:
1146#line 255 "util/configparser.y"
1147	{
1148		OUTYY(("P(server_interface:%s)\n", yystack.l_mark[0].str));
1149		if(cfg_parser->cfg->num_ifs == 0)
1150			cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
1151		else 	cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
1152				(cfg_parser->cfg->num_ifs+1)*sizeof(char*));
1153		if(!cfg_parser->cfg->ifs)
1154			yyerror("out of memory");
1155		else
1156			cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = yystack.l_mark[0].str;
1157	}
1158break;
1159case 131:
1160#line 268 "util/configparser.y"
1161	{
1162		OUTYY(("P(server_outgoing_interface:%s)\n", yystack.l_mark[0].str));
1163		if(cfg_parser->cfg->num_out_ifs == 0)
1164			cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
1165		else 	cfg_parser->cfg->out_ifs = realloc(
1166			cfg_parser->cfg->out_ifs,
1167			(cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
1168		if(!cfg_parser->cfg->out_ifs)
1169			yyerror("out of memory");
1170		else
1171			cfg_parser->cfg->out_ifs[
1172				cfg_parser->cfg->num_out_ifs++] = yystack.l_mark[0].str;
1173	}
1174break;
1175case 132:
1176#line 283 "util/configparser.y"
1177	{
1178		OUTYY(("P(server_outgoing_range:%s)\n", yystack.l_mark[0].str));
1179		if(atoi(yystack.l_mark[0].str) == 0)
1180			yyerror("number expected");
1181		else cfg_parser->cfg->outgoing_num_ports = atoi(yystack.l_mark[0].str);
1182		free(yystack.l_mark[0].str);
1183	}
1184break;
1185case 133:
1186#line 292 "util/configparser.y"
1187	{
1188		OUTYY(("P(server_outgoing_port_permit:%s)\n", yystack.l_mark[0].str));
1189		if(!cfg_mark_ports(yystack.l_mark[0].str, 1,
1190			cfg_parser->cfg->outgoing_avail_ports, 65536))
1191			yyerror("port number or range (\"low-high\") expected");
1192		free(yystack.l_mark[0].str);
1193	}
1194break;
1195case 134:
1196#line 301 "util/configparser.y"
1197	{
1198		OUTYY(("P(server_outgoing_port_avoid:%s)\n", yystack.l_mark[0].str));
1199		if(!cfg_mark_ports(yystack.l_mark[0].str, 0,
1200			cfg_parser->cfg->outgoing_avail_ports, 65536))
1201			yyerror("port number or range (\"low-high\") expected");
1202		free(yystack.l_mark[0].str);
1203	}
1204break;
1205case 135:
1206#line 310 "util/configparser.y"
1207	{
1208		OUTYY(("P(server_outgoing_num_tcp:%s)\n", yystack.l_mark[0].str));
1209		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1210			yyerror("number expected");
1211		else cfg_parser->cfg->outgoing_num_tcp = atoi(yystack.l_mark[0].str);
1212		free(yystack.l_mark[0].str);
1213	}
1214break;
1215case 136:
1216#line 319 "util/configparser.y"
1217	{
1218		OUTYY(("P(server_incoming_num_tcp:%s)\n", yystack.l_mark[0].str));
1219		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1220			yyerror("number expected");
1221		else cfg_parser->cfg->incoming_num_tcp = atoi(yystack.l_mark[0].str);
1222		free(yystack.l_mark[0].str);
1223	}
1224break;
1225case 137:
1226#line 328 "util/configparser.y"
1227	{
1228		OUTYY(("P(server_interface_automatic:%s)\n", yystack.l_mark[0].str));
1229		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1230			yyerror("expected yes or no.");
1231		else cfg_parser->cfg->if_automatic = (strcmp(yystack.l_mark[0].str, "yes")==0);
1232		free(yystack.l_mark[0].str);
1233	}
1234break;
1235case 138:
1236#line 337 "util/configparser.y"
1237	{
1238		OUTYY(("P(server_do_ip4:%s)\n", yystack.l_mark[0].str));
1239		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1240			yyerror("expected yes or no.");
1241		else cfg_parser->cfg->do_ip4 = (strcmp(yystack.l_mark[0].str, "yes")==0);
1242		free(yystack.l_mark[0].str);
1243	}
1244break;
1245case 139:
1246#line 346 "util/configparser.y"
1247	{
1248		OUTYY(("P(server_do_ip6:%s)\n", yystack.l_mark[0].str));
1249		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1250			yyerror("expected yes or no.");
1251		else cfg_parser->cfg->do_ip6 = (strcmp(yystack.l_mark[0].str, "yes")==0);
1252		free(yystack.l_mark[0].str);
1253	}
1254break;
1255case 140:
1256#line 355 "util/configparser.y"
1257	{
1258		OUTYY(("P(server_do_udp:%s)\n", yystack.l_mark[0].str));
1259		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1260			yyerror("expected yes or no.");
1261		else cfg_parser->cfg->do_udp = (strcmp(yystack.l_mark[0].str, "yes")==0);
1262		free(yystack.l_mark[0].str);
1263	}
1264break;
1265case 141:
1266#line 364 "util/configparser.y"
1267	{
1268		OUTYY(("P(server_do_tcp:%s)\n", yystack.l_mark[0].str));
1269		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1270			yyerror("expected yes or no.");
1271		else cfg_parser->cfg->do_tcp = (strcmp(yystack.l_mark[0].str, "yes")==0);
1272		free(yystack.l_mark[0].str);
1273	}
1274break;
1275case 142:
1276#line 373 "util/configparser.y"
1277	{
1278		OUTYY(("P(server_tcp_upstream:%s)\n", yystack.l_mark[0].str));
1279		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1280			yyerror("expected yes or no.");
1281		else cfg_parser->cfg->tcp_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0);
1282		free(yystack.l_mark[0].str);
1283	}
1284break;
1285case 143:
1286#line 382 "util/configparser.y"
1287	{
1288		OUTYY(("P(server_ssl_upstream:%s)\n", yystack.l_mark[0].str));
1289		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1290			yyerror("expected yes or no.");
1291		else cfg_parser->cfg->ssl_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0);
1292		free(yystack.l_mark[0].str);
1293	}
1294break;
1295case 144:
1296#line 391 "util/configparser.y"
1297	{
1298		OUTYY(("P(server_ssl_service_key:%s)\n", yystack.l_mark[0].str));
1299		free(cfg_parser->cfg->ssl_service_key);
1300		cfg_parser->cfg->ssl_service_key = yystack.l_mark[0].str;
1301	}
1302break;
1303case 145:
1304#line 398 "util/configparser.y"
1305	{
1306		OUTYY(("P(server_ssl_service_pem:%s)\n", yystack.l_mark[0].str));
1307		free(cfg_parser->cfg->ssl_service_pem);
1308		cfg_parser->cfg->ssl_service_pem = yystack.l_mark[0].str;
1309	}
1310break;
1311case 146:
1312#line 405 "util/configparser.y"
1313	{
1314		OUTYY(("P(server_ssl_port:%s)\n", yystack.l_mark[0].str));
1315		if(atoi(yystack.l_mark[0].str) == 0)
1316			yyerror("port number expected");
1317		else cfg_parser->cfg->ssl_port = atoi(yystack.l_mark[0].str);
1318		free(yystack.l_mark[0].str);
1319	}
1320break;
1321case 147:
1322#line 414 "util/configparser.y"
1323	{
1324		OUTYY(("P(server_do_daemonize:%s)\n", yystack.l_mark[0].str));
1325		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1326			yyerror("expected yes or no.");
1327		else cfg_parser->cfg->do_daemonize = (strcmp(yystack.l_mark[0].str, "yes")==0);
1328		free(yystack.l_mark[0].str);
1329	}
1330break;
1331case 148:
1332#line 423 "util/configparser.y"
1333	{
1334		OUTYY(("P(server_use_syslog:%s)\n", yystack.l_mark[0].str));
1335		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1336			yyerror("expected yes or no.");
1337		else cfg_parser->cfg->use_syslog = (strcmp(yystack.l_mark[0].str, "yes")==0);
1338#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
1339		if(strcmp(yystack.l_mark[0].str, "yes") == 0)
1340			yyerror("no syslog services are available. "
1341				"(reconfigure and compile to add)");
1342#endif
1343		free(yystack.l_mark[0].str);
1344	}
1345break;
1346case 149:
1347#line 437 "util/configparser.y"
1348	{
1349		OUTYY(("P(server_log_time_ascii:%s)\n", yystack.l_mark[0].str));
1350		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1351			yyerror("expected yes or no.");
1352		else cfg_parser->cfg->log_time_ascii = (strcmp(yystack.l_mark[0].str, "yes")==0);
1353		free(yystack.l_mark[0].str);
1354	}
1355break;
1356case 150:
1357#line 446 "util/configparser.y"
1358	{
1359		OUTYY(("P(server_log_queries:%s)\n", yystack.l_mark[0].str));
1360		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1361			yyerror("expected yes or no.");
1362		else cfg_parser->cfg->log_queries = (strcmp(yystack.l_mark[0].str, "yes")==0);
1363		free(yystack.l_mark[0].str);
1364	}
1365break;
1366case 151:
1367#line 455 "util/configparser.y"
1368	{
1369		OUTYY(("P(server_chroot:%s)\n", yystack.l_mark[0].str));
1370		free(cfg_parser->cfg->chrootdir);
1371		cfg_parser->cfg->chrootdir = yystack.l_mark[0].str;
1372	}
1373break;
1374case 152:
1375#line 462 "util/configparser.y"
1376	{
1377		OUTYY(("P(server_username:%s)\n", yystack.l_mark[0].str));
1378		free(cfg_parser->cfg->username);
1379		cfg_parser->cfg->username = yystack.l_mark[0].str;
1380	}
1381break;
1382case 153:
1383#line 469 "util/configparser.y"
1384	{
1385		OUTYY(("P(server_directory:%s)\n", yystack.l_mark[0].str));
1386		free(cfg_parser->cfg->directory);
1387		cfg_parser->cfg->directory = yystack.l_mark[0].str;
1388	}
1389break;
1390case 154:
1391#line 476 "util/configparser.y"
1392	{
1393		OUTYY(("P(server_logfile:%s)\n", yystack.l_mark[0].str));
1394		free(cfg_parser->cfg->logfile);
1395		cfg_parser->cfg->logfile = yystack.l_mark[0].str;
1396		cfg_parser->cfg->use_syslog = 0;
1397	}
1398break;
1399case 155:
1400#line 484 "util/configparser.y"
1401	{
1402		OUTYY(("P(server_pidfile:%s)\n", yystack.l_mark[0].str));
1403		free(cfg_parser->cfg->pidfile);
1404		cfg_parser->cfg->pidfile = yystack.l_mark[0].str;
1405	}
1406break;
1407case 156:
1408#line 491 "util/configparser.y"
1409	{
1410		OUTYY(("P(server_root_hints:%s)\n", yystack.l_mark[0].str));
1411		if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, yystack.l_mark[0].str))
1412			yyerror("out of memory");
1413	}
1414break;
1415case 157:
1416#line 498 "util/configparser.y"
1417	{
1418		OUTYY(("P(server_dlv_anchor_file:%s)\n", yystack.l_mark[0].str));
1419		free(cfg_parser->cfg->dlv_anchor_file);
1420		cfg_parser->cfg->dlv_anchor_file = yystack.l_mark[0].str;
1421	}
1422break;
1423case 158:
1424#line 505 "util/configparser.y"
1425	{
1426		OUTYY(("P(server_dlv_anchor:%s)\n", yystack.l_mark[0].str));
1427		if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, yystack.l_mark[0].str))
1428			yyerror("out of memory");
1429	}
1430break;
1431case 159:
1432#line 512 "util/configparser.y"
1433	{
1434		OUTYY(("P(server_auto_trust_anchor_file:%s)\n", yystack.l_mark[0].str));
1435		if(!cfg_strlist_insert(&cfg_parser->cfg->
1436			auto_trust_anchor_file_list, yystack.l_mark[0].str))
1437			yyerror("out of memory");
1438	}
1439break;
1440case 160:
1441#line 520 "util/configparser.y"
1442	{
1443		OUTYY(("P(server_trust_anchor_file:%s)\n", yystack.l_mark[0].str));
1444		if(!cfg_strlist_insert(&cfg_parser->cfg->
1445			trust_anchor_file_list, yystack.l_mark[0].str))
1446			yyerror("out of memory");
1447	}
1448break;
1449case 161:
1450#line 528 "util/configparser.y"
1451	{
1452		OUTYY(("P(server_trusted_keys_file:%s)\n", yystack.l_mark[0].str));
1453		if(!cfg_strlist_insert(&cfg_parser->cfg->
1454			trusted_keys_file_list, yystack.l_mark[0].str))
1455			yyerror("out of memory");
1456	}
1457break;
1458case 162:
1459#line 536 "util/configparser.y"
1460	{
1461		OUTYY(("P(server_trust_anchor:%s)\n", yystack.l_mark[0].str));
1462		if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, yystack.l_mark[0].str))
1463			yyerror("out of memory");
1464	}
1465break;
1466case 163:
1467#line 543 "util/configparser.y"
1468	{
1469		OUTYY(("P(server_domain_insecure:%s)\n", yystack.l_mark[0].str));
1470		if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, yystack.l_mark[0].str))
1471			yyerror("out of memory");
1472	}
1473break;
1474case 164:
1475#line 550 "util/configparser.y"
1476	{
1477		OUTYY(("P(server_hide_identity:%s)\n", yystack.l_mark[0].str));
1478		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1479			yyerror("expected yes or no.");
1480		else cfg_parser->cfg->hide_identity = (strcmp(yystack.l_mark[0].str, "yes")==0);
1481		free(yystack.l_mark[0].str);
1482	}
1483break;
1484case 165:
1485#line 559 "util/configparser.y"
1486	{
1487		OUTYY(("P(server_hide_version:%s)\n", yystack.l_mark[0].str));
1488		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1489			yyerror("expected yes or no.");
1490		else cfg_parser->cfg->hide_version = (strcmp(yystack.l_mark[0].str, "yes")==0);
1491		free(yystack.l_mark[0].str);
1492	}
1493break;
1494case 166:
1495#line 568 "util/configparser.y"
1496	{
1497		OUTYY(("P(server_identity:%s)\n", yystack.l_mark[0].str));
1498		free(cfg_parser->cfg->identity);
1499		cfg_parser->cfg->identity = yystack.l_mark[0].str;
1500	}
1501break;
1502case 167:
1503#line 575 "util/configparser.y"
1504	{
1505		OUTYY(("P(server_version:%s)\n", yystack.l_mark[0].str));
1506		free(cfg_parser->cfg->version);
1507		cfg_parser->cfg->version = yystack.l_mark[0].str;
1508	}
1509break;
1510case 168:
1511#line 582 "util/configparser.y"
1512	{
1513		OUTYY(("P(server_so_rcvbuf:%s)\n", yystack.l_mark[0].str));
1514		if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_rcvbuf))
1515			yyerror("buffer size expected");
1516		free(yystack.l_mark[0].str);
1517	}
1518break;
1519case 169:
1520#line 590 "util/configparser.y"
1521	{
1522		OUTYY(("P(server_so_sndbuf:%s)\n", yystack.l_mark[0].str));
1523		if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_sndbuf))
1524			yyerror("buffer size expected");
1525		free(yystack.l_mark[0].str);
1526	}
1527break;
1528case 170:
1529#line 598 "util/configparser.y"
1530	{
1531		OUTYY(("P(server_edns_buffer_size:%s)\n", yystack.l_mark[0].str));
1532		if(atoi(yystack.l_mark[0].str) == 0)
1533			yyerror("number expected");
1534		else if (atoi(yystack.l_mark[0].str) < 12)
1535			yyerror("edns buffer size too small");
1536		else if (atoi(yystack.l_mark[0].str) > 65535)
1537			cfg_parser->cfg->edns_buffer_size = 65535;
1538		else cfg_parser->cfg->edns_buffer_size = atoi(yystack.l_mark[0].str);
1539		free(yystack.l_mark[0].str);
1540	}
1541break;
1542case 171:
1543#line 611 "util/configparser.y"
1544	{
1545		OUTYY(("P(server_msg_buffer_size:%s)\n", yystack.l_mark[0].str));
1546		if(atoi(yystack.l_mark[0].str) == 0)
1547			yyerror("number expected");
1548		else if (atoi(yystack.l_mark[0].str) < 4096)
1549			yyerror("message buffer size too small (use 4096)");
1550		else cfg_parser->cfg->msg_buffer_size = atoi(yystack.l_mark[0].str);
1551		free(yystack.l_mark[0].str);
1552	}
1553break;
1554case 172:
1555#line 622 "util/configparser.y"
1556	{
1557		OUTYY(("P(server_msg_cache_size:%s)\n", yystack.l_mark[0].str));
1558		if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->msg_cache_size))
1559			yyerror("memory size expected");
1560		free(yystack.l_mark[0].str);
1561	}
1562break;
1563case 173:
1564#line 630 "util/configparser.y"
1565	{
1566		OUTYY(("P(server_msg_cache_slabs:%s)\n", yystack.l_mark[0].str));
1567		if(atoi(yystack.l_mark[0].str) == 0)
1568			yyerror("number expected");
1569		else {
1570			cfg_parser->cfg->msg_cache_slabs = atoi(yystack.l_mark[0].str);
1571			if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
1572				yyerror("must be a power of 2");
1573		}
1574		free(yystack.l_mark[0].str);
1575	}
1576break;
1577case 174:
1578#line 643 "util/configparser.y"
1579	{
1580		OUTYY(("P(server_num_queries_per_thread:%s)\n", yystack.l_mark[0].str));
1581		if(atoi(yystack.l_mark[0].str) == 0)
1582			yyerror("number expected");
1583		else cfg_parser->cfg->num_queries_per_thread = atoi(yystack.l_mark[0].str);
1584		free(yystack.l_mark[0].str);
1585	}
1586break;
1587case 175:
1588#line 652 "util/configparser.y"
1589	{
1590		OUTYY(("P(server_jostle_timeout:%s)\n", yystack.l_mark[0].str));
1591		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1592			yyerror("number expected");
1593		else cfg_parser->cfg->jostle_time = atoi(yystack.l_mark[0].str);
1594		free(yystack.l_mark[0].str);
1595	}
1596break;
1597case 176:
1598#line 661 "util/configparser.y"
1599	{
1600		OUTYY(("P(server_rrset_cache_size:%s)\n", yystack.l_mark[0].str));
1601		if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->rrset_cache_size))
1602			yyerror("memory size expected");
1603		free(yystack.l_mark[0].str);
1604	}
1605break;
1606case 177:
1607#line 669 "util/configparser.y"
1608	{
1609		OUTYY(("P(server_rrset_cache_slabs:%s)\n", yystack.l_mark[0].str));
1610		if(atoi(yystack.l_mark[0].str) == 0)
1611			yyerror("number expected");
1612		else {
1613			cfg_parser->cfg->rrset_cache_slabs = atoi(yystack.l_mark[0].str);
1614			if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
1615				yyerror("must be a power of 2");
1616		}
1617		free(yystack.l_mark[0].str);
1618	}
1619break;
1620case 178:
1621#line 682 "util/configparser.y"
1622	{
1623		OUTYY(("P(server_infra_host_ttl:%s)\n", yystack.l_mark[0].str));
1624		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1625			yyerror("number expected");
1626		else cfg_parser->cfg->host_ttl = atoi(yystack.l_mark[0].str);
1627		free(yystack.l_mark[0].str);
1628	}
1629break;
1630case 179:
1631#line 691 "util/configparser.y"
1632	{
1633		OUTYY(("P(server_infra_lame_ttl:%s)\n", yystack.l_mark[0].str));
1634		verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
1635			"removed, use infra-host-ttl)", yystack.l_mark[0].str);
1636		free(yystack.l_mark[0].str);
1637	}
1638break;
1639case 180:
1640#line 699 "util/configparser.y"
1641	{
1642		OUTYY(("P(server_infra_cache_numhosts:%s)\n", yystack.l_mark[0].str));
1643		if(atoi(yystack.l_mark[0].str) == 0)
1644			yyerror("number expected");
1645		else cfg_parser->cfg->infra_cache_numhosts = atoi(yystack.l_mark[0].str);
1646		free(yystack.l_mark[0].str);
1647	}
1648break;
1649case 181:
1650#line 708 "util/configparser.y"
1651	{
1652		OUTYY(("P(server_infra_cache_lame_size:%s)\n", yystack.l_mark[0].str));
1653		verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
1654			"(option removed, use infra-cache-numhosts)", yystack.l_mark[0].str);
1655		free(yystack.l_mark[0].str);
1656	}
1657break;
1658case 182:
1659#line 716 "util/configparser.y"
1660	{
1661		OUTYY(("P(server_infra_cache_slabs:%s)\n", yystack.l_mark[0].str));
1662		if(atoi(yystack.l_mark[0].str) == 0)
1663			yyerror("number expected");
1664		else {
1665			cfg_parser->cfg->infra_cache_slabs = atoi(yystack.l_mark[0].str);
1666			if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
1667				yyerror("must be a power of 2");
1668		}
1669		free(yystack.l_mark[0].str);
1670	}
1671break;
1672case 183:
1673#line 729 "util/configparser.y"
1674	{
1675		OUTYY(("P(server_target_fetch_policy:%s)\n", yystack.l_mark[0].str));
1676		free(cfg_parser->cfg->target_fetch_policy);
1677		cfg_parser->cfg->target_fetch_policy = yystack.l_mark[0].str;
1678	}
1679break;
1680case 184:
1681#line 736 "util/configparser.y"
1682	{
1683		OUTYY(("P(server_harden_short_bufsize:%s)\n", yystack.l_mark[0].str));
1684		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1685			yyerror("expected yes or no.");
1686		else cfg_parser->cfg->harden_short_bufsize =
1687			(strcmp(yystack.l_mark[0].str, "yes")==0);
1688		free(yystack.l_mark[0].str);
1689	}
1690break;
1691case 185:
1692#line 746 "util/configparser.y"
1693	{
1694		OUTYY(("P(server_harden_large_queries:%s)\n", yystack.l_mark[0].str));
1695		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1696			yyerror("expected yes or no.");
1697		else cfg_parser->cfg->harden_large_queries =
1698			(strcmp(yystack.l_mark[0].str, "yes")==0);
1699		free(yystack.l_mark[0].str);
1700	}
1701break;
1702case 186:
1703#line 756 "util/configparser.y"
1704	{
1705		OUTYY(("P(server_harden_glue:%s)\n", yystack.l_mark[0].str));
1706		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1707			yyerror("expected yes or no.");
1708		else cfg_parser->cfg->harden_glue =
1709			(strcmp(yystack.l_mark[0].str, "yes")==0);
1710		free(yystack.l_mark[0].str);
1711	}
1712break;
1713case 187:
1714#line 766 "util/configparser.y"
1715	{
1716		OUTYY(("P(server_harden_dnssec_stripped:%s)\n", yystack.l_mark[0].str));
1717		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1718			yyerror("expected yes or no.");
1719		else cfg_parser->cfg->harden_dnssec_stripped =
1720			(strcmp(yystack.l_mark[0].str, "yes")==0);
1721		free(yystack.l_mark[0].str);
1722	}
1723break;
1724case 188:
1725#line 776 "util/configparser.y"
1726	{
1727		OUTYY(("P(server_harden_below_nxdomain:%s)\n", yystack.l_mark[0].str));
1728		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1729			yyerror("expected yes or no.");
1730		else cfg_parser->cfg->harden_below_nxdomain =
1731			(strcmp(yystack.l_mark[0].str, "yes")==0);
1732		free(yystack.l_mark[0].str);
1733	}
1734break;
1735case 189:
1736#line 786 "util/configparser.y"
1737	{
1738		OUTYY(("P(server_harden_referral_path:%s)\n", yystack.l_mark[0].str));
1739		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1740			yyerror("expected yes or no.");
1741		else cfg_parser->cfg->harden_referral_path =
1742			(strcmp(yystack.l_mark[0].str, "yes")==0);
1743		free(yystack.l_mark[0].str);
1744	}
1745break;
1746case 190:
1747#line 796 "util/configparser.y"
1748	{
1749		OUTYY(("P(server_use_caps_for_id:%s)\n", yystack.l_mark[0].str));
1750		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1751			yyerror("expected yes or no.");
1752		else cfg_parser->cfg->use_caps_bits_for_id =
1753			(strcmp(yystack.l_mark[0].str, "yes")==0);
1754		free(yystack.l_mark[0].str);
1755	}
1756break;
1757case 191:
1758#line 806 "util/configparser.y"
1759	{
1760		OUTYY(("P(server_private_address:%s)\n", yystack.l_mark[0].str));
1761		if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, yystack.l_mark[0].str))
1762			yyerror("out of memory");
1763	}
1764break;
1765case 192:
1766#line 813 "util/configparser.y"
1767	{
1768		OUTYY(("P(server_private_domain:%s)\n", yystack.l_mark[0].str));
1769		if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, yystack.l_mark[0].str))
1770			yyerror("out of memory");
1771	}
1772break;
1773case 193:
1774#line 820 "util/configparser.y"
1775	{
1776		OUTYY(("P(server_prefetch:%s)\n", yystack.l_mark[0].str));
1777		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1778			yyerror("expected yes or no.");
1779		else cfg_parser->cfg->prefetch = (strcmp(yystack.l_mark[0].str, "yes")==0);
1780		free(yystack.l_mark[0].str);
1781	}
1782break;
1783case 194:
1784#line 829 "util/configparser.y"
1785	{
1786		OUTYY(("P(server_prefetch_key:%s)\n", yystack.l_mark[0].str));
1787		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1788			yyerror("expected yes or no.");
1789		else cfg_parser->cfg->prefetch_key = (strcmp(yystack.l_mark[0].str, "yes")==0);
1790		free(yystack.l_mark[0].str);
1791	}
1792break;
1793case 195:
1794#line 838 "util/configparser.y"
1795	{
1796		OUTYY(("P(server_unwanted_reply_threshold:%s)\n", yystack.l_mark[0].str));
1797		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1798			yyerror("number expected");
1799		else cfg_parser->cfg->unwanted_threshold = atoi(yystack.l_mark[0].str);
1800		free(yystack.l_mark[0].str);
1801	}
1802break;
1803case 196:
1804#line 847 "util/configparser.y"
1805	{
1806		OUTYY(("P(server_do_not_query_address:%s)\n", yystack.l_mark[0].str));
1807		if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, yystack.l_mark[0].str))
1808			yyerror("out of memory");
1809	}
1810break;
1811case 197:
1812#line 854 "util/configparser.y"
1813	{
1814		OUTYY(("P(server_do_not_query_localhost:%s)\n", yystack.l_mark[0].str));
1815		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1816			yyerror("expected yes or no.");
1817		else cfg_parser->cfg->donotquery_localhost =
1818			(strcmp(yystack.l_mark[0].str, "yes")==0);
1819		free(yystack.l_mark[0].str);
1820	}
1821break;
1822case 198:
1823#line 864 "util/configparser.y"
1824	{
1825		OUTYY(("P(server_access_control:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str));
1826		if(strcmp(yystack.l_mark[0].str, "deny")!=0 && strcmp(yystack.l_mark[0].str, "refuse")!=0 &&
1827			strcmp(yystack.l_mark[0].str, "allow")!=0 &&
1828			strcmp(yystack.l_mark[0].str, "allow_snoop")!=0) {
1829			yyerror("expected deny, refuse, allow or allow_snoop "
1830				"in access control action");
1831		} else {
1832			if(!cfg_str2list_insert(&cfg_parser->cfg->acls, yystack.l_mark[-1].str, yystack.l_mark[0].str))
1833				fatal_exit("out of memory adding acl");
1834		}
1835	}
1836break;
1837case 199:
1838#line 878 "util/configparser.y"
1839	{
1840		OUTYY(("P(server_module_conf:%s)\n", yystack.l_mark[0].str));
1841		free(cfg_parser->cfg->module_conf);
1842		cfg_parser->cfg->module_conf = yystack.l_mark[0].str;
1843	}
1844break;
1845case 200:
1846#line 885 "util/configparser.y"
1847	{
1848		OUTYY(("P(server_val_override_date:%s)\n", yystack.l_mark[0].str));
1849		if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) {
1850			cfg_parser->cfg->val_date_override = 0;
1851		} else if(strlen(yystack.l_mark[0].str) == 14) {
1852			cfg_parser->cfg->val_date_override =
1853				cfg_convert_timeval(yystack.l_mark[0].str);
1854			if(!cfg_parser->cfg->val_date_override)
1855				yyerror("bad date/time specification");
1856		} else {
1857			if(atoi(yystack.l_mark[0].str) == 0)
1858				yyerror("number expected");
1859			cfg_parser->cfg->val_date_override = atoi(yystack.l_mark[0].str);
1860		}
1861		free(yystack.l_mark[0].str);
1862	}
1863break;
1864case 201:
1865#line 903 "util/configparser.y"
1866	{
1867		OUTYY(("P(server_val_sig_skew_min:%s)\n", yystack.l_mark[0].str));
1868		if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) {
1869			cfg_parser->cfg->val_sig_skew_min = 0;
1870		} else {
1871			cfg_parser->cfg->val_sig_skew_min = atoi(yystack.l_mark[0].str);
1872			if(!cfg_parser->cfg->val_sig_skew_min)
1873				yyerror("number expected");
1874		}
1875		free(yystack.l_mark[0].str);
1876	}
1877break;
1878case 202:
1879#line 916 "util/configparser.y"
1880	{
1881		OUTYY(("P(server_val_sig_skew_max:%s)\n", yystack.l_mark[0].str));
1882		if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) {
1883			cfg_parser->cfg->val_sig_skew_max = 0;
1884		} else {
1885			cfg_parser->cfg->val_sig_skew_max = atoi(yystack.l_mark[0].str);
1886			if(!cfg_parser->cfg->val_sig_skew_max)
1887				yyerror("number expected");
1888		}
1889		free(yystack.l_mark[0].str);
1890	}
1891break;
1892case 203:
1893#line 929 "util/configparser.y"
1894	{
1895		OUTYY(("P(server_cache_max_ttl:%s)\n", yystack.l_mark[0].str));
1896		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1897			yyerror("number expected");
1898		else cfg_parser->cfg->max_ttl = atoi(yystack.l_mark[0].str);
1899		free(yystack.l_mark[0].str);
1900	}
1901break;
1902case 204:
1903#line 938 "util/configparser.y"
1904	{
1905		OUTYY(("P(server_cache_min_ttl:%s)\n", yystack.l_mark[0].str));
1906		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1907			yyerror("number expected");
1908		else cfg_parser->cfg->min_ttl = atoi(yystack.l_mark[0].str);
1909		free(yystack.l_mark[0].str);
1910	}
1911break;
1912case 205:
1913#line 947 "util/configparser.y"
1914	{
1915		OUTYY(("P(server_bogus_ttl:%s)\n", yystack.l_mark[0].str));
1916		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1917			yyerror("number expected");
1918		else cfg_parser->cfg->bogus_ttl = atoi(yystack.l_mark[0].str);
1919		free(yystack.l_mark[0].str);
1920	}
1921break;
1922case 206:
1923#line 956 "util/configparser.y"
1924	{
1925		OUTYY(("P(server_val_clean_additional:%s)\n", yystack.l_mark[0].str));
1926		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1927			yyerror("expected yes or no.");
1928		else cfg_parser->cfg->val_clean_additional =
1929			(strcmp(yystack.l_mark[0].str, "yes")==0);
1930		free(yystack.l_mark[0].str);
1931	}
1932break;
1933case 207:
1934#line 966 "util/configparser.y"
1935	{
1936		OUTYY(("P(server_val_permissive_mode:%s)\n", yystack.l_mark[0].str));
1937		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1938			yyerror("expected yes or no.");
1939		else cfg_parser->cfg->val_permissive_mode =
1940			(strcmp(yystack.l_mark[0].str, "yes")==0);
1941		free(yystack.l_mark[0].str);
1942	}
1943break;
1944case 208:
1945#line 976 "util/configparser.y"
1946	{
1947		OUTYY(("P(server_ignore_cd_flag:%s)\n", yystack.l_mark[0].str));
1948		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
1949			yyerror("expected yes or no.");
1950		else cfg_parser->cfg->ignore_cd = (strcmp(yystack.l_mark[0].str, "yes")==0);
1951		free(yystack.l_mark[0].str);
1952	}
1953break;
1954case 209:
1955#line 985 "util/configparser.y"
1956	{
1957		OUTYY(("P(server_val_log_level:%s)\n", yystack.l_mark[0].str));
1958		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1959			yyerror("number expected");
1960		else cfg_parser->cfg->val_log_level = atoi(yystack.l_mark[0].str);
1961		free(yystack.l_mark[0].str);
1962	}
1963break;
1964case 210:
1965#line 994 "util/configparser.y"
1966	{
1967		OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", yystack.l_mark[0].str));
1968		free(cfg_parser->cfg->val_nsec3_key_iterations);
1969		cfg_parser->cfg->val_nsec3_key_iterations = yystack.l_mark[0].str;
1970	}
1971break;
1972case 211:
1973#line 1001 "util/configparser.y"
1974	{
1975		OUTYY(("P(server_add_holddown:%s)\n", yystack.l_mark[0].str));
1976		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1977			yyerror("number expected");
1978		else cfg_parser->cfg->add_holddown = atoi(yystack.l_mark[0].str);
1979		free(yystack.l_mark[0].str);
1980	}
1981break;
1982case 212:
1983#line 1010 "util/configparser.y"
1984	{
1985		OUTYY(("P(server_del_holddown:%s)\n", yystack.l_mark[0].str));
1986		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1987			yyerror("number expected");
1988		else cfg_parser->cfg->del_holddown = atoi(yystack.l_mark[0].str);
1989		free(yystack.l_mark[0].str);
1990	}
1991break;
1992case 213:
1993#line 1019 "util/configparser.y"
1994	{
1995		OUTYY(("P(server_keep_missing:%s)\n", yystack.l_mark[0].str));
1996		if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0)
1997			yyerror("number expected");
1998		else cfg_parser->cfg->keep_missing = atoi(yystack.l_mark[0].str);
1999		free(yystack.l_mark[0].str);
2000	}
2001break;
2002case 214:
2003#line 1028 "util/configparser.y"
2004	{
2005		OUTYY(("P(server_key_cache_size:%s)\n", yystack.l_mark[0].str));
2006		if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->key_cache_size))
2007			yyerror("memory size expected");
2008		free(yystack.l_mark[0].str);
2009	}
2010break;
2011case 215:
2012#line 1036 "util/configparser.y"
2013	{
2014		OUTYY(("P(server_key_cache_slabs:%s)\n", yystack.l_mark[0].str));
2015		if(atoi(yystack.l_mark[0].str) == 0)
2016			yyerror("number expected");
2017		else {
2018			cfg_parser->cfg->key_cache_slabs = atoi(yystack.l_mark[0].str);
2019			if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
2020				yyerror("must be a power of 2");
2021		}
2022		free(yystack.l_mark[0].str);
2023	}
2024break;
2025case 216:
2026#line 1049 "util/configparser.y"
2027	{
2028		OUTYY(("P(server_neg_cache_size:%s)\n", yystack.l_mark[0].str));
2029		if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->neg_cache_size))
2030			yyerror("memory size expected");
2031		free(yystack.l_mark[0].str);
2032	}
2033break;
2034case 217:
2035#line 1057 "util/configparser.y"
2036	{
2037		OUTYY(("P(server_local_zone:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str));
2038		if(strcmp(yystack.l_mark[0].str, "static")!=0 && strcmp(yystack.l_mark[0].str, "deny")!=0 &&
2039		   strcmp(yystack.l_mark[0].str, "refuse")!=0 && strcmp(yystack.l_mark[0].str, "redirect")!=0 &&
2040		   strcmp(yystack.l_mark[0].str, "transparent")!=0 && strcmp(yystack.l_mark[0].str, "nodefault")!=0
2041		   && strcmp(yystack.l_mark[0].str, "typetransparent")!=0)
2042			yyerror("local-zone type: expected static, deny, "
2043				"refuse, redirect, transparent, "
2044				"typetransparent or nodefault");
2045		else if(strcmp(yystack.l_mark[0].str, "nodefault")==0) {
2046			if(!cfg_strlist_insert(&cfg_parser->cfg->
2047				local_zones_nodefault, yystack.l_mark[-1].str))
2048				fatal_exit("out of memory adding local-zone");
2049			free(yystack.l_mark[0].str);
2050		} else {
2051			if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
2052				yystack.l_mark[-1].str, yystack.l_mark[0].str))
2053				fatal_exit("out of memory adding local-zone");
2054		}
2055	}
2056break;
2057case 218:
2058#line 1079 "util/configparser.y"
2059	{
2060		OUTYY(("P(server_local_data:%s)\n", yystack.l_mark[0].str));
2061		if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, yystack.l_mark[0].str))
2062			fatal_exit("out of memory adding local-data");
2063	}
2064break;
2065case 219:
2066#line 1086 "util/configparser.y"
2067	{
2068		char* ptr;
2069		OUTYY(("P(server_local_data_ptr:%s)\n", yystack.l_mark[0].str));
2070		ptr = cfg_ptr_reverse(yystack.l_mark[0].str);
2071		free(yystack.l_mark[0].str);
2072		if(ptr) {
2073			if(!cfg_strlist_insert(&cfg_parser->cfg->
2074				local_data, ptr))
2075				fatal_exit("out of memory adding local-data");
2076		} else {
2077			yyerror("local-data-ptr could not be reversed");
2078		}
2079	}
2080break;
2081case 220:
2082#line 1101 "util/configparser.y"
2083	{
2084		OUTYY(("P(server_minimal_responses:%s)\n", yystack.l_mark[0].str));
2085		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
2086			yyerror("expected yes or no.");
2087		else cfg_parser->cfg->minimal_responses =
2088			(strcmp(yystack.l_mark[0].str, "yes")==0);
2089		free(yystack.l_mark[0].str);
2090	}
2091break;
2092case 221:
2093#line 1111 "util/configparser.y"
2094	{
2095		OUTYY(("P(server_rrset_roundrobin:%s)\n", yystack.l_mark[0].str));
2096		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
2097			yyerror("expected yes or no.");
2098		else cfg_parser->cfg->rrset_roundrobin =
2099			(strcmp(yystack.l_mark[0].str, "yes")==0);
2100		free(yystack.l_mark[0].str);
2101	}
2102break;
2103case 222:
2104#line 1121 "util/configparser.y"
2105	{
2106		OUTYY(("P(name:%s)\n", yystack.l_mark[0].str));
2107		if(cfg_parser->cfg->stubs->name)
2108			yyerror("stub name override, there must be one name "
2109				"for one stub-zone");
2110		free(cfg_parser->cfg->stubs->name);
2111		cfg_parser->cfg->stubs->name = yystack.l_mark[0].str;
2112	}
2113break;
2114case 223:
2115#line 1131 "util/configparser.y"
2116	{
2117		OUTYY(("P(stub-host:%s)\n", yystack.l_mark[0].str));
2118		if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, yystack.l_mark[0].str))
2119			yyerror("out of memory");
2120	}
2121break;
2122case 224:
2123#line 1138 "util/configparser.y"
2124	{
2125		OUTYY(("P(stub-addr:%s)\n", yystack.l_mark[0].str));
2126		if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, yystack.l_mark[0].str))
2127			yyerror("out of memory");
2128	}
2129break;
2130case 225:
2131#line 1145 "util/configparser.y"
2132	{
2133		OUTYY(("P(stub-first:%s)\n", yystack.l_mark[0].str));
2134		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
2135			yyerror("expected yes or no.");
2136		else cfg_parser->cfg->stubs->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0);
2137		free(yystack.l_mark[0].str);
2138	}
2139break;
2140case 226:
2141#line 1154 "util/configparser.y"
2142	{
2143		OUTYY(("P(stub-prime:%s)\n", yystack.l_mark[0].str));
2144		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
2145			yyerror("expected yes or no.");
2146		else cfg_parser->cfg->stubs->isprime =
2147			(strcmp(yystack.l_mark[0].str, "yes")==0);
2148		free(yystack.l_mark[0].str);
2149	}
2150break;
2151case 227:
2152#line 1164 "util/configparser.y"
2153	{
2154		OUTYY(("P(name:%s)\n", yystack.l_mark[0].str));
2155		if(cfg_parser->cfg->forwards->name)
2156			yyerror("forward name override, there must be one "
2157				"name for one forward-zone");
2158		free(cfg_parser->cfg->forwards->name);
2159		cfg_parser->cfg->forwards->name = yystack.l_mark[0].str;
2160	}
2161break;
2162case 228:
2163#line 1174 "util/configparser.y"
2164	{
2165		OUTYY(("P(forward-host:%s)\n", yystack.l_mark[0].str));
2166		if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, yystack.l_mark[0].str))
2167			yyerror("out of memory");
2168	}
2169break;
2170case 229:
2171#line 1181 "util/configparser.y"
2172	{
2173		OUTYY(("P(forward-addr:%s)\n", yystack.l_mark[0].str));
2174		if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, yystack.l_mark[0].str))
2175			yyerror("out of memory");
2176	}
2177break;
2178case 230:
2179#line 1188 "util/configparser.y"
2180	{
2181		OUTYY(("P(forward-first:%s)\n", yystack.l_mark[0].str));
2182		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
2183			yyerror("expected yes or no.");
2184		else cfg_parser->cfg->forwards->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0);
2185		free(yystack.l_mark[0].str);
2186	}
2187break;
2188case 231:
2189#line 1197 "util/configparser.y"
2190	{
2191		OUTYY(("\nP(remote-control:)\n"));
2192	}
2193break;
2194case 241:
2195#line 1208 "util/configparser.y"
2196	{
2197		OUTYY(("P(control_enable:%s)\n", yystack.l_mark[0].str));
2198		if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0)
2199			yyerror("expected yes or no.");
2200		else cfg_parser->cfg->remote_control_enable =
2201			(strcmp(yystack.l_mark[0].str, "yes")==0);
2202		free(yystack.l_mark[0].str);
2203	}
2204break;
2205case 242:
2206#line 1218 "util/configparser.y"
2207	{
2208		OUTYY(("P(control_port:%s)\n", yystack.l_mark[0].str));
2209		if(atoi(yystack.l_mark[0].str) == 0)
2210			yyerror("control port number expected");
2211		else cfg_parser->cfg->control_port = atoi(yystack.l_mark[0].str);
2212		free(yystack.l_mark[0].str);
2213	}
2214break;
2215case 243:
2216#line 1227 "util/configparser.y"
2217	{
2218		OUTYY(("P(control_interface:%s)\n", yystack.l_mark[0].str));
2219		if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, yystack.l_mark[0].str))
2220			yyerror("out of memory");
2221	}
2222break;
2223case 244:
2224#line 1234 "util/configparser.y"
2225	{
2226		OUTYY(("P(rc_server_key_file:%s)\n", yystack.l_mark[0].str));
2227		free(cfg_parser->cfg->server_key_file);
2228		cfg_parser->cfg->server_key_file = yystack.l_mark[0].str;
2229	}
2230break;
2231case 245:
2232#line 1241 "util/configparser.y"
2233	{
2234		OUTYY(("P(rc_server_cert_file:%s)\n", yystack.l_mark[0].str));
2235		free(cfg_parser->cfg->server_cert_file);
2236		cfg_parser->cfg->server_cert_file = yystack.l_mark[0].str;
2237	}
2238break;
2239case 246:
2240#line 1248 "util/configparser.y"
2241	{
2242		OUTYY(("P(rc_control_key_file:%s)\n", yystack.l_mark[0].str));
2243		free(cfg_parser->cfg->control_key_file);
2244		cfg_parser->cfg->control_key_file = yystack.l_mark[0].str;
2245	}
2246break;
2247case 247:
2248#line 1255 "util/configparser.y"
2249	{
2250		OUTYY(("P(rc_control_cert_file:%s)\n", yystack.l_mark[0].str));
2251		free(cfg_parser->cfg->control_cert_file);
2252		cfg_parser->cfg->control_cert_file = yystack.l_mark[0].str;
2253	}
2254break;
2255case 248:
2256#line 1262 "util/configparser.y"
2257	{
2258		OUTYY(("\nP(python:)\n"));
2259	}
2260break;
2261case 252:
2262#line 1271 "util/configparser.y"
2263	{
2264		OUTYY(("P(python-script:%s)\n", yystack.l_mark[0].str));
2265		free(cfg_parser->cfg->python_script);
2266		cfg_parser->cfg->python_script = yystack.l_mark[0].str;
2267	}
2268break;
2269#line 2269 "util/configparser.c"
2270    }
2271    yystack.s_mark -= yym;
2272    yystate = *yystack.s_mark;
2273    yystack.l_mark -= yym;
2274    yym = yylhs[yyn];
2275    if (yystate == 0 && yym == 0)
2276    {
2277#if YYDEBUG
2278        if (yydebug)
2279            printf("%sdebug: after reduction, shifting from state 0 to\
2280 state %d\n", YYPREFIX, YYFINAL);
2281#endif
2282        yystate = YYFINAL;
2283        *++yystack.s_mark = YYFINAL;
2284        *++yystack.l_mark = yyval;
2285        if (yychar < 0)
2286        {
2287            if ((yychar = YYLEX) < 0) yychar = 0;
2288#if YYDEBUG
2289            if (yydebug)
2290            {
2291                yys = 0;
2292                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2293                if (!yys) yys = "illegal-symbol";
2294                printf("%sdebug: state %d, reading %d (%s)\n",
2295                        YYPREFIX, YYFINAL, yychar, yys);
2296            }
2297#endif
2298        }
2299        if (yychar == 0) goto yyaccept;
2300        goto yyloop;
2301    }
2302    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
2303            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
2304        yystate = yytable[yyn];
2305    else
2306        yystate = yydgoto[yym];
2307#if YYDEBUG
2308    if (yydebug)
2309        printf("%sdebug: after reduction, shifting from state %d \
2310to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
2311#endif
2312    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
2313    {
2314        goto yyoverflow;
2315    }
2316    *++yystack.s_mark = (short) yystate;
2317    *++yystack.l_mark = yyval;
2318    goto yyloop;
2319
2320yyoverflow:
2321    yyerror("yacc stack overflow");
2322
2323yyabort:
2324    yyfreestack(&yystack);
2325    return (1);
2326
2327yyaccept:
2328    yyfreestack(&yystack);
2329    return (0);
2330}
2331