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