1 #ifndef lint 2 static 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 31 int ub_c_lex(void); 32 void ub_c_error(const char *message); 33 34 /* these need to be global, otherwise they cannot be used inside yacc */ 35 extern 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 50 typedef 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 85 extern 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 215 static 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 }; 243 static 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 }; 271 static 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 }; 310 static 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 }; 326 static 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 }; 365 static 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 }; 404 static 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 421 static 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 }; 460 static 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 505 static 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, 508 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,0, 509 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,0, 510 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,0, 511 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,0, 512 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,0, 513 0,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 }; 551 static 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 809 int yydebug; 810 int yynerrs; 811 812 int yyerrflag; 813 int yychar; 814 YYSTYPE yyval; 815 YYSTYPE 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 832 typedef 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 */ 841 static 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 */ 855 static 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) 890 static 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 905 int 906 YYPARSE_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 935 yyloop: 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 982 yyerrlab: 983 ++yynerrs; 984 985 yyinrecovery: 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 1038 yyreduce: 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 { 1051 case 8: 1052 #line 118 "util/configparser.y" 1053 { 1054 OUTYY(("\nP(server:)\n")); 1055 } 1056 break; 1057 case 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 } 1069 break; 1070 case 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 } 1082 break; 1083 case 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 } 1092 break; 1093 case 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 } 1102 break; 1103 case 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 } 1114 break; 1115 case 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 } 1124 break; 1125 case 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 } 1134 break; 1135 case 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 } 1144 break; 1145 case 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 } 1158 break; 1159 case 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 } 1174 break; 1175 case 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 } 1184 break; 1185 case 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 } 1194 break; 1195 case 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 } 1204 break; 1205 case 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 } 1214 break; 1215 case 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 } 1224 break; 1225 case 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 } 1234 break; 1235 case 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 } 1244 break; 1245 case 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 } 1254 break; 1255 case 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 } 1264 break; 1265 case 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 } 1274 break; 1275 case 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 } 1284 break; 1285 case 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 } 1294 break; 1295 case 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 } 1302 break; 1303 case 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 } 1310 break; 1311 case 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 } 1320 break; 1321 case 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 } 1330 break; 1331 case 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 } 1345 break; 1346 case 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 } 1355 break; 1356 case 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 } 1365 break; 1366 case 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 } 1373 break; 1374 case 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 } 1381 break; 1382 case 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 } 1389 break; 1390 case 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 } 1398 break; 1399 case 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 } 1406 break; 1407 case 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 } 1414 break; 1415 case 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 } 1422 break; 1423 case 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 } 1430 break; 1431 case 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 } 1439 break; 1440 case 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 } 1448 break; 1449 case 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 } 1457 break; 1458 case 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 } 1465 break; 1466 case 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 } 1473 break; 1474 case 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 } 1483 break; 1484 case 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 } 1493 break; 1494 case 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 } 1501 break; 1502 case 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 } 1509 break; 1510 case 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 } 1518 break; 1519 case 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 } 1527 break; 1528 case 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 } 1541 break; 1542 case 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 } 1553 break; 1554 case 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 } 1562 break; 1563 case 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 } 1576 break; 1577 case 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 } 1586 break; 1587 case 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 } 1596 break; 1597 case 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 } 1605 break; 1606 case 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 } 1619 break; 1620 case 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 } 1629 break; 1630 case 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 } 1638 break; 1639 case 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 } 1648 break; 1649 case 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 } 1657 break; 1658 case 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 } 1671 break; 1672 case 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 } 1679 break; 1680 case 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 } 1690 break; 1691 case 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 } 1701 break; 1702 case 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 } 1712 break; 1713 case 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 } 1723 break; 1724 case 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 } 1734 break; 1735 case 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 } 1745 break; 1746 case 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 } 1756 break; 1757 case 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 } 1764 break; 1765 case 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 } 1772 break; 1773 case 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 } 1782 break; 1783 case 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 } 1792 break; 1793 case 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 } 1802 break; 1803 case 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 } 1810 break; 1811 case 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 } 1821 break; 1822 case 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 } 1836 break; 1837 case 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 } 1844 break; 1845 case 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 } 1863 break; 1864 case 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 } 1877 break; 1878 case 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 } 1891 break; 1892 case 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 } 1901 break; 1902 case 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 } 1911 break; 1912 case 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 } 1921 break; 1922 case 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 } 1932 break; 1933 case 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 } 1943 break; 1944 case 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 } 1953 break; 1954 case 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 } 1963 break; 1964 case 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 } 1971 break; 1972 case 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 } 1981 break; 1982 case 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 } 1991 break; 1992 case 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 } 2001 break; 2002 case 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 } 2010 break; 2011 case 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 } 2024 break; 2025 case 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 } 2033 break; 2034 case 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 } 2056 break; 2057 case 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 } 2064 break; 2065 case 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 } 2080 break; 2081 case 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 } 2091 break; 2092 case 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 } 2102 break; 2103 case 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 } 2113 break; 2114 case 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 } 2121 break; 2122 case 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 } 2129 break; 2130 case 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 } 2139 break; 2140 case 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 } 2150 break; 2151 case 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 } 2161 break; 2162 case 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 } 2169 break; 2170 case 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 } 2177 break; 2178 case 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 } 2187 break; 2188 case 231: 2189 #line 1197 "util/configparser.y" 2190 { 2191 OUTYY(("\nP(remote-control:)\n")); 2192 } 2193 break; 2194 case 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 } 2204 break; 2205 case 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 } 2214 break; 2215 case 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 } 2222 break; 2223 case 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 } 2230 break; 2231 case 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 } 2238 break; 2239 case 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 } 2246 break; 2247 case 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 } 2254 break; 2255 case 248: 2256 #line 1262 "util/configparser.y" 2257 { 2258 OUTYY(("\nP(python:)\n")); 2259 } 2260 break; 2261 case 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 } 2268 break; 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 \ 2310 to 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 2320 yyoverflow: 2321 yyerror("yacc stack overflow"); 2322 2323 yyabort: 2324 yyfreestack(&yystack); 2325 return (1); 2326 2327 yyaccept: 2328 yyfreestack(&yystack); 2329 return (0); 2330 } 2331