1#ifndef lint 2static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; 3#endif 4 5#define YYBYACC 1 6#define YYMAJOR 1 7#define YYMINOR 9 8 9#define YYEMPTY (-1) 10#define yyclearin (yychar = YYEMPTY) 11#define yyerrok (yyerrflag = 0) 12#define YYRECOVERING() (yyerrflag != 0) 13 14#define YYPREFIX "yy" 15 16#define YYPURE 0 17 18#line 39 "util/configparser.y" 19#include "config.h" 20 21#include <stdarg.h> 22#include <stdio.h> 23#include <string.h> 24#include <stdlib.h> 25#include <assert.h> 26 27#include "util/configyyrename.h" 28#include "util/config_file.h" 29#include "util/net_help.h" 30 31int ub_c_lex(void); 32void ub_c_error(const char *message); 33 34/* these need to be global, otherwise they cannot be used inside yacc */ 35extern struct config_parser_state* cfg_parser; 36 37#if 0 38#define OUTYY(s) printf s /* used ONLY when debugging */ 39#else 40#define OUTYY(s) 41#endif 42 43#line 64 "util/configparser.y" 44#ifdef YYSTYPE 45#undef YYSTYPE_IS_DECLARED 46#define YYSTYPE_IS_DECLARED 1 47#endif 48#ifndef YYSTYPE_IS_DECLARED 49#define YYSTYPE_IS_DECLARED 1 50typedef union { 51 char* str; 52} YYSTYPE; 53#endif /* !YYSTYPE_IS_DECLARED */ 54#line 54 "util/configparser.c" 55 56/* compatibility with bison */ 57#ifdef YYPARSE_PARAM 58/* compatibility with FreeBSD */ 59# ifdef YYPARSE_PARAM_TYPE 60# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 61# else 62# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 63# endif 64#else 65# define YYPARSE_DECL() yyparse(void) 66#endif 67 68/* Parameters sent to lex. */ 69#ifdef YYLEX_PARAM 70# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 71# define YYLEX yylex(YYLEX_PARAM) 72#else 73# define YYLEX_DECL() yylex(void) 74# define YYLEX yylex() 75#endif 76 77/* Parameters sent to yyerror. */ 78#ifndef YYERROR_DECL 79#define YYERROR_DECL() yyerror(const char *s) 80#endif 81#ifndef YYERROR_CALL 82#define YYERROR_CALL(msg) yyerror(msg) 83#endif 84 85extern int YYPARSE_DECL(); 86 87#define SPACE 257 88#define LETTER 258 89#define NEWLINE 259 90#define COMMENT 260 91#define COLON 261 92#define ANY 262 93#define ZONESTR 263 94#define STRING_ARG 264 95#define VAR_SERVER 265 96#define VAR_VERBOSITY 266 97#define VAR_NUM_THREADS 267 98#define VAR_PORT 268 99#define VAR_OUTGOING_RANGE 269 100#define VAR_INTERFACE 270 101#define VAR_DO_IP4 271 102#define VAR_DO_IP6 272 103#define VAR_DO_UDP 273 104#define VAR_DO_TCP 274 105#define VAR_CHROOT 275 106#define VAR_USERNAME 276 107#define VAR_DIRECTORY 277 108#define VAR_LOGFILE 278 109#define VAR_PIDFILE 279 110#define VAR_MSG_CACHE_SIZE 280 111#define VAR_MSG_CACHE_SLABS 281 112#define VAR_NUM_QUERIES_PER_THREAD 282 113#define VAR_RRSET_CACHE_SIZE 283 114#define VAR_RRSET_CACHE_SLABS 284 115#define VAR_OUTGOING_NUM_TCP 285 116#define VAR_INFRA_HOST_TTL 286 117#define VAR_INFRA_LAME_TTL 287 118#define VAR_INFRA_CACHE_SLABS 288 119#define VAR_INFRA_CACHE_NUMHOSTS 289 120#define VAR_INFRA_CACHE_LAME_SIZE 290 121#define VAR_NAME 291 122#define VAR_STUB_ZONE 292 123#define VAR_STUB_HOST 293 124#define VAR_STUB_ADDR 294 125#define VAR_TARGET_FETCH_POLICY 295 126#define VAR_HARDEN_SHORT_BUFSIZE 296 127#define VAR_HARDEN_LARGE_QUERIES 297 128#define VAR_FORWARD_ZONE 298 129#define VAR_FORWARD_HOST 299 130#define VAR_FORWARD_ADDR 300 131#define VAR_DO_NOT_QUERY_ADDRESS 301 132#define VAR_HIDE_IDENTITY 302 133#define VAR_HIDE_VERSION 303 134#define VAR_IDENTITY 304 135#define VAR_VERSION 305 136#define VAR_HARDEN_GLUE 306 137#define VAR_MODULE_CONF 307 138#define VAR_TRUST_ANCHOR_FILE 308 139#define VAR_TRUST_ANCHOR 309 140#define VAR_VAL_OVERRIDE_DATE 310 141#define VAR_BOGUS_TTL 311 142#define VAR_VAL_CLEAN_ADDITIONAL 312 143#define VAR_VAL_PERMISSIVE_MODE 313 144#define VAR_INCOMING_NUM_TCP 314 145#define VAR_MSG_BUFFER_SIZE 315 146#define VAR_KEY_CACHE_SIZE 316 147#define VAR_KEY_CACHE_SLABS 317 148#define VAR_TRUSTED_KEYS_FILE 318 149#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319 150#define VAR_USE_SYSLOG 320 151#define VAR_OUTGOING_INTERFACE 321 152#define VAR_ROOT_HINTS 322 153#define VAR_DO_NOT_QUERY_LOCALHOST 323 154#define VAR_CACHE_MAX_TTL 324 155#define VAR_HARDEN_DNSSEC_STRIPPED 325 156#define VAR_ACCESS_CONTROL 326 157#define VAR_LOCAL_ZONE 327 158#define VAR_LOCAL_DATA 328 159#define VAR_INTERFACE_AUTOMATIC 329 160#define VAR_STATISTICS_INTERVAL 330 161#define VAR_DO_DAEMONIZE 331 162#define VAR_USE_CAPS_FOR_ID 332 163#define VAR_STATISTICS_CUMULATIVE 333 164#define VAR_OUTGOING_PORT_PERMIT 334 165#define VAR_OUTGOING_PORT_AVOID 335 166#define VAR_DLV_ANCHOR_FILE 336 167#define VAR_DLV_ANCHOR 337 168#define VAR_NEG_CACHE_SIZE 338 169#define VAR_HARDEN_REFERRAL_PATH 339 170#define VAR_PRIVATE_ADDRESS 340 171#define VAR_PRIVATE_DOMAIN 341 172#define VAR_REMOTE_CONTROL 342 173#define VAR_CONTROL_ENABLE 343 174#define VAR_CONTROL_INTERFACE 344 175#define VAR_CONTROL_PORT 345 176#define VAR_SERVER_KEY_FILE 346 177#define VAR_SERVER_CERT_FILE 347 178#define VAR_CONTROL_KEY_FILE 348 179#define VAR_CONTROL_CERT_FILE 349 180#define VAR_EXTENDED_STATISTICS 350 181#define VAR_LOCAL_DATA_PTR 351 182#define VAR_JOSTLE_TIMEOUT 352 183#define VAR_STUB_PRIME 353 184#define VAR_UNWANTED_REPLY_THRESHOLD 354 185#define VAR_LOG_TIME_ASCII 355 186#define VAR_DOMAIN_INSECURE 356 187#define VAR_PYTHON 357 188#define VAR_PYTHON_SCRIPT 358 189#define VAR_VAL_SIG_SKEW_MIN 359 190#define VAR_VAL_SIG_SKEW_MAX 360 191#define VAR_CACHE_MIN_TTL 361 192#define VAR_VAL_LOG_LEVEL 362 193#define VAR_AUTO_TRUST_ANCHOR_FILE 363 194#define VAR_KEEP_MISSING 364 195#define VAR_ADD_HOLDDOWN 365 196#define VAR_DEL_HOLDDOWN 366 197#define VAR_SO_RCVBUF 367 198#define VAR_EDNS_BUFFER_SIZE 368 199#define VAR_PREFETCH 369 200#define VAR_PREFETCH_KEY 370 201#define VAR_SO_SNDBUF 371 202#define VAR_HARDEN_BELOW_NXDOMAIN 372 203#define VAR_IGNORE_CD_FLAG 373 204#define VAR_LOG_QUERIES 374 205#define VAR_TCP_UPSTREAM 375 206#define VAR_SSL_UPSTREAM 376 207#define VAR_SSL_SERVICE_KEY 377 208#define VAR_SSL_SERVICE_PEM 378 209#define VAR_SSL_PORT 379 210#define VAR_FORWARD_FIRST 380 211#define VAR_STUB_FIRST 381 212#define VAR_MINIMAL_RESPONSES 382 213#define VAR_RRSET_ROUNDROBIN 383 214#define YYERRCODE 256 215static const short yylhs[] = { -1, 216 0, 0, 1, 1, 1, 1, 1, 2, 3, 3, 217 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 218 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 219 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 220 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 221 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 222 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 223 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 224 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 225 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 226 12, 12, 12, 12, 12, 12, 12, 12, 4, 5, 227 5, 111, 111, 111, 111, 111, 6, 7, 7, 117, 228 117, 117, 117, 13, 14, 70, 73, 82, 15, 21, 229 61, 16, 74, 75, 32, 54, 69, 17, 18, 19, 230 20, 104, 105, 106, 107, 108, 71, 60, 86, 103, 231 22, 23, 24, 25, 26, 62, 76, 77, 92, 48, 232 58, 49, 87, 42, 43, 44, 45, 96, 100, 97, 233 55, 27, 28, 29, 84, 30, 31, 33, 34, 36, 234 37, 35, 38, 39, 40, 46, 65, 101, 79, 72, 235 80, 81, 98, 99, 85, 41, 63, 66, 47, 50, 236 88, 89, 64, 90, 51, 52, 53, 102, 91, 59, 237 93, 94, 95, 56, 57, 78, 67, 68, 83, 109, 238 110, 112, 113, 114, 116, 115, 118, 119, 120, 121, 239 10, 11, 11, 122, 122, 122, 122, 122, 122, 122, 240 123, 125, 124, 126, 127, 128, 129, 8, 9, 9, 241 130, 131, 242}; 243static const short yylen[] = { 2, 244 0, 2, 2, 2, 2, 2, 2, 1, 2, 0, 245 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 246 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 247 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 248 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 249 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 250 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 251 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 253 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 254 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 255 0, 1, 1, 1, 1, 1, 1, 2, 0, 1, 256 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 257 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 258 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 259 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 260 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 261 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 262 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 263 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 264 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 265 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 266 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 267 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 268 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 269 1, 2, 270}; 271static const short yydefred[] = { 1, 272 0, 8, 109, 117, 231, 248, 2, 10, 111, 119, 273 250, 233, 0, 0, 0, 0, 0, 0, 0, 0, 274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283 0, 0, 0, 0, 0, 9, 11, 12, 13, 14, 284 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 285 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 286 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 287 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 288 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 289 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 290 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 291 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 292 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 293 105, 106, 107, 108, 0, 0, 0, 0, 0, 110, 294 112, 113, 114, 115, 116, 0, 0, 0, 0, 118, 295 120, 121, 122, 123, 0, 249, 251, 0, 0, 0, 296 0, 0, 0, 0, 232, 234, 235, 236, 237, 238, 297 239, 240, 125, 124, 129, 132, 130, 138, 139, 140, 298 141, 151, 152, 153, 154, 155, 172, 173, 174, 176, 299 177, 135, 178, 179, 182, 180, 181, 183, 184, 185, 300 196, 164, 165, 166, 167, 186, 199, 160, 162, 200, 301 205, 206, 207, 136, 171, 214, 215, 161, 210, 148, 302 131, 156, 197, 203, 187, 0, 0, 218, 137, 126, 303 147, 190, 127, 133, 134, 157, 158, 216, 189, 191, 304 192, 128, 219, 175, 195, 149, 163, 201, 202, 204, 305 209, 159, 213, 211, 212, 168, 170, 193, 194, 169, 306 188, 208, 150, 142, 143, 144, 145, 146, 220, 221, 307 222, 223, 224, 226, 225, 227, 228, 229, 230, 252, 308 241, 243, 242, 244, 245, 246, 247, 198, 217, 309}; 310static const short yydgoto[] = { 1, 311 7, 8, 13, 9, 14, 10, 15, 11, 16, 12, 312 17, 116, 117, 118, 119, 120, 121, 122, 123, 124, 313 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 314 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 315 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 316 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 317 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 318 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 319 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 320 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 321 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 322 220, 221, 222, 223, 224, 225, 230, 231, 232, 233, 323 234, 245, 246, 247, 248, 249, 250, 251, 252, 236, 324 237, 325}; 326static const short yysindex[] = { 0, 327 -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328 0, 0, -260, -209, -202, -358, -216, -233, -232, -231, 329 -230, -226, -225, -224, -181, -178, -177, -176, -143, -140, 330 -139, -130, -129, -128, -127, -126, -125, -124, -123, -122, 331 -121, -119, -118, -117, -116, -115, -114, -113, -112, -111, 332 -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, 333 -100, -99, -98, -97, -96, -95, -93, -91, -90, -89, 334 -88, -87, -85, -84, -83, -82, -81, -80, -78, -77, 335 -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, 336 -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, 337 -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, 338 -46, -45, -44, -43, -42, 0, 0, 0, 0, 0, 339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348 0, 0, 0, 0, -41, -40, -39, -38, -37, 0, 349 0, 0, 0, 0, 0, -36, -35, -34, -33, 0, 350 0, 0, 0, 0, -32, 0, 0, -31, -30, -29, 351 -28, -27, -26, -25, 0, 0, 0, 0, 0, 0, 352 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357 0, 0, 0, 0, 0, -24, -23, 0, 0, 0, 358 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363 0, 0, 0, 0, 0, 0, 0, 0, 0, 364}; 365static const short yyrindex[] = { 0, 366 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 368 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402 0, 0, 0, 0, 0, 0, 0, 0, 0, 403}; 404static const short yygindex[] = { 0, 405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418 0, 419}; 420#define YYTABLESIZE 362 421static const short yytable[] = { 235, 422 3, 4, 5, 6, 7, 18, 19, 20, 21, 22, 423 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 424 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 425 253, 254, 255, 256, 43, 44, 45, 257, 258, 259, 426 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 427 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 428 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 429 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 430 86, 215, 260, 216, 217, 261, 262, 263, 226, 87, 431 88, 89, 2, 90, 91, 92, 227, 228, 93, 94, 432 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 433 105, 106, 107, 108, 109, 110, 111, 112, 113, 3, 434 264, 114, 115, 265, 266, 4, 238, 239, 240, 241, 435 242, 243, 244, 267, 268, 269, 270, 271, 272, 273, 436 274, 275, 276, 218, 277, 278, 279, 280, 281, 282, 437 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 438 293, 294, 295, 296, 297, 298, 299, 300, 301, 5, 439 302, 219, 303, 304, 305, 306, 307, 229, 308, 309, 440 310, 311, 312, 313, 6, 314, 315, 316, 317, 318, 441 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 442 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 443 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 444 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 445 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 446 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448 0, 0, 0, 0, 0, 3, 4, 5, 6, 7, 449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451 0, 0, 3, 4, 5, 6, 7, 0, 3, 4, 452 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456 0, 0, 3, 4, 5, 6, 7, 0, 0, 0, 457 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 458 6, 7, 459}; 460static const short yycheck[] = { 358, 461 0, 0, 0, 0, 0, 266, 267, 268, 269, 270, 462 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 463 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 464 264, 264, 264, 264, 295, 296, 297, 264, 264, 264, 465 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 466 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 467 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 468 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 469 341, 291, 264, 293, 294, 264, 264, 264, 291, 350, 470 351, 352, 265, 354, 355, 356, 299, 300, 359, 360, 471 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 472 371, 372, 373, 374, 375, 376, 377, 378, 379, 292, 473 264, 382, 383, 264, 264, 298, 343, 344, 345, 346, 474 347, 348, 349, 264, 264, 264, 264, 264, 264, 264, 475 264, 264, 264, 353, 264, 264, 264, 264, 264, 264, 476 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 477 264, 264, 264, 264, 264, 264, 264, 264, 264, 342, 478 264, 381, 264, 264, 264, 264, 264, 380, 264, 264, 479 264, 264, 264, 264, 357, 264, 264, 264, 264, 264, 480 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 481 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 482 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 483 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 484 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 485 264, -1, -1, -1, -1, -1, -1, -1, -1, -1, 486 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 487 -1, -1, -1, -1, -1, 265, 265, 265, 265, 265, 488 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 490 -1, -1, 292, 292, 292, 292, 292, -1, 298, 298, 491 298, 298, 298, -1, -1, -1, -1, -1, -1, -1, 492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 493 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 494 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 495 -1, -1, 342, 342, 342, 342, 342, -1, -1, -1, 496 -1, -1, -1, -1, -1, -1, -1, 357, 357, 357, 497 357, 357, 498}; 499#define YYFINAL 1 500#ifndef YYDEBUG 501#define YYDEBUG 0 502#endif 503#define YYMAXTOKEN 383 504#if YYDEBUG 505static const char *yyname[] = { 506 507"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5080,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5090,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 5130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SPACE","LETTER","NEWLINE", 514"COMMENT","COLON","ANY","ZONESTR","STRING_ARG","VAR_SERVER","VAR_VERBOSITY", 515"VAR_NUM_THREADS","VAR_PORT","VAR_OUTGOING_RANGE","VAR_INTERFACE","VAR_DO_IP4", 516"VAR_DO_IP6","VAR_DO_UDP","VAR_DO_TCP","VAR_CHROOT","VAR_USERNAME", 517"VAR_DIRECTORY","VAR_LOGFILE","VAR_PIDFILE","VAR_MSG_CACHE_SIZE", 518"VAR_MSG_CACHE_SLABS","VAR_NUM_QUERIES_PER_THREAD","VAR_RRSET_CACHE_SIZE", 519"VAR_RRSET_CACHE_SLABS","VAR_OUTGOING_NUM_TCP","VAR_INFRA_HOST_TTL", 520"VAR_INFRA_LAME_TTL","VAR_INFRA_CACHE_SLABS","VAR_INFRA_CACHE_NUMHOSTS", 521"VAR_INFRA_CACHE_LAME_SIZE","VAR_NAME","VAR_STUB_ZONE","VAR_STUB_HOST", 522"VAR_STUB_ADDR","VAR_TARGET_FETCH_POLICY","VAR_HARDEN_SHORT_BUFSIZE", 523"VAR_HARDEN_LARGE_QUERIES","VAR_FORWARD_ZONE","VAR_FORWARD_HOST", 524"VAR_FORWARD_ADDR","VAR_DO_NOT_QUERY_ADDRESS","VAR_HIDE_IDENTITY", 525"VAR_HIDE_VERSION","VAR_IDENTITY","VAR_VERSION","VAR_HARDEN_GLUE", 526"VAR_MODULE_CONF","VAR_TRUST_ANCHOR_FILE","VAR_TRUST_ANCHOR", 527"VAR_VAL_OVERRIDE_DATE","VAR_BOGUS_TTL","VAR_VAL_CLEAN_ADDITIONAL", 528"VAR_VAL_PERMISSIVE_MODE","VAR_INCOMING_NUM_TCP","VAR_MSG_BUFFER_SIZE", 529"VAR_KEY_CACHE_SIZE","VAR_KEY_CACHE_SLABS","VAR_TRUSTED_KEYS_FILE", 530"VAR_VAL_NSEC3_KEYSIZE_ITERATIONS","VAR_USE_SYSLOG","VAR_OUTGOING_INTERFACE", 531"VAR_ROOT_HINTS","VAR_DO_NOT_QUERY_LOCALHOST","VAR_CACHE_MAX_TTL", 532"VAR_HARDEN_DNSSEC_STRIPPED","VAR_ACCESS_CONTROL","VAR_LOCAL_ZONE", 533"VAR_LOCAL_DATA","VAR_INTERFACE_AUTOMATIC","VAR_STATISTICS_INTERVAL", 534"VAR_DO_DAEMONIZE","VAR_USE_CAPS_FOR_ID","VAR_STATISTICS_CUMULATIVE", 535"VAR_OUTGOING_PORT_PERMIT","VAR_OUTGOING_PORT_AVOID","VAR_DLV_ANCHOR_FILE", 536"VAR_DLV_ANCHOR","VAR_NEG_CACHE_SIZE","VAR_HARDEN_REFERRAL_PATH", 537"VAR_PRIVATE_ADDRESS","VAR_PRIVATE_DOMAIN","VAR_REMOTE_CONTROL", 538"VAR_CONTROL_ENABLE","VAR_CONTROL_INTERFACE","VAR_CONTROL_PORT", 539"VAR_SERVER_KEY_FILE","VAR_SERVER_CERT_FILE","VAR_CONTROL_KEY_FILE", 540"VAR_CONTROL_CERT_FILE","VAR_EXTENDED_STATISTICS","VAR_LOCAL_DATA_PTR", 541"VAR_JOSTLE_TIMEOUT","VAR_STUB_PRIME","VAR_UNWANTED_REPLY_THRESHOLD", 542"VAR_LOG_TIME_ASCII","VAR_DOMAIN_INSECURE","VAR_PYTHON","VAR_PYTHON_SCRIPT", 543"VAR_VAL_SIG_SKEW_MIN","VAR_VAL_SIG_SKEW_MAX","VAR_CACHE_MIN_TTL", 544"VAR_VAL_LOG_LEVEL","VAR_AUTO_TRUST_ANCHOR_FILE","VAR_KEEP_MISSING", 545"VAR_ADD_HOLDDOWN","VAR_DEL_HOLDDOWN","VAR_SO_RCVBUF","VAR_EDNS_BUFFER_SIZE", 546"VAR_PREFETCH","VAR_PREFETCH_KEY","VAR_SO_SNDBUF","VAR_HARDEN_BELOW_NXDOMAIN", 547"VAR_IGNORE_CD_FLAG","VAR_LOG_QUERIES","VAR_TCP_UPSTREAM","VAR_SSL_UPSTREAM", 548"VAR_SSL_SERVICE_KEY","VAR_SSL_SERVICE_PEM","VAR_SSL_PORT","VAR_FORWARD_FIRST", 549"VAR_STUB_FIRST","VAR_MINIMAL_RESPONSES","VAR_RRSET_ROUNDROBIN", 550}; 551static const char *yyrule[] = { 552"$accept : toplevelvars", 553"toplevelvars :", 554"toplevelvars : toplevelvars toplevelvar", 555"toplevelvar : serverstart contents_server", 556"toplevelvar : stubstart contents_stub", 557"toplevelvar : forwardstart contents_forward", 558"toplevelvar : pythonstart contents_py", 559"toplevelvar : rcstart contents_rc", 560"serverstart : VAR_SERVER", 561"contents_server : contents_server content_server", 562"contents_server :", 563"content_server : server_num_threads", 564"content_server : server_verbosity", 565"content_server : server_port", 566"content_server : server_outgoing_range", 567"content_server : server_do_ip4", 568"content_server : server_do_ip6", 569"content_server : server_do_udp", 570"content_server : server_do_tcp", 571"content_server : server_interface", 572"content_server : server_chroot", 573"content_server : server_username", 574"content_server : server_directory", 575"content_server : server_logfile", 576"content_server : server_pidfile", 577"content_server : server_msg_cache_size", 578"content_server : server_msg_cache_slabs", 579"content_server : server_num_queries_per_thread", 580"content_server : server_rrset_cache_size", 581"content_server : server_rrset_cache_slabs", 582"content_server : server_outgoing_num_tcp", 583"content_server : server_infra_host_ttl", 584"content_server : server_infra_lame_ttl", 585"content_server : server_infra_cache_slabs", 586"content_server : server_infra_cache_numhosts", 587"content_server : server_infra_cache_lame_size", 588"content_server : server_target_fetch_policy", 589"content_server : server_harden_short_bufsize", 590"content_server : server_harden_large_queries", 591"content_server : server_do_not_query_address", 592"content_server : server_hide_identity", 593"content_server : server_hide_version", 594"content_server : server_identity", 595"content_server : server_version", 596"content_server : server_harden_glue", 597"content_server : server_module_conf", 598"content_server : server_trust_anchor_file", 599"content_server : server_trust_anchor", 600"content_server : server_val_override_date", 601"content_server : server_bogus_ttl", 602"content_server : server_val_clean_additional", 603"content_server : server_val_permissive_mode", 604"content_server : server_incoming_num_tcp", 605"content_server : server_msg_buffer_size", 606"content_server : server_key_cache_size", 607"content_server : server_key_cache_slabs", 608"content_server : server_trusted_keys_file", 609"content_server : server_val_nsec3_keysize_iterations", 610"content_server : server_use_syslog", 611"content_server : server_outgoing_interface", 612"content_server : server_root_hints", 613"content_server : server_do_not_query_localhost", 614"content_server : server_cache_max_ttl", 615"content_server : server_harden_dnssec_stripped", 616"content_server : server_access_control", 617"content_server : server_local_zone", 618"content_server : server_local_data", 619"content_server : server_interface_automatic", 620"content_server : server_statistics_interval", 621"content_server : server_do_daemonize", 622"content_server : server_use_caps_for_id", 623"content_server : server_statistics_cumulative", 624"content_server : server_outgoing_port_permit", 625"content_server : server_outgoing_port_avoid", 626"content_server : server_dlv_anchor_file", 627"content_server : server_dlv_anchor", 628"content_server : server_neg_cache_size", 629"content_server : server_harden_referral_path", 630"content_server : server_private_address", 631"content_server : server_private_domain", 632"content_server : server_extended_statistics", 633"content_server : server_local_data_ptr", 634"content_server : server_jostle_timeout", 635"content_server : server_unwanted_reply_threshold", 636"content_server : server_log_time_ascii", 637"content_server : server_domain_insecure", 638"content_server : server_val_sig_skew_min", 639"content_server : server_val_sig_skew_max", 640"content_server : server_cache_min_ttl", 641"content_server : server_val_log_level", 642"content_server : server_auto_trust_anchor_file", 643"content_server : server_add_holddown", 644"content_server : server_del_holddown", 645"content_server : server_keep_missing", 646"content_server : server_so_rcvbuf", 647"content_server : server_edns_buffer_size", 648"content_server : server_prefetch", 649"content_server : server_prefetch_key", 650"content_server : server_so_sndbuf", 651"content_server : server_harden_below_nxdomain", 652"content_server : server_ignore_cd_flag", 653"content_server : server_log_queries", 654"content_server : server_tcp_upstream", 655"content_server : server_ssl_upstream", 656"content_server : server_ssl_service_key", 657"content_server : server_ssl_service_pem", 658"content_server : server_ssl_port", 659"content_server : server_minimal_responses", 660"content_server : server_rrset_roundrobin", 661"stubstart : VAR_STUB_ZONE", 662"contents_stub : contents_stub content_stub", 663"contents_stub :", 664"content_stub : stub_name", 665"content_stub : stub_host", 666"content_stub : stub_addr", 667"content_stub : stub_prime", 668"content_stub : stub_first", 669"forwardstart : VAR_FORWARD_ZONE", 670"contents_forward : contents_forward content_forward", 671"contents_forward :", 672"content_forward : forward_name", 673"content_forward : forward_host", 674"content_forward : forward_addr", 675"content_forward : forward_first", 676"server_num_threads : VAR_NUM_THREADS STRING_ARG", 677"server_verbosity : VAR_VERBOSITY STRING_ARG", 678"server_statistics_interval : VAR_STATISTICS_INTERVAL STRING_ARG", 679"server_statistics_cumulative : VAR_STATISTICS_CUMULATIVE STRING_ARG", 680"server_extended_statistics : VAR_EXTENDED_STATISTICS STRING_ARG", 681"server_port : VAR_PORT STRING_ARG", 682"server_interface : VAR_INTERFACE STRING_ARG", 683"server_outgoing_interface : VAR_OUTGOING_INTERFACE STRING_ARG", 684"server_outgoing_range : VAR_OUTGOING_RANGE STRING_ARG", 685"server_outgoing_port_permit : VAR_OUTGOING_PORT_PERMIT STRING_ARG", 686"server_outgoing_port_avoid : VAR_OUTGOING_PORT_AVOID STRING_ARG", 687"server_outgoing_num_tcp : VAR_OUTGOING_NUM_TCP STRING_ARG", 688"server_incoming_num_tcp : VAR_INCOMING_NUM_TCP STRING_ARG", 689"server_interface_automatic : VAR_INTERFACE_AUTOMATIC STRING_ARG", 690"server_do_ip4 : VAR_DO_IP4 STRING_ARG", 691"server_do_ip6 : VAR_DO_IP6 STRING_ARG", 692"server_do_udp : VAR_DO_UDP STRING_ARG", 693"server_do_tcp : VAR_DO_TCP STRING_ARG", 694"server_tcp_upstream : VAR_TCP_UPSTREAM STRING_ARG", 695"server_ssl_upstream : VAR_SSL_UPSTREAM STRING_ARG", 696"server_ssl_service_key : VAR_SSL_SERVICE_KEY STRING_ARG", 697"server_ssl_service_pem : VAR_SSL_SERVICE_PEM STRING_ARG", 698"server_ssl_port : VAR_SSL_PORT STRING_ARG", 699"server_do_daemonize : VAR_DO_DAEMONIZE STRING_ARG", 700"server_use_syslog : VAR_USE_SYSLOG STRING_ARG", 701"server_log_time_ascii : VAR_LOG_TIME_ASCII STRING_ARG", 702"server_log_queries : VAR_LOG_QUERIES STRING_ARG", 703"server_chroot : VAR_CHROOT STRING_ARG", 704"server_username : VAR_USERNAME STRING_ARG", 705"server_directory : VAR_DIRECTORY STRING_ARG", 706"server_logfile : VAR_LOGFILE STRING_ARG", 707"server_pidfile : VAR_PIDFILE STRING_ARG", 708"server_root_hints : VAR_ROOT_HINTS STRING_ARG", 709"server_dlv_anchor_file : VAR_DLV_ANCHOR_FILE STRING_ARG", 710"server_dlv_anchor : VAR_DLV_ANCHOR STRING_ARG", 711"server_auto_trust_anchor_file : VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG", 712"server_trust_anchor_file : VAR_TRUST_ANCHOR_FILE STRING_ARG", 713"server_trusted_keys_file : VAR_TRUSTED_KEYS_FILE STRING_ARG", 714"server_trust_anchor : VAR_TRUST_ANCHOR STRING_ARG", 715"server_domain_insecure : VAR_DOMAIN_INSECURE STRING_ARG", 716"server_hide_identity : VAR_HIDE_IDENTITY STRING_ARG", 717"server_hide_version : VAR_HIDE_VERSION STRING_ARG", 718"server_identity : VAR_IDENTITY STRING_ARG", 719"server_version : VAR_VERSION STRING_ARG", 720"server_so_rcvbuf : VAR_SO_RCVBUF STRING_ARG", 721"server_so_sndbuf : VAR_SO_SNDBUF STRING_ARG", 722"server_edns_buffer_size : VAR_EDNS_BUFFER_SIZE STRING_ARG", 723"server_msg_buffer_size : VAR_MSG_BUFFER_SIZE STRING_ARG", 724"server_msg_cache_size : VAR_MSG_CACHE_SIZE STRING_ARG", 725"server_msg_cache_slabs : VAR_MSG_CACHE_SLABS STRING_ARG", 726"server_num_queries_per_thread : VAR_NUM_QUERIES_PER_THREAD STRING_ARG", 727"server_jostle_timeout : VAR_JOSTLE_TIMEOUT STRING_ARG", 728"server_rrset_cache_size : VAR_RRSET_CACHE_SIZE STRING_ARG", 729"server_rrset_cache_slabs : VAR_RRSET_CACHE_SLABS STRING_ARG", 730"server_infra_host_ttl : VAR_INFRA_HOST_TTL STRING_ARG", 731"server_infra_lame_ttl : VAR_INFRA_LAME_TTL STRING_ARG", 732"server_infra_cache_numhosts : VAR_INFRA_CACHE_NUMHOSTS STRING_ARG", 733"server_infra_cache_lame_size : VAR_INFRA_CACHE_LAME_SIZE STRING_ARG", 734"server_infra_cache_slabs : VAR_INFRA_CACHE_SLABS STRING_ARG", 735"server_target_fetch_policy : VAR_TARGET_FETCH_POLICY STRING_ARG", 736"server_harden_short_bufsize : VAR_HARDEN_SHORT_BUFSIZE STRING_ARG", 737"server_harden_large_queries : VAR_HARDEN_LARGE_QUERIES STRING_ARG", 738"server_harden_glue : VAR_HARDEN_GLUE STRING_ARG", 739"server_harden_dnssec_stripped : VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG", 740"server_harden_below_nxdomain : VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG", 741"server_harden_referral_path : VAR_HARDEN_REFERRAL_PATH STRING_ARG", 742"server_use_caps_for_id : VAR_USE_CAPS_FOR_ID STRING_ARG", 743"server_private_address : VAR_PRIVATE_ADDRESS STRING_ARG", 744"server_private_domain : VAR_PRIVATE_DOMAIN STRING_ARG", 745"server_prefetch : VAR_PREFETCH STRING_ARG", 746"server_prefetch_key : VAR_PREFETCH_KEY STRING_ARG", 747"server_unwanted_reply_threshold : VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG", 748"server_do_not_query_address : VAR_DO_NOT_QUERY_ADDRESS STRING_ARG", 749"server_do_not_query_localhost : VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG", 750"server_access_control : VAR_ACCESS_CONTROL STRING_ARG STRING_ARG", 751"server_module_conf : VAR_MODULE_CONF STRING_ARG", 752"server_val_override_date : VAR_VAL_OVERRIDE_DATE STRING_ARG", 753"server_val_sig_skew_min : VAR_VAL_SIG_SKEW_MIN STRING_ARG", 754"server_val_sig_skew_max : VAR_VAL_SIG_SKEW_MAX STRING_ARG", 755"server_cache_max_ttl : VAR_CACHE_MAX_TTL STRING_ARG", 756"server_cache_min_ttl : VAR_CACHE_MIN_TTL STRING_ARG", 757"server_bogus_ttl : VAR_BOGUS_TTL STRING_ARG", 758"server_val_clean_additional : VAR_VAL_CLEAN_ADDITIONAL STRING_ARG", 759"server_val_permissive_mode : VAR_VAL_PERMISSIVE_MODE STRING_ARG", 760"server_ignore_cd_flag : VAR_IGNORE_CD_FLAG STRING_ARG", 761"server_val_log_level : VAR_VAL_LOG_LEVEL STRING_ARG", 762"server_val_nsec3_keysize_iterations : VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG", 763"server_add_holddown : VAR_ADD_HOLDDOWN STRING_ARG", 764"server_del_holddown : VAR_DEL_HOLDDOWN STRING_ARG", 765"server_keep_missing : VAR_KEEP_MISSING STRING_ARG", 766"server_key_cache_size : VAR_KEY_CACHE_SIZE STRING_ARG", 767"server_key_cache_slabs : VAR_KEY_CACHE_SLABS STRING_ARG", 768"server_neg_cache_size : VAR_NEG_CACHE_SIZE STRING_ARG", 769"server_local_zone : VAR_LOCAL_ZONE STRING_ARG STRING_ARG", 770"server_local_data : VAR_LOCAL_DATA STRING_ARG", 771"server_local_data_ptr : VAR_LOCAL_DATA_PTR STRING_ARG", 772"server_minimal_responses : VAR_MINIMAL_RESPONSES STRING_ARG", 773"server_rrset_roundrobin : VAR_RRSET_ROUNDROBIN STRING_ARG", 774"stub_name : VAR_NAME STRING_ARG", 775"stub_host : VAR_STUB_HOST STRING_ARG", 776"stub_addr : VAR_STUB_ADDR STRING_ARG", 777"stub_first : VAR_STUB_FIRST STRING_ARG", 778"stub_prime : VAR_STUB_PRIME STRING_ARG", 779"forward_name : VAR_NAME STRING_ARG", 780"forward_host : VAR_FORWARD_HOST STRING_ARG", 781"forward_addr : VAR_FORWARD_ADDR STRING_ARG", 782"forward_first : VAR_FORWARD_FIRST STRING_ARG", 783"rcstart : VAR_REMOTE_CONTROL", 784"contents_rc : contents_rc content_rc", 785"contents_rc :", 786"content_rc : rc_control_enable", 787"content_rc : rc_control_interface", 788"content_rc : rc_control_port", 789"content_rc : rc_server_key_file", 790"content_rc : rc_server_cert_file", 791"content_rc : rc_control_key_file", 792"content_rc : rc_control_cert_file", 793"rc_control_enable : VAR_CONTROL_ENABLE STRING_ARG", 794"rc_control_port : VAR_CONTROL_PORT STRING_ARG", 795"rc_control_interface : VAR_CONTROL_INTERFACE STRING_ARG", 796"rc_server_key_file : VAR_SERVER_KEY_FILE STRING_ARG", 797"rc_server_cert_file : VAR_SERVER_CERT_FILE STRING_ARG", 798"rc_control_key_file : VAR_CONTROL_KEY_FILE STRING_ARG", 799"rc_control_cert_file : VAR_CONTROL_CERT_FILE STRING_ARG", 800"pythonstart : VAR_PYTHON", 801"contents_py : contents_py content_py", 802"contents_py :", 803"content_py : py_script", 804"py_script : VAR_PYTHON_SCRIPT STRING_ARG", 805 806}; 807#endif 808 809int yydebug; 810int yynerrs; 811 812int yyerrflag; 813int yychar; 814YYSTYPE yyval; 815YYSTYPE yylval; 816 817/* define the initial stack-sizes */ 818#ifdef YYSTACKSIZE 819#undef YYMAXDEPTH 820#define YYMAXDEPTH YYSTACKSIZE 821#else 822#ifdef YYMAXDEPTH 823#define YYSTACKSIZE YYMAXDEPTH 824#else 825#define YYSTACKSIZE 500 826#define YYMAXDEPTH 500 827#endif 828#endif 829 830#define YYINITSTACKSIZE 500 831 832typedef struct { 833 unsigned stacksize; 834 short *s_base; 835 short *s_mark; 836 short *s_last; 837 YYSTYPE *l_base; 838 YYSTYPE *l_mark; 839} YYSTACKDATA; 840/* variables for the parser stack */ 841static YYSTACKDATA yystack; 842#line 1277 "util/configparser.y" 843 844/* parse helper routines could be here */ 845#line 845 "util/configparser.c" 846 847#if YYDEBUG 848#include <stdio.h> /* needed for printf */ 849#endif 850 851#include <stdlib.h> /* needed for malloc, etc */ 852#include <string.h> /* needed for memset */ 853 854/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 855static int yygrowstack(YYSTACKDATA *data) 856{ 857 int i; 858 unsigned newsize; 859 short *newss; 860 YYSTYPE *newvs; 861 862 if ((newsize = data->stacksize) == 0) 863 newsize = YYINITSTACKSIZE; 864 else if (newsize >= YYMAXDEPTH) 865 return -1; 866 else if ((newsize *= 2) > YYMAXDEPTH) 867 newsize = YYMAXDEPTH; 868 869 i = (int) (data->s_mark - data->s_base); 870 newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); 871 if (newss == 0) 872 return -1; 873 874 data->s_base = newss; 875 data->s_mark = newss + i; 876 877 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 878 if (newvs == 0) 879 return -1; 880 881 data->l_base = newvs; 882 data->l_mark = newvs + i; 883 884 data->stacksize = newsize; 885 data->s_last = data->s_base + newsize - 1; 886 return 0; 887} 888 889#if YYPURE || defined(YY_NO_LEAKS) 890static void yyfreestack(YYSTACKDATA *data) 891{ 892 free(data->s_base); 893 free(data->l_base); 894 memset(data, 0, sizeof(*data)); 895} 896#else 897#define yyfreestack(data) /* nothing */ 898#endif 899 900#define YYABORT goto yyabort 901#define YYREJECT goto yyabort 902#define YYACCEPT goto yyaccept 903#define YYERROR goto yyerrlab 904 905int 906YYPARSE_DECL() 907{ 908 int yym, yyn, yystate; 909#if YYDEBUG 910 const char *yys; 911 912 if ((yys = getenv("YYDEBUG")) != 0) 913 { 914 yyn = *yys; 915 if (yyn >= '0' && yyn <= '9') 916 yydebug = yyn - '0'; 917 } 918#endif 919 920 yynerrs = 0; 921 yyerrflag = 0; 922 yychar = YYEMPTY; 923 yystate = 0; 924 925#if YYPURE 926 memset(&yystack, 0, sizeof(yystack)); 927#endif 928 929 if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow; 930 yystack.s_mark = yystack.s_base; 931 yystack.l_mark = yystack.l_base; 932 yystate = 0; 933 *yystack.s_mark = 0; 934 935yyloop: 936 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 937 if (yychar < 0) 938 { 939 if ((yychar = YYLEX) < 0) yychar = 0; 940#if YYDEBUG 941 if (yydebug) 942 { 943 yys = 0; 944 if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 945 if (!yys) yys = "illegal-symbol"; 946 printf("%sdebug: state %d, reading %d (%s)\n", 947 YYPREFIX, yystate, yychar, yys); 948 } 949#endif 950 } 951 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 952 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 953 { 954#if YYDEBUG 955 if (yydebug) 956 printf("%sdebug: state %d, shifting to state %d\n", 957 YYPREFIX, yystate, yytable[yyn]); 958#endif 959 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 960 { 961 goto yyoverflow; 962 } 963 yystate = yytable[yyn]; 964 *++yystack.s_mark = yytable[yyn]; 965 *++yystack.l_mark = yylval; 966 yychar = YYEMPTY; 967 if (yyerrflag > 0) --yyerrflag; 968 goto yyloop; 969 } 970 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 971 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 972 { 973 yyn = yytable[yyn]; 974 goto yyreduce; 975 } 976 if (yyerrflag) goto yyinrecovery; 977 978 yyerror("syntax error"); 979 980 goto yyerrlab; 981 982yyerrlab: 983 ++yynerrs; 984 985yyinrecovery: 986 if (yyerrflag < 3) 987 { 988 yyerrflag = 3; 989 for (;;) 990 { 991 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 992 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 993 { 994#if YYDEBUG 995 if (yydebug) 996 printf("%sdebug: state %d, error recovery shifting\ 997 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 998#endif 999 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 1000 { 1001 goto yyoverflow; 1002 } 1003 yystate = yytable[yyn]; 1004 *++yystack.s_mark = yytable[yyn]; 1005 *++yystack.l_mark = yylval; 1006 goto yyloop; 1007 } 1008 else 1009 { 1010#if YYDEBUG 1011 if (yydebug) 1012 printf("%sdebug: error recovery discarding state %d\n", 1013 YYPREFIX, *yystack.s_mark); 1014#endif 1015 if (yystack.s_mark <= yystack.s_base) goto yyabort; 1016 --yystack.s_mark; 1017 --yystack.l_mark; 1018 } 1019 } 1020 } 1021 else 1022 { 1023 if (yychar == 0) goto yyabort; 1024#if YYDEBUG 1025 if (yydebug) 1026 { 1027 yys = 0; 1028 if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 1029 if (!yys) yys = "illegal-symbol"; 1030 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 1031 YYPREFIX, yystate, yychar, yys); 1032 } 1033#endif 1034 yychar = YYEMPTY; 1035 goto yyloop; 1036 } 1037 1038yyreduce: 1039#if YYDEBUG 1040 if (yydebug) 1041 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 1042 YYPREFIX, yystate, yyn, yyrule[yyn]); 1043#endif 1044 yym = yylen[yyn]; 1045 if (yym) 1046 yyval = yystack.l_mark[1-yym]; 1047 else 1048 memset(&yyval, 0, sizeof yyval); 1049 switch (yyn) 1050 { 1051case 8: 1052#line 118 "util/configparser.y" 1053 { 1054 OUTYY(("\nP(server:)\n")); 1055 } 1056break; 1057case 109: 1058#line 167 "util/configparser.y" 1059 { 1060 struct config_stub* s; 1061 OUTYY(("\nP(stub_zone:)\n")); 1062 s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 1063 if(s) { 1064 s->next = cfg_parser->cfg->stubs; 1065 cfg_parser->cfg->stubs = s; 1066 } else 1067 yyerror("out of memory"); 1068 } 1069break; 1070case 117: 1071#line 183 "util/configparser.y" 1072 { 1073 struct config_stub* s; 1074 OUTYY(("\nP(forward_zone:)\n")); 1075 s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 1076 if(s) { 1077 s->next = cfg_parser->cfg->forwards; 1078 cfg_parser->cfg->forwards = s; 1079 } else 1080 yyerror("out of memory"); 1081 } 1082break; 1083case 124: 1084#line 199 "util/configparser.y" 1085 { 1086 OUTYY(("P(server_num_threads:%s)\n", yystack.l_mark[0].str)); 1087 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1088 yyerror("number expected"); 1089 else cfg_parser->cfg->num_threads = atoi(yystack.l_mark[0].str); 1090 free(yystack.l_mark[0].str); 1091 } 1092break; 1093case 125: 1094#line 208 "util/configparser.y" 1095 { 1096 OUTYY(("P(server_verbosity:%s)\n", yystack.l_mark[0].str)); 1097 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1098 yyerror("number expected"); 1099 else cfg_parser->cfg->verbosity = atoi(yystack.l_mark[0].str); 1100 free(yystack.l_mark[0].str); 1101 } 1102break; 1103case 126: 1104#line 217 "util/configparser.y" 1105 { 1106 OUTYY(("P(server_statistics_interval:%s)\n", yystack.l_mark[0].str)); 1107 if(strcmp(yystack.l_mark[0].str, "") == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) 1108 cfg_parser->cfg->stat_interval = 0; 1109 else if(atoi(yystack.l_mark[0].str) == 0) 1110 yyerror("number expected"); 1111 else cfg_parser->cfg->stat_interval = atoi(yystack.l_mark[0].str); 1112 free(yystack.l_mark[0].str); 1113 } 1114break; 1115case 127: 1116#line 228 "util/configparser.y" 1117 { 1118 OUTYY(("P(server_statistics_cumulative:%s)\n", yystack.l_mark[0].str)); 1119 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1120 yyerror("expected yes or no."); 1121 else cfg_parser->cfg->stat_cumulative = (strcmp(yystack.l_mark[0].str, "yes")==0); 1122 free(yystack.l_mark[0].str); 1123 } 1124break; 1125case 128: 1126#line 237 "util/configparser.y" 1127 { 1128 OUTYY(("P(server_extended_statistics:%s)\n", yystack.l_mark[0].str)); 1129 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1130 yyerror("expected yes or no."); 1131 else cfg_parser->cfg->stat_extended = (strcmp(yystack.l_mark[0].str, "yes")==0); 1132 free(yystack.l_mark[0].str); 1133 } 1134break; 1135case 129: 1136#line 246 "util/configparser.y" 1137 { 1138 OUTYY(("P(server_port:%s)\n", yystack.l_mark[0].str)); 1139 if(atoi(yystack.l_mark[0].str) == 0) 1140 yyerror("port number expected"); 1141 else cfg_parser->cfg->port = atoi(yystack.l_mark[0].str); 1142 free(yystack.l_mark[0].str); 1143 } 1144break; 1145case 130: 1146#line 255 "util/configparser.y" 1147 { 1148 OUTYY(("P(server_interface:%s)\n", yystack.l_mark[0].str)); 1149 if(cfg_parser->cfg->num_ifs == 0) 1150 cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); 1151 else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, 1152 (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); 1153 if(!cfg_parser->cfg->ifs) 1154 yyerror("out of memory"); 1155 else 1156 cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = yystack.l_mark[0].str; 1157 } 1158break; 1159case 131: 1160#line 268 "util/configparser.y" 1161 { 1162 OUTYY(("P(server_outgoing_interface:%s)\n", yystack.l_mark[0].str)); 1163 if(cfg_parser->cfg->num_out_ifs == 0) 1164 cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); 1165 else cfg_parser->cfg->out_ifs = realloc( 1166 cfg_parser->cfg->out_ifs, 1167 (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); 1168 if(!cfg_parser->cfg->out_ifs) 1169 yyerror("out of memory"); 1170 else 1171 cfg_parser->cfg->out_ifs[ 1172 cfg_parser->cfg->num_out_ifs++] = yystack.l_mark[0].str; 1173 } 1174break; 1175case 132: 1176#line 283 "util/configparser.y" 1177 { 1178 OUTYY(("P(server_outgoing_range:%s)\n", yystack.l_mark[0].str)); 1179 if(atoi(yystack.l_mark[0].str) == 0) 1180 yyerror("number expected"); 1181 else cfg_parser->cfg->outgoing_num_ports = atoi(yystack.l_mark[0].str); 1182 free(yystack.l_mark[0].str); 1183 } 1184break; 1185case 133: 1186#line 292 "util/configparser.y" 1187 { 1188 OUTYY(("P(server_outgoing_port_permit:%s)\n", yystack.l_mark[0].str)); 1189 if(!cfg_mark_ports(yystack.l_mark[0].str, 1, 1190 cfg_parser->cfg->outgoing_avail_ports, 65536)) 1191 yyerror("port number or range (\"low-high\") expected"); 1192 free(yystack.l_mark[0].str); 1193 } 1194break; 1195case 134: 1196#line 301 "util/configparser.y" 1197 { 1198 OUTYY(("P(server_outgoing_port_avoid:%s)\n", yystack.l_mark[0].str)); 1199 if(!cfg_mark_ports(yystack.l_mark[0].str, 0, 1200 cfg_parser->cfg->outgoing_avail_ports, 65536)) 1201 yyerror("port number or range (\"low-high\") expected"); 1202 free(yystack.l_mark[0].str); 1203 } 1204break; 1205case 135: 1206#line 310 "util/configparser.y" 1207 { 1208 OUTYY(("P(server_outgoing_num_tcp:%s)\n", yystack.l_mark[0].str)); 1209 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1210 yyerror("number expected"); 1211 else cfg_parser->cfg->outgoing_num_tcp = atoi(yystack.l_mark[0].str); 1212 free(yystack.l_mark[0].str); 1213 } 1214break; 1215case 136: 1216#line 319 "util/configparser.y" 1217 { 1218 OUTYY(("P(server_incoming_num_tcp:%s)\n", yystack.l_mark[0].str)); 1219 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1220 yyerror("number expected"); 1221 else cfg_parser->cfg->incoming_num_tcp = atoi(yystack.l_mark[0].str); 1222 free(yystack.l_mark[0].str); 1223 } 1224break; 1225case 137: 1226#line 328 "util/configparser.y" 1227 { 1228 OUTYY(("P(server_interface_automatic:%s)\n", yystack.l_mark[0].str)); 1229 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1230 yyerror("expected yes or no."); 1231 else cfg_parser->cfg->if_automatic = (strcmp(yystack.l_mark[0].str, "yes")==0); 1232 free(yystack.l_mark[0].str); 1233 } 1234break; 1235case 138: 1236#line 337 "util/configparser.y" 1237 { 1238 OUTYY(("P(server_do_ip4:%s)\n", yystack.l_mark[0].str)); 1239 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1240 yyerror("expected yes or no."); 1241 else cfg_parser->cfg->do_ip4 = (strcmp(yystack.l_mark[0].str, "yes")==0); 1242 free(yystack.l_mark[0].str); 1243 } 1244break; 1245case 139: 1246#line 346 "util/configparser.y" 1247 { 1248 OUTYY(("P(server_do_ip6:%s)\n", yystack.l_mark[0].str)); 1249 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1250 yyerror("expected yes or no."); 1251 else cfg_parser->cfg->do_ip6 = (strcmp(yystack.l_mark[0].str, "yes")==0); 1252 free(yystack.l_mark[0].str); 1253 } 1254break; 1255case 140: 1256#line 355 "util/configparser.y" 1257 { 1258 OUTYY(("P(server_do_udp:%s)\n", yystack.l_mark[0].str)); 1259 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1260 yyerror("expected yes or no."); 1261 else cfg_parser->cfg->do_udp = (strcmp(yystack.l_mark[0].str, "yes")==0); 1262 free(yystack.l_mark[0].str); 1263 } 1264break; 1265case 141: 1266#line 364 "util/configparser.y" 1267 { 1268 OUTYY(("P(server_do_tcp:%s)\n", yystack.l_mark[0].str)); 1269 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1270 yyerror("expected yes or no."); 1271 else cfg_parser->cfg->do_tcp = (strcmp(yystack.l_mark[0].str, "yes")==0); 1272 free(yystack.l_mark[0].str); 1273 } 1274break; 1275case 142: 1276#line 373 "util/configparser.y" 1277 { 1278 OUTYY(("P(server_tcp_upstream:%s)\n", yystack.l_mark[0].str)); 1279 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1280 yyerror("expected yes or no."); 1281 else cfg_parser->cfg->tcp_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0); 1282 free(yystack.l_mark[0].str); 1283 } 1284break; 1285case 143: 1286#line 382 "util/configparser.y" 1287 { 1288 OUTYY(("P(server_ssl_upstream:%s)\n", yystack.l_mark[0].str)); 1289 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1290 yyerror("expected yes or no."); 1291 else cfg_parser->cfg->ssl_upstream = (strcmp(yystack.l_mark[0].str, "yes")==0); 1292 free(yystack.l_mark[0].str); 1293 } 1294break; 1295case 144: 1296#line 391 "util/configparser.y" 1297 { 1298 OUTYY(("P(server_ssl_service_key:%s)\n", yystack.l_mark[0].str)); 1299 free(cfg_parser->cfg->ssl_service_key); 1300 cfg_parser->cfg->ssl_service_key = yystack.l_mark[0].str; 1301 } 1302break; 1303case 145: 1304#line 398 "util/configparser.y" 1305 { 1306 OUTYY(("P(server_ssl_service_pem:%s)\n", yystack.l_mark[0].str)); 1307 free(cfg_parser->cfg->ssl_service_pem); 1308 cfg_parser->cfg->ssl_service_pem = yystack.l_mark[0].str; 1309 } 1310break; 1311case 146: 1312#line 405 "util/configparser.y" 1313 { 1314 OUTYY(("P(server_ssl_port:%s)\n", yystack.l_mark[0].str)); 1315 if(atoi(yystack.l_mark[0].str) == 0) 1316 yyerror("port number expected"); 1317 else cfg_parser->cfg->ssl_port = atoi(yystack.l_mark[0].str); 1318 free(yystack.l_mark[0].str); 1319 } 1320break; 1321case 147: 1322#line 414 "util/configparser.y" 1323 { 1324 OUTYY(("P(server_do_daemonize:%s)\n", yystack.l_mark[0].str)); 1325 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1326 yyerror("expected yes or no."); 1327 else cfg_parser->cfg->do_daemonize = (strcmp(yystack.l_mark[0].str, "yes")==0); 1328 free(yystack.l_mark[0].str); 1329 } 1330break; 1331case 148: 1332#line 423 "util/configparser.y" 1333 { 1334 OUTYY(("P(server_use_syslog:%s)\n", yystack.l_mark[0].str)); 1335 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1336 yyerror("expected yes or no."); 1337 else cfg_parser->cfg->use_syslog = (strcmp(yystack.l_mark[0].str, "yes")==0); 1338#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) 1339 if(strcmp(yystack.l_mark[0].str, "yes") == 0) 1340 yyerror("no syslog services are available. " 1341 "(reconfigure and compile to add)"); 1342#endif 1343 free(yystack.l_mark[0].str); 1344 } 1345break; 1346case 149: 1347#line 437 "util/configparser.y" 1348 { 1349 OUTYY(("P(server_log_time_ascii:%s)\n", yystack.l_mark[0].str)); 1350 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1351 yyerror("expected yes or no."); 1352 else cfg_parser->cfg->log_time_ascii = (strcmp(yystack.l_mark[0].str, "yes")==0); 1353 free(yystack.l_mark[0].str); 1354 } 1355break; 1356case 150: 1357#line 446 "util/configparser.y" 1358 { 1359 OUTYY(("P(server_log_queries:%s)\n", yystack.l_mark[0].str)); 1360 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1361 yyerror("expected yes or no."); 1362 else cfg_parser->cfg->log_queries = (strcmp(yystack.l_mark[0].str, "yes")==0); 1363 free(yystack.l_mark[0].str); 1364 } 1365break; 1366case 151: 1367#line 455 "util/configparser.y" 1368 { 1369 OUTYY(("P(server_chroot:%s)\n", yystack.l_mark[0].str)); 1370 free(cfg_parser->cfg->chrootdir); 1371 cfg_parser->cfg->chrootdir = yystack.l_mark[0].str; 1372 } 1373break; 1374case 152: 1375#line 462 "util/configparser.y" 1376 { 1377 OUTYY(("P(server_username:%s)\n", yystack.l_mark[0].str)); 1378 free(cfg_parser->cfg->username); 1379 cfg_parser->cfg->username = yystack.l_mark[0].str; 1380 } 1381break; 1382case 153: 1383#line 469 "util/configparser.y" 1384 { 1385 OUTYY(("P(server_directory:%s)\n", yystack.l_mark[0].str)); 1386 free(cfg_parser->cfg->directory); 1387 cfg_parser->cfg->directory = yystack.l_mark[0].str; 1388 } 1389break; 1390case 154: 1391#line 476 "util/configparser.y" 1392 { 1393 OUTYY(("P(server_logfile:%s)\n", yystack.l_mark[0].str)); 1394 free(cfg_parser->cfg->logfile); 1395 cfg_parser->cfg->logfile = yystack.l_mark[0].str; 1396 cfg_parser->cfg->use_syslog = 0; 1397 } 1398break; 1399case 155: 1400#line 484 "util/configparser.y" 1401 { 1402 OUTYY(("P(server_pidfile:%s)\n", yystack.l_mark[0].str)); 1403 free(cfg_parser->cfg->pidfile); 1404 cfg_parser->cfg->pidfile = yystack.l_mark[0].str; 1405 } 1406break; 1407case 156: 1408#line 491 "util/configparser.y" 1409 { 1410 OUTYY(("P(server_root_hints:%s)\n", yystack.l_mark[0].str)); 1411 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, yystack.l_mark[0].str)) 1412 yyerror("out of memory"); 1413 } 1414break; 1415case 157: 1416#line 498 "util/configparser.y" 1417 { 1418 OUTYY(("P(server_dlv_anchor_file:%s)\n", yystack.l_mark[0].str)); 1419 free(cfg_parser->cfg->dlv_anchor_file); 1420 cfg_parser->cfg->dlv_anchor_file = yystack.l_mark[0].str; 1421 } 1422break; 1423case 158: 1424#line 505 "util/configparser.y" 1425 { 1426 OUTYY(("P(server_dlv_anchor:%s)\n", yystack.l_mark[0].str)); 1427 if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, yystack.l_mark[0].str)) 1428 yyerror("out of memory"); 1429 } 1430break; 1431case 159: 1432#line 512 "util/configparser.y" 1433 { 1434 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", yystack.l_mark[0].str)); 1435 if(!cfg_strlist_insert(&cfg_parser->cfg-> 1436 auto_trust_anchor_file_list, yystack.l_mark[0].str)) 1437 yyerror("out of memory"); 1438 } 1439break; 1440case 160: 1441#line 520 "util/configparser.y" 1442 { 1443 OUTYY(("P(server_trust_anchor_file:%s)\n", yystack.l_mark[0].str)); 1444 if(!cfg_strlist_insert(&cfg_parser->cfg-> 1445 trust_anchor_file_list, yystack.l_mark[0].str)) 1446 yyerror("out of memory"); 1447 } 1448break; 1449case 161: 1450#line 528 "util/configparser.y" 1451 { 1452 OUTYY(("P(server_trusted_keys_file:%s)\n", yystack.l_mark[0].str)); 1453 if(!cfg_strlist_insert(&cfg_parser->cfg-> 1454 trusted_keys_file_list, yystack.l_mark[0].str)) 1455 yyerror("out of memory"); 1456 } 1457break; 1458case 162: 1459#line 536 "util/configparser.y" 1460 { 1461 OUTYY(("P(server_trust_anchor:%s)\n", yystack.l_mark[0].str)); 1462 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, yystack.l_mark[0].str)) 1463 yyerror("out of memory"); 1464 } 1465break; 1466case 163: 1467#line 543 "util/configparser.y" 1468 { 1469 OUTYY(("P(server_domain_insecure:%s)\n", yystack.l_mark[0].str)); 1470 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, yystack.l_mark[0].str)) 1471 yyerror("out of memory"); 1472 } 1473break; 1474case 164: 1475#line 550 "util/configparser.y" 1476 { 1477 OUTYY(("P(server_hide_identity:%s)\n", yystack.l_mark[0].str)); 1478 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1479 yyerror("expected yes or no."); 1480 else cfg_parser->cfg->hide_identity = (strcmp(yystack.l_mark[0].str, "yes")==0); 1481 free(yystack.l_mark[0].str); 1482 } 1483break; 1484case 165: 1485#line 559 "util/configparser.y" 1486 { 1487 OUTYY(("P(server_hide_version:%s)\n", yystack.l_mark[0].str)); 1488 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1489 yyerror("expected yes or no."); 1490 else cfg_parser->cfg->hide_version = (strcmp(yystack.l_mark[0].str, "yes")==0); 1491 free(yystack.l_mark[0].str); 1492 } 1493break; 1494case 166: 1495#line 568 "util/configparser.y" 1496 { 1497 OUTYY(("P(server_identity:%s)\n", yystack.l_mark[0].str)); 1498 free(cfg_parser->cfg->identity); 1499 cfg_parser->cfg->identity = yystack.l_mark[0].str; 1500 } 1501break; 1502case 167: 1503#line 575 "util/configparser.y" 1504 { 1505 OUTYY(("P(server_version:%s)\n", yystack.l_mark[0].str)); 1506 free(cfg_parser->cfg->version); 1507 cfg_parser->cfg->version = yystack.l_mark[0].str; 1508 } 1509break; 1510case 168: 1511#line 582 "util/configparser.y" 1512 { 1513 OUTYY(("P(server_so_rcvbuf:%s)\n", yystack.l_mark[0].str)); 1514 if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_rcvbuf)) 1515 yyerror("buffer size expected"); 1516 free(yystack.l_mark[0].str); 1517 } 1518break; 1519case 169: 1520#line 590 "util/configparser.y" 1521 { 1522 OUTYY(("P(server_so_sndbuf:%s)\n", yystack.l_mark[0].str)); 1523 if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->so_sndbuf)) 1524 yyerror("buffer size expected"); 1525 free(yystack.l_mark[0].str); 1526 } 1527break; 1528case 170: 1529#line 598 "util/configparser.y" 1530 { 1531 OUTYY(("P(server_edns_buffer_size:%s)\n", yystack.l_mark[0].str)); 1532 if(atoi(yystack.l_mark[0].str) == 0) 1533 yyerror("number expected"); 1534 else if (atoi(yystack.l_mark[0].str) < 12) 1535 yyerror("edns buffer size too small"); 1536 else if (atoi(yystack.l_mark[0].str) > 65535) 1537 cfg_parser->cfg->edns_buffer_size = 65535; 1538 else cfg_parser->cfg->edns_buffer_size = atoi(yystack.l_mark[0].str); 1539 free(yystack.l_mark[0].str); 1540 } 1541break; 1542case 171: 1543#line 611 "util/configparser.y" 1544 { 1545 OUTYY(("P(server_msg_buffer_size:%s)\n", yystack.l_mark[0].str)); 1546 if(atoi(yystack.l_mark[0].str) == 0) 1547 yyerror("number expected"); 1548 else if (atoi(yystack.l_mark[0].str) < 4096) 1549 yyerror("message buffer size too small (use 4096)"); 1550 else cfg_parser->cfg->msg_buffer_size = atoi(yystack.l_mark[0].str); 1551 free(yystack.l_mark[0].str); 1552 } 1553break; 1554case 172: 1555#line 622 "util/configparser.y" 1556 { 1557 OUTYY(("P(server_msg_cache_size:%s)\n", yystack.l_mark[0].str)); 1558 if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->msg_cache_size)) 1559 yyerror("memory size expected"); 1560 free(yystack.l_mark[0].str); 1561 } 1562break; 1563case 173: 1564#line 630 "util/configparser.y" 1565 { 1566 OUTYY(("P(server_msg_cache_slabs:%s)\n", yystack.l_mark[0].str)); 1567 if(atoi(yystack.l_mark[0].str) == 0) 1568 yyerror("number expected"); 1569 else { 1570 cfg_parser->cfg->msg_cache_slabs = atoi(yystack.l_mark[0].str); 1571 if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) 1572 yyerror("must be a power of 2"); 1573 } 1574 free(yystack.l_mark[0].str); 1575 } 1576break; 1577case 174: 1578#line 643 "util/configparser.y" 1579 { 1580 OUTYY(("P(server_num_queries_per_thread:%s)\n", yystack.l_mark[0].str)); 1581 if(atoi(yystack.l_mark[0].str) == 0) 1582 yyerror("number expected"); 1583 else cfg_parser->cfg->num_queries_per_thread = atoi(yystack.l_mark[0].str); 1584 free(yystack.l_mark[0].str); 1585 } 1586break; 1587case 175: 1588#line 652 "util/configparser.y" 1589 { 1590 OUTYY(("P(server_jostle_timeout:%s)\n", yystack.l_mark[0].str)); 1591 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1592 yyerror("number expected"); 1593 else cfg_parser->cfg->jostle_time = atoi(yystack.l_mark[0].str); 1594 free(yystack.l_mark[0].str); 1595 } 1596break; 1597case 176: 1598#line 661 "util/configparser.y" 1599 { 1600 OUTYY(("P(server_rrset_cache_size:%s)\n", yystack.l_mark[0].str)); 1601 if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->rrset_cache_size)) 1602 yyerror("memory size expected"); 1603 free(yystack.l_mark[0].str); 1604 } 1605break; 1606case 177: 1607#line 669 "util/configparser.y" 1608 { 1609 OUTYY(("P(server_rrset_cache_slabs:%s)\n", yystack.l_mark[0].str)); 1610 if(atoi(yystack.l_mark[0].str) == 0) 1611 yyerror("number expected"); 1612 else { 1613 cfg_parser->cfg->rrset_cache_slabs = atoi(yystack.l_mark[0].str); 1614 if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) 1615 yyerror("must be a power of 2"); 1616 } 1617 free(yystack.l_mark[0].str); 1618 } 1619break; 1620case 178: 1621#line 682 "util/configparser.y" 1622 { 1623 OUTYY(("P(server_infra_host_ttl:%s)\n", yystack.l_mark[0].str)); 1624 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1625 yyerror("number expected"); 1626 else cfg_parser->cfg->host_ttl = atoi(yystack.l_mark[0].str); 1627 free(yystack.l_mark[0].str); 1628 } 1629break; 1630case 179: 1631#line 691 "util/configparser.y" 1632 { 1633 OUTYY(("P(server_infra_lame_ttl:%s)\n", yystack.l_mark[0].str)); 1634 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " 1635 "removed, use infra-host-ttl)", yystack.l_mark[0].str); 1636 free(yystack.l_mark[0].str); 1637 } 1638break; 1639case 180: 1640#line 699 "util/configparser.y" 1641 { 1642 OUTYY(("P(server_infra_cache_numhosts:%s)\n", yystack.l_mark[0].str)); 1643 if(atoi(yystack.l_mark[0].str) == 0) 1644 yyerror("number expected"); 1645 else cfg_parser->cfg->infra_cache_numhosts = atoi(yystack.l_mark[0].str); 1646 free(yystack.l_mark[0].str); 1647 } 1648break; 1649case 181: 1650#line 708 "util/configparser.y" 1651 { 1652 OUTYY(("P(server_infra_cache_lame_size:%s)\n", yystack.l_mark[0].str)); 1653 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " 1654 "(option removed, use infra-cache-numhosts)", yystack.l_mark[0].str); 1655 free(yystack.l_mark[0].str); 1656 } 1657break; 1658case 182: 1659#line 716 "util/configparser.y" 1660 { 1661 OUTYY(("P(server_infra_cache_slabs:%s)\n", yystack.l_mark[0].str)); 1662 if(atoi(yystack.l_mark[0].str) == 0) 1663 yyerror("number expected"); 1664 else { 1665 cfg_parser->cfg->infra_cache_slabs = atoi(yystack.l_mark[0].str); 1666 if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) 1667 yyerror("must be a power of 2"); 1668 } 1669 free(yystack.l_mark[0].str); 1670 } 1671break; 1672case 183: 1673#line 729 "util/configparser.y" 1674 { 1675 OUTYY(("P(server_target_fetch_policy:%s)\n", yystack.l_mark[0].str)); 1676 free(cfg_parser->cfg->target_fetch_policy); 1677 cfg_parser->cfg->target_fetch_policy = yystack.l_mark[0].str; 1678 } 1679break; 1680case 184: 1681#line 736 "util/configparser.y" 1682 { 1683 OUTYY(("P(server_harden_short_bufsize:%s)\n", yystack.l_mark[0].str)); 1684 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1685 yyerror("expected yes or no."); 1686 else cfg_parser->cfg->harden_short_bufsize = 1687 (strcmp(yystack.l_mark[0].str, "yes")==0); 1688 free(yystack.l_mark[0].str); 1689 } 1690break; 1691case 185: 1692#line 746 "util/configparser.y" 1693 { 1694 OUTYY(("P(server_harden_large_queries:%s)\n", yystack.l_mark[0].str)); 1695 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1696 yyerror("expected yes or no."); 1697 else cfg_parser->cfg->harden_large_queries = 1698 (strcmp(yystack.l_mark[0].str, "yes")==0); 1699 free(yystack.l_mark[0].str); 1700 } 1701break; 1702case 186: 1703#line 756 "util/configparser.y" 1704 { 1705 OUTYY(("P(server_harden_glue:%s)\n", yystack.l_mark[0].str)); 1706 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1707 yyerror("expected yes or no."); 1708 else cfg_parser->cfg->harden_glue = 1709 (strcmp(yystack.l_mark[0].str, "yes")==0); 1710 free(yystack.l_mark[0].str); 1711 } 1712break; 1713case 187: 1714#line 766 "util/configparser.y" 1715 { 1716 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", yystack.l_mark[0].str)); 1717 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1718 yyerror("expected yes or no."); 1719 else cfg_parser->cfg->harden_dnssec_stripped = 1720 (strcmp(yystack.l_mark[0].str, "yes")==0); 1721 free(yystack.l_mark[0].str); 1722 } 1723break; 1724case 188: 1725#line 776 "util/configparser.y" 1726 { 1727 OUTYY(("P(server_harden_below_nxdomain:%s)\n", yystack.l_mark[0].str)); 1728 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1729 yyerror("expected yes or no."); 1730 else cfg_parser->cfg->harden_below_nxdomain = 1731 (strcmp(yystack.l_mark[0].str, "yes")==0); 1732 free(yystack.l_mark[0].str); 1733 } 1734break; 1735case 189: 1736#line 786 "util/configparser.y" 1737 { 1738 OUTYY(("P(server_harden_referral_path:%s)\n", yystack.l_mark[0].str)); 1739 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1740 yyerror("expected yes or no."); 1741 else cfg_parser->cfg->harden_referral_path = 1742 (strcmp(yystack.l_mark[0].str, "yes")==0); 1743 free(yystack.l_mark[0].str); 1744 } 1745break; 1746case 190: 1747#line 796 "util/configparser.y" 1748 { 1749 OUTYY(("P(server_use_caps_for_id:%s)\n", yystack.l_mark[0].str)); 1750 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1751 yyerror("expected yes or no."); 1752 else cfg_parser->cfg->use_caps_bits_for_id = 1753 (strcmp(yystack.l_mark[0].str, "yes")==0); 1754 free(yystack.l_mark[0].str); 1755 } 1756break; 1757case 191: 1758#line 806 "util/configparser.y" 1759 { 1760 OUTYY(("P(server_private_address:%s)\n", yystack.l_mark[0].str)); 1761 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, yystack.l_mark[0].str)) 1762 yyerror("out of memory"); 1763 } 1764break; 1765case 192: 1766#line 813 "util/configparser.y" 1767 { 1768 OUTYY(("P(server_private_domain:%s)\n", yystack.l_mark[0].str)); 1769 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, yystack.l_mark[0].str)) 1770 yyerror("out of memory"); 1771 } 1772break; 1773case 193: 1774#line 820 "util/configparser.y" 1775 { 1776 OUTYY(("P(server_prefetch:%s)\n", yystack.l_mark[0].str)); 1777 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1778 yyerror("expected yes or no."); 1779 else cfg_parser->cfg->prefetch = (strcmp(yystack.l_mark[0].str, "yes")==0); 1780 free(yystack.l_mark[0].str); 1781 } 1782break; 1783case 194: 1784#line 829 "util/configparser.y" 1785 { 1786 OUTYY(("P(server_prefetch_key:%s)\n", yystack.l_mark[0].str)); 1787 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1788 yyerror("expected yes or no."); 1789 else cfg_parser->cfg->prefetch_key = (strcmp(yystack.l_mark[0].str, "yes")==0); 1790 free(yystack.l_mark[0].str); 1791 } 1792break; 1793case 195: 1794#line 838 "util/configparser.y" 1795 { 1796 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", yystack.l_mark[0].str)); 1797 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1798 yyerror("number expected"); 1799 else cfg_parser->cfg->unwanted_threshold = atoi(yystack.l_mark[0].str); 1800 free(yystack.l_mark[0].str); 1801 } 1802break; 1803case 196: 1804#line 847 "util/configparser.y" 1805 { 1806 OUTYY(("P(server_do_not_query_address:%s)\n", yystack.l_mark[0].str)); 1807 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, yystack.l_mark[0].str)) 1808 yyerror("out of memory"); 1809 } 1810break; 1811case 197: 1812#line 854 "util/configparser.y" 1813 { 1814 OUTYY(("P(server_do_not_query_localhost:%s)\n", yystack.l_mark[0].str)); 1815 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1816 yyerror("expected yes or no."); 1817 else cfg_parser->cfg->donotquery_localhost = 1818 (strcmp(yystack.l_mark[0].str, "yes")==0); 1819 free(yystack.l_mark[0].str); 1820 } 1821break; 1822case 198: 1823#line 864 "util/configparser.y" 1824 { 1825 OUTYY(("P(server_access_control:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); 1826 if(strcmp(yystack.l_mark[0].str, "deny")!=0 && strcmp(yystack.l_mark[0].str, "refuse")!=0 && 1827 strcmp(yystack.l_mark[0].str, "allow")!=0 && 1828 strcmp(yystack.l_mark[0].str, "allow_snoop")!=0) { 1829 yyerror("expected deny, refuse, allow or allow_snoop " 1830 "in access control action"); 1831 } else { 1832 if(!cfg_str2list_insert(&cfg_parser->cfg->acls, yystack.l_mark[-1].str, yystack.l_mark[0].str)) 1833 fatal_exit("out of memory adding acl"); 1834 } 1835 } 1836break; 1837case 199: 1838#line 878 "util/configparser.y" 1839 { 1840 OUTYY(("P(server_module_conf:%s)\n", yystack.l_mark[0].str)); 1841 free(cfg_parser->cfg->module_conf); 1842 cfg_parser->cfg->module_conf = yystack.l_mark[0].str; 1843 } 1844break; 1845case 200: 1846#line 885 "util/configparser.y" 1847 { 1848 OUTYY(("P(server_val_override_date:%s)\n", yystack.l_mark[0].str)); 1849 if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) { 1850 cfg_parser->cfg->val_date_override = 0; 1851 } else if(strlen(yystack.l_mark[0].str) == 14) { 1852 cfg_parser->cfg->val_date_override = 1853 cfg_convert_timeval(yystack.l_mark[0].str); 1854 if(!cfg_parser->cfg->val_date_override) 1855 yyerror("bad date/time specification"); 1856 } else { 1857 if(atoi(yystack.l_mark[0].str) == 0) 1858 yyerror("number expected"); 1859 cfg_parser->cfg->val_date_override = atoi(yystack.l_mark[0].str); 1860 } 1861 free(yystack.l_mark[0].str); 1862 } 1863break; 1864case 201: 1865#line 903 "util/configparser.y" 1866 { 1867 OUTYY(("P(server_val_sig_skew_min:%s)\n", yystack.l_mark[0].str)); 1868 if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) { 1869 cfg_parser->cfg->val_sig_skew_min = 0; 1870 } else { 1871 cfg_parser->cfg->val_sig_skew_min = atoi(yystack.l_mark[0].str); 1872 if(!cfg_parser->cfg->val_sig_skew_min) 1873 yyerror("number expected"); 1874 } 1875 free(yystack.l_mark[0].str); 1876 } 1877break; 1878case 202: 1879#line 916 "util/configparser.y" 1880 { 1881 OUTYY(("P(server_val_sig_skew_max:%s)\n", yystack.l_mark[0].str)); 1882 if(strlen(yystack.l_mark[0].str) == 0 || strcmp(yystack.l_mark[0].str, "0") == 0) { 1883 cfg_parser->cfg->val_sig_skew_max = 0; 1884 } else { 1885 cfg_parser->cfg->val_sig_skew_max = atoi(yystack.l_mark[0].str); 1886 if(!cfg_parser->cfg->val_sig_skew_max) 1887 yyerror("number expected"); 1888 } 1889 free(yystack.l_mark[0].str); 1890 } 1891break; 1892case 203: 1893#line 929 "util/configparser.y" 1894 { 1895 OUTYY(("P(server_cache_max_ttl:%s)\n", yystack.l_mark[0].str)); 1896 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1897 yyerror("number expected"); 1898 else cfg_parser->cfg->max_ttl = atoi(yystack.l_mark[0].str); 1899 free(yystack.l_mark[0].str); 1900 } 1901break; 1902case 204: 1903#line 938 "util/configparser.y" 1904 { 1905 OUTYY(("P(server_cache_min_ttl:%s)\n", yystack.l_mark[0].str)); 1906 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1907 yyerror("number expected"); 1908 else cfg_parser->cfg->min_ttl = atoi(yystack.l_mark[0].str); 1909 free(yystack.l_mark[0].str); 1910 } 1911break; 1912case 205: 1913#line 947 "util/configparser.y" 1914 { 1915 OUTYY(("P(server_bogus_ttl:%s)\n", yystack.l_mark[0].str)); 1916 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1917 yyerror("number expected"); 1918 else cfg_parser->cfg->bogus_ttl = atoi(yystack.l_mark[0].str); 1919 free(yystack.l_mark[0].str); 1920 } 1921break; 1922case 206: 1923#line 956 "util/configparser.y" 1924 { 1925 OUTYY(("P(server_val_clean_additional:%s)\n", yystack.l_mark[0].str)); 1926 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1927 yyerror("expected yes or no."); 1928 else cfg_parser->cfg->val_clean_additional = 1929 (strcmp(yystack.l_mark[0].str, "yes")==0); 1930 free(yystack.l_mark[0].str); 1931 } 1932break; 1933case 207: 1934#line 966 "util/configparser.y" 1935 { 1936 OUTYY(("P(server_val_permissive_mode:%s)\n", yystack.l_mark[0].str)); 1937 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1938 yyerror("expected yes or no."); 1939 else cfg_parser->cfg->val_permissive_mode = 1940 (strcmp(yystack.l_mark[0].str, "yes")==0); 1941 free(yystack.l_mark[0].str); 1942 } 1943break; 1944case 208: 1945#line 976 "util/configparser.y" 1946 { 1947 OUTYY(("P(server_ignore_cd_flag:%s)\n", yystack.l_mark[0].str)); 1948 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 1949 yyerror("expected yes or no."); 1950 else cfg_parser->cfg->ignore_cd = (strcmp(yystack.l_mark[0].str, "yes")==0); 1951 free(yystack.l_mark[0].str); 1952 } 1953break; 1954case 209: 1955#line 985 "util/configparser.y" 1956 { 1957 OUTYY(("P(server_val_log_level:%s)\n", yystack.l_mark[0].str)); 1958 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1959 yyerror("number expected"); 1960 else cfg_parser->cfg->val_log_level = atoi(yystack.l_mark[0].str); 1961 free(yystack.l_mark[0].str); 1962 } 1963break; 1964case 210: 1965#line 994 "util/configparser.y" 1966 { 1967 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", yystack.l_mark[0].str)); 1968 free(cfg_parser->cfg->val_nsec3_key_iterations); 1969 cfg_parser->cfg->val_nsec3_key_iterations = yystack.l_mark[0].str; 1970 } 1971break; 1972case 211: 1973#line 1001 "util/configparser.y" 1974 { 1975 OUTYY(("P(server_add_holddown:%s)\n", yystack.l_mark[0].str)); 1976 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1977 yyerror("number expected"); 1978 else cfg_parser->cfg->add_holddown = atoi(yystack.l_mark[0].str); 1979 free(yystack.l_mark[0].str); 1980 } 1981break; 1982case 212: 1983#line 1010 "util/configparser.y" 1984 { 1985 OUTYY(("P(server_del_holddown:%s)\n", yystack.l_mark[0].str)); 1986 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1987 yyerror("number expected"); 1988 else cfg_parser->cfg->del_holddown = atoi(yystack.l_mark[0].str); 1989 free(yystack.l_mark[0].str); 1990 } 1991break; 1992case 213: 1993#line 1019 "util/configparser.y" 1994 { 1995 OUTYY(("P(server_keep_missing:%s)\n", yystack.l_mark[0].str)); 1996 if(atoi(yystack.l_mark[0].str) == 0 && strcmp(yystack.l_mark[0].str, "0") != 0) 1997 yyerror("number expected"); 1998 else cfg_parser->cfg->keep_missing = atoi(yystack.l_mark[0].str); 1999 free(yystack.l_mark[0].str); 2000 } 2001break; 2002case 214: 2003#line 1028 "util/configparser.y" 2004 { 2005 OUTYY(("P(server_key_cache_size:%s)\n", yystack.l_mark[0].str)); 2006 if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->key_cache_size)) 2007 yyerror("memory size expected"); 2008 free(yystack.l_mark[0].str); 2009 } 2010break; 2011case 215: 2012#line 1036 "util/configparser.y" 2013 { 2014 OUTYY(("P(server_key_cache_slabs:%s)\n", yystack.l_mark[0].str)); 2015 if(atoi(yystack.l_mark[0].str) == 0) 2016 yyerror("number expected"); 2017 else { 2018 cfg_parser->cfg->key_cache_slabs = atoi(yystack.l_mark[0].str); 2019 if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) 2020 yyerror("must be a power of 2"); 2021 } 2022 free(yystack.l_mark[0].str); 2023 } 2024break; 2025case 216: 2026#line 1049 "util/configparser.y" 2027 { 2028 OUTYY(("P(server_neg_cache_size:%s)\n", yystack.l_mark[0].str)); 2029 if(!cfg_parse_memsize(yystack.l_mark[0].str, &cfg_parser->cfg->neg_cache_size)) 2030 yyerror("memory size expected"); 2031 free(yystack.l_mark[0].str); 2032 } 2033break; 2034case 217: 2035#line 1057 "util/configparser.y" 2036 { 2037 OUTYY(("P(server_local_zone:%s %s)\n", yystack.l_mark[-1].str, yystack.l_mark[0].str)); 2038 if(strcmp(yystack.l_mark[0].str, "static")!=0 && strcmp(yystack.l_mark[0].str, "deny")!=0 && 2039 strcmp(yystack.l_mark[0].str, "refuse")!=0 && strcmp(yystack.l_mark[0].str, "redirect")!=0 && 2040 strcmp(yystack.l_mark[0].str, "transparent")!=0 && strcmp(yystack.l_mark[0].str, "nodefault")!=0 2041 && strcmp(yystack.l_mark[0].str, "typetransparent")!=0) 2042 yyerror("local-zone type: expected static, deny, " 2043 "refuse, redirect, transparent, " 2044 "typetransparent or nodefault"); 2045 else if(strcmp(yystack.l_mark[0].str, "nodefault")==0) { 2046 if(!cfg_strlist_insert(&cfg_parser->cfg-> 2047 local_zones_nodefault, yystack.l_mark[-1].str)) 2048 fatal_exit("out of memory adding local-zone"); 2049 free(yystack.l_mark[0].str); 2050 } else { 2051 if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 2052 yystack.l_mark[-1].str, yystack.l_mark[0].str)) 2053 fatal_exit("out of memory adding local-zone"); 2054 } 2055 } 2056break; 2057case 218: 2058#line 1079 "util/configparser.y" 2059 { 2060 OUTYY(("P(server_local_data:%s)\n", yystack.l_mark[0].str)); 2061 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, yystack.l_mark[0].str)) 2062 fatal_exit("out of memory adding local-data"); 2063 } 2064break; 2065case 219: 2066#line 1086 "util/configparser.y" 2067 { 2068 char* ptr; 2069 OUTYY(("P(server_local_data_ptr:%s)\n", yystack.l_mark[0].str)); 2070 ptr = cfg_ptr_reverse(yystack.l_mark[0].str); 2071 free(yystack.l_mark[0].str); 2072 if(ptr) { 2073 if(!cfg_strlist_insert(&cfg_parser->cfg-> 2074 local_data, ptr)) 2075 fatal_exit("out of memory adding local-data"); 2076 } else { 2077 yyerror("local-data-ptr could not be reversed"); 2078 } 2079 } 2080break; 2081case 220: 2082#line 1101 "util/configparser.y" 2083 { 2084 OUTYY(("P(server_minimal_responses:%s)\n", yystack.l_mark[0].str)); 2085 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 2086 yyerror("expected yes or no."); 2087 else cfg_parser->cfg->minimal_responses = 2088 (strcmp(yystack.l_mark[0].str, "yes")==0); 2089 free(yystack.l_mark[0].str); 2090 } 2091break; 2092case 221: 2093#line 1111 "util/configparser.y" 2094 { 2095 OUTYY(("P(server_rrset_roundrobin:%s)\n", yystack.l_mark[0].str)); 2096 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 2097 yyerror("expected yes or no."); 2098 else cfg_parser->cfg->rrset_roundrobin = 2099 (strcmp(yystack.l_mark[0].str, "yes")==0); 2100 free(yystack.l_mark[0].str); 2101 } 2102break; 2103case 222: 2104#line 1121 "util/configparser.y" 2105 { 2106 OUTYY(("P(name:%s)\n", yystack.l_mark[0].str)); 2107 if(cfg_parser->cfg->stubs->name) 2108 yyerror("stub name override, there must be one name " 2109 "for one stub-zone"); 2110 free(cfg_parser->cfg->stubs->name); 2111 cfg_parser->cfg->stubs->name = yystack.l_mark[0].str; 2112 } 2113break; 2114case 223: 2115#line 1131 "util/configparser.y" 2116 { 2117 OUTYY(("P(stub-host:%s)\n", yystack.l_mark[0].str)); 2118 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, yystack.l_mark[0].str)) 2119 yyerror("out of memory"); 2120 } 2121break; 2122case 224: 2123#line 1138 "util/configparser.y" 2124 { 2125 OUTYY(("P(stub-addr:%s)\n", yystack.l_mark[0].str)); 2126 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, yystack.l_mark[0].str)) 2127 yyerror("out of memory"); 2128 } 2129break; 2130case 225: 2131#line 1145 "util/configparser.y" 2132 { 2133 OUTYY(("P(stub-first:%s)\n", yystack.l_mark[0].str)); 2134 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 2135 yyerror("expected yes or no."); 2136 else cfg_parser->cfg->stubs->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0); 2137 free(yystack.l_mark[0].str); 2138 } 2139break; 2140case 226: 2141#line 1154 "util/configparser.y" 2142 { 2143 OUTYY(("P(stub-prime:%s)\n", yystack.l_mark[0].str)); 2144 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 2145 yyerror("expected yes or no."); 2146 else cfg_parser->cfg->stubs->isprime = 2147 (strcmp(yystack.l_mark[0].str, "yes")==0); 2148 free(yystack.l_mark[0].str); 2149 } 2150break; 2151case 227: 2152#line 1164 "util/configparser.y" 2153 { 2154 OUTYY(("P(name:%s)\n", yystack.l_mark[0].str)); 2155 if(cfg_parser->cfg->forwards->name) 2156 yyerror("forward name override, there must be one " 2157 "name for one forward-zone"); 2158 free(cfg_parser->cfg->forwards->name); 2159 cfg_parser->cfg->forwards->name = yystack.l_mark[0].str; 2160 } 2161break; 2162case 228: 2163#line 1174 "util/configparser.y" 2164 { 2165 OUTYY(("P(forward-host:%s)\n", yystack.l_mark[0].str)); 2166 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, yystack.l_mark[0].str)) 2167 yyerror("out of memory"); 2168 } 2169break; 2170case 229: 2171#line 1181 "util/configparser.y" 2172 { 2173 OUTYY(("P(forward-addr:%s)\n", yystack.l_mark[0].str)); 2174 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, yystack.l_mark[0].str)) 2175 yyerror("out of memory"); 2176 } 2177break; 2178case 230: 2179#line 1188 "util/configparser.y" 2180 { 2181 OUTYY(("P(forward-first:%s)\n", yystack.l_mark[0].str)); 2182 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 2183 yyerror("expected yes or no."); 2184 else cfg_parser->cfg->forwards->isfirst=(strcmp(yystack.l_mark[0].str, "yes")==0); 2185 free(yystack.l_mark[0].str); 2186 } 2187break; 2188case 231: 2189#line 1197 "util/configparser.y" 2190 { 2191 OUTYY(("\nP(remote-control:)\n")); 2192 } 2193break; 2194case 241: 2195#line 1208 "util/configparser.y" 2196 { 2197 OUTYY(("P(control_enable:%s)\n", yystack.l_mark[0].str)); 2198 if(strcmp(yystack.l_mark[0].str, "yes") != 0 && strcmp(yystack.l_mark[0].str, "no") != 0) 2199 yyerror("expected yes or no."); 2200 else cfg_parser->cfg->remote_control_enable = 2201 (strcmp(yystack.l_mark[0].str, "yes")==0); 2202 free(yystack.l_mark[0].str); 2203 } 2204break; 2205case 242: 2206#line 1218 "util/configparser.y" 2207 { 2208 OUTYY(("P(control_port:%s)\n", yystack.l_mark[0].str)); 2209 if(atoi(yystack.l_mark[0].str) == 0) 2210 yyerror("control port number expected"); 2211 else cfg_parser->cfg->control_port = atoi(yystack.l_mark[0].str); 2212 free(yystack.l_mark[0].str); 2213 } 2214break; 2215case 243: 2216#line 1227 "util/configparser.y" 2217 { 2218 OUTYY(("P(control_interface:%s)\n", yystack.l_mark[0].str)); 2219 if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, yystack.l_mark[0].str)) 2220 yyerror("out of memory"); 2221 } 2222break; 2223case 244: 2224#line 1234 "util/configparser.y" 2225 { 2226 OUTYY(("P(rc_server_key_file:%s)\n", yystack.l_mark[0].str)); 2227 free(cfg_parser->cfg->server_key_file); 2228 cfg_parser->cfg->server_key_file = yystack.l_mark[0].str; 2229 } 2230break; 2231case 245: 2232#line 1241 "util/configparser.y" 2233 { 2234 OUTYY(("P(rc_server_cert_file:%s)\n", yystack.l_mark[0].str)); 2235 free(cfg_parser->cfg->server_cert_file); 2236 cfg_parser->cfg->server_cert_file = yystack.l_mark[0].str; 2237 } 2238break; 2239case 246: 2240#line 1248 "util/configparser.y" 2241 { 2242 OUTYY(("P(rc_control_key_file:%s)\n", yystack.l_mark[0].str)); 2243 free(cfg_parser->cfg->control_key_file); 2244 cfg_parser->cfg->control_key_file = yystack.l_mark[0].str; 2245 } 2246break; 2247case 247: 2248#line 1255 "util/configparser.y" 2249 { 2250 OUTYY(("P(rc_control_cert_file:%s)\n", yystack.l_mark[0].str)); 2251 free(cfg_parser->cfg->control_cert_file); 2252 cfg_parser->cfg->control_cert_file = yystack.l_mark[0].str; 2253 } 2254break; 2255case 248: 2256#line 1262 "util/configparser.y" 2257 { 2258 OUTYY(("\nP(python:)\n")); 2259 } 2260break; 2261case 252: 2262#line 1271 "util/configparser.y" 2263 { 2264 OUTYY(("P(python-script:%s)\n", yystack.l_mark[0].str)); 2265 free(cfg_parser->cfg->python_script); 2266 cfg_parser->cfg->python_script = yystack.l_mark[0].str; 2267 } 2268break; 2269#line 2269 "util/configparser.c" 2270 } 2271 yystack.s_mark -= yym; 2272 yystate = *yystack.s_mark; 2273 yystack.l_mark -= yym; 2274 yym = yylhs[yyn]; 2275 if (yystate == 0 && yym == 0) 2276 { 2277#if YYDEBUG 2278 if (yydebug) 2279 printf("%sdebug: after reduction, shifting from state 0 to\ 2280 state %d\n", YYPREFIX, YYFINAL); 2281#endif 2282 yystate = YYFINAL; 2283 *++yystack.s_mark = YYFINAL; 2284 *++yystack.l_mark = yyval; 2285 if (yychar < 0) 2286 { 2287 if ((yychar = YYLEX) < 0) yychar = 0; 2288#if YYDEBUG 2289 if (yydebug) 2290 { 2291 yys = 0; 2292 if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 2293 if (!yys) yys = "illegal-symbol"; 2294 printf("%sdebug: state %d, reading %d (%s)\n", 2295 YYPREFIX, YYFINAL, yychar, yys); 2296 } 2297#endif 2298 } 2299 if (yychar == 0) goto yyaccept; 2300 goto yyloop; 2301 } 2302 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 2303 yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 2304 yystate = yytable[yyn]; 2305 else 2306 yystate = yydgoto[yym]; 2307#if YYDEBUG 2308 if (yydebug) 2309 printf("%sdebug: after reduction, shifting from state %d \ 2310to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 2311#endif 2312 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 2313 { 2314 goto yyoverflow; 2315 } 2316 *++yystack.s_mark = (short) yystate; 2317 *++yystack.l_mark = yyval; 2318 goto yyloop; 2319 2320yyoverflow: 2321 yyerror("yacc stack overflow"); 2322 2323yyabort: 2324 yyfreestack(&yystack); 2325 return (1); 2326 2327yyaccept: 2328 yyfreestack(&yystack); 2329 return (0); 2330} 2331