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