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