]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/unbound/util/configparser.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / unbound / util / configparser.c
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 }