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