configparser.c revision 1.1.1.1.8.1 1 1.1 christos /* A Bison parser, made by GNU Bison 3.0.4. */
2 1.1 christos
3 1.1 christos /* Bison implementation for Yacc-like parsers in C
4 1.1 christos
5 1.1 christos Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This program is free software: you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation, either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos /* As a special exception, you may create a larger work that contains
21 1.1 christos part or all of the Bison parser skeleton and distribute that work
22 1.1 christos under terms of your choice, so long as that work isn't itself a
23 1.1 christos parser generator using the skeleton or a modified version thereof
24 1.1 christos as a parser skeleton. Alternatively, if you modify or redistribute
25 1.1 christos the parser skeleton itself, you may (at your option) remove this
26 1.1 christos special exception, which will cause the skeleton and the resulting
27 1.1 christos Bison output files to be licensed under the GNU General Public
28 1.1 christos License without this special exception.
29 1.1 christos
30 1.1 christos This special exception was added by the Free Software Foundation in
31 1.1 christos version 2.2 of Bison. */
32 1.1 christos
33 1.1 christos /* C LALR(1) parser skeleton written by Richard Stallman, by
34 1.1 christos simplifying the original so-called "semantic" parser. */
35 1.1 christos
36 1.1 christos /* All symbols defined below should begin with yy or YY, to avoid
37 1.1 christos infringing on user name space. This should be done even for local
38 1.1 christos variables, as they might otherwise be expanded by user macros.
39 1.1 christos There are some unavoidable exceptions within include files to
40 1.1 christos define necessary library symbols; they are noted "INFRINGES ON
41 1.1 christos USER NAME SPACE" below. */
42 1.1 christos
43 1.1 christos /* Identify Bison output. */
44 1.1 christos #define YYBISON 1
45 1.1 christos
46 1.1 christos /* Bison version. */
47 1.1 christos #define YYBISON_VERSION "3.0.4"
48 1.1 christos
49 1.1 christos /* Skeleton name. */
50 1.1 christos #define YYSKELETON_NAME "yacc.c"
51 1.1 christos
52 1.1 christos /* Pure parsers. */
53 1.1 christos #define YYPURE 0
54 1.1 christos
55 1.1 christos /* Push parsers. */
56 1.1 christos #define YYPUSH 0
57 1.1 christos
58 1.1 christos /* Pull parsers. */
59 1.1 christos #define YYPULL 1
60 1.1 christos
61 1.1 christos
62 1.1 christos
63 1.1 christos
64 1.1 christos /* Copy the first part of user declarations. */
65 1.1 christos #line 10 "configparser.y" /* yacc.c:339 */
66 1.1 christos
67 1.1 christos #include "config.h"
68 1.1 christos
69 1.1 christos #include <stdarg.h>
70 1.1 christos #include <stdio.h>
71 1.1 christos #include <string.h>
72 1.1 christos #include <stdlib.h>
73 1.1 christos #include <assert.h>
74 1.1 christos
75 1.1 christos #include "options.h"
76 1.1 christos #include "util.h"
77 1.1 christos #include "dname.h"
78 1.1 christos #include "tsig.h"
79 1.1 christos #include "rrl.h"
80 1.1 christos #include "configyyrename.h"
81 1.1 christos int c_lex(void);
82 1.1 christos void c_error(const char *message);
83 1.1 christos
84 1.1 christos #ifdef __cplusplus
85 1.1 christos extern "C"
86 1.1 christos #endif /* __cplusplus */
87 1.1 christos
88 1.1 christos /* these need to be global, otherwise they cannot be used inside yacc */
89 1.1.1.1.8.1 martin extern config_parser_state_type* cfg_parser;
90 1.1 christos
91 1.1 christos #if 0
92 1.1 christos #define OUTYY(s) printf s /* used ONLY when debugging */
93 1.1 christos #else
94 1.1 christos #define OUTYY(s)
95 1.1 christos #endif
96 1.1 christos
97 1.1 christos
98 1.1 christos #line 99 "configparser.c" /* yacc.c:339 */
99 1.1 christos
100 1.1 christos # ifndef YY_NULLPTR
101 1.1 christos # if defined __cplusplus && 201103L <= __cplusplus
102 1.1 christos # define YY_NULLPTR nullptr
103 1.1 christos # else
104 1.1 christos # define YY_NULLPTR 0
105 1.1 christos # endif
106 1.1 christos # endif
107 1.1 christos
108 1.1 christos /* Enabling verbose error messages. */
109 1.1 christos #ifdef YYERROR_VERBOSE
110 1.1 christos # undef YYERROR_VERBOSE
111 1.1 christos # define YYERROR_VERBOSE 1
112 1.1 christos #else
113 1.1 christos # define YYERROR_VERBOSE 0
114 1.1 christos #endif
115 1.1 christos
116 1.1 christos /* In a future release of Bison, this section will be replaced
117 1.1 christos by #include "configparser.h". */
118 1.1 christos #ifndef YY_YY_CONFIGPARSER_H_INCLUDED
119 1.1 christos # define YY_YY_CONFIGPARSER_H_INCLUDED
120 1.1 christos /* Debug traces. */
121 1.1 christos #ifndef YYDEBUG
122 1.1 christos # define YYDEBUG 0
123 1.1 christos #endif
124 1.1 christos #if YYDEBUG
125 1.1 christos extern int yydebug;
126 1.1 christos #endif
127 1.1 christos
128 1.1 christos /* Token type. */
129 1.1 christos #ifndef YYTOKENTYPE
130 1.1 christos # define YYTOKENTYPE
131 1.1 christos enum yytokentype
132 1.1 christos {
133 1.1 christos SPACE = 258,
134 1.1 christos LETTER = 259,
135 1.1 christos NEWLINE = 260,
136 1.1 christos COMMENT = 261,
137 1.1 christos COLON = 262,
138 1.1 christos ANY = 263,
139 1.1 christos ZONESTR = 264,
140 1.1 christos STRING = 265,
141 1.1 christos VAR_SERVER = 266,
142 1.1 christos VAR_NAME = 267,
143 1.1 christos VAR_IP_ADDRESS = 268,
144 1.1 christos VAR_IP_TRANSPARENT = 269,
145 1.1 christos VAR_DEBUG_MODE = 270,
146 1.1 christos VAR_IP4_ONLY = 271,
147 1.1 christos VAR_IP6_ONLY = 272,
148 1.1 christos VAR_DATABASE = 273,
149 1.1 christos VAR_IDENTITY = 274,
150 1.1 christos VAR_NSID = 275,
151 1.1 christos VAR_LOGFILE = 276,
152 1.1 christos VAR_SERVER_COUNT = 277,
153 1.1 christos VAR_TCP_COUNT = 278,
154 1.1 christos VAR_PIDFILE = 279,
155 1.1 christos VAR_PORT = 280,
156 1.1 christos VAR_STATISTICS = 281,
157 1.1 christos VAR_CHROOT = 282,
158 1.1 christos VAR_USERNAME = 283,
159 1.1 christos VAR_ZONESDIR = 284,
160 1.1 christos VAR_XFRDFILE = 285,
161 1.1 christos VAR_DIFFFILE = 286,
162 1.1 christos VAR_XFRD_RELOAD_TIMEOUT = 287,
163 1.1 christos VAR_TCP_QUERY_COUNT = 288,
164 1.1 christos VAR_TCP_TIMEOUT = 289,
165 1.1 christos VAR_IPV4_EDNS_SIZE = 290,
166 1.1 christos VAR_IPV6_EDNS_SIZE = 291,
167 1.1 christos VAR_DO_IP4 = 292,
168 1.1 christos VAR_DO_IP6 = 293,
169 1.1 christos VAR_TCP_MSS = 294,
170 1.1 christos VAR_OUTGOING_TCP_MSS = 295,
171 1.1 christos VAR_IP_FREEBIND = 296,
172 1.1 christos VAR_ZONEFILE = 297,
173 1.1 christos VAR_ZONE = 298,
174 1.1 christos VAR_ALLOW_NOTIFY = 299,
175 1.1 christos VAR_REQUEST_XFR = 300,
176 1.1 christos VAR_NOTIFY = 301,
177 1.1 christos VAR_PROVIDE_XFR = 302,
178 1.1 christos VAR_SIZE_LIMIT_XFR = 303,
179 1.1 christos VAR_NOTIFY_RETRY = 304,
180 1.1 christos VAR_OUTGOING_INTERFACE = 305,
181 1.1 christos VAR_ALLOW_AXFR_FALLBACK = 306,
182 1.1 christos VAR_KEY = 307,
183 1.1 christos VAR_ALGORITHM = 308,
184 1.1 christos VAR_SECRET = 309,
185 1.1 christos VAR_AXFR = 310,
186 1.1 christos VAR_UDP = 311,
187 1.1 christos VAR_VERBOSITY = 312,
188 1.1 christos VAR_HIDE_VERSION = 313,
189 1.1 christos VAR_PATTERN = 314,
190 1.1 christos VAR_INCLUDEPATTERN = 315,
191 1.1 christos VAR_ZONELISTFILE = 316,
192 1.1 christos VAR_REMOTE_CONTROL = 317,
193 1.1 christos VAR_CONTROL_ENABLE = 318,
194 1.1 christos VAR_CONTROL_INTERFACE = 319,
195 1.1 christos VAR_CONTROL_PORT = 320,
196 1.1 christos VAR_SERVER_KEY_FILE = 321,
197 1.1 christos VAR_SERVER_CERT_FILE = 322,
198 1.1 christos VAR_CONTROL_KEY_FILE = 323,
199 1.1 christos VAR_CONTROL_CERT_FILE = 324,
200 1.1 christos VAR_XFRDIR = 325,
201 1.1 christos VAR_RRL_SIZE = 326,
202 1.1 christos VAR_RRL_RATELIMIT = 327,
203 1.1 christos VAR_RRL_SLIP = 328,
204 1.1 christos VAR_RRL_IPV4_PREFIX_LENGTH = 329,
205 1.1 christos VAR_RRL_IPV6_PREFIX_LENGTH = 330,
206 1.1 christos VAR_RRL_WHITELIST_RATELIMIT = 331,
207 1.1 christos VAR_RRL_WHITELIST = 332,
208 1.1 christos VAR_ZONEFILES_CHECK = 333,
209 1.1 christos VAR_ZONEFILES_WRITE = 334,
210 1.1 christos VAR_LOG_TIME_ASCII = 335,
211 1.1 christos VAR_ROUND_ROBIN = 336,
212 1.1 christos VAR_ZONESTATS = 337,
213 1.1 christos VAR_REUSEPORT = 338,
214 1.1 christos VAR_VERSION = 339,
215 1.1 christos VAR_MAX_REFRESH_TIME = 340,
216 1.1 christos VAR_MIN_REFRESH_TIME = 341,
217 1.1 christos VAR_MAX_RETRY_TIME = 342,
218 1.1 christos VAR_MIN_RETRY_TIME = 343,
219 1.1.1.1.8.1 martin VAR_MULTI_MASTER_CHECK = 344,
220 1.1.1.1.8.1 martin VAR_MINIMAL_RESPONSES = 345,
221 1.1.1.1.8.1 martin VAR_REFUSE_ANY = 346,
222 1.1.1.1.8.1 martin VAR_USE_SYSTEMD = 347
223 1.1 christos };
224 1.1 christos #endif
225 1.1 christos /* Tokens. */
226 1.1 christos #define SPACE 258
227 1.1 christos #define LETTER 259
228 1.1 christos #define NEWLINE 260
229 1.1 christos #define COMMENT 261
230 1.1 christos #define COLON 262
231 1.1 christos #define ANY 263
232 1.1 christos #define ZONESTR 264
233 1.1 christos #define STRING 265
234 1.1 christos #define VAR_SERVER 266
235 1.1 christos #define VAR_NAME 267
236 1.1 christos #define VAR_IP_ADDRESS 268
237 1.1 christos #define VAR_IP_TRANSPARENT 269
238 1.1 christos #define VAR_DEBUG_MODE 270
239 1.1 christos #define VAR_IP4_ONLY 271
240 1.1 christos #define VAR_IP6_ONLY 272
241 1.1 christos #define VAR_DATABASE 273
242 1.1 christos #define VAR_IDENTITY 274
243 1.1 christos #define VAR_NSID 275
244 1.1 christos #define VAR_LOGFILE 276
245 1.1 christos #define VAR_SERVER_COUNT 277
246 1.1 christos #define VAR_TCP_COUNT 278
247 1.1 christos #define VAR_PIDFILE 279
248 1.1 christos #define VAR_PORT 280
249 1.1 christos #define VAR_STATISTICS 281
250 1.1 christos #define VAR_CHROOT 282
251 1.1 christos #define VAR_USERNAME 283
252 1.1 christos #define VAR_ZONESDIR 284
253 1.1 christos #define VAR_XFRDFILE 285
254 1.1 christos #define VAR_DIFFFILE 286
255 1.1 christos #define VAR_XFRD_RELOAD_TIMEOUT 287
256 1.1 christos #define VAR_TCP_QUERY_COUNT 288
257 1.1 christos #define VAR_TCP_TIMEOUT 289
258 1.1 christos #define VAR_IPV4_EDNS_SIZE 290
259 1.1 christos #define VAR_IPV6_EDNS_SIZE 291
260 1.1 christos #define VAR_DO_IP4 292
261 1.1 christos #define VAR_DO_IP6 293
262 1.1 christos #define VAR_TCP_MSS 294
263 1.1 christos #define VAR_OUTGOING_TCP_MSS 295
264 1.1 christos #define VAR_IP_FREEBIND 296
265 1.1 christos #define VAR_ZONEFILE 297
266 1.1 christos #define VAR_ZONE 298
267 1.1 christos #define VAR_ALLOW_NOTIFY 299
268 1.1 christos #define VAR_REQUEST_XFR 300
269 1.1 christos #define VAR_NOTIFY 301
270 1.1 christos #define VAR_PROVIDE_XFR 302
271 1.1 christos #define VAR_SIZE_LIMIT_XFR 303
272 1.1 christos #define VAR_NOTIFY_RETRY 304
273 1.1 christos #define VAR_OUTGOING_INTERFACE 305
274 1.1 christos #define VAR_ALLOW_AXFR_FALLBACK 306
275 1.1 christos #define VAR_KEY 307
276 1.1 christos #define VAR_ALGORITHM 308
277 1.1 christos #define VAR_SECRET 309
278 1.1 christos #define VAR_AXFR 310
279 1.1 christos #define VAR_UDP 311
280 1.1 christos #define VAR_VERBOSITY 312
281 1.1 christos #define VAR_HIDE_VERSION 313
282 1.1 christos #define VAR_PATTERN 314
283 1.1 christos #define VAR_INCLUDEPATTERN 315
284 1.1 christos #define VAR_ZONELISTFILE 316
285 1.1 christos #define VAR_REMOTE_CONTROL 317
286 1.1 christos #define VAR_CONTROL_ENABLE 318
287 1.1 christos #define VAR_CONTROL_INTERFACE 319
288 1.1 christos #define VAR_CONTROL_PORT 320
289 1.1 christos #define VAR_SERVER_KEY_FILE 321
290 1.1 christos #define VAR_SERVER_CERT_FILE 322
291 1.1 christos #define VAR_CONTROL_KEY_FILE 323
292 1.1 christos #define VAR_CONTROL_CERT_FILE 324
293 1.1 christos #define VAR_XFRDIR 325
294 1.1 christos #define VAR_RRL_SIZE 326
295 1.1 christos #define VAR_RRL_RATELIMIT 327
296 1.1 christos #define VAR_RRL_SLIP 328
297 1.1 christos #define VAR_RRL_IPV4_PREFIX_LENGTH 329
298 1.1 christos #define VAR_RRL_IPV6_PREFIX_LENGTH 330
299 1.1 christos #define VAR_RRL_WHITELIST_RATELIMIT 331
300 1.1 christos #define VAR_RRL_WHITELIST 332
301 1.1 christos #define VAR_ZONEFILES_CHECK 333
302 1.1 christos #define VAR_ZONEFILES_WRITE 334
303 1.1 christos #define VAR_LOG_TIME_ASCII 335
304 1.1 christos #define VAR_ROUND_ROBIN 336
305 1.1 christos #define VAR_ZONESTATS 337
306 1.1 christos #define VAR_REUSEPORT 338
307 1.1 christos #define VAR_VERSION 339
308 1.1 christos #define VAR_MAX_REFRESH_TIME 340
309 1.1 christos #define VAR_MIN_REFRESH_TIME 341
310 1.1 christos #define VAR_MAX_RETRY_TIME 342
311 1.1 christos #define VAR_MIN_RETRY_TIME 343
312 1.1 christos #define VAR_MULTI_MASTER_CHECK 344
313 1.1.1.1.8.1 martin #define VAR_MINIMAL_RESPONSES 345
314 1.1.1.1.8.1 martin #define VAR_REFUSE_ANY 346
315 1.1.1.1.8.1 martin #define VAR_USE_SYSTEMD 347
316 1.1 christos
317 1.1 christos /* Value type. */
318 1.1 christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
319 1.1 christos
320 1.1 christos union YYSTYPE
321 1.1 christos {
322 1.1 christos #line 42 "configparser.y" /* yacc.c:355 */
323 1.1 christos
324 1.1 christos char* str;
325 1.1 christos
326 1.1.1.1.8.1 martin #line 327 "configparser.c" /* yacc.c:355 */
327 1.1 christos };
328 1.1 christos
329 1.1 christos typedef union YYSTYPE YYSTYPE;
330 1.1 christos # define YYSTYPE_IS_TRIVIAL 1
331 1.1 christos # define YYSTYPE_IS_DECLARED 1
332 1.1 christos #endif
333 1.1 christos
334 1.1 christos
335 1.1 christos extern YYSTYPE yylval;
336 1.1 christos
337 1.1 christos int yyparse (void);
338 1.1 christos
339 1.1 christos #endif /* !YY_YY_CONFIGPARSER_H_INCLUDED */
340 1.1 christos
341 1.1 christos /* Copy the second part of user declarations. */
342 1.1 christos
343 1.1.1.1.8.1 martin #line 344 "configparser.c" /* yacc.c:358 */
344 1.1 christos
345 1.1 christos #ifdef short
346 1.1 christos # undef short
347 1.1 christos #endif
348 1.1 christos
349 1.1 christos #ifdef YYTYPE_UINT8
350 1.1 christos typedef YYTYPE_UINT8 yytype_uint8;
351 1.1 christos #else
352 1.1 christos typedef unsigned char yytype_uint8;
353 1.1 christos #endif
354 1.1 christos
355 1.1 christos #ifdef YYTYPE_INT8
356 1.1 christos typedef YYTYPE_INT8 yytype_int8;
357 1.1 christos #else
358 1.1 christos typedef signed char yytype_int8;
359 1.1 christos #endif
360 1.1 christos
361 1.1 christos #ifdef YYTYPE_UINT16
362 1.1 christos typedef YYTYPE_UINT16 yytype_uint16;
363 1.1 christos #else
364 1.1 christos typedef unsigned short int yytype_uint16;
365 1.1 christos #endif
366 1.1 christos
367 1.1 christos #ifdef YYTYPE_INT16
368 1.1 christos typedef YYTYPE_INT16 yytype_int16;
369 1.1 christos #else
370 1.1 christos typedef short int yytype_int16;
371 1.1 christos #endif
372 1.1 christos
373 1.1 christos #ifndef YYSIZE_T
374 1.1 christos # ifdef __SIZE_TYPE__
375 1.1 christos # define YYSIZE_T __SIZE_TYPE__
376 1.1 christos # elif defined size_t
377 1.1 christos # define YYSIZE_T size_t
378 1.1 christos # elif ! defined YYSIZE_T
379 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
380 1.1 christos # define YYSIZE_T size_t
381 1.1 christos # else
382 1.1 christos # define YYSIZE_T unsigned int
383 1.1 christos # endif
384 1.1 christos #endif
385 1.1 christos
386 1.1 christos #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
387 1.1 christos
388 1.1 christos #ifndef YY_
389 1.1 christos # if defined YYENABLE_NLS && YYENABLE_NLS
390 1.1 christos # if ENABLE_NLS
391 1.1 christos # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
392 1.1 christos # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
393 1.1 christos # endif
394 1.1 christos # endif
395 1.1 christos # ifndef YY_
396 1.1 christos # define YY_(Msgid) Msgid
397 1.1 christos # endif
398 1.1 christos #endif
399 1.1 christos
400 1.1 christos #ifndef YY_ATTRIBUTE
401 1.1 christos # if (defined __GNUC__ \
402 1.1 christos && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
403 1.1 christos || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
404 1.1 christos # define YY_ATTRIBUTE(Spec) __attribute__(Spec)
405 1.1 christos # else
406 1.1 christos # define YY_ATTRIBUTE(Spec) /* empty */
407 1.1 christos # endif
408 1.1 christos #endif
409 1.1 christos
410 1.1 christos #ifndef YY_ATTRIBUTE_PURE
411 1.1 christos # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
412 1.1 christos #endif
413 1.1 christos
414 1.1 christos #ifndef YY_ATTRIBUTE_UNUSED
415 1.1 christos # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
416 1.1 christos #endif
417 1.1 christos
418 1.1 christos #if !defined _Noreturn \
419 1.1 christos && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
420 1.1 christos # if defined _MSC_VER && 1200 <= _MSC_VER
421 1.1 christos # define _Noreturn __declspec (noreturn)
422 1.1 christos # else
423 1.1 christos # define _Noreturn YY_ATTRIBUTE ((__noreturn__))
424 1.1 christos # endif
425 1.1 christos #endif
426 1.1 christos
427 1.1 christos /* Suppress unused-variable warnings by "using" E. */
428 1.1 christos #if ! defined lint || defined __GNUC__
429 1.1 christos # define YYUSE(E) ((void) (E))
430 1.1 christos #else
431 1.1 christos # define YYUSE(E) /* empty */
432 1.1 christos #endif
433 1.1 christos
434 1.1 christos #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
435 1.1 christos /* Suppress an incorrect diagnostic about yylval being uninitialized. */
436 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
437 1.1 christos _Pragma ("GCC diagnostic push") \
438 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
439 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
440 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
441 1.1 christos _Pragma ("GCC diagnostic pop")
442 1.1 christos #else
443 1.1 christos # define YY_INITIAL_VALUE(Value) Value
444 1.1 christos #endif
445 1.1 christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
446 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
447 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
448 1.1 christos #endif
449 1.1 christos #ifndef YY_INITIAL_VALUE
450 1.1 christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
451 1.1 christos #endif
452 1.1 christos
453 1.1 christos
454 1.1 christos #if ! defined yyoverflow || YYERROR_VERBOSE
455 1.1 christos
456 1.1 christos /* The parser invokes alloca or malloc; define the necessary symbols. */
457 1.1 christos
458 1.1 christos # ifdef YYSTACK_USE_ALLOCA
459 1.1 christos # if YYSTACK_USE_ALLOCA
460 1.1 christos # ifdef __GNUC__
461 1.1 christos # define YYSTACK_ALLOC __builtin_alloca
462 1.1 christos # elif defined __BUILTIN_VA_ARG_INCR
463 1.1 christos # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
464 1.1 christos # elif defined _AIX
465 1.1 christos # define YYSTACK_ALLOC __alloca
466 1.1 christos # elif defined _MSC_VER
467 1.1 christos # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
468 1.1 christos # define alloca _alloca
469 1.1 christos # else
470 1.1 christos # define YYSTACK_ALLOC alloca
471 1.1 christos # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
472 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
473 1.1 christos /* Use EXIT_SUCCESS as a witness for stdlib.h. */
474 1.1 christos # ifndef EXIT_SUCCESS
475 1.1 christos # define EXIT_SUCCESS 0
476 1.1 christos # endif
477 1.1 christos # endif
478 1.1 christos # endif
479 1.1 christos # endif
480 1.1 christos # endif
481 1.1 christos
482 1.1 christos # ifdef YYSTACK_ALLOC
483 1.1 christos /* Pacify GCC's 'empty if-body' warning. */
484 1.1 christos # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
485 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
486 1.1 christos /* The OS might guarantee only one guard page at the bottom of the stack,
487 1.1 christos and a page size can be as small as 4096 bytes. So we cannot safely
488 1.1 christos invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
489 1.1 christos to allow for a few compiler-allocated temporary stack slots. */
490 1.1 christos # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
491 1.1 christos # endif
492 1.1 christos # else
493 1.1 christos # define YYSTACK_ALLOC YYMALLOC
494 1.1 christos # define YYSTACK_FREE YYFREE
495 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
496 1.1 christos # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
497 1.1 christos # endif
498 1.1 christos # if (defined __cplusplus && ! defined EXIT_SUCCESS \
499 1.1 christos && ! ((defined YYMALLOC || defined malloc) \
500 1.1 christos && (defined YYFREE || defined free)))
501 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
502 1.1 christos # ifndef EXIT_SUCCESS
503 1.1 christos # define EXIT_SUCCESS 0
504 1.1 christos # endif
505 1.1 christos # endif
506 1.1 christos # ifndef YYMALLOC
507 1.1 christos # define YYMALLOC malloc
508 1.1 christos # if ! defined malloc && ! defined EXIT_SUCCESS
509 1.1 christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
510 1.1 christos # endif
511 1.1 christos # endif
512 1.1 christos # ifndef YYFREE
513 1.1 christos # define YYFREE free
514 1.1 christos # if ! defined free && ! defined EXIT_SUCCESS
515 1.1 christos void free (void *); /* INFRINGES ON USER NAME SPACE */
516 1.1 christos # endif
517 1.1 christos # endif
518 1.1 christos # endif
519 1.1 christos #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
520 1.1 christos
521 1.1 christos
522 1.1 christos #if (! defined yyoverflow \
523 1.1 christos && (! defined __cplusplus \
524 1.1 christos || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
525 1.1 christos
526 1.1 christos /* A type that is properly aligned for any stack member. */
527 1.1 christos union yyalloc
528 1.1 christos {
529 1.1 christos yytype_int16 yyss_alloc;
530 1.1 christos YYSTYPE yyvs_alloc;
531 1.1 christos };
532 1.1 christos
533 1.1 christos /* The size of the maximum gap between one aligned stack and the next. */
534 1.1 christos # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
535 1.1 christos
536 1.1 christos /* The size of an array large to enough to hold all stacks, each with
537 1.1 christos N elements. */
538 1.1 christos # define YYSTACK_BYTES(N) \
539 1.1 christos ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
540 1.1 christos + YYSTACK_GAP_MAXIMUM)
541 1.1 christos
542 1.1 christos # define YYCOPY_NEEDED 1
543 1.1 christos
544 1.1 christos /* Relocate STACK from its old location to the new one. The
545 1.1 christos local variables YYSIZE and YYSTACKSIZE give the old and new number of
546 1.1 christos elements in the stack, and YYPTR gives the new location of the
547 1.1 christos stack. Advance YYPTR to a properly aligned location for the next
548 1.1 christos stack. */
549 1.1 christos # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
550 1.1 christos do \
551 1.1 christos { \
552 1.1 christos YYSIZE_T yynewbytes; \
553 1.1 christos YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
554 1.1 christos Stack = &yyptr->Stack_alloc; \
555 1.1 christos yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
556 1.1 christos yyptr += yynewbytes / sizeof (*yyptr); \
557 1.1 christos } \
558 1.1 christos while (0)
559 1.1 christos
560 1.1 christos #endif
561 1.1 christos
562 1.1 christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
563 1.1 christos /* Copy COUNT objects from SRC to DST. The source and destination do
564 1.1 christos not overlap. */
565 1.1 christos # ifndef YYCOPY
566 1.1 christos # if defined __GNUC__ && 1 < __GNUC__
567 1.1 christos # define YYCOPY(Dst, Src, Count) \
568 1.1 christos __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
569 1.1 christos # else
570 1.1 christos # define YYCOPY(Dst, Src, Count) \
571 1.1 christos do \
572 1.1 christos { \
573 1.1 christos YYSIZE_T yyi; \
574 1.1 christos for (yyi = 0; yyi < (Count); yyi++) \
575 1.1 christos (Dst)[yyi] = (Src)[yyi]; \
576 1.1 christos } \
577 1.1 christos while (0)
578 1.1 christos # endif
579 1.1 christos # endif
580 1.1 christos #endif /* !YYCOPY_NEEDED */
581 1.1 christos
582 1.1 christos /* YYFINAL -- State number of the termination state. */
583 1.1 christos #define YYFINAL 2
584 1.1 christos /* YYLAST -- Last index in YYTABLE. */
585 1.1.1.1.8.1 martin #define YYLAST 192
586 1.1 christos
587 1.1 christos /* YYNTOKENS -- Number of terminals. */
588 1.1.1.1.8.1 martin #define YYNTOKENS 93
589 1.1 christos /* YYNNTS -- Number of nonterminals. */
590 1.1.1.1.8.1 martin #define YYNNTS 97
591 1.1 christos /* YYNRULES -- Number of rules. */
592 1.1.1.1.8.1 martin #define YYNRULES 182
593 1.1 christos /* YYNSTATES -- Number of states. */
594 1.1.1.1.8.1 martin #define YYNSTATES 271
595 1.1 christos
596 1.1 christos /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
597 1.1 christos by yylex, with out-of-bounds checking. */
598 1.1 christos #define YYUNDEFTOK 2
599 1.1.1.1.8.1 martin #define YYMAXUTOK 347
600 1.1 christos
601 1.1 christos #define YYTRANSLATE(YYX) \
602 1.1 christos ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
603 1.1 christos
604 1.1 christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
605 1.1 christos as returned by yylex, without out-of-bounds checking. */
606 1.1 christos static const yytype_uint8 yytranslate[] =
607 1.1 christos {
608 1.1 christos 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
609 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
610 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
611 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
612 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
613 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
614 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
615 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
616 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
617 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
618 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
619 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
620 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
621 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
622 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
623 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
624 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
625 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
626 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
627 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
628 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
629 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
630 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
631 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
632 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
633 1.1 christos 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
634 1.1 christos 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
635 1.1 christos 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
636 1.1 christos 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
637 1.1 christos 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
638 1.1 christos 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
639 1.1 christos 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
640 1.1 christos 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
641 1.1 christos 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
642 1.1.1.1.8.1 martin 85, 86, 87, 88, 89, 90, 91, 92
643 1.1 christos };
644 1.1 christos
645 1.1 christos #if YYDEBUG
646 1.1 christos /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
647 1.1 christos static const yytype_uint16 yyrline[] =
648 1.1 christos {
649 1.1.1.1.8.1 martin 0, 78, 78, 78, 79, 79, 80, 80, 81, 84,
650 1.1.1.1.8.1 martin 92, 92, 93, 93, 93, 93, 94, 94, 94, 94,
651 1.1.1.1.8.1 martin 94, 95, 95, 95, 95, 96, 96, 96, 96, 97,
652 1.1.1.1.8.1 martin 97, 97, 98, 98, 98, 99, 99, 99, 100, 100,
653 1.1.1.1.8.1 martin 101, 101, 102, 102, 102, 103, 103, 103, 104, 104,
654 1.1.1.1.8.1 martin 104, 105, 105, 105, 106, 106, 106, 107, 107, 107,
655 1.1.1.1.8.1 martin 108, 130, 138, 146, 154, 162, 170, 178, 190, 202,
656 1.1.1.1.8.1 martin 210, 218, 226, 235, 241, 247, 277, 283, 294, 305,
657 1.1.1.1.8.1 martin 316, 326, 334, 342, 348, 354, 362, 368, 374, 380,
658 1.1.1.1.8.1 martin 386, 392, 398, 404, 412, 420, 428, 436, 444, 452,
659 1.1.1.1.8.1 martin 460, 470, 478, 488, 498, 508, 516, 524, 533, 538,
660 1.1.1.1.8.1 martin 539, 540, 540, 540, 541, 541, 541, 542, 544, 552,
661 1.1.1.1.8.1 martin 560, 577, 583, 589, 595, 603, 637, 637, 638, 638,
662 1.1.1.1.8.1 martin 639, 639, 639, 640, 640, 640, 641, 641, 641, 642,
663 1.1.1.1.8.1 martin 642, 642, 643, 643, 643, 644, 644, 645, 657, 668,
664 1.1.1.1.8.1 martin 705, 705, 706, 706, 707, 727, 736, 745, 756, 760,
665 1.1.1.1.8.1 martin 768, 780, 793, 807, 820, 831, 842, 854, 865, 873,
666 1.1.1.1.8.1 martin 883, 893, 903, 913, 922, 935, 935, 936, 936, 936,
667 1.1.1.1.8.1 martin 937, 951, 964
668 1.1 christos };
669 1.1 christos #endif
670 1.1 christos
671 1.1 christos #if YYDEBUG || YYERROR_VERBOSE || 0
672 1.1 christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
673 1.1 christos First, the terminals, then, starting at YYNTOKENS, nonterminals. */
674 1.1 christos static const char *const yytname[] =
675 1.1 christos {
676 1.1 christos "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT",
677 1.1 christos "COLON", "ANY", "ZONESTR", "STRING", "VAR_SERVER", "VAR_NAME",
678 1.1 christos "VAR_IP_ADDRESS", "VAR_IP_TRANSPARENT", "VAR_DEBUG_MODE", "VAR_IP4_ONLY",
679 1.1 christos "VAR_IP6_ONLY", "VAR_DATABASE", "VAR_IDENTITY", "VAR_NSID",
680 1.1 christos "VAR_LOGFILE", "VAR_SERVER_COUNT", "VAR_TCP_COUNT", "VAR_PIDFILE",
681 1.1 christos "VAR_PORT", "VAR_STATISTICS", "VAR_CHROOT", "VAR_USERNAME",
682 1.1 christos "VAR_ZONESDIR", "VAR_XFRDFILE", "VAR_DIFFFILE",
683 1.1 christos "VAR_XFRD_RELOAD_TIMEOUT", "VAR_TCP_QUERY_COUNT", "VAR_TCP_TIMEOUT",
684 1.1 christos "VAR_IPV4_EDNS_SIZE", "VAR_IPV6_EDNS_SIZE", "VAR_DO_IP4", "VAR_DO_IP6",
685 1.1 christos "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", "VAR_IP_FREEBIND", "VAR_ZONEFILE",
686 1.1 christos "VAR_ZONE", "VAR_ALLOW_NOTIFY", "VAR_REQUEST_XFR", "VAR_NOTIFY",
687 1.1 christos "VAR_PROVIDE_XFR", "VAR_SIZE_LIMIT_XFR", "VAR_NOTIFY_RETRY",
688 1.1 christos "VAR_OUTGOING_INTERFACE", "VAR_ALLOW_AXFR_FALLBACK", "VAR_KEY",
689 1.1 christos "VAR_ALGORITHM", "VAR_SECRET", "VAR_AXFR", "VAR_UDP", "VAR_VERBOSITY",
690 1.1 christos "VAR_HIDE_VERSION", "VAR_PATTERN", "VAR_INCLUDEPATTERN",
691 1.1 christos "VAR_ZONELISTFILE", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
692 1.1 christos "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
693 1.1 christos "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
694 1.1 christos "VAR_XFRDIR", "VAR_RRL_SIZE", "VAR_RRL_RATELIMIT", "VAR_RRL_SLIP",
695 1.1 christos "VAR_RRL_IPV4_PREFIX_LENGTH", "VAR_RRL_IPV6_PREFIX_LENGTH",
696 1.1 christos "VAR_RRL_WHITELIST_RATELIMIT", "VAR_RRL_WHITELIST",
697 1.1 christos "VAR_ZONEFILES_CHECK", "VAR_ZONEFILES_WRITE", "VAR_LOG_TIME_ASCII",
698 1.1 christos "VAR_ROUND_ROBIN", "VAR_ZONESTATS", "VAR_REUSEPORT", "VAR_VERSION",
699 1.1 christos "VAR_MAX_REFRESH_TIME", "VAR_MIN_REFRESH_TIME", "VAR_MAX_RETRY_TIME",
700 1.1.1.1.8.1 martin "VAR_MIN_RETRY_TIME", "VAR_MULTI_MASTER_CHECK", "VAR_MINIMAL_RESPONSES",
701 1.1.1.1.8.1 martin "VAR_REFUSE_ANY", "VAR_USE_SYSTEMD", "$accept", "toplevelvars",
702 1.1.1.1.8.1 martin "toplevelvar", "serverstart", "contents_server", "content_server",
703 1.1.1.1.8.1 martin "server_ip_address", "server_ip_transparent", "server_ip_freebind",
704 1.1.1.1.8.1 martin "server_debug_mode", "server_use_systemd", "server_verbosity",
705 1.1 christos "server_hide_version", "server_ip4_only", "server_ip6_only",
706 1.1 christos "server_do_ip4", "server_do_ip6", "server_reuseport", "server_database",
707 1.1 christos "server_identity", "server_version", "server_nsid", "server_logfile",
708 1.1.1.1.8.1 martin "server_log_time_ascii", "server_round_robin",
709 1.1.1.1.8.1 martin "server_minimal_responses", "server_refuse_any", "server_server_count",
710 1.1 christos "server_tcp_count", "server_pidfile", "server_port", "server_statistics",
711 1.1 christos "server_chroot", "server_username", "server_zonesdir",
712 1.1 christos "server_zonelistfile", "server_xfrdir", "server_difffile",
713 1.1 christos "server_xfrdfile", "server_xfrd_reload_timeout",
714 1.1 christos "server_tcp_query_count", "server_tcp_timeout", "server_tcp_mss",
715 1.1 christos "server_outgoing_tcp_mss", "server_ipv4_edns_size",
716 1.1 christos "server_ipv6_edns_size", "server_rrl_size", "server_rrl_ratelimit",
717 1.1 christos "server_rrl_slip", "server_rrl_ipv4_prefix_length",
718 1.1 christos "server_rrl_ipv6_prefix_length", "server_rrl_whitelist_ratelimit",
719 1.1 christos "server_zonefiles_check", "server_zonefiles_write", "rcstart",
720 1.1 christos "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
721 1.1 christos "rc_control_interface", "rc_server_key_file", "rc_server_cert_file",
722 1.1 christos "rc_control_key_file", "rc_control_cert_file", "patternstart",
723 1.1 christos "contents_pattern", "content_pattern", "zone_config_item",
724 1.1 christos "pattern_name", "include_pattern", "zonestart", "contents_zone",
725 1.1 christos "content_zone", "zone_name", "zone_zonefile", "zone_zonestats",
726 1.1 christos "zone_allow_notify", "zone_request_xfr", "zone_size_limit_xfr",
727 1.1 christos "zone_request_xfr_data", "zone_notify", "zone_notify_retry",
728 1.1 christos "zone_provide_xfr", "zone_outgoing_interface",
729 1.1 christos "zone_allow_axfr_fallback", "zone_rrl_whitelist",
730 1.1 christos "zone_max_refresh_time", "zone_min_refresh_time", "zone_max_retry_time",
731 1.1 christos "zone_min_retry_time", "zone_multi_master_check", "keystart",
732 1.1 christos "contents_key", "content_key", "key_name", "key_algorithm", "key_secret", YY_NULLPTR
733 1.1 christos };
734 1.1 christos #endif
735 1.1 christos
736 1.1 christos # ifdef YYPRINT
737 1.1 christos /* YYTOKNUM[NUM] -- (External) token number corresponding to the
738 1.1 christos (internal) symbol number NUM (which must be that of a token). */
739 1.1 christos static const yytype_uint16 yytoknum[] =
740 1.1 christos {
741 1.1 christos 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
742 1.1 christos 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
743 1.1 christos 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
744 1.1 christos 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
745 1.1 christos 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
746 1.1 christos 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
747 1.1 christos 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
748 1.1 christos 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
749 1.1.1.1.8.1 martin 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
750 1.1.1.1.8.1 martin 345, 346, 347
751 1.1 christos };
752 1.1 christos # endif
753 1.1 christos
754 1.1.1.1.8.1 martin #define YYPACT_NINF -27
755 1.1 christos
756 1.1 christos #define yypact_value_is_default(Yystate) \
757 1.1.1.1.8.1 martin (!!((Yystate) == (-27)))
758 1.1 christos
759 1.1 christos #define YYTABLE_NINF -1
760 1.1 christos
761 1.1 christos #define yytable_value_is_error(Yytable_value) \
762 1.1 christos 0
763 1.1 christos
764 1.1 christos /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
765 1.1 christos STATE-NUM. */
766 1.1 christos static const yytype_int16 yypact[] =
767 1.1 christos {
768 1.1.1.1.8.1 martin -27, 110, -27, -27, -27, -27, -27, -27, -27, -27,
769 1.1.1.1.8.1 martin -27, 38, 57, 37, -13, -26, 20, 21, 22, 19,
770 1.1.1.1.8.1 martin 23, 25, 36, 41, 42, 43, 44, 45, 46, 54,
771 1.1.1.1.8.1 martin 62, 63, 66, 82, 38, -27, -27, -27, -27, -27,
772 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
773 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, 83, -27, 57, -27, -27,
774 1.1.1.1.8.1 martin 84, 85, 86, 37, -27, -27, -27, -27, 87, 90,
775 1.1.1.1.8.1 martin 99, 101, 102, 103, 104, 106, 108, 109, 112, 118,
776 1.1.1.1.8.1 martin 119, 120, 121, 122, 123, 125, 126, 127, 128, 130,
777 1.1.1.1.8.1 martin 131, 137, 138, 139, 140, 141, 142, 144, 145, 146,
778 1.1.1.1.8.1 martin 147, 148, 149, 150, 151, 153, 154, 155, 156, 157,
779 1.1.1.1.8.1 martin 158, 160, 161, 163, 164, 165, -27, -27, -27, -27,
780 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
781 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
782 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
783 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
784 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, 166, 167, 168, 169, 170,
785 1.1.1.1.8.1 martin 171, 172, -27, -27, -27, -27, -27, -27, -27, -27,
786 1.1.1.1.8.1 martin -27, -27, 173, 174, 175, 176, -27, 177, 178, -27,
787 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
788 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
789 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
790 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
791 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
792 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
793 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
794 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, 179, 180, -27, -27, -27,
795 1.1.1.1.8.1 martin -27
796 1.1 christos };
797 1.1 christos
798 1.1 christos /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
799 1.1 christos Performed when YYTABLE does not specify something else to do. Zero
800 1.1 christos means the default is an error. */
801 1.1 christos static const yytype_uint8 yydefact[] =
802 1.1 christos {
803 1.1.1.1.8.1 martin 2, 0, 1, 9, 149, 174, 125, 108, 3, 11,
804 1.1.1.1.8.1 martin 110, 0, 0, 0, 4, 8, 0, 0, 0, 0,
805 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
806 1.1.1.1.8.1 martin 0, 0, 0, 0, 7, 127, 129, 128, 138, 130,
807 1.1.1.1.8.1 martin 140, 131, 132, 145, 133, 134, 135, 136, 137, 139,
808 1.1.1.1.8.1 martin 141, 142, 143, 144, 146, 0, 153, 5, 151, 152,
809 1.1.1.1.8.1 martin 0, 0, 0, 6, 176, 177, 178, 179, 0, 0,
810 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
811 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
812 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
813 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
814 1.1.1.1.8.1 martin 0, 0, 0, 0, 0, 0, 10, 12, 13, 56,
815 1.1.1.1.8.1 martin 14, 59, 36, 37, 15, 16, 49, 50, 54, 17,
816 1.1.1.1.8.1 martin 18, 55, 19, 20, 52, 53, 57, 58, 21, 22,
817 1.1.1.1.8.1 martin 23, 24, 25, 26, 27, 28, 38, 39, 29, 30,
818 1.1.1.1.8.1 martin 31, 32, 33, 40, 41, 34, 35, 42, 43, 44,
819 1.1.1.1.8.1 martin 45, 46, 47, 48, 51, 0, 0, 0, 0, 0,
820 1.1.1.1.8.1 martin 0, 0, 109, 111, 113, 112, 114, 115, 116, 117,
821 1.1.1.1.8.1 martin 147, 155, 0, 0, 0, 0, 158, 0, 0, 159,
822 1.1.1.1.8.1 martin 164, 166, 167, 148, 168, 156, 169, 170, 171, 172,
823 1.1.1.1.8.1 martin 173, 126, 154, 150, 180, 181, 182, 175, 60, 61,
824 1.1.1.1.8.1 martin 63, 67, 68, 72, 73, 75, 76, 81, 82, 83,
825 1.1.1.1.8.1 martin 84, 85, 86, 87, 88, 92, 91, 93, 94, 95,
826 1.1.1.1.8.1 martin 98, 99, 69, 70, 96, 97, 62, 65, 66, 89,
827 1.1.1.1.8.1 martin 90, 100, 101, 102, 103, 104, 105, 106, 107, 77,
828 1.1.1.1.8.1 martin 78, 71, 74, 79, 80, 64, 118, 120, 119, 121,
829 1.1.1.1.8.1 martin 122, 123, 124, 157, 160, 0, 0, 163, 165, 161,
830 1.1.1.1.8.1 martin 162
831 1.1 christos };
832 1.1 christos
833 1.1 christos /* YYPGOTO[NTERM-NUM]. */
834 1.1 christos static const yytype_int16 yypgoto[] =
835 1.1 christos {
836 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
837 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
838 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
839 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
840 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
841 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
842 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, 0, 24, -27, -27,
843 1.1.1.1.8.1 martin -27, -27, -10, -27, -27, -27, -27, -27, -27, -27,
844 1.1.1.1.8.1 martin -27, -27, -27, -27, -27, -27, -27, -27, -27, -27,
845 1.1.1.1.8.1 martin -27, -27, -27, 129, -27, -27, -27
846 1.1 christos };
847 1.1 christos
848 1.1 christos /* YYDEFGOTO[NTERM-NUM]. */
849 1.1 christos static const yytype_int16 yydefgoto[] =
850 1.1 christos {
851 1.1.1.1.8.1 martin -1, 1, 8, 9, 14, 116, 117, 118, 119, 120,
852 1.1.1.1.8.1 martin 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
853 1.1.1.1.8.1 martin 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
854 1.1.1.1.8.1 martin 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
855 1.1.1.1.8.1 martin 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
856 1.1.1.1.8.1 martin 161, 162, 163, 164, 10, 15, 172, 173, 174, 175,
857 1.1.1.1.8.1 martin 176, 177, 178, 179, 11, 34, 35, 36, 37, 38,
858 1.1.1.1.8.1 martin 12, 57, 58, 59, 39, 40, 41, 42, 43, 186,
859 1.1.1.1.8.1 martin 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
860 1.1.1.1.8.1 martin 54, 13, 63, 64, 65, 66, 67
861 1.1 christos };
862 1.1 christos
863 1.1 christos /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
864 1.1 christos positive, shift that token. If negative, reduce the rule whose
865 1.1 christos number is the opposite. If YYTABLE_NINF, syntax error. */
866 1.1 christos static const yytype_uint16 yytable[] =
867 1.1 christos {
868 1.1.1.1.8.1 martin 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
869 1.1.1.1.8.1 martin 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
870 1.1.1.1.8.1 martin 88, 89, 90, 91, 92, 93, 94, 95, 96, 183,
871 1.1.1.1.8.1 martin 180, 181, 182, 187, 201, 188, 56, 165, 166, 167,
872 1.1.1.1.8.1 martin 168, 169, 170, 171, 97, 98, 189, 203, 99, 60,
873 1.1.1.1.8.1 martin 16, 190, 191, 192, 193, 194, 195, 100, 101, 102,
874 1.1.1.1.8.1 martin 103, 104, 105, 106, 196, 107, 108, 109, 110, 55,
875 1.1.1.1.8.1 martin 111, 112, 197, 198, 184, 185, 199, 113, 114, 115,
876 1.1.1.1.8.1 martin 17, 56, 18, 19, 20, 21, 22, 23, 24, 25,
877 1.1.1.1.8.1 martin 61, 62, 200, 202, 204, 205, 206, 208, 26, 17,
878 1.1.1.1.8.1 martin 209, 18, 19, 20, 21, 22, 23, 24, 25, 210,
879 1.1.1.1.8.1 martin 2, 211, 212, 213, 214, 27, 215, 26, 216, 217,
880 1.1.1.1.8.1 martin 28, 3, 218, 29, 30, 31, 32, 33, 219, 220,
881 1.1.1.1.8.1 martin 221, 222, 223, 224, 27, 225, 226, 227, 228, 28,
882 1.1.1.1.8.1 martin 229, 230, 29, 30, 31, 32, 33, 231, 232, 233,
883 1.1.1.1.8.1 martin 234, 235, 236, 4, 237, 238, 239, 240, 241, 242,
884 1.1.1.1.8.1 martin 243, 244, 5, 245, 246, 247, 248, 249, 250, 6,
885 1.1.1.1.8.1 martin 251, 252, 7, 253, 254, 255, 256, 257, 258, 259,
886 1.1.1.1.8.1 martin 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
887 1.1.1.1.8.1 martin 270, 0, 207
888 1.1 christos };
889 1.1 christos
890 1.1 christos static const yytype_int8 yycheck[] =
891 1.1 christos {
892 1.1.1.1.8.1 martin 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
893 1.1.1.1.8.1 martin 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
894 1.1.1.1.8.1 martin 33, 34, 35, 36, 37, 38, 39, 40, 41, 10,
895 1.1.1.1.8.1 martin 10, 10, 10, 10, 34, 10, 12, 63, 64, 65,
896 1.1.1.1.8.1 martin 66, 67, 68, 69, 57, 58, 10, 57, 61, 12,
897 1.1.1.1.8.1 martin 12, 10, 10, 10, 10, 10, 10, 70, 71, 72,
898 1.1.1.1.8.1 martin 73, 74, 75, 76, 10, 78, 79, 80, 81, 12,
899 1.1.1.1.8.1 martin 83, 84, 10, 10, 55, 56, 10, 90, 91, 92,
900 1.1.1.1.8.1 martin 42, 57, 44, 45, 46, 47, 48, 49, 50, 51,
901 1.1.1.1.8.1 martin 53, 54, 10, 10, 10, 10, 10, 10, 60, 42,
902 1.1.1.1.8.1 martin 10, 44, 45, 46, 47, 48, 49, 50, 51, 10,
903 1.1.1.1.8.1 martin 0, 10, 10, 10, 10, 77, 10, 60, 10, 10,
904 1.1.1.1.8.1 martin 82, 11, 10, 85, 86, 87, 88, 89, 10, 10,
905 1.1.1.1.8.1 martin 10, 10, 10, 10, 77, 10, 10, 10, 10, 82,
906 1.1.1.1.8.1 martin 10, 10, 85, 86, 87, 88, 89, 10, 10, 10,
907 1.1.1.1.8.1 martin 10, 10, 10, 43, 10, 10, 10, 10, 10, 10,
908 1.1.1.1.8.1 martin 10, 10, 52, 10, 10, 10, 10, 10, 10, 59,
909 1.1.1.1.8.1 martin 10, 10, 62, 10, 10, 10, 10, 10, 10, 10,
910 1.1 christos 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
911 1.1.1.1.8.1 martin 10, -1, 63
912 1.1 christos };
913 1.1 christos
914 1.1 christos /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
915 1.1 christos symbol of state STATE-NUM. */
916 1.1 christos static const yytype_uint8 yystos[] =
917 1.1 christos {
918 1.1.1.1.8.1 martin 0, 94, 0, 11, 43, 52, 59, 62, 95, 96,
919 1.1.1.1.8.1 martin 147, 157, 163, 184, 97, 148, 12, 42, 44, 45,
920 1.1 christos 46, 47, 48, 49, 50, 51, 60, 77, 82, 85,
921 1.1.1.1.8.1 martin 86, 87, 88, 89, 158, 159, 160, 161, 162, 167,
922 1.1.1.1.8.1 martin 168, 169, 170, 171, 173, 174, 175, 176, 177, 178,
923 1.1.1.1.8.1 martin 179, 180, 181, 182, 183, 12, 160, 164, 165, 166,
924 1.1.1.1.8.1 martin 12, 53, 54, 185, 186, 187, 188, 189, 13, 14,
925 1.1 christos 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
926 1.1 christos 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
927 1.1 christos 35, 36, 37, 38, 39, 40, 41, 57, 58, 61,
928 1.1 christos 70, 71, 72, 73, 74, 75, 76, 78, 79, 80,
929 1.1.1.1.8.1 martin 81, 83, 84, 90, 91, 92, 98, 99, 100, 101,
930 1.1 christos 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
931 1.1 christos 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
932 1.1 christos 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
933 1.1.1.1.8.1 martin 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
934 1.1.1.1.8.1 martin 142, 143, 144, 145, 146, 63, 64, 65, 66, 67,
935 1.1.1.1.8.1 martin 68, 69, 149, 150, 151, 152, 153, 154, 155, 156,
936 1.1.1.1.8.1 martin 10, 10, 10, 10, 55, 56, 172, 10, 10, 10,
937 1.1 christos 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
938 1.1.1.1.8.1 martin 10, 159, 10, 165, 10, 10, 10, 186, 10, 10,
939 1.1 christos 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
940 1.1 christos 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
941 1.1 christos 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
942 1.1 christos 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
943 1.1.1.1.8.1 martin 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
944 1.1.1.1.8.1 martin 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
945 1.1.1.1.8.1 martin 10
946 1.1 christos };
947 1.1 christos
948 1.1 christos /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
949 1.1 christos static const yytype_uint8 yyr1[] =
950 1.1 christos {
951 1.1.1.1.8.1 martin 0, 93, 94, 94, 95, 95, 95, 95, 95, 96,
952 1.1.1.1.8.1 martin 97, 97, 98, 98, 98, 98, 98, 98, 98, 98,
953 1.1.1.1.8.1 martin 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
954 1.1.1.1.8.1 martin 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
955 1.1.1.1.8.1 martin 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
956 1.1.1.1.8.1 martin 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
957 1.1 christos 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
958 1.1 christos 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
959 1.1 christos 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
960 1.1 christos 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
961 1.1.1.1.8.1 martin 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
962 1.1.1.1.8.1 martin 148, 149, 149, 149, 149, 149, 149, 149, 150, 151,
963 1.1.1.1.8.1 martin 152, 153, 154, 155, 156, 157, 158, 158, 159, 159,
964 1.1.1.1.8.1 martin 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
965 1.1.1.1.8.1 martin 160, 160, 160, 160, 160, 160, 160, 161, 162, 163,
966 1.1.1.1.8.1 martin 164, 164, 165, 165, 166, 167, 168, 169, 170, 171,
967 1.1.1.1.8.1 martin 172, 172, 172, 173, 174, 175, 176, 177, 178, 179,
968 1.1.1.1.8.1 martin 180, 181, 182, 183, 184, 185, 185, 186, 186, 186,
969 1.1.1.1.8.1 martin 187, 188, 189
970 1.1 christos };
971 1.1 christos
972 1.1 christos /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
973 1.1 christos static const yytype_uint8 yyr2[] =
974 1.1 christos {
975 1.1 christos 0, 2, 0, 2, 2, 2, 2, 2, 2, 1,
976 1.1 christos 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
977 1.1 christos 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
978 1.1 christos 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
979 1.1 christos 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
980 1.1.1.1.8.1 martin 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
981 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
982 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
983 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
984 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
985 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
986 1.1.1.1.8.1 martin 0, 1, 1, 1, 1, 1, 1, 1, 2, 2,
987 1.1.1.1.8.1 martin 2, 2, 2, 2, 2, 1, 2, 1, 1, 1,
988 1.1.1.1.8.1 martin 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
989 1.1.1.1.8.1 martin 1, 1, 1, 1, 1, 1, 1, 2, 2, 1,
990 1.1.1.1.8.1 martin 2, 1, 1, 1, 2, 2, 2, 3, 2, 2,
991 1.1.1.1.8.1 martin 2, 3, 3, 3, 2, 3, 2, 2, 2, 2,
992 1.1.1.1.8.1 martin 2, 2, 2, 2, 1, 2, 1, 1, 1, 1,
993 1.1.1.1.8.1 martin 2, 2, 2
994 1.1 christos };
995 1.1 christos
996 1.1 christos
997 1.1 christos #define yyerrok (yyerrstatus = 0)
998 1.1 christos #define yyclearin (yychar = YYEMPTY)
999 1.1 christos #define YYEMPTY (-2)
1000 1.1 christos #define YYEOF 0
1001 1.1 christos
1002 1.1 christos #define YYACCEPT goto yyacceptlab
1003 1.1 christos #define YYABORT goto yyabortlab
1004 1.1 christos #define YYERROR goto yyerrorlab
1005 1.1 christos
1006 1.1 christos
1007 1.1 christos #define YYRECOVERING() (!!yyerrstatus)
1008 1.1 christos
1009 1.1 christos #define YYBACKUP(Token, Value) \
1010 1.1 christos do \
1011 1.1 christos if (yychar == YYEMPTY) \
1012 1.1 christos { \
1013 1.1 christos yychar = (Token); \
1014 1.1 christos yylval = (Value); \
1015 1.1 christos YYPOPSTACK (yylen); \
1016 1.1 christos yystate = *yyssp; \
1017 1.1 christos goto yybackup; \
1018 1.1 christos } \
1019 1.1 christos else \
1020 1.1 christos { \
1021 1.1 christos yyerror (YY_("syntax error: cannot back up")); \
1022 1.1 christos YYERROR; \
1023 1.1 christos } \
1024 1.1 christos while (0)
1025 1.1 christos
1026 1.1 christos /* Error token number */
1027 1.1 christos #define YYTERROR 1
1028 1.1 christos #define YYERRCODE 256
1029 1.1 christos
1030 1.1 christos
1031 1.1 christos
1032 1.1 christos /* Enable debugging if requested. */
1033 1.1 christos #if YYDEBUG
1034 1.1 christos
1035 1.1 christos # ifndef YYFPRINTF
1036 1.1 christos # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1037 1.1 christos # define YYFPRINTF fprintf
1038 1.1 christos # endif
1039 1.1 christos
1040 1.1 christos # define YYDPRINTF(Args) \
1041 1.1 christos do { \
1042 1.1 christos if (yydebug) \
1043 1.1 christos YYFPRINTF Args; \
1044 1.1 christos } while (0)
1045 1.1 christos
1046 1.1 christos /* This macro is provided for backward compatibility. */
1047 1.1 christos #ifndef YY_LOCATION_PRINT
1048 1.1 christos # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1049 1.1 christos #endif
1050 1.1 christos
1051 1.1 christos
1052 1.1 christos # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
1053 1.1 christos do { \
1054 1.1 christos if (yydebug) \
1055 1.1 christos { \
1056 1.1 christos YYFPRINTF (stderr, "%s ", Title); \
1057 1.1 christos yy_symbol_print (stderr, \
1058 1.1 christos Type, Value); \
1059 1.1 christos YYFPRINTF (stderr, "\n"); \
1060 1.1 christos } \
1061 1.1 christos } while (0)
1062 1.1 christos
1063 1.1 christos
1064 1.1 christos /*----------------------------------------.
1065 1.1 christos | Print this symbol's value on YYOUTPUT. |
1066 1.1 christos `----------------------------------------*/
1067 1.1 christos
1068 1.1 christos static void
1069 1.1 christos yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
1070 1.1 christos {
1071 1.1 christos FILE *yyo = yyoutput;
1072 1.1 christos YYUSE (yyo);
1073 1.1 christos if (!yyvaluep)
1074 1.1 christos return;
1075 1.1 christos # ifdef YYPRINT
1076 1.1 christos if (yytype < YYNTOKENS)
1077 1.1 christos YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1078 1.1 christos # endif
1079 1.1 christos YYUSE (yytype);
1080 1.1 christos }
1081 1.1 christos
1082 1.1 christos
1083 1.1 christos /*--------------------------------.
1084 1.1 christos | Print this symbol on YYOUTPUT. |
1085 1.1 christos `--------------------------------*/
1086 1.1 christos
1087 1.1 christos static void
1088 1.1 christos yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
1089 1.1 christos {
1090 1.1 christos YYFPRINTF (yyoutput, "%s %s (",
1091 1.1 christos yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
1092 1.1 christos
1093 1.1 christos yy_symbol_value_print (yyoutput, yytype, yyvaluep);
1094 1.1 christos YYFPRINTF (yyoutput, ")");
1095 1.1 christos }
1096 1.1 christos
1097 1.1 christos /*------------------------------------------------------------------.
1098 1.1 christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1099 1.1 christos | TOP (included). |
1100 1.1 christos `------------------------------------------------------------------*/
1101 1.1 christos
1102 1.1 christos static void
1103 1.1 christos yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1104 1.1 christos {
1105 1.1 christos YYFPRINTF (stderr, "Stack now");
1106 1.1 christos for (; yybottom <= yytop; yybottom++)
1107 1.1 christos {
1108 1.1 christos int yybot = *yybottom;
1109 1.1 christos YYFPRINTF (stderr, " %d", yybot);
1110 1.1 christos }
1111 1.1 christos YYFPRINTF (stderr, "\n");
1112 1.1 christos }
1113 1.1 christos
1114 1.1 christos # define YY_STACK_PRINT(Bottom, Top) \
1115 1.1 christos do { \
1116 1.1 christos if (yydebug) \
1117 1.1 christos yy_stack_print ((Bottom), (Top)); \
1118 1.1 christos } while (0)
1119 1.1 christos
1120 1.1 christos
1121 1.1 christos /*------------------------------------------------.
1122 1.1 christos | Report that the YYRULE is going to be reduced. |
1123 1.1 christos `------------------------------------------------*/
1124 1.1 christos
1125 1.1 christos static void
1126 1.1 christos yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
1127 1.1 christos {
1128 1.1 christos unsigned long int yylno = yyrline[yyrule];
1129 1.1 christos int yynrhs = yyr2[yyrule];
1130 1.1 christos int yyi;
1131 1.1 christos YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1132 1.1 christos yyrule - 1, yylno);
1133 1.1 christos /* The symbols being reduced. */
1134 1.1 christos for (yyi = 0; yyi < yynrhs; yyi++)
1135 1.1 christos {
1136 1.1 christos YYFPRINTF (stderr, " $%d = ", yyi + 1);
1137 1.1 christos yy_symbol_print (stderr,
1138 1.1 christos yystos[yyssp[yyi + 1 - yynrhs]],
1139 1.1 christos &(yyvsp[(yyi + 1) - (yynrhs)])
1140 1.1 christos );
1141 1.1 christos YYFPRINTF (stderr, "\n");
1142 1.1 christos }
1143 1.1 christos }
1144 1.1 christos
1145 1.1 christos # define YY_REDUCE_PRINT(Rule) \
1146 1.1 christos do { \
1147 1.1 christos if (yydebug) \
1148 1.1 christos yy_reduce_print (yyssp, yyvsp, Rule); \
1149 1.1 christos } while (0)
1150 1.1 christos
1151 1.1 christos /* Nonzero means print parse trace. It is left uninitialized so that
1152 1.1 christos multiple parsers can coexist. */
1153 1.1 christos int yydebug;
1154 1.1 christos #else /* !YYDEBUG */
1155 1.1 christos # define YYDPRINTF(Args)
1156 1.1 christos # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1157 1.1 christos # define YY_STACK_PRINT(Bottom, Top)
1158 1.1 christos # define YY_REDUCE_PRINT(Rule)
1159 1.1 christos #endif /* !YYDEBUG */
1160 1.1 christos
1161 1.1 christos
1162 1.1 christos /* YYINITDEPTH -- initial size of the parser's stacks. */
1163 1.1 christos #ifndef YYINITDEPTH
1164 1.1 christos # define YYINITDEPTH 200
1165 1.1 christos #endif
1166 1.1 christos
1167 1.1 christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1168 1.1 christos if the built-in stack extension method is used).
1169 1.1 christos
1170 1.1 christos Do not make this value too large; the results are undefined if
1171 1.1 christos YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1172 1.1 christos evaluated with infinite-precision integer arithmetic. */
1173 1.1 christos
1174 1.1 christos #ifndef YYMAXDEPTH
1175 1.1 christos # define YYMAXDEPTH 10000
1176 1.1 christos #endif
1177 1.1 christos
1178 1.1 christos
1179 1.1 christos #if YYERROR_VERBOSE
1180 1.1 christos
1181 1.1 christos # ifndef yystrlen
1182 1.1 christos # if defined __GLIBC__ && defined _STRING_H
1183 1.1 christos # define yystrlen strlen
1184 1.1 christos # else
1185 1.1 christos /* Return the length of YYSTR. */
1186 1.1 christos static YYSIZE_T
1187 1.1 christos yystrlen (const char *yystr)
1188 1.1 christos {
1189 1.1 christos YYSIZE_T yylen;
1190 1.1 christos for (yylen = 0; yystr[yylen]; yylen++)
1191 1.1 christos continue;
1192 1.1 christos return yylen;
1193 1.1 christos }
1194 1.1 christos # endif
1195 1.1 christos # endif
1196 1.1 christos
1197 1.1 christos # ifndef yystpcpy
1198 1.1 christos # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1199 1.1 christos # define yystpcpy stpcpy
1200 1.1 christos # else
1201 1.1 christos /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1202 1.1 christos YYDEST. */
1203 1.1 christos static char *
1204 1.1 christos yystpcpy (char *yydest, const char *yysrc)
1205 1.1 christos {
1206 1.1 christos char *yyd = yydest;
1207 1.1 christos const char *yys = yysrc;
1208 1.1 christos
1209 1.1 christos while ((*yyd++ = *yys++) != '\0')
1210 1.1 christos continue;
1211 1.1 christos
1212 1.1 christos return yyd - 1;
1213 1.1 christos }
1214 1.1 christos # endif
1215 1.1 christos # endif
1216 1.1 christos
1217 1.1 christos # ifndef yytnamerr
1218 1.1 christos /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1219 1.1 christos quotes and backslashes, so that it's suitable for yyerror. The
1220 1.1 christos heuristic is that double-quoting is unnecessary unless the string
1221 1.1 christos contains an apostrophe, a comma, or backslash (other than
1222 1.1 christos backslash-backslash). YYSTR is taken from yytname. If YYRES is
1223 1.1 christos null, do not copy; instead, return the length of what the result
1224 1.1 christos would have been. */
1225 1.1 christos static YYSIZE_T
1226 1.1 christos yytnamerr (char *yyres, const char *yystr)
1227 1.1 christos {
1228 1.1 christos if (*yystr == '"')
1229 1.1 christos {
1230 1.1 christos YYSIZE_T yyn = 0;
1231 1.1 christos char const *yyp = yystr;
1232 1.1 christos
1233 1.1 christos for (;;)
1234 1.1 christos switch (*++yyp)
1235 1.1 christos {
1236 1.1 christos case '\'':
1237 1.1 christos case ',':
1238 1.1 christos goto do_not_strip_quotes;
1239 1.1 christos
1240 1.1 christos case '\\':
1241 1.1 christos if (*++yyp != '\\')
1242 1.1 christos goto do_not_strip_quotes;
1243 1.1 christos /* Fall through. */
1244 1.1 christos default:
1245 1.1 christos if (yyres)
1246 1.1 christos yyres[yyn] = *yyp;
1247 1.1 christos yyn++;
1248 1.1 christos break;
1249 1.1 christos
1250 1.1 christos case '"':
1251 1.1 christos if (yyres)
1252 1.1 christos yyres[yyn] = '\0';
1253 1.1 christos return yyn;
1254 1.1 christos }
1255 1.1 christos do_not_strip_quotes: ;
1256 1.1 christos }
1257 1.1 christos
1258 1.1 christos if (! yyres)
1259 1.1 christos return yystrlen (yystr);
1260 1.1 christos
1261 1.1 christos return yystpcpy (yyres, yystr) - yyres;
1262 1.1 christos }
1263 1.1 christos # endif
1264 1.1 christos
1265 1.1 christos /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1266 1.1 christos about the unexpected token YYTOKEN for the state stack whose top is
1267 1.1 christos YYSSP.
1268 1.1 christos
1269 1.1 christos Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
1270 1.1 christos not large enough to hold the message. In that case, also set
1271 1.1 christos *YYMSG_ALLOC to the required number of bytes. Return 2 if the
1272 1.1 christos required number of bytes is too large to store. */
1273 1.1 christos static int
1274 1.1 christos yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1275 1.1 christos yytype_int16 *yyssp, int yytoken)
1276 1.1 christos {
1277 1.1 christos YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
1278 1.1 christos YYSIZE_T yysize = yysize0;
1279 1.1 christos enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1280 1.1 christos /* Internationalized format string. */
1281 1.1 christos const char *yyformat = YY_NULLPTR;
1282 1.1 christos /* Arguments of yyformat. */
1283 1.1 christos char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1284 1.1 christos /* Number of reported tokens (one for the "unexpected", one per
1285 1.1 christos "expected"). */
1286 1.1 christos int yycount = 0;
1287 1.1 christos
1288 1.1 christos /* There are many possibilities here to consider:
1289 1.1 christos - If this state is a consistent state with a default action, then
1290 1.1 christos the only way this function was invoked is if the default action
1291 1.1 christos is an error action. In that case, don't check for expected
1292 1.1 christos tokens because there are none.
1293 1.1 christos - The only way there can be no lookahead present (in yychar) is if
1294 1.1 christos this state is a consistent state with a default action. Thus,
1295 1.1 christos detecting the absence of a lookahead is sufficient to determine
1296 1.1 christos that there is no unexpected or expected token to report. In that
1297 1.1 christos case, just report a simple "syntax error".
1298 1.1 christos - Don't assume there isn't a lookahead just because this state is a
1299 1.1 christos consistent state with a default action. There might have been a
1300 1.1 christos previous inconsistent state, consistent state with a non-default
1301 1.1 christos action, or user semantic action that manipulated yychar.
1302 1.1 christos - Of course, the expected token list depends on states to have
1303 1.1 christos correct lookahead information, and it depends on the parser not
1304 1.1 christos to perform extra reductions after fetching a lookahead from the
1305 1.1 christos scanner and before detecting a syntax error. Thus, state merging
1306 1.1 christos (from LALR or IELR) and default reductions corrupt the expected
1307 1.1 christos token list. However, the list is correct for canonical LR with
1308 1.1 christos one exception: it will still contain any token that will not be
1309 1.1 christos accepted due to an error action in a later state.
1310 1.1 christos */
1311 1.1 christos if (yytoken != YYEMPTY)
1312 1.1 christos {
1313 1.1 christos int yyn = yypact[*yyssp];
1314 1.1 christos yyarg[yycount++] = yytname[yytoken];
1315 1.1 christos if (!yypact_value_is_default (yyn))
1316 1.1 christos {
1317 1.1 christos /* Start YYX at -YYN if negative to avoid negative indexes in
1318 1.1 christos YYCHECK. In other words, skip the first -YYN actions for
1319 1.1 christos this state because they are default actions. */
1320 1.1 christos int yyxbegin = yyn < 0 ? -yyn : 0;
1321 1.1 christos /* Stay within bounds of both yycheck and yytname. */
1322 1.1 christos int yychecklim = YYLAST - yyn + 1;
1323 1.1 christos int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1324 1.1 christos int yyx;
1325 1.1 christos
1326 1.1 christos for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1327 1.1 christos if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1328 1.1 christos && !yytable_value_is_error (yytable[yyx + yyn]))
1329 1.1 christos {
1330 1.1 christos if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1331 1.1 christos {
1332 1.1 christos yycount = 1;
1333 1.1 christos yysize = yysize0;
1334 1.1 christos break;
1335 1.1 christos }
1336 1.1 christos yyarg[yycount++] = yytname[yyx];
1337 1.1 christos {
1338 1.1 christos YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
1339 1.1 christos if (! (yysize <= yysize1
1340 1.1 christos && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1341 1.1 christos return 2;
1342 1.1 christos yysize = yysize1;
1343 1.1 christos }
1344 1.1 christos }
1345 1.1 christos }
1346 1.1 christos }
1347 1.1 christos
1348 1.1 christos switch (yycount)
1349 1.1 christos {
1350 1.1 christos # define YYCASE_(N, S) \
1351 1.1 christos case N: \
1352 1.1 christos yyformat = S; \
1353 1.1 christos break
1354 1.1 christos YYCASE_(0, YY_("syntax error"));
1355 1.1 christos YYCASE_(1, YY_("syntax error, unexpected %s"));
1356 1.1 christos YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1357 1.1 christos YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1358 1.1 christos YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1359 1.1 christos YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1360 1.1 christos # undef YYCASE_
1361 1.1 christos }
1362 1.1 christos
1363 1.1 christos {
1364 1.1 christos YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
1365 1.1 christos if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1366 1.1 christos return 2;
1367 1.1 christos yysize = yysize1;
1368 1.1 christos }
1369 1.1 christos
1370 1.1 christos if (*yymsg_alloc < yysize)
1371 1.1 christos {
1372 1.1 christos *yymsg_alloc = 2 * yysize;
1373 1.1 christos if (! (yysize <= *yymsg_alloc
1374 1.1 christos && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1375 1.1 christos *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1376 1.1 christos return 1;
1377 1.1 christos }
1378 1.1 christos
1379 1.1 christos /* Avoid sprintf, as that infringes on the user's name space.
1380 1.1 christos Don't have undefined behavior even if the translation
1381 1.1 christos produced a string with the wrong number of "%s"s. */
1382 1.1 christos {
1383 1.1 christos char *yyp = *yymsg;
1384 1.1 christos int yyi = 0;
1385 1.1 christos while ((*yyp = *yyformat) != '\0')
1386 1.1 christos if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1387 1.1 christos {
1388 1.1 christos yyp += yytnamerr (yyp, yyarg[yyi++]);
1389 1.1 christos yyformat += 2;
1390 1.1 christos }
1391 1.1 christos else
1392 1.1 christos {
1393 1.1 christos yyp++;
1394 1.1 christos yyformat++;
1395 1.1 christos }
1396 1.1 christos }
1397 1.1 christos return 0;
1398 1.1 christos }
1399 1.1 christos #endif /* YYERROR_VERBOSE */
1400 1.1 christos
1401 1.1 christos /*-----------------------------------------------.
1402 1.1 christos | Release the memory associated to this symbol. |
1403 1.1 christos `-----------------------------------------------*/
1404 1.1 christos
1405 1.1 christos static void
1406 1.1 christos yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1407 1.1 christos {
1408 1.1 christos YYUSE (yyvaluep);
1409 1.1 christos if (!yymsg)
1410 1.1 christos yymsg = "Deleting";
1411 1.1 christos YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1412 1.1 christos
1413 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1414 1.1 christos YYUSE (yytype);
1415 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
1416 1.1 christos }
1417 1.1 christos
1418 1.1 christos
1419 1.1 christos
1420 1.1 christos
1421 1.1 christos /* The lookahead symbol. */
1422 1.1 christos int yychar;
1423 1.1 christos
1424 1.1 christos /* The semantic value of the lookahead symbol. */
1425 1.1 christos YYSTYPE yylval;
1426 1.1 christos /* Number of syntax errors so far. */
1427 1.1 christos int yynerrs;
1428 1.1 christos
1429 1.1 christos
1430 1.1 christos /*----------.
1431 1.1 christos | yyparse. |
1432 1.1 christos `----------*/
1433 1.1 christos
1434 1.1 christos int
1435 1.1 christos yyparse (void)
1436 1.1 christos {
1437 1.1 christos int yystate;
1438 1.1 christos /* Number of tokens to shift before error messages enabled. */
1439 1.1 christos int yyerrstatus;
1440 1.1 christos
1441 1.1 christos /* The stacks and their tools:
1442 1.1 christos 'yyss': related to states.
1443 1.1 christos 'yyvs': related to semantic values.
1444 1.1 christos
1445 1.1 christos Refer to the stacks through separate pointers, to allow yyoverflow
1446 1.1 christos to reallocate them elsewhere. */
1447 1.1 christos
1448 1.1 christos /* The state stack. */
1449 1.1 christos yytype_int16 yyssa[YYINITDEPTH];
1450 1.1 christos yytype_int16 *yyss;
1451 1.1 christos yytype_int16 *yyssp;
1452 1.1 christos
1453 1.1 christos /* The semantic value stack. */
1454 1.1 christos YYSTYPE yyvsa[YYINITDEPTH];
1455 1.1 christos YYSTYPE *yyvs;
1456 1.1 christos YYSTYPE *yyvsp;
1457 1.1 christos
1458 1.1 christos YYSIZE_T yystacksize;
1459 1.1 christos
1460 1.1 christos int yyn;
1461 1.1 christos int yyresult;
1462 1.1 christos /* Lookahead token as an internal (translated) token number. */
1463 1.1 christos int yytoken = 0;
1464 1.1 christos /* The variables used to return semantic value and location from the
1465 1.1 christos action routines. */
1466 1.1 christos YYSTYPE yyval;
1467 1.1 christos
1468 1.1 christos #if YYERROR_VERBOSE
1469 1.1 christos /* Buffer for error messages, and its allocated size. */
1470 1.1 christos char yymsgbuf[128];
1471 1.1 christos char *yymsg = yymsgbuf;
1472 1.1 christos YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1473 1.1 christos #endif
1474 1.1 christos
1475 1.1 christos #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1476 1.1 christos
1477 1.1 christos /* The number of symbols on the RHS of the reduced rule.
1478 1.1 christos Keep to zero when no symbol should be popped. */
1479 1.1 christos int yylen = 0;
1480 1.1 christos
1481 1.1 christos yyssp = yyss = yyssa;
1482 1.1 christos yyvsp = yyvs = yyvsa;
1483 1.1 christos yystacksize = YYINITDEPTH;
1484 1.1 christos
1485 1.1 christos YYDPRINTF ((stderr, "Starting parse\n"));
1486 1.1 christos
1487 1.1 christos yystate = 0;
1488 1.1 christos yyerrstatus = 0;
1489 1.1 christos yynerrs = 0;
1490 1.1 christos yychar = YYEMPTY; /* Cause a token to be read. */
1491 1.1 christos goto yysetstate;
1492 1.1 christos
1493 1.1 christos /*------------------------------------------------------------.
1494 1.1 christos | yynewstate -- Push a new state, which is found in yystate. |
1495 1.1 christos `------------------------------------------------------------*/
1496 1.1 christos yynewstate:
1497 1.1 christos /* In all cases, when you get here, the value and location stacks
1498 1.1 christos have just been pushed. So pushing a state here evens the stacks. */
1499 1.1 christos yyssp++;
1500 1.1 christos
1501 1.1 christos yysetstate:
1502 1.1 christos *yyssp = yystate;
1503 1.1 christos
1504 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
1505 1.1 christos {
1506 1.1 christos /* Get the current used size of the three stacks, in elements. */
1507 1.1 christos YYSIZE_T yysize = yyssp - yyss + 1;
1508 1.1 christos
1509 1.1 christos #ifdef yyoverflow
1510 1.1 christos {
1511 1.1 christos /* Give user a chance to reallocate the stack. Use copies of
1512 1.1 christos these so that the &'s don't force the real ones into
1513 1.1 christos memory. */
1514 1.1 christos YYSTYPE *yyvs1 = yyvs;
1515 1.1 christos yytype_int16 *yyss1 = yyss;
1516 1.1 christos
1517 1.1 christos /* Each stack pointer address is followed by the size of the
1518 1.1 christos data in use in that stack, in bytes. This used to be a
1519 1.1 christos conditional around just the two extra args, but that might
1520 1.1 christos be undefined if yyoverflow is a macro. */
1521 1.1 christos yyoverflow (YY_("memory exhausted"),
1522 1.1 christos &yyss1, yysize * sizeof (*yyssp),
1523 1.1 christos &yyvs1, yysize * sizeof (*yyvsp),
1524 1.1 christos &yystacksize);
1525 1.1 christos
1526 1.1 christos yyss = yyss1;
1527 1.1 christos yyvs = yyvs1;
1528 1.1 christos }
1529 1.1 christos #else /* no yyoverflow */
1530 1.1 christos # ifndef YYSTACK_RELOCATE
1531 1.1 christos goto yyexhaustedlab;
1532 1.1 christos # else
1533 1.1 christos /* Extend the stack our own way. */
1534 1.1 christos if (YYMAXDEPTH <= yystacksize)
1535 1.1 christos goto yyexhaustedlab;
1536 1.1 christos yystacksize *= 2;
1537 1.1 christos if (YYMAXDEPTH < yystacksize)
1538 1.1 christos yystacksize = YYMAXDEPTH;
1539 1.1 christos
1540 1.1 christos {
1541 1.1 christos yytype_int16 *yyss1 = yyss;
1542 1.1 christos union yyalloc *yyptr =
1543 1.1 christos (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1544 1.1 christos if (! yyptr)
1545 1.1 christos goto yyexhaustedlab;
1546 1.1 christos YYSTACK_RELOCATE (yyss_alloc, yyss);
1547 1.1 christos YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1548 1.1 christos # undef YYSTACK_RELOCATE
1549 1.1 christos if (yyss1 != yyssa)
1550 1.1 christos YYSTACK_FREE (yyss1);
1551 1.1 christos }
1552 1.1 christos # endif
1553 1.1 christos #endif /* no yyoverflow */
1554 1.1 christos
1555 1.1 christos yyssp = yyss + yysize - 1;
1556 1.1 christos yyvsp = yyvs + yysize - 1;
1557 1.1 christos
1558 1.1 christos YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1559 1.1 christos (unsigned long int) yystacksize));
1560 1.1 christos
1561 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
1562 1.1 christos YYABORT;
1563 1.1 christos }
1564 1.1 christos
1565 1.1 christos YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1566 1.1 christos
1567 1.1 christos if (yystate == YYFINAL)
1568 1.1 christos YYACCEPT;
1569 1.1 christos
1570 1.1 christos goto yybackup;
1571 1.1 christos
1572 1.1 christos /*-----------.
1573 1.1 christos | yybackup. |
1574 1.1 christos `-----------*/
1575 1.1 christos yybackup:
1576 1.1 christos
1577 1.1 christos /* Do appropriate processing given the current state. Read a
1578 1.1 christos lookahead token if we need one and don't already have one. */
1579 1.1 christos
1580 1.1 christos /* First try to decide what to do without reference to lookahead token. */
1581 1.1 christos yyn = yypact[yystate];
1582 1.1 christos if (yypact_value_is_default (yyn))
1583 1.1 christos goto yydefault;
1584 1.1 christos
1585 1.1 christos /* Not known => get a lookahead token if don't already have one. */
1586 1.1 christos
1587 1.1 christos /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1588 1.1 christos if (yychar == YYEMPTY)
1589 1.1 christos {
1590 1.1 christos YYDPRINTF ((stderr, "Reading a token: "));
1591 1.1 christos yychar = yylex ();
1592 1.1 christos }
1593 1.1 christos
1594 1.1 christos if (yychar <= YYEOF)
1595 1.1 christos {
1596 1.1 christos yychar = yytoken = YYEOF;
1597 1.1 christos YYDPRINTF ((stderr, "Now at end of input.\n"));
1598 1.1 christos }
1599 1.1 christos else
1600 1.1 christos {
1601 1.1 christos yytoken = YYTRANSLATE (yychar);
1602 1.1 christos YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1603 1.1 christos }
1604 1.1 christos
1605 1.1 christos /* If the proper action on seeing token YYTOKEN is to reduce or to
1606 1.1 christos detect an error, take that action. */
1607 1.1 christos yyn += yytoken;
1608 1.1 christos if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1609 1.1 christos goto yydefault;
1610 1.1 christos yyn = yytable[yyn];
1611 1.1 christos if (yyn <= 0)
1612 1.1 christos {
1613 1.1 christos if (yytable_value_is_error (yyn))
1614 1.1 christos goto yyerrlab;
1615 1.1 christos yyn = -yyn;
1616 1.1 christos goto yyreduce;
1617 1.1 christos }
1618 1.1 christos
1619 1.1 christos /* Count tokens shifted since error; after three, turn off error
1620 1.1 christos status. */
1621 1.1 christos if (yyerrstatus)
1622 1.1 christos yyerrstatus--;
1623 1.1 christos
1624 1.1 christos /* Shift the lookahead token. */
1625 1.1 christos YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1626 1.1 christos
1627 1.1 christos /* Discard the shifted token. */
1628 1.1 christos yychar = YYEMPTY;
1629 1.1 christos
1630 1.1 christos yystate = yyn;
1631 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1632 1.1 christos *++yyvsp = yylval;
1633 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
1634 1.1 christos
1635 1.1 christos goto yynewstate;
1636 1.1 christos
1637 1.1 christos
1638 1.1 christos /*-----------------------------------------------------------.
1639 1.1 christos | yydefault -- do the default action for the current state. |
1640 1.1 christos `-----------------------------------------------------------*/
1641 1.1 christos yydefault:
1642 1.1 christos yyn = yydefact[yystate];
1643 1.1 christos if (yyn == 0)
1644 1.1 christos goto yyerrlab;
1645 1.1 christos goto yyreduce;
1646 1.1 christos
1647 1.1 christos
1648 1.1 christos /*-----------------------------.
1649 1.1 christos | yyreduce -- Do a reduction. |
1650 1.1 christos `-----------------------------*/
1651 1.1 christos yyreduce:
1652 1.1 christos /* yyn is the number of a rule to reduce with. */
1653 1.1 christos yylen = yyr2[yyn];
1654 1.1 christos
1655 1.1 christos /* If YYLEN is nonzero, implement the default value of the action:
1656 1.1 christos '$$ = $1'.
1657 1.1 christos
1658 1.1 christos Otherwise, the following line sets YYVAL to garbage.
1659 1.1 christos This behavior is undocumented and Bison
1660 1.1 christos users should not rely upon it. Assigning to YYVAL
1661 1.1 christos unconditionally makes the parser a bit smaller, and it avoids a
1662 1.1 christos GCC warning that YYVAL may be used uninitialized. */
1663 1.1 christos yyval = yyvsp[1-yylen];
1664 1.1 christos
1665 1.1 christos
1666 1.1 christos YY_REDUCE_PRINT (yyn);
1667 1.1 christos switch (yyn)
1668 1.1 christos {
1669 1.1 christos case 9:
1670 1.1.1.1.8.1 martin #line 85 "configparser.y" /* yacc.c:1646 */
1671 1.1 christos { OUTYY(("\nP(server:)\n"));
1672 1.1 christos if(cfg_parser->server_settings_seen) {
1673 1.1 christos yyerror("duplicate server: element.");
1674 1.1 christos }
1675 1.1 christos cfg_parser->server_settings_seen = 1;
1676 1.1 christos }
1677 1.1.1.1.8.1 martin #line 1678 "configparser.c" /* yacc.c:1646 */
1678 1.1 christos break;
1679 1.1 christos
1680 1.1.1.1.8.1 martin case 60:
1681 1.1.1.1.8.1 martin #line 109 "configparser.y" /* yacc.c:1646 */
1682 1.1 christos {
1683 1.1 christos OUTYY(("P(server_ip_address:%s)\n", (yyvsp[0].str)));
1684 1.1 christos if(cfg_parser->current_ip_address_option) {
1685 1.1 christos cfg_parser->current_ip_address_option->next =
1686 1.1.1.1.8.1 martin (ip_address_option_type*)region_alloc(
1687 1.1.1.1.8.1 martin cfg_parser->opt->region, sizeof(ip_address_option_type));
1688 1.1 christos cfg_parser->current_ip_address_option =
1689 1.1 christos cfg_parser->current_ip_address_option->next;
1690 1.1 christos cfg_parser->current_ip_address_option->next=0;
1691 1.1 christos } else {
1692 1.1 christos cfg_parser->current_ip_address_option =
1693 1.1.1.1.8.1 martin (ip_address_option_type*)region_alloc(
1694 1.1.1.1.8.1 martin cfg_parser->opt->region, sizeof(ip_address_option_type));
1695 1.1 christos cfg_parser->current_ip_address_option->next=0;
1696 1.1 christos cfg_parser->opt->ip_addresses = cfg_parser->current_ip_address_option;
1697 1.1 christos }
1698 1.1 christos
1699 1.1 christos cfg_parser->current_ip_address_option->address =
1700 1.1 christos region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1701 1.1 christos }
1702 1.1.1.1.8.1 martin #line 1703 "configparser.c" /* yacc.c:1646 */
1703 1.1 christos break;
1704 1.1 christos
1705 1.1.1.1.8.1 martin case 61:
1706 1.1.1.1.8.1 martin #line 131 "configparser.y" /* yacc.c:1646 */
1707 1.1 christos {
1708 1.1 christos OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
1709 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1710 1.1 christos yyerror("expected yes or no.");
1711 1.1 christos else cfg_parser->opt->ip_transparent = (strcmp((yyvsp[0].str), "yes")==0);
1712 1.1 christos }
1713 1.1.1.1.8.1 martin #line 1714 "configparser.c" /* yacc.c:1646 */
1714 1.1 christos break;
1715 1.1 christos
1716 1.1.1.1.8.1 martin case 62:
1717 1.1.1.1.8.1 martin #line 139 "configparser.y" /* yacc.c:1646 */
1718 1.1 christos {
1719 1.1 christos OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
1720 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1721 1.1 christos yyerror("expected yes or no.");
1722 1.1 christos else cfg_parser->opt->ip_freebind = (strcmp((yyvsp[0].str), "yes")==0);
1723 1.1 christos }
1724 1.1.1.1.8.1 martin #line 1725 "configparser.c" /* yacc.c:1646 */
1725 1.1 christos break;
1726 1.1 christos
1727 1.1.1.1.8.1 martin case 63:
1728 1.1.1.1.8.1 martin #line 147 "configparser.y" /* yacc.c:1646 */
1729 1.1 christos {
1730 1.1 christos OUTYY(("P(server_debug_mode:%s)\n", (yyvsp[0].str)));
1731 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1732 1.1 christos yyerror("expected yes or no.");
1733 1.1 christos else cfg_parser->opt->debug_mode = (strcmp((yyvsp[0].str), "yes")==0);
1734 1.1 christos }
1735 1.1.1.1.8.1 martin #line 1736 "configparser.c" /* yacc.c:1646 */
1736 1.1 christos break;
1737 1.1 christos
1738 1.1.1.1.8.1 martin case 64:
1739 1.1.1.1.8.1 martin #line 155 "configparser.y" /* yacc.c:1646 */
1740 1.1.1.1.8.1 martin {
1741 1.1.1.1.8.1 martin OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
1742 1.1.1.1.8.1 martin if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1743 1.1.1.1.8.1 martin yyerror("expected yes or no.");
1744 1.1.1.1.8.1 martin else cfg_parser->opt->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
1745 1.1.1.1.8.1 martin }
1746 1.1.1.1.8.1 martin #line 1747 "configparser.c" /* yacc.c:1646 */
1747 1.1.1.1.8.1 martin break;
1748 1.1.1.1.8.1 martin
1749 1.1.1.1.8.1 martin case 65:
1750 1.1.1.1.8.1 martin #line 163 "configparser.y" /* yacc.c:1646 */
1751 1.1 christos {
1752 1.1 christos OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
1753 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
1754 1.1 christos yyerror("number expected");
1755 1.1 christos else cfg_parser->opt->verbosity = atoi((yyvsp[0].str));
1756 1.1 christos }
1757 1.1.1.1.8.1 martin #line 1758 "configparser.c" /* yacc.c:1646 */
1758 1.1 christos break;
1759 1.1 christos
1760 1.1.1.1.8.1 martin case 66:
1761 1.1.1.1.8.1 martin #line 171 "configparser.y" /* yacc.c:1646 */
1762 1.1 christos {
1763 1.1 christos OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
1764 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1765 1.1 christos yyerror("expected yes or no.");
1766 1.1 christos else cfg_parser->opt->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
1767 1.1 christos }
1768 1.1.1.1.8.1 martin #line 1769 "configparser.c" /* yacc.c:1646 */
1769 1.1 christos break;
1770 1.1 christos
1771 1.1.1.1.8.1 martin case 67:
1772 1.1.1.1.8.1 martin #line 179 "configparser.y" /* yacc.c:1646 */
1773 1.1 christos {
1774 1.1 christos /* for backwards compatibility in config file with NSD3 */
1775 1.1 christos OUTYY(("P(server_ip4_only:%s)\n", (yyvsp[0].str)));
1776 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1777 1.1 christos yyerror("expected yes or no.");
1778 1.1 christos else if(strcmp((yyvsp[0].str), "yes")==0) {
1779 1.1 christos cfg_parser->opt->do_ip4 = 1;
1780 1.1 christos cfg_parser->opt->do_ip6 = 0;
1781 1.1 christos }
1782 1.1 christos }
1783 1.1.1.1.8.1 martin #line 1784 "configparser.c" /* yacc.c:1646 */
1784 1.1 christos break;
1785 1.1 christos
1786 1.1.1.1.8.1 martin case 68:
1787 1.1.1.1.8.1 martin #line 191 "configparser.y" /* yacc.c:1646 */
1788 1.1 christos {
1789 1.1 christos /* for backwards compatibility in config file with NSD3 */
1790 1.1 christos OUTYY(("P(server_ip6_only:%s)\n", (yyvsp[0].str)));
1791 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1792 1.1 christos yyerror("expected yes or no.");
1793 1.1 christos else if(strcmp((yyvsp[0].str), "yes")==0) {
1794 1.1 christos cfg_parser->opt->do_ip6 = 1;
1795 1.1 christos cfg_parser->opt->do_ip4 = 0;
1796 1.1 christos }
1797 1.1 christos }
1798 1.1.1.1.8.1 martin #line 1799 "configparser.c" /* yacc.c:1646 */
1799 1.1 christos break;
1800 1.1 christos
1801 1.1.1.1.8.1 martin case 69:
1802 1.1.1.1.8.1 martin #line 203 "configparser.y" /* yacc.c:1646 */
1803 1.1 christos {
1804 1.1 christos OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
1805 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1806 1.1 christos yyerror("expected yes or no.");
1807 1.1 christos else cfg_parser->opt->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
1808 1.1 christos }
1809 1.1.1.1.8.1 martin #line 1810 "configparser.c" /* yacc.c:1646 */
1810 1.1 christos break;
1811 1.1 christos
1812 1.1.1.1.8.1 martin case 70:
1813 1.1.1.1.8.1 martin #line 211 "configparser.y" /* yacc.c:1646 */
1814 1.1 christos {
1815 1.1 christos OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
1816 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1817 1.1 christos yyerror("expected yes or no.");
1818 1.1 christos else cfg_parser->opt->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
1819 1.1 christos }
1820 1.1.1.1.8.1 martin #line 1821 "configparser.c" /* yacc.c:1646 */
1821 1.1 christos break;
1822 1.1 christos
1823 1.1.1.1.8.1 martin case 71:
1824 1.1.1.1.8.1 martin #line 219 "configparser.y" /* yacc.c:1646 */
1825 1.1 christos {
1826 1.1 christos OUTYY(("P(server_reuseport:%s)\n", (yyvsp[0].str)));
1827 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1828 1.1 christos yyerror("expected yes or no.");
1829 1.1 christos else cfg_parser->opt->reuseport = (strcmp((yyvsp[0].str), "yes")==0);
1830 1.1 christos }
1831 1.1.1.1.8.1 martin #line 1832 "configparser.c" /* yacc.c:1646 */
1832 1.1 christos break;
1833 1.1 christos
1834 1.1.1.1.8.1 martin case 72:
1835 1.1.1.1.8.1 martin #line 227 "configparser.y" /* yacc.c:1646 */
1836 1.1 christos {
1837 1.1 christos OUTYY(("P(server_database:%s)\n", (yyvsp[0].str)));
1838 1.1 christos cfg_parser->opt->database = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1839 1.1 christos if(cfg_parser->opt->database[0] == 0 &&
1840 1.1 christos cfg_parser->opt->zonefiles_write == 0)
1841 1.1 christos cfg_parser->opt->zonefiles_write = ZONEFILES_WRITE_INTERVAL;
1842 1.1 christos }
1843 1.1.1.1.8.1 martin #line 1844 "configparser.c" /* yacc.c:1646 */
1844 1.1 christos break;
1845 1.1 christos
1846 1.1.1.1.8.1 martin case 73:
1847 1.1.1.1.8.1 martin #line 236 "configparser.y" /* yacc.c:1646 */
1848 1.1 christos {
1849 1.1 christos OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
1850 1.1 christos cfg_parser->opt->identity = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1851 1.1 christos }
1852 1.1.1.1.8.1 martin #line 1853 "configparser.c" /* yacc.c:1646 */
1853 1.1 christos break;
1854 1.1 christos
1855 1.1.1.1.8.1 martin case 74:
1856 1.1.1.1.8.1 martin #line 242 "configparser.y" /* yacc.c:1646 */
1857 1.1 christos {
1858 1.1 christos OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
1859 1.1 christos cfg_parser->opt->version = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1860 1.1 christos }
1861 1.1.1.1.8.1 martin #line 1862 "configparser.c" /* yacc.c:1646 */
1862 1.1 christos break;
1863 1.1 christos
1864 1.1.1.1.8.1 martin case 75:
1865 1.1.1.1.8.1 martin #line 248 "configparser.y" /* yacc.c:1646 */
1866 1.1 christos {
1867 1.1 christos unsigned char* nsid = 0;
1868 1.1 christos size_t nsid_len = 0;
1869 1.1 christos
1870 1.1 christos OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
1871 1.1 christos
1872 1.1 christos if (strncasecmp((yyvsp[0].str), "ascii_", 6) == 0) {
1873 1.1 christos nsid_len = strlen((yyvsp[0].str)+6);
1874 1.1 christos if(nsid_len < 65535) {
1875 1.1 christos cfg_parser->opt->nsid = region_alloc(cfg_parser->opt->region, nsid_len*2+1);
1876 1.1 christos hex_ntop((uint8_t*)(yyvsp[0].str)+6, nsid_len, (char*)cfg_parser->opt->nsid, nsid_len*2+1);
1877 1.1 christos } else
1878 1.1 christos yyerror("NSID too long");
1879 1.1 christos } else if (strlen((yyvsp[0].str)) % 2 != 0) {
1880 1.1 christos yyerror("the NSID must be a hex string of an even length.");
1881 1.1 christos } else {
1882 1.1 christos nsid_len = strlen((yyvsp[0].str)) / 2;
1883 1.1 christos if(nsid_len < 65535) {
1884 1.1 christos nsid = xalloc(nsid_len);
1885 1.1 christos if (hex_pton((yyvsp[0].str), nsid, nsid_len) == -1)
1886 1.1 christos yyerror("hex string cannot be parsed in NSID.");
1887 1.1 christos else
1888 1.1 christos cfg_parser->opt->nsid = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1889 1.1 christos free(nsid);
1890 1.1 christos } else
1891 1.1 christos yyerror("NSID too long");
1892 1.1 christos }
1893 1.1 christos }
1894 1.1.1.1.8.1 martin #line 1895 "configparser.c" /* yacc.c:1646 */
1895 1.1 christos break;
1896 1.1 christos
1897 1.1.1.1.8.1 martin case 76:
1898 1.1.1.1.8.1 martin #line 278 "configparser.y" /* yacc.c:1646 */
1899 1.1 christos {
1900 1.1 christos OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
1901 1.1 christos cfg_parser->opt->logfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1902 1.1 christos }
1903 1.1.1.1.8.1 martin #line 1904 "configparser.c" /* yacc.c:1646 */
1904 1.1 christos break;
1905 1.1 christos
1906 1.1.1.1.8.1 martin case 77:
1907 1.1.1.1.8.1 martin #line 284 "configparser.y" /* yacc.c:1646 */
1908 1.1 christos {
1909 1.1 christos OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
1910 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1911 1.1 christos yyerror("expected yes or no.");
1912 1.1 christos else {
1913 1.1 christos cfg_parser->opt->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
1914 1.1 christos log_time_asc = cfg_parser->opt->log_time_ascii;
1915 1.1 christos }
1916 1.1 christos }
1917 1.1.1.1.8.1 martin #line 1918 "configparser.c" /* yacc.c:1646 */
1918 1.1 christos break;
1919 1.1 christos
1920 1.1.1.1.8.1 martin case 78:
1921 1.1.1.1.8.1 martin #line 295 "configparser.y" /* yacc.c:1646 */
1922 1.1 christos {
1923 1.1 christos OUTYY(("P(server_round_robin:%s)\n", (yyvsp[0].str)));
1924 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1925 1.1 christos yyerror("expected yes or no.");
1926 1.1 christos else {
1927 1.1 christos cfg_parser->opt->round_robin = (strcmp((yyvsp[0].str), "yes")==0);
1928 1.1 christos round_robin = cfg_parser->opt->round_robin;
1929 1.1 christos }
1930 1.1 christos }
1931 1.1.1.1.8.1 martin #line 1932 "configparser.c" /* yacc.c:1646 */
1932 1.1 christos break;
1933 1.1 christos
1934 1.1.1.1.8.1 martin case 79:
1935 1.1.1.1.8.1 martin #line 306 "configparser.y" /* yacc.c:1646 */
1936 1.1.1.1.8.1 martin {
1937 1.1.1.1.8.1 martin OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
1938 1.1.1.1.8.1 martin if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1939 1.1.1.1.8.1 martin yyerror("expected yes or no.");
1940 1.1.1.1.8.1 martin else {
1941 1.1.1.1.8.1 martin cfg_parser->opt->minimal_responses = (strcmp((yyvsp[0].str), "yes")==0);
1942 1.1.1.1.8.1 martin minimal_responses = cfg_parser->opt->minimal_responses;
1943 1.1.1.1.8.1 martin }
1944 1.1.1.1.8.1 martin }
1945 1.1.1.1.8.1 martin #line 1946 "configparser.c" /* yacc.c:1646 */
1946 1.1.1.1.8.1 martin break;
1947 1.1.1.1.8.1 martin
1948 1.1.1.1.8.1 martin case 80:
1949 1.1.1.1.8.1 martin #line 317 "configparser.y" /* yacc.c:1646 */
1950 1.1.1.1.8.1 martin {
1951 1.1.1.1.8.1 martin OUTYY(("P(server_refuse_any:%s)\n", (yyvsp[0].str)));
1952 1.1.1.1.8.1 martin if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
1953 1.1.1.1.8.1 martin yyerror("expected yes or no.");
1954 1.1.1.1.8.1 martin else {
1955 1.1.1.1.8.1 martin cfg_parser->opt->refuse_any = (strcmp((yyvsp[0].str), "yes")==0);
1956 1.1.1.1.8.1 martin }
1957 1.1.1.1.8.1 martin }
1958 1.1.1.1.8.1 martin #line 1959 "configparser.c" /* yacc.c:1646 */
1959 1.1.1.1.8.1 martin break;
1960 1.1.1.1.8.1 martin
1961 1.1.1.1.8.1 martin case 81:
1962 1.1.1.1.8.1 martin #line 327 "configparser.y" /* yacc.c:1646 */
1963 1.1 christos {
1964 1.1 christos OUTYY(("P(server_server_count:%s)\n", (yyvsp[0].str)));
1965 1.1 christos if(atoi((yyvsp[0].str)) <= 0)
1966 1.1 christos yyerror("number greater than zero expected");
1967 1.1 christos else cfg_parser->opt->server_count = atoi((yyvsp[0].str));
1968 1.1 christos }
1969 1.1.1.1.8.1 martin #line 1970 "configparser.c" /* yacc.c:1646 */
1970 1.1 christos break;
1971 1.1 christos
1972 1.1.1.1.8.1 martin case 82:
1973 1.1.1.1.8.1 martin #line 335 "configparser.y" /* yacc.c:1646 */
1974 1.1 christos {
1975 1.1 christos OUTYY(("P(server_tcp_count:%s)\n", (yyvsp[0].str)));
1976 1.1 christos if(atoi((yyvsp[0].str)) <= 0)
1977 1.1 christos yyerror("number greater than zero expected");
1978 1.1 christos else cfg_parser->opt->tcp_count = atoi((yyvsp[0].str));
1979 1.1 christos }
1980 1.1.1.1.8.1 martin #line 1981 "configparser.c" /* yacc.c:1646 */
1981 1.1 christos break;
1982 1.1 christos
1983 1.1.1.1.8.1 martin case 83:
1984 1.1.1.1.8.1 martin #line 343 "configparser.y" /* yacc.c:1646 */
1985 1.1 christos {
1986 1.1 christos OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
1987 1.1 christos cfg_parser->opt->pidfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1988 1.1 christos }
1989 1.1.1.1.8.1 martin #line 1990 "configparser.c" /* yacc.c:1646 */
1990 1.1 christos break;
1991 1.1 christos
1992 1.1.1.1.8.1 martin case 84:
1993 1.1.1.1.8.1 martin #line 349 "configparser.y" /* yacc.c:1646 */
1994 1.1 christos {
1995 1.1 christos OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
1996 1.1 christos cfg_parser->opt->port = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
1997 1.1 christos }
1998 1.1.1.1.8.1 martin #line 1999 "configparser.c" /* yacc.c:1646 */
1999 1.1 christos break;
2000 1.1 christos
2001 1.1.1.1.8.1 martin case 85:
2002 1.1.1.1.8.1 martin #line 355 "configparser.y" /* yacc.c:1646 */
2003 1.1 christos {
2004 1.1 christos OUTYY(("P(server_statistics:%s)\n", (yyvsp[0].str)));
2005 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2006 1.1 christos yyerror("number expected");
2007 1.1 christos else cfg_parser->opt->statistics = atoi((yyvsp[0].str));
2008 1.1 christos }
2009 1.1.1.1.8.1 martin #line 2010 "configparser.c" /* yacc.c:1646 */
2010 1.1 christos break;
2011 1.1 christos
2012 1.1.1.1.8.1 martin case 86:
2013 1.1.1.1.8.1 martin #line 363 "configparser.y" /* yacc.c:1646 */
2014 1.1 christos {
2015 1.1 christos OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
2016 1.1 christos cfg_parser->opt->chroot = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2017 1.1 christos }
2018 1.1.1.1.8.1 martin #line 2019 "configparser.c" /* yacc.c:1646 */
2019 1.1 christos break;
2020 1.1 christos
2021 1.1.1.1.8.1 martin case 87:
2022 1.1.1.1.8.1 martin #line 369 "configparser.y" /* yacc.c:1646 */
2023 1.1 christos {
2024 1.1 christos OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
2025 1.1 christos cfg_parser->opt->username = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2026 1.1 christos }
2027 1.1.1.1.8.1 martin #line 2028 "configparser.c" /* yacc.c:1646 */
2028 1.1 christos break;
2029 1.1 christos
2030 1.1.1.1.8.1 martin case 88:
2031 1.1.1.1.8.1 martin #line 375 "configparser.y" /* yacc.c:1646 */
2032 1.1 christos {
2033 1.1 christos OUTYY(("P(server_zonesdir:%s)\n", (yyvsp[0].str)));
2034 1.1 christos cfg_parser->opt->zonesdir = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2035 1.1 christos }
2036 1.1.1.1.8.1 martin #line 2037 "configparser.c" /* yacc.c:1646 */
2037 1.1 christos break;
2038 1.1 christos
2039 1.1.1.1.8.1 martin case 89:
2040 1.1.1.1.8.1 martin #line 381 "configparser.y" /* yacc.c:1646 */
2041 1.1 christos {
2042 1.1 christos OUTYY(("P(server_zonelistfile:%s)\n", (yyvsp[0].str)));
2043 1.1 christos cfg_parser->opt->zonelistfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2044 1.1 christos }
2045 1.1.1.1.8.1 martin #line 2046 "configparser.c" /* yacc.c:1646 */
2046 1.1 christos break;
2047 1.1 christos
2048 1.1.1.1.8.1 martin case 90:
2049 1.1.1.1.8.1 martin #line 387 "configparser.y" /* yacc.c:1646 */
2050 1.1 christos {
2051 1.1 christos OUTYY(("P(server_xfrdir:%s)\n", (yyvsp[0].str)));
2052 1.1 christos cfg_parser->opt->xfrdir = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2053 1.1 christos }
2054 1.1.1.1.8.1 martin #line 2055 "configparser.c" /* yacc.c:1646 */
2055 1.1 christos break;
2056 1.1 christos
2057 1.1.1.1.8.1 martin case 91:
2058 1.1.1.1.8.1 martin #line 393 "configparser.y" /* yacc.c:1646 */
2059 1.1 christos {
2060 1.1 christos OUTYY(("P(server_difffile:%s)\n", (yyvsp[0].str)));
2061 1.1 christos /* ignore the value for backwards compatibility in config file*/
2062 1.1 christos }
2063 1.1.1.1.8.1 martin #line 2064 "configparser.c" /* yacc.c:1646 */
2064 1.1 christos break;
2065 1.1 christos
2066 1.1.1.1.8.1 martin case 92:
2067 1.1.1.1.8.1 martin #line 399 "configparser.y" /* yacc.c:1646 */
2068 1.1 christos {
2069 1.1 christos OUTYY(("P(server_xfrdfile:%s)\n", (yyvsp[0].str)));
2070 1.1 christos cfg_parser->opt->xfrdfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2071 1.1 christos }
2072 1.1.1.1.8.1 martin #line 2073 "configparser.c" /* yacc.c:1646 */
2073 1.1 christos break;
2074 1.1 christos
2075 1.1.1.1.8.1 martin case 93:
2076 1.1.1.1.8.1 martin #line 405 "configparser.y" /* yacc.c:1646 */
2077 1.1 christos {
2078 1.1 christos OUTYY(("P(server_xfrd_reload_timeout:%s)\n", (yyvsp[0].str)));
2079 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2080 1.1 christos yyerror("number expected");
2081 1.1 christos cfg_parser->opt->xfrd_reload_timeout = atoi((yyvsp[0].str));
2082 1.1 christos }
2083 1.1.1.1.8.1 martin #line 2084 "configparser.c" /* yacc.c:1646 */
2084 1.1 christos break;
2085 1.1 christos
2086 1.1.1.1.8.1 martin case 94:
2087 1.1.1.1.8.1 martin #line 413 "configparser.y" /* yacc.c:1646 */
2088 1.1 christos {
2089 1.1 christos OUTYY(("P(server_tcp_query_count:%s)\n", (yyvsp[0].str)));
2090 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2091 1.1 christos yyerror("number expected");
2092 1.1 christos cfg_parser->opt->tcp_query_count = atoi((yyvsp[0].str));
2093 1.1 christos }
2094 1.1.1.1.8.1 martin #line 2095 "configparser.c" /* yacc.c:1646 */
2095 1.1 christos break;
2096 1.1 christos
2097 1.1.1.1.8.1 martin case 95:
2098 1.1.1.1.8.1 martin #line 421 "configparser.y" /* yacc.c:1646 */
2099 1.1 christos {
2100 1.1 christos OUTYY(("P(server_tcp_timeout:%s)\n", (yyvsp[0].str)));
2101 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2102 1.1 christos yyerror("number expected");
2103 1.1 christos cfg_parser->opt->tcp_timeout = atoi((yyvsp[0].str));
2104 1.1 christos }
2105 1.1.1.1.8.1 martin #line 2106 "configparser.c" /* yacc.c:1646 */
2106 1.1 christos break;
2107 1.1 christos
2108 1.1.1.1.8.1 martin case 96:
2109 1.1.1.1.8.1 martin #line 429 "configparser.y" /* yacc.c:1646 */
2110 1.1 christos {
2111 1.1 christos OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
2112 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2113 1.1 christos yyerror("number expected");
2114 1.1 christos cfg_parser->opt->tcp_mss = atoi((yyvsp[0].str));
2115 1.1 christos }
2116 1.1.1.1.8.1 martin #line 2117 "configparser.c" /* yacc.c:1646 */
2117 1.1 christos break;
2118 1.1 christos
2119 1.1.1.1.8.1 martin case 97:
2120 1.1.1.1.8.1 martin #line 437 "configparser.y" /* yacc.c:1646 */
2121 1.1 christos {
2122 1.1 christos OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
2123 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2124 1.1 christos yyerror("number expected");
2125 1.1 christos cfg_parser->opt->outgoing_tcp_mss = atoi((yyvsp[0].str));
2126 1.1 christos }
2127 1.1.1.1.8.1 martin #line 2128 "configparser.c" /* yacc.c:1646 */
2128 1.1 christos break;
2129 1.1 christos
2130 1.1.1.1.8.1 martin case 98:
2131 1.1.1.1.8.1 martin #line 445 "configparser.y" /* yacc.c:1646 */
2132 1.1 christos {
2133 1.1 christos OUTYY(("P(server_ipv4_edns_size:%s)\n", (yyvsp[0].str)));
2134 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2135 1.1 christos yyerror("number expected");
2136 1.1 christos cfg_parser->opt->ipv4_edns_size = atoi((yyvsp[0].str));
2137 1.1 christos }
2138 1.1.1.1.8.1 martin #line 2139 "configparser.c" /* yacc.c:1646 */
2139 1.1 christos break;
2140 1.1 christos
2141 1.1.1.1.8.1 martin case 99:
2142 1.1.1.1.8.1 martin #line 453 "configparser.y" /* yacc.c:1646 */
2143 1.1 christos {
2144 1.1 christos OUTYY(("P(server_ipv6_edns_size:%s)\n", (yyvsp[0].str)));
2145 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2146 1.1 christos yyerror("number expected");
2147 1.1 christos cfg_parser->opt->ipv6_edns_size = atoi((yyvsp[0].str));
2148 1.1 christos }
2149 1.1.1.1.8.1 martin #line 2150 "configparser.c" /* yacc.c:1646 */
2150 1.1 christos break;
2151 1.1 christos
2152 1.1.1.1.8.1 martin case 100:
2153 1.1.1.1.8.1 martin #line 461 "configparser.y" /* yacc.c:1646 */
2154 1.1 christos {
2155 1.1 christos OUTYY(("P(server_rrl_size:%s)\n", (yyvsp[0].str)));
2156 1.1 christos #ifdef RATELIMIT
2157 1.1 christos if(atoi((yyvsp[0].str)) <= 0)
2158 1.1 christos yyerror("number greater than zero expected");
2159 1.1 christos cfg_parser->opt->rrl_size = atoi((yyvsp[0].str));
2160 1.1 christos #endif
2161 1.1 christos }
2162 1.1.1.1.8.1 martin #line 2163 "configparser.c" /* yacc.c:1646 */
2163 1.1 christos break;
2164 1.1 christos
2165 1.1.1.1.8.1 martin case 101:
2166 1.1.1.1.8.1 martin #line 471 "configparser.y" /* yacc.c:1646 */
2167 1.1 christos {
2168 1.1 christos OUTYY(("P(server_rrl_ratelimit:%s)\n", (yyvsp[0].str)));
2169 1.1 christos #ifdef RATELIMIT
2170 1.1 christos cfg_parser->opt->rrl_ratelimit = atoi((yyvsp[0].str));
2171 1.1 christos #endif
2172 1.1 christos }
2173 1.1.1.1.8.1 martin #line 2174 "configparser.c" /* yacc.c:1646 */
2174 1.1 christos break;
2175 1.1 christos
2176 1.1.1.1.8.1 martin case 102:
2177 1.1.1.1.8.1 martin #line 479 "configparser.y" /* yacc.c:1646 */
2178 1.1 christos {
2179 1.1 christos OUTYY(("P(server_rrl_slip:%s)\n", (yyvsp[0].str)));
2180 1.1 christos #ifdef RATELIMIT
2181 1.1 christos if(atoi((yyvsp[0].str)) < 0)
2182 1.1 christos yyerror("number equal or greater than zero expected");
2183 1.1 christos cfg_parser->opt->rrl_slip = atoi((yyvsp[0].str));
2184 1.1 christos #endif
2185 1.1 christos }
2186 1.1.1.1.8.1 martin #line 2187 "configparser.c" /* yacc.c:1646 */
2187 1.1 christos break;
2188 1.1 christos
2189 1.1.1.1.8.1 martin case 103:
2190 1.1.1.1.8.1 martin #line 489 "configparser.y" /* yacc.c:1646 */
2191 1.1 christos {
2192 1.1 christos OUTYY(("P(server_rrl_ipv4_prefix_length:%s)\n", (yyvsp[0].str)));
2193 1.1 christos #ifdef RATELIMIT
2194 1.1 christos if(atoi((yyvsp[0].str)) < 0 || atoi((yyvsp[0].str)) > 32)
2195 1.1 christos yyerror("invalid IPv4 prefix length");
2196 1.1 christos cfg_parser->opt->rrl_ipv4_prefix_length = atoi((yyvsp[0].str));
2197 1.1 christos #endif
2198 1.1 christos }
2199 1.1.1.1.8.1 martin #line 2200 "configparser.c" /* yacc.c:1646 */
2200 1.1 christos break;
2201 1.1 christos
2202 1.1.1.1.8.1 martin case 104:
2203 1.1.1.1.8.1 martin #line 499 "configparser.y" /* yacc.c:1646 */
2204 1.1 christos {
2205 1.1 christos OUTYY(("P(server_rrl_ipv6_prefix_length:%s)\n", (yyvsp[0].str)));
2206 1.1 christos #ifdef RATELIMIT
2207 1.1 christos if(atoi((yyvsp[0].str)) < 0 || atoi((yyvsp[0].str)) > 64)
2208 1.1 christos yyerror("invalid IPv6 prefix length");
2209 1.1 christos cfg_parser->opt->rrl_ipv6_prefix_length = atoi((yyvsp[0].str));
2210 1.1 christos #endif
2211 1.1 christos }
2212 1.1.1.1.8.1 martin #line 2213 "configparser.c" /* yacc.c:1646 */
2213 1.1 christos break;
2214 1.1 christos
2215 1.1.1.1.8.1 martin case 105:
2216 1.1.1.1.8.1 martin #line 509 "configparser.y" /* yacc.c:1646 */
2217 1.1 christos {
2218 1.1 christos OUTYY(("P(server_rrl_whitelist_ratelimit:%s)\n", (yyvsp[0].str)));
2219 1.1 christos #ifdef RATELIMIT
2220 1.1 christos cfg_parser->opt->rrl_whitelist_ratelimit = atoi((yyvsp[0].str));
2221 1.1 christos #endif
2222 1.1 christos }
2223 1.1.1.1.8.1 martin #line 2224 "configparser.c" /* yacc.c:1646 */
2224 1.1 christos break;
2225 1.1 christos
2226 1.1.1.1.8.1 martin case 106:
2227 1.1.1.1.8.1 martin #line 517 "configparser.y" /* yacc.c:1646 */
2228 1.1 christos {
2229 1.1 christos OUTYY(("P(server_zonefiles_check:%s)\n", (yyvsp[0].str)));
2230 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
2231 1.1 christos yyerror("expected yes or no.");
2232 1.1 christos else cfg_parser->opt->zonefiles_check = (strcmp((yyvsp[0].str), "yes")==0);
2233 1.1 christos }
2234 1.1.1.1.8.1 martin #line 2235 "configparser.c" /* yacc.c:1646 */
2235 1.1 christos break;
2236 1.1 christos
2237 1.1.1.1.8.1 martin case 107:
2238 1.1.1.1.8.1 martin #line 525 "configparser.y" /* yacc.c:1646 */
2239 1.1 christos {
2240 1.1 christos OUTYY(("P(server_zonefiles_write:%s)\n", (yyvsp[0].str)));
2241 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2242 1.1 christos yyerror("number expected");
2243 1.1 christos else cfg_parser->opt->zonefiles_write = atoi((yyvsp[0].str));
2244 1.1 christos }
2245 1.1.1.1.8.1 martin #line 2246 "configparser.c" /* yacc.c:1646 */
2246 1.1 christos break;
2247 1.1 christos
2248 1.1.1.1.8.1 martin case 108:
2249 1.1.1.1.8.1 martin #line 534 "configparser.y" /* yacc.c:1646 */
2250 1.1 christos {
2251 1.1 christos OUTYY(("\nP(remote-control:)\n"));
2252 1.1 christos }
2253 1.1.1.1.8.1 martin #line 2254 "configparser.c" /* yacc.c:1646 */
2254 1.1 christos break;
2255 1.1 christos
2256 1.1.1.1.8.1 martin case 118:
2257 1.1.1.1.8.1 martin #line 545 "configparser.y" /* yacc.c:1646 */
2258 1.1 christos {
2259 1.1 christos OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
2260 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
2261 1.1 christos yyerror("expected yes or no.");
2262 1.1 christos else cfg_parser->opt->control_enable = (strcmp((yyvsp[0].str), "yes")==0);
2263 1.1 christos }
2264 1.1.1.1.8.1 martin #line 2265 "configparser.c" /* yacc.c:1646 */
2265 1.1 christos break;
2266 1.1 christos
2267 1.1.1.1.8.1 martin case 119:
2268 1.1.1.1.8.1 martin #line 553 "configparser.y" /* yacc.c:1646 */
2269 1.1 christos {
2270 1.1 christos OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
2271 1.1 christos if(atoi((yyvsp[0].str)) == 0)
2272 1.1 christos yyerror("control port number expected");
2273 1.1 christos else cfg_parser->opt->control_port = atoi((yyvsp[0].str));
2274 1.1 christos }
2275 1.1.1.1.8.1 martin #line 2276 "configparser.c" /* yacc.c:1646 */
2276 1.1 christos break;
2277 1.1 christos
2278 1.1.1.1.8.1 martin case 120:
2279 1.1.1.1.8.1 martin #line 561 "configparser.y" /* yacc.c:1646 */
2280 1.1 christos {
2281 1.1.1.1.8.1 martin ip_address_option_type* last = NULL;
2282 1.1.1.1.8.1 martin ip_address_option_type* o = (ip_address_option_type*)region_alloc(
2283 1.1.1.1.8.1 martin cfg_parser->opt->region, sizeof(ip_address_option_type));
2284 1.1 christos OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
2285 1.1.1.1.8.1 martin /* append at end */
2286 1.1.1.1.8.1 martin last = cfg_parser->opt->control_interface;
2287 1.1.1.1.8.1 martin while(last && last->next)
2288 1.1.1.1.8.1 martin last = last->next;
2289 1.1.1.1.8.1 martin if(last == NULL)
2290 1.1.1.1.8.1 martin cfg_parser->opt->control_interface = o;
2291 1.1.1.1.8.1 martin else last->next = o;
2292 1.1.1.1.8.1 martin o->next = NULL;
2293 1.1 christos o->address = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2294 1.1 christos }
2295 1.1.1.1.8.1 martin #line 2296 "configparser.c" /* yacc.c:1646 */
2296 1.1 christos break;
2297 1.1 christos
2298 1.1.1.1.8.1 martin case 121:
2299 1.1.1.1.8.1 martin #line 578 "configparser.y" /* yacc.c:1646 */
2300 1.1 christos {
2301 1.1 christos OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
2302 1.1 christos cfg_parser->opt->server_key_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2303 1.1 christos }
2304 1.1.1.1.8.1 martin #line 2305 "configparser.c" /* yacc.c:1646 */
2305 1.1 christos break;
2306 1.1 christos
2307 1.1.1.1.8.1 martin case 122:
2308 1.1.1.1.8.1 martin #line 584 "configparser.y" /* yacc.c:1646 */
2309 1.1 christos {
2310 1.1 christos OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
2311 1.1 christos cfg_parser->opt->server_cert_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2312 1.1 christos }
2313 1.1.1.1.8.1 martin #line 2314 "configparser.c" /* yacc.c:1646 */
2314 1.1 christos break;
2315 1.1 christos
2316 1.1.1.1.8.1 martin case 123:
2317 1.1.1.1.8.1 martin #line 590 "configparser.y" /* yacc.c:1646 */
2318 1.1 christos {
2319 1.1 christos OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
2320 1.1 christos cfg_parser->opt->control_key_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2321 1.1 christos }
2322 1.1.1.1.8.1 martin #line 2323 "configparser.c" /* yacc.c:1646 */
2323 1.1 christos break;
2324 1.1 christos
2325 1.1.1.1.8.1 martin case 124:
2326 1.1.1.1.8.1 martin #line 596 "configparser.y" /* yacc.c:1646 */
2327 1.1 christos {
2328 1.1 christos OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
2329 1.1 christos cfg_parser->opt->control_cert_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2330 1.1 christos }
2331 1.1.1.1.8.1 martin #line 2332 "configparser.c" /* yacc.c:1646 */
2332 1.1 christos break;
2333 1.1 christos
2334 1.1.1.1.8.1 martin case 125:
2335 1.1.1.1.8.1 martin #line 604 "configparser.y" /* yacc.c:1646 */
2336 1.1 christos {
2337 1.1 christos OUTYY(("\nP(pattern:)\n"));
2338 1.1 christos if(cfg_parser->current_zone) {
2339 1.1 christos if(!cfg_parser->current_zone->name)
2340 1.1 christos c_error("previous zone has no name");
2341 1.1 christos else {
2342 1.1 christos if(!nsd_options_insert_zone(cfg_parser->opt,
2343 1.1 christos cfg_parser->current_zone))
2344 1.1 christos c_error("duplicate zone");
2345 1.1 christos }
2346 1.1 christos if(!cfg_parser->current_zone->pattern)
2347 1.1 christos c_error("previous zone has no pattern");
2348 1.1 christos cfg_parser->current_zone = NULL;
2349 1.1 christos }
2350 1.1 christos if(cfg_parser->current_pattern) {
2351 1.1 christos if(!cfg_parser->current_pattern->pname)
2352 1.1 christos c_error("previous pattern has no name");
2353 1.1 christos else {
2354 1.1 christos if(!nsd_options_insert_pattern(cfg_parser->opt,
2355 1.1 christos cfg_parser->current_pattern))
2356 1.1 christos c_error_msg("duplicate pattern %s",
2357 1.1 christos cfg_parser->current_pattern->pname);
2358 1.1 christos }
2359 1.1 christos }
2360 1.1 christos cfg_parser->current_pattern = pattern_options_create(
2361 1.1 christos cfg_parser->opt->region);
2362 1.1 christos cfg_parser->current_allow_notify = 0;
2363 1.1 christos cfg_parser->current_request_xfr = 0;
2364 1.1 christos cfg_parser->current_notify = 0;
2365 1.1 christos cfg_parser->current_provide_xfr = 0;
2366 1.1 christos cfg_parser->current_outgoing_interface = 0;
2367 1.1 christos }
2368 1.1.1.1.8.1 martin #line 2369 "configparser.c" /* yacc.c:1646 */
2369 1.1 christos break;
2370 1.1 christos
2371 1.1.1.1.8.1 martin case 147:
2372 1.1.1.1.8.1 martin #line 646 "configparser.y" /* yacc.c:1646 */
2373 1.1 christos {
2374 1.1 christos OUTYY(("P(pattern_name:%s)\n", (yyvsp[0].str)));
2375 1.1 christos #ifndef NDEBUG
2376 1.1 christos assert(cfg_parser->current_pattern);
2377 1.1 christos #endif
2378 1.1 christos if(strchr((yyvsp[0].str), ' '))
2379 1.1 christos c_error_msg("space is not allowed in pattern name: "
2380 1.1 christos "'%s'", (yyvsp[0].str));
2381 1.1 christos cfg_parser->current_pattern->pname = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2382 1.1 christos }
2383 1.1.1.1.8.1 martin #line 2384 "configparser.c" /* yacc.c:1646 */
2384 1.1 christos break;
2385 1.1 christos
2386 1.1.1.1.8.1 martin case 148:
2387 1.1.1.1.8.1 martin #line 658 "configparser.y" /* yacc.c:1646 */
2388 1.1 christos {
2389 1.1 christos OUTYY(("P(include-pattern:%s)\n", (yyvsp[0].str)));
2390 1.1 christos #ifndef NDEBUG
2391 1.1 christos assert(cfg_parser->current_pattern);
2392 1.1 christos #endif
2393 1.1 christos config_apply_pattern((yyvsp[0].str));
2394 1.1 christos }
2395 1.1.1.1.8.1 martin #line 2396 "configparser.c" /* yacc.c:1646 */
2396 1.1 christos break;
2397 1.1 christos
2398 1.1.1.1.8.1 martin case 149:
2399 1.1.1.1.8.1 martin #line 669 "configparser.y" /* yacc.c:1646 */
2400 1.1 christos {
2401 1.1 christos OUTYY(("\nP(zone:)\n"));
2402 1.1 christos if(cfg_parser->current_zone) {
2403 1.1 christos if(!cfg_parser->current_zone->name)
2404 1.1 christos c_error("previous zone has no name");
2405 1.1 christos else {
2406 1.1 christos if(!nsd_options_insert_zone(cfg_parser->opt,
2407 1.1 christos cfg_parser->current_zone))
2408 1.1 christos c_error("duplicate zone");
2409 1.1 christos }
2410 1.1 christos if(!cfg_parser->current_zone->pattern)
2411 1.1 christos c_error("previous zone has no pattern");
2412 1.1 christos }
2413 1.1 christos if(cfg_parser->current_pattern) {
2414 1.1 christos if(!cfg_parser->current_pattern->pname)
2415 1.1 christos c_error("previous pattern has no name");
2416 1.1 christos else {
2417 1.1 christos if(!nsd_options_insert_pattern(cfg_parser->opt,
2418 1.1 christos cfg_parser->current_pattern))
2419 1.1 christos c_error_msg("duplicate pattern %s",
2420 1.1 christos cfg_parser->current_pattern->pname);
2421 1.1 christos }
2422 1.1 christos }
2423 1.1 christos cfg_parser->current_zone = zone_options_create(cfg_parser->opt->region);
2424 1.1 christos cfg_parser->current_zone->part_of_config = 1;
2425 1.1 christos cfg_parser->current_pattern = pattern_options_create(
2426 1.1 christos cfg_parser->opt->region);
2427 1.1 christos cfg_parser->current_pattern->implicit = 1;
2428 1.1 christos cfg_parser->current_zone->pattern = cfg_parser->current_pattern;
2429 1.1 christos cfg_parser->current_allow_notify = 0;
2430 1.1 christos cfg_parser->current_request_xfr = 0;
2431 1.1 christos cfg_parser->current_notify = 0;
2432 1.1 christos cfg_parser->current_provide_xfr = 0;
2433 1.1 christos cfg_parser->current_outgoing_interface = 0;
2434 1.1 christos }
2435 1.1.1.1.8.1 martin #line 2436 "configparser.c" /* yacc.c:1646 */
2436 1.1 christos break;
2437 1.1 christos
2438 1.1.1.1.8.1 martin case 154:
2439 1.1.1.1.8.1 martin #line 708 "configparser.y" /* yacc.c:1646 */
2440 1.1 christos {
2441 1.1 christos char* s;
2442 1.1 christos OUTYY(("P(zone_name:%s)\n", (yyvsp[0].str)));
2443 1.1 christos #ifndef NDEBUG
2444 1.1 christos assert(cfg_parser->current_zone);
2445 1.1 christos assert(cfg_parser->current_pattern);
2446 1.1 christos #endif
2447 1.1 christos cfg_parser->current_zone->name = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2448 1.1 christos s = (char*)region_alloc(cfg_parser->opt->region,
2449 1.1 christos strlen((yyvsp[0].str))+strlen(PATTERN_IMPLICIT_MARKER)+1);
2450 1.1 christos memmove(s, PATTERN_IMPLICIT_MARKER,
2451 1.1 christos strlen(PATTERN_IMPLICIT_MARKER));
2452 1.1 christos memmove(s+strlen(PATTERN_IMPLICIT_MARKER), (yyvsp[0].str), strlen((yyvsp[0].str))+1);
2453 1.1 christos if(pattern_options_find(cfg_parser->opt, s))
2454 1.1 christos c_error_msg("zone %s cannot be created because "
2455 1.1 christos "implicit pattern %s already exists", (yyvsp[0].str), s);
2456 1.1 christos cfg_parser->current_pattern->pname = s;
2457 1.1 christos }
2458 1.1.1.1.8.1 martin #line 2459 "configparser.c" /* yacc.c:1646 */
2459 1.1 christos break;
2460 1.1 christos
2461 1.1.1.1.8.1 martin case 155:
2462 1.1.1.1.8.1 martin #line 728 "configparser.y" /* yacc.c:1646 */
2463 1.1 christos {
2464 1.1 christos OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
2465 1.1 christos #ifndef NDEBUG
2466 1.1 christos assert(cfg_parser->current_pattern);
2467 1.1 christos #endif
2468 1.1 christos cfg_parser->current_pattern->zonefile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2469 1.1 christos }
2470 1.1.1.1.8.1 martin #line 2471 "configparser.c" /* yacc.c:1646 */
2471 1.1 christos break;
2472 1.1 christos
2473 1.1.1.1.8.1 martin case 156:
2474 1.1.1.1.8.1 martin #line 737 "configparser.y" /* yacc.c:1646 */
2475 1.1 christos {
2476 1.1 christos OUTYY(("P(zonestats:%s)\n", (yyvsp[0].str)));
2477 1.1 christos #ifndef NDEBUG
2478 1.1 christos assert(cfg_parser->current_pattern);
2479 1.1 christos #endif
2480 1.1 christos cfg_parser->current_pattern->zonestats = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2481 1.1 christos }
2482 1.1.1.1.8.1 martin #line 2483 "configparser.c" /* yacc.c:1646 */
2483 1.1 christos break;
2484 1.1 christos
2485 1.1.1.1.8.1 martin case 157:
2486 1.1.1.1.8.1 martin #line 746 "configparser.y" /* yacc.c:1646 */
2487 1.1 christos {
2488 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
2489 1.1 christos OUTYY(("P(allow_notify:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
2490 1.1 christos if(cfg_parser->current_allow_notify)
2491 1.1 christos cfg_parser->current_allow_notify->next = acl;
2492 1.1 christos else
2493 1.1 christos cfg_parser->current_pattern->allow_notify = acl;
2494 1.1 christos cfg_parser->current_allow_notify = acl;
2495 1.1 christos }
2496 1.1.1.1.8.1 martin #line 2497 "configparser.c" /* yacc.c:1646 */
2497 1.1 christos break;
2498 1.1 christos
2499 1.1.1.1.8.1 martin case 158:
2500 1.1.1.1.8.1 martin #line 757 "configparser.y" /* yacc.c:1646 */
2501 1.1 christos {
2502 1.1 christos }
2503 1.1.1.1.8.1 martin #line 2504 "configparser.c" /* yacc.c:1646 */
2504 1.1 christos break;
2505 1.1 christos
2506 1.1.1.1.8.1 martin case 159:
2507 1.1.1.1.8.1 martin #line 761 "configparser.y" /* yacc.c:1646 */
2508 1.1 christos {
2509 1.1 christos OUTYY(("P(size_limit_xfr:%s)\n", (yyvsp[0].str)));
2510 1.1 christos if(atoll((yyvsp[0].str)) < 0)
2511 1.1 christos yyerror("number >= 0 expected");
2512 1.1 christos else cfg_parser->current_pattern->size_limit_xfr = atoll((yyvsp[0].str));
2513 1.1 christos }
2514 1.1.1.1.8.1 martin #line 2515 "configparser.c" /* yacc.c:1646 */
2515 1.1 christos break;
2516 1.1 christos
2517 1.1.1.1.8.1 martin case 160:
2518 1.1.1.1.8.1 martin #line 769 "configparser.y" /* yacc.c:1646 */
2519 1.1 christos {
2520 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
2521 1.1 christos OUTYY(("P(request_xfr:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
2522 1.1 christos if(acl->blocked) c_error("blocked address used for request-xfr");
2523 1.1 christos if(acl->rangetype!=acl_range_single) c_error("address range used for request-xfr");
2524 1.1 christos if(cfg_parser->current_request_xfr)
2525 1.1 christos cfg_parser->current_request_xfr->next = acl;
2526 1.1 christos else
2527 1.1 christos cfg_parser->current_pattern->request_xfr = acl;
2528 1.1 christos cfg_parser->current_request_xfr = acl;
2529 1.1 christos }
2530 1.1.1.1.8.1 martin #line 2531 "configparser.c" /* yacc.c:1646 */
2531 1.1 christos break;
2532 1.1 christos
2533 1.1.1.1.8.1 martin case 161:
2534 1.1.1.1.8.1 martin #line 781 "configparser.y" /* yacc.c:1646 */
2535 1.1 christos {
2536 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
2537 1.1 christos acl->use_axfr_only = 1;
2538 1.1 christos OUTYY(("P(request_xfr:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
2539 1.1 christos if(acl->blocked) c_error("blocked address used for request-xfr");
2540 1.1 christos if(acl->rangetype!=acl_range_single) c_error("address range used for request-xfr");
2541 1.1 christos if(cfg_parser->current_request_xfr)
2542 1.1 christos cfg_parser->current_request_xfr->next = acl;
2543 1.1 christos else
2544 1.1 christos cfg_parser->current_pattern->request_xfr = acl;
2545 1.1 christos cfg_parser->current_request_xfr = acl;
2546 1.1 christos }
2547 1.1.1.1.8.1 martin #line 2548 "configparser.c" /* yacc.c:1646 */
2548 1.1 christos break;
2549 1.1 christos
2550 1.1.1.1.8.1 martin case 162:
2551 1.1.1.1.8.1 martin #line 794 "configparser.y" /* yacc.c:1646 */
2552 1.1 christos {
2553 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
2554 1.1 christos acl->allow_udp = 1;
2555 1.1 christos OUTYY(("P(request_xfr:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
2556 1.1 christos if(acl->blocked) c_error("blocked address used for request-xfr");
2557 1.1 christos if(acl->rangetype!=acl_range_single) c_error("address range used for request-xfr");
2558 1.1 christos if(cfg_parser->current_request_xfr)
2559 1.1 christos cfg_parser->current_request_xfr->next = acl;
2560 1.1 christos else
2561 1.1 christos cfg_parser->current_pattern->request_xfr = acl;
2562 1.1 christos cfg_parser->current_request_xfr = acl;
2563 1.1 christos }
2564 1.1.1.1.8.1 martin #line 2565 "configparser.c" /* yacc.c:1646 */
2565 1.1 christos break;
2566 1.1 christos
2567 1.1.1.1.8.1 martin case 163:
2568 1.1.1.1.8.1 martin #line 808 "configparser.y" /* yacc.c:1646 */
2569 1.1 christos {
2570 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
2571 1.1 christos OUTYY(("P(notify:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
2572 1.1 christos if(acl->blocked) c_error("blocked address used for notify");
2573 1.1 christos if(acl->rangetype!=acl_range_single) c_error("address range used for notify");
2574 1.1 christos if(cfg_parser->current_notify)
2575 1.1 christos cfg_parser->current_notify->next = acl;
2576 1.1 christos else
2577 1.1 christos cfg_parser->current_pattern->notify = acl;
2578 1.1 christos cfg_parser->current_notify = acl;
2579 1.1 christos }
2580 1.1.1.1.8.1 martin #line 2581 "configparser.c" /* yacc.c:1646 */
2581 1.1 christos break;
2582 1.1 christos
2583 1.1.1.1.8.1 martin case 164:
2584 1.1.1.1.8.1 martin #line 821 "configparser.y" /* yacc.c:1646 */
2585 1.1 christos {
2586 1.1 christos OUTYY(("P(notify_retry:%s)\n", (yyvsp[0].str)));
2587 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2588 1.1 christos yyerror("number expected");
2589 1.1 christos else {
2590 1.1 christos cfg_parser->current_pattern->notify_retry = atoi((yyvsp[0].str));
2591 1.1 christos cfg_parser->current_pattern->notify_retry_is_default=0;
2592 1.1 christos }
2593 1.1 christos }
2594 1.1.1.1.8.1 martin #line 2595 "configparser.c" /* yacc.c:1646 */
2595 1.1 christos break;
2596 1.1 christos
2597 1.1.1.1.8.1 martin case 165:
2598 1.1.1.1.8.1 martin #line 832 "configparser.y" /* yacc.c:1646 */
2599 1.1 christos {
2600 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
2601 1.1 christos OUTYY(("P(provide_xfr:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
2602 1.1 christos if(cfg_parser->current_provide_xfr)
2603 1.1 christos cfg_parser->current_provide_xfr->next = acl;
2604 1.1 christos else
2605 1.1 christos cfg_parser->current_pattern->provide_xfr = acl;
2606 1.1 christos cfg_parser->current_provide_xfr = acl;
2607 1.1 christos }
2608 1.1.1.1.8.1 martin #line 2609 "configparser.c" /* yacc.c:1646 */
2609 1.1 christos break;
2610 1.1 christos
2611 1.1.1.1.8.1 martin case 166:
2612 1.1.1.1.8.1 martin #line 843 "configparser.y" /* yacc.c:1646 */
2613 1.1 christos {
2614 1.1.1.1.8.1 martin acl_options_type* acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[0].str), "NOKEY");
2615 1.1 christos OUTYY(("P(outgoing_interface:%s)\n", (yyvsp[0].str)));
2616 1.1 christos if(acl->rangetype!=acl_range_single) c_error("address range used for outgoing interface");
2617 1.1 christos if(cfg_parser->current_outgoing_interface)
2618 1.1 christos cfg_parser->current_outgoing_interface->next = acl;
2619 1.1 christos else
2620 1.1 christos cfg_parser->current_pattern->outgoing_interface = acl;
2621 1.1 christos cfg_parser->current_outgoing_interface = acl;
2622 1.1 christos }
2623 1.1.1.1.8.1 martin #line 2624 "configparser.c" /* yacc.c:1646 */
2624 1.1 christos break;
2625 1.1 christos
2626 1.1.1.1.8.1 martin case 167:
2627 1.1.1.1.8.1 martin #line 855 "configparser.y" /* yacc.c:1646 */
2628 1.1 christos {
2629 1.1 christos OUTYY(("P(allow_axfr_fallback:%s)\n", (yyvsp[0].str)));
2630 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
2631 1.1 christos yyerror("expected yes or no.");
2632 1.1 christos else {
2633 1.1 christos cfg_parser->current_pattern->allow_axfr_fallback = (strcmp((yyvsp[0].str), "yes")==0);
2634 1.1 christos cfg_parser->current_pattern->allow_axfr_fallback_is_default = 0;
2635 1.1 christos }
2636 1.1 christos }
2637 1.1.1.1.8.1 martin #line 2638 "configparser.c" /* yacc.c:1646 */
2638 1.1 christos break;
2639 1.1 christos
2640 1.1.1.1.8.1 martin case 168:
2641 1.1.1.1.8.1 martin #line 866 "configparser.y" /* yacc.c:1646 */
2642 1.1 christos {
2643 1.1 christos OUTYY(("P(zone_rrl_whitelist:%s)\n", (yyvsp[0].str)));
2644 1.1 christos #ifdef RATELIMIT
2645 1.1 christos cfg_parser->current_pattern->rrl_whitelist |= rrlstr2type((yyvsp[0].str));
2646 1.1 christos #endif
2647 1.1 christos }
2648 1.1.1.1.8.1 martin #line 2649 "configparser.c" /* yacc.c:1646 */
2649 1.1 christos break;
2650 1.1 christos
2651 1.1.1.1.8.1 martin case 169:
2652 1.1.1.1.8.1 martin #line 874 "configparser.y" /* yacc.c:1646 */
2653 1.1 christos {
2654 1.1 christos OUTYY(("P(zone_max_refresh_time:%s)\n", (yyvsp[0].str)));
2655 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2656 1.1 christos yyerror("number expected");
2657 1.1 christos else {
2658 1.1 christos cfg_parser->current_pattern->max_refresh_time = atoi((yyvsp[0].str));
2659 1.1 christos cfg_parser->current_pattern->max_refresh_time_is_default = 0;
2660 1.1 christos }
2661 1.1 christos }
2662 1.1.1.1.8.1 martin #line 2663 "configparser.c" /* yacc.c:1646 */
2663 1.1 christos break;
2664 1.1 christos
2665 1.1.1.1.8.1 martin case 170:
2666 1.1.1.1.8.1 martin #line 884 "configparser.y" /* yacc.c:1646 */
2667 1.1 christos {
2668 1.1 christos OUTYY(("P(zone_min_refresh_time:%s)\n", (yyvsp[0].str)));
2669 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2670 1.1 christos yyerror("number expected");
2671 1.1 christos else {
2672 1.1 christos cfg_parser->current_pattern->min_refresh_time = atoi((yyvsp[0].str));
2673 1.1 christos cfg_parser->current_pattern->min_refresh_time_is_default = 0;
2674 1.1 christos }
2675 1.1 christos }
2676 1.1.1.1.8.1 martin #line 2677 "configparser.c" /* yacc.c:1646 */
2677 1.1 christos break;
2678 1.1 christos
2679 1.1.1.1.8.1 martin case 171:
2680 1.1.1.1.8.1 martin #line 894 "configparser.y" /* yacc.c:1646 */
2681 1.1 christos {
2682 1.1 christos OUTYY(("P(zone_max_retry_time:%s)\n", (yyvsp[0].str)));
2683 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2684 1.1 christos yyerror("number expected");
2685 1.1 christos else {
2686 1.1 christos cfg_parser->current_pattern->max_retry_time = atoi((yyvsp[0].str));
2687 1.1 christos cfg_parser->current_pattern->max_retry_time_is_default = 0;
2688 1.1 christos }
2689 1.1 christos }
2690 1.1.1.1.8.1 martin #line 2691 "configparser.c" /* yacc.c:1646 */
2691 1.1 christos break;
2692 1.1 christos
2693 1.1.1.1.8.1 martin case 172:
2694 1.1.1.1.8.1 martin #line 904 "configparser.y" /* yacc.c:1646 */
2695 1.1 christos {
2696 1.1 christos OUTYY(("P(zone_min_retry_time:%s)\n", (yyvsp[0].str)));
2697 1.1 christos if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
2698 1.1 christos yyerror("number expected");
2699 1.1 christos else {
2700 1.1 christos cfg_parser->current_pattern->min_retry_time = atoi((yyvsp[0].str));
2701 1.1 christos cfg_parser->current_pattern->min_retry_time_is_default = 0;
2702 1.1 christos }
2703 1.1 christos }
2704 1.1.1.1.8.1 martin #line 2705 "configparser.c" /* yacc.c:1646 */
2705 1.1 christos break;
2706 1.1 christos
2707 1.1.1.1.8.1 martin case 173:
2708 1.1.1.1.8.1 martin #line 914 "configparser.y" /* yacc.c:1646 */
2709 1.1 christos {
2710 1.1 christos OUTYY(("P(zone_multi_master_check:%s)\n", (yyvsp[0].str)));
2711 1.1 christos if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
2712 1.1 christos yyerror("expected yes or no.");
2713 1.1 christos else cfg_parser->current_pattern->multi_master_check = (strcmp((yyvsp[0].str), "yes")==0);
2714 1.1 christos }
2715 1.1.1.1.8.1 martin #line 2716 "configparser.c" /* yacc.c:1646 */
2716 1.1 christos break;
2717 1.1 christos
2718 1.1.1.1.8.1 martin case 174:
2719 1.1.1.1.8.1 martin #line 923 "configparser.y" /* yacc.c:1646 */
2720 1.1 christos {
2721 1.1 christos OUTYY(("\nP(key:)\n"));
2722 1.1 christos if(cfg_parser->current_key) {
2723 1.1 christos if(!cfg_parser->current_key->name) c_error("previous key has no name");
2724 1.1 christos if(!cfg_parser->current_key->algorithm) c_error("previous key has no algorithm");
2725 1.1 christos if(!cfg_parser->current_key->secret) c_error("previous key has no secret blob");
2726 1.1 christos key_options_insert(cfg_parser->opt, cfg_parser->current_key);
2727 1.1 christos }
2728 1.1 christos cfg_parser->current_key = key_options_create(cfg_parser->opt->region);
2729 1.1 christos cfg_parser->current_key->algorithm = region_strdup(cfg_parser->opt->region, "sha256");
2730 1.1 christos }
2731 1.1.1.1.8.1 martin #line 2732 "configparser.c" /* yacc.c:1646 */
2732 1.1 christos break;
2733 1.1 christos
2734 1.1.1.1.8.1 martin case 180:
2735 1.1.1.1.8.1 martin #line 938 "configparser.y" /* yacc.c:1646 */
2736 1.1 christos {
2737 1.1 christos const dname_type* d;
2738 1.1 christos OUTYY(("P(key_name:%s)\n", (yyvsp[0].str)));
2739 1.1 christos #ifndef NDEBUG
2740 1.1 christos assert(cfg_parser->current_key);
2741 1.1 christos #endif
2742 1.1 christos cfg_parser->current_key->name = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2743 1.1 christos d = dname_parse(cfg_parser->opt->region, (yyvsp[0].str));
2744 1.1 christos if(!d) c_error_msg("Failed to parse tsig key name %s", (yyvsp[0].str));
2745 1.1 christos else region_recycle(cfg_parser->opt->region, (void*)d,
2746 1.1 christos dname_total_size(d));
2747 1.1 christos }
2748 1.1.1.1.8.1 martin #line 2749 "configparser.c" /* yacc.c:1646 */
2749 1.1 christos break;
2750 1.1 christos
2751 1.1.1.1.8.1 martin case 181:
2752 1.1.1.1.8.1 martin #line 952 "configparser.y" /* yacc.c:1646 */
2753 1.1 christos {
2754 1.1 christos OUTYY(("P(key_algorithm:%s)\n", (yyvsp[0].str)));
2755 1.1 christos #ifndef NDEBUG
2756 1.1 christos assert(cfg_parser->current_key);
2757 1.1 christos #endif
2758 1.1 christos if(cfg_parser->current_key->algorithm)
2759 1.1 christos region_recycle(cfg_parser->opt->region, cfg_parser->current_key->algorithm, strlen(cfg_parser->current_key->algorithm)+1);
2760 1.1 christos cfg_parser->current_key->algorithm = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2761 1.1 christos if(tsig_get_algorithm_by_name((yyvsp[0].str)) == NULL)
2762 1.1 christos c_error_msg("Bad tsig algorithm %s", (yyvsp[0].str));
2763 1.1 christos }
2764 1.1.1.1.8.1 martin #line 2765 "configparser.c" /* yacc.c:1646 */
2765 1.1 christos break;
2766 1.1 christos
2767 1.1.1.1.8.1 martin case 182:
2768 1.1.1.1.8.1 martin #line 965 "configparser.y" /* yacc.c:1646 */
2769 1.1 christos {
2770 1.1 christos uint8_t data[16384];
2771 1.1 christos int size;
2772 1.1 christos OUTYY(("key_secret:%s)\n", (yyvsp[0].str)));
2773 1.1 christos #ifndef NDEBUG
2774 1.1 christos assert(cfg_parser->current_key);
2775 1.1 christos #endif
2776 1.1 christos cfg_parser->current_key->secret = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
2777 1.1 christos size = b64_pton((yyvsp[0].str), data, sizeof(data));
2778 1.1 christos if(size == -1) {
2779 1.1 christos c_error_msg("Cannot base64 decode tsig secret %s",
2780 1.1 christos cfg_parser->current_key->name?
2781 1.1 christos cfg_parser->current_key->name:"");
2782 1.1 christos } else if(size != 0) {
2783 1.1 christos memset(data, 0xdd, size); /* wipe secret */
2784 1.1 christos }
2785 1.1 christos }
2786 1.1.1.1.8.1 martin #line 2787 "configparser.c" /* yacc.c:1646 */
2787 1.1 christos break;
2788 1.1 christos
2789 1.1 christos
2790 1.1.1.1.8.1 martin #line 2791 "configparser.c" /* yacc.c:1646 */
2791 1.1 christos default: break;
2792 1.1 christos }
2793 1.1 christos /* User semantic actions sometimes alter yychar, and that requires
2794 1.1 christos that yytoken be updated with the new translation. We take the
2795 1.1 christos approach of translating immediately before every use of yytoken.
2796 1.1 christos One alternative is translating here after every semantic action,
2797 1.1 christos but that translation would be missed if the semantic action invokes
2798 1.1 christos YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
2799 1.1 christos if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
2800 1.1 christos incorrect destructor might then be invoked immediately. In the
2801 1.1 christos case of YYERROR or YYBACKUP, subsequent parser actions might lead
2802 1.1 christos to an incorrect destructor call or verbose syntax error message
2803 1.1 christos before the lookahead is translated. */
2804 1.1 christos YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2805 1.1 christos
2806 1.1 christos YYPOPSTACK (yylen);
2807 1.1 christos yylen = 0;
2808 1.1 christos YY_STACK_PRINT (yyss, yyssp);
2809 1.1 christos
2810 1.1 christos *++yyvsp = yyval;
2811 1.1 christos
2812 1.1 christos /* Now 'shift' the result of the reduction. Determine what state
2813 1.1 christos that goes to, based on the state we popped back to and the rule
2814 1.1 christos number reduced by. */
2815 1.1 christos
2816 1.1 christos yyn = yyr1[yyn];
2817 1.1 christos
2818 1.1 christos yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2819 1.1 christos if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2820 1.1 christos yystate = yytable[yystate];
2821 1.1 christos else
2822 1.1 christos yystate = yydefgoto[yyn - YYNTOKENS];
2823 1.1 christos
2824 1.1 christos goto yynewstate;
2825 1.1 christos
2826 1.1 christos
2827 1.1 christos /*--------------------------------------.
2828 1.1 christos | yyerrlab -- here on detecting error. |
2829 1.1 christos `--------------------------------------*/
2830 1.1 christos yyerrlab:
2831 1.1 christos /* Make sure we have latest lookahead translation. See comments at
2832 1.1 christos user semantic actions for why this is necessary. */
2833 1.1 christos yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
2834 1.1 christos
2835 1.1 christos /* If not already recovering from an error, report this error. */
2836 1.1 christos if (!yyerrstatus)
2837 1.1 christos {
2838 1.1 christos ++yynerrs;
2839 1.1 christos #if ! YYERROR_VERBOSE
2840 1.1 christos yyerror (YY_("syntax error"));
2841 1.1 christos #else
2842 1.1 christos # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
2843 1.1 christos yyssp, yytoken)
2844 1.1 christos {
2845 1.1 christos char const *yymsgp = YY_("syntax error");
2846 1.1 christos int yysyntax_error_status;
2847 1.1 christos yysyntax_error_status = YYSYNTAX_ERROR;
2848 1.1 christos if (yysyntax_error_status == 0)
2849 1.1 christos yymsgp = yymsg;
2850 1.1 christos else if (yysyntax_error_status == 1)
2851 1.1 christos {
2852 1.1 christos if (yymsg != yymsgbuf)
2853 1.1 christos YYSTACK_FREE (yymsg);
2854 1.1 christos yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
2855 1.1 christos if (!yymsg)
2856 1.1 christos {
2857 1.1 christos yymsg = yymsgbuf;
2858 1.1 christos yymsg_alloc = sizeof yymsgbuf;
2859 1.1 christos yysyntax_error_status = 2;
2860 1.1 christos }
2861 1.1 christos else
2862 1.1 christos {
2863 1.1 christos yysyntax_error_status = YYSYNTAX_ERROR;
2864 1.1 christos yymsgp = yymsg;
2865 1.1 christos }
2866 1.1 christos }
2867 1.1 christos yyerror (yymsgp);
2868 1.1 christos if (yysyntax_error_status == 2)
2869 1.1 christos goto yyexhaustedlab;
2870 1.1 christos }
2871 1.1 christos # undef YYSYNTAX_ERROR
2872 1.1 christos #endif
2873 1.1 christos }
2874 1.1 christos
2875 1.1 christos
2876 1.1 christos
2877 1.1 christos if (yyerrstatus == 3)
2878 1.1 christos {
2879 1.1 christos /* If just tried and failed to reuse lookahead token after an
2880 1.1 christos error, discard it. */
2881 1.1 christos
2882 1.1 christos if (yychar <= YYEOF)
2883 1.1 christos {
2884 1.1 christos /* Return failure if at end of input. */
2885 1.1 christos if (yychar == YYEOF)
2886 1.1 christos YYABORT;
2887 1.1 christos }
2888 1.1 christos else
2889 1.1 christos {
2890 1.1 christos yydestruct ("Error: discarding",
2891 1.1 christos yytoken, &yylval);
2892 1.1 christos yychar = YYEMPTY;
2893 1.1 christos }
2894 1.1 christos }
2895 1.1 christos
2896 1.1 christos /* Else will try to reuse lookahead token after shifting the error
2897 1.1 christos token. */
2898 1.1 christos goto yyerrlab1;
2899 1.1 christos
2900 1.1 christos
2901 1.1 christos /*---------------------------------------------------.
2902 1.1 christos | yyerrorlab -- error raised explicitly by YYERROR. |
2903 1.1 christos `---------------------------------------------------*/
2904 1.1 christos yyerrorlab:
2905 1.1 christos
2906 1.1 christos /* Pacify compilers like GCC when the user code never invokes
2907 1.1 christos YYERROR and the label yyerrorlab therefore never appears in user
2908 1.1 christos code. */
2909 1.1 christos if (/*CONSTCOND*/ 0)
2910 1.1 christos goto yyerrorlab;
2911 1.1 christos
2912 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
2913 1.1 christos this YYERROR. */
2914 1.1 christos YYPOPSTACK (yylen);
2915 1.1 christos yylen = 0;
2916 1.1 christos YY_STACK_PRINT (yyss, yyssp);
2917 1.1 christos yystate = *yyssp;
2918 1.1 christos goto yyerrlab1;
2919 1.1 christos
2920 1.1 christos
2921 1.1 christos /*-------------------------------------------------------------.
2922 1.1 christos | yyerrlab1 -- common code for both syntax error and YYERROR. |
2923 1.1 christos `-------------------------------------------------------------*/
2924 1.1 christos yyerrlab1:
2925 1.1 christos yyerrstatus = 3; /* Each real token shifted decrements this. */
2926 1.1 christos
2927 1.1 christos for (;;)
2928 1.1 christos {
2929 1.1 christos yyn = yypact[yystate];
2930 1.1 christos if (!yypact_value_is_default (yyn))
2931 1.1 christos {
2932 1.1 christos yyn += YYTERROR;
2933 1.1 christos if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2934 1.1 christos {
2935 1.1 christos yyn = yytable[yyn];
2936 1.1 christos if (0 < yyn)
2937 1.1 christos break;
2938 1.1 christos }
2939 1.1 christos }
2940 1.1 christos
2941 1.1 christos /* Pop the current state because it cannot handle the error token. */
2942 1.1 christos if (yyssp == yyss)
2943 1.1 christos YYABORT;
2944 1.1 christos
2945 1.1 christos
2946 1.1 christos yydestruct ("Error: popping",
2947 1.1 christos yystos[yystate], yyvsp);
2948 1.1 christos YYPOPSTACK (1);
2949 1.1 christos yystate = *yyssp;
2950 1.1 christos YY_STACK_PRINT (yyss, yyssp);
2951 1.1 christos }
2952 1.1 christos
2953 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2954 1.1 christos *++yyvsp = yylval;
2955 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
2956 1.1 christos
2957 1.1 christos
2958 1.1 christos /* Shift the error token. */
2959 1.1 christos YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2960 1.1 christos
2961 1.1 christos yystate = yyn;
2962 1.1 christos goto yynewstate;
2963 1.1 christos
2964 1.1 christos
2965 1.1 christos /*-------------------------------------.
2966 1.1 christos | yyacceptlab -- YYACCEPT comes here. |
2967 1.1 christos `-------------------------------------*/
2968 1.1 christos yyacceptlab:
2969 1.1 christos yyresult = 0;
2970 1.1 christos goto yyreturn;
2971 1.1 christos
2972 1.1 christos /*-----------------------------------.
2973 1.1 christos | yyabortlab -- YYABORT comes here. |
2974 1.1 christos `-----------------------------------*/
2975 1.1 christos yyabortlab:
2976 1.1 christos yyresult = 1;
2977 1.1 christos goto yyreturn;
2978 1.1 christos
2979 1.1 christos #if !defined yyoverflow || YYERROR_VERBOSE
2980 1.1 christos /*-------------------------------------------------.
2981 1.1 christos | yyexhaustedlab -- memory exhaustion comes here. |
2982 1.1 christos `-------------------------------------------------*/
2983 1.1 christos yyexhaustedlab:
2984 1.1 christos yyerror (YY_("memory exhausted"));
2985 1.1 christos yyresult = 2;
2986 1.1 christos /* Fall through. */
2987 1.1 christos #endif
2988 1.1 christos
2989 1.1 christos yyreturn:
2990 1.1 christos if (yychar != YYEMPTY)
2991 1.1 christos {
2992 1.1 christos /* Make sure we have latest lookahead translation. See comments at
2993 1.1 christos user semantic actions for why this is necessary. */
2994 1.1 christos yytoken = YYTRANSLATE (yychar);
2995 1.1 christos yydestruct ("Cleanup: discarding lookahead",
2996 1.1 christos yytoken, &yylval);
2997 1.1 christos }
2998 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
2999 1.1 christos this YYABORT or YYACCEPT. */
3000 1.1 christos YYPOPSTACK (yylen);
3001 1.1 christos YY_STACK_PRINT (yyss, yyssp);
3002 1.1 christos while (yyssp != yyss)
3003 1.1 christos {
3004 1.1 christos yydestruct ("Cleanup: popping",
3005 1.1 christos yystos[*yyssp], yyvsp);
3006 1.1 christos YYPOPSTACK (1);
3007 1.1 christos }
3008 1.1 christos #ifndef yyoverflow
3009 1.1 christos if (yyss != yyssa)
3010 1.1 christos YYSTACK_FREE (yyss);
3011 1.1 christos #endif
3012 1.1 christos #if YYERROR_VERBOSE
3013 1.1 christos if (yymsg != yymsgbuf)
3014 1.1 christos YYSTACK_FREE (yymsg);
3015 1.1 christos #endif
3016 1.1 christos return yyresult;
3017 1.1 christos }
3018 1.1.1.1.8.1 martin #line 984 "configparser.y" /* yacc.c:1906 */
3019 1.1 christos
3020 1.1 christos
3021 1.1 christos /* parse helper routines could be here */
3022