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