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