#ifndef lint static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif #include #include #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYPATCH 20070509 #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING (yyerrflag != 0) extern int yyparse(void); static int yygrowstack(void); #define YYPREFIX "yy" #line 39 "util/configparser.y" #include "config.h" #include #include #include #include #include #include "util/configyyrename.h" #include "util/config_file.h" #include "util/net_help.h" int ub_c_lex(void); void ub_c_error(const char *message); /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; #if 0 #define OUTYY(s) printf s /* used ONLY when debugging */ #else #define OUTYY(s) #endif #line 64 "util/configparser.y" typedef union { char* str; } YYSTYPE; #line 52 "util/configparser.c" #define SPACE 257 #define LETTER 258 #define NEWLINE 259 #define COMMENT 260 #define COLON 261 #define ANY 262 #define ZONESTR 263 #define STRING 264 #define VAR_SERVER 265 #define VAR_VERBOSITY 266 #define VAR_NUM_THREADS 267 #define VAR_PORT 268 #define VAR_OUTGOING_RANGE 269 #define VAR_INTERFACE 270 #define VAR_DO_IP4 271 #define VAR_DO_IP6 272 #define VAR_DO_UDP 273 #define VAR_DO_TCP 274 #define VAR_CHROOT 275 #define VAR_USERNAME 276 #define VAR_DIRECTORY 277 #define VAR_LOGFILE 278 #define VAR_PIDFILE 279 #define VAR_MSG_CACHE_SIZE 280 #define VAR_MSG_CACHE_SLABS 281 #define VAR_NUM_QUERIES_PER_THREAD 282 #define VAR_RRSET_CACHE_SIZE 283 #define VAR_RRSET_CACHE_SLABS 284 #define VAR_OUTGOING_NUM_TCP 285 #define VAR_INFRA_HOST_TTL 286 #define VAR_INFRA_LAME_TTL 287 #define VAR_INFRA_CACHE_SLABS 288 #define VAR_INFRA_CACHE_NUMHOSTS 289 #define VAR_INFRA_CACHE_LAME_SIZE 290 #define VAR_NAME 291 #define VAR_STUB_ZONE 292 #define VAR_STUB_HOST 293 #define VAR_STUB_ADDR 294 #define VAR_TARGET_FETCH_POLICY 295 #define VAR_HARDEN_SHORT_BUFSIZE 296 #define VAR_HARDEN_LARGE_QUERIES 297 #define VAR_FORWARD_ZONE 298 #define VAR_FORWARD_HOST 299 #define VAR_FORWARD_ADDR 300 #define VAR_DO_NOT_QUERY_ADDRESS 301 #define VAR_HIDE_IDENTITY 302 #define VAR_HIDE_VERSION 303 #define VAR_IDENTITY 304 #define VAR_VERSION 305 #define VAR_HARDEN_GLUE 306 #define VAR_MODULE_CONF 307 #define VAR_TRUST_ANCHOR_FILE 308 #define VAR_TRUST_ANCHOR 309 #define VAR_VAL_OVERRIDE_DATE 310 #define VAR_BOGUS_TTL 311 #define VAR_VAL_CLEAN_ADDITIONAL 312 #define VAR_VAL_PERMISSIVE_MODE 313 #define VAR_INCOMING_NUM_TCP 314 #define VAR_MSG_BUFFER_SIZE 315 #define VAR_KEY_CACHE_SIZE 316 #define VAR_KEY_CACHE_SLABS 317 #define VAR_TRUSTED_KEYS_FILE 318 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319 #define VAR_USE_SYSLOG 320 #define VAR_OUTGOING_INTERFACE 321 #define VAR_ROOT_HINTS 322 #define VAR_DO_NOT_QUERY_LOCALHOST 323 #define VAR_CACHE_MAX_TTL 324 #define VAR_HARDEN_DNNSEC_STRIPPED 325 #define VAR_ACCESS_CONTROL 326 #define VAR_LOCAL_ZONE 327 #define VAR_LOCAL_DATA 328 #define VAR_INTERFACE_AUTOMATIC 329 #define VAR_STATISTICS_INTERVAL 330 #define VAR_DO_DAEMONIZE 331 #define VAR_USE_CAPS_FOR_ID 332 #define VAR_STATISTICS_CUMULATIVE 333 #define VAR_OUTGOING_PORT_PERMIT 334 #define VAR_OUTGOING_PORT_AVOID 335 #define VAR_DLV_ANCHOR_FILE 336 #define VAR_DLV_ANCHOR 337 #define VAR_NEG_CACHE_SIZE 338 #define VAR_HARDEN_REFERRAL_PATH 339 #define VAR_PRIVATE_ADDRESS 340 #define VAR_PRIVATE_DOMAIN 341 #define VAR_REMOTE_CONTROL 342 #define VAR_CONTROL_ENABLE 343 #define VAR_CONTROL_INTERFACE 344 #define VAR_CONTROL_PORT 345 #define VAR_SERVER_KEY_FILE 346 #define VAR_SERVER_CERT_FILE 347 #define VAR_CONTROL_KEY_FILE 348 #define VAR_CONTROL_CERT_FILE 349 #define VAR_EXTENDED_STATISTICS 350 #define VAR_LOCAL_DATA_PTR 351 #define VAR_JOSTLE_TIMEOUT 352 #define VAR_STUB_PRIME 353 #define VAR_UNWANTED_REPLY_THRESHOLD 354 #define VAR_LOG_TIME_ASCII 355 #define YYERRCODE 256 short yylhs[] = { -1, 0, 0, 1, 1, 1, 1, 2, 3, 3, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 5, 5, 85, 85, 85, 85, 6, 7, 7, 90, 90, 90, 11, 12, 68, 71, 80, 13, 19, 59, 14, 72, 73, 30, 52, 67, 15, 16, 17, 18, 69, 58, 84, 20, 21, 22, 23, 24, 60, 74, 75, 46, 56, 47, 40, 41, 42, 43, 53, 25, 26, 27, 82, 28, 29, 31, 32, 34, 35, 33, 36, 37, 38, 44, 63, 77, 70, 78, 79, 83, 39, 61, 64, 45, 48, 62, 49, 50, 51, 57, 54, 55, 76, 65, 66, 81, 86, 87, 88, 89, 91, 92, 93, 8, 9, 9, 94, 94, 94, 94, 94, 94, 94, 95, 97, 96, 98, 99, 100, 101, }; short yylen[] = { 2, 0, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, }; short yydefred[] = { 1, 0, 7, 84, 91, 178, 2, 9, 86, 93, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 0, 0, 0, 0, 85, 87, 88, 89, 90, 0, 0, 0, 92, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 179, 181, 182, 183, 184, 185, 186, 187, 98, 97, 102, 105, 103, 111, 112, 113, 114, 118, 119, 120, 121, 122, 134, 135, 136, 138, 139, 108, 140, 141, 144, 142, 143, 145, 146, 147, 155, 129, 130, 131, 132, 148, 158, 126, 128, 159, 161, 162, 163, 109, 133, 165, 166, 127, 164, 116, 104, 123, 156, 160, 149, 0, 0, 169, 110, 99, 115, 151, 100, 106, 107, 124, 125, 167, 150, 152, 153, 101, 170, 137, 154, 117, 171, 172, 173, 174, 175, 176, 177, 188, 190, 189, 191, 192, 193, 194, 157, 168, }; short yydgoto[] = { 1, 6, 7, 11, 8, 12, 9, 13, 10, 14, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 168, 169, 170, 171, 172, 176, 177, 178, 179, 187, 188, 189, 190, 191, 192, 193, 194, }; short yysindex[] = { 0, -184, 0, 0, 0, 0, 0, 0, 0, 0, 0, -261, -209, -204, -246, -264, -234, -233, -232, -231, -227, -226, -225, -181, -178, -176, -172, -160, -159, -158, -157, -155, -154, -153, -152, -151, -149, -148, -147, -146, -145, -144, -143, -142, -141, -140, -139, -138, -137, -136, -135, -134, -133, -132, -131, -130, -129, -128, -127, -126, -125, -124, -123, -122, -121, -119, -118, -117, -116, -115, -114, -113, -112, -111, -110, -109, -108, -107, -105, -104, -103, -102, -101, -100, -99, -98, -97, -96, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, -93, -92, -91, 0, 0, 0, 0, 0, -90, -89, -88, 0, 0, 0, 0, -87, -86, -85, -84, -83, -82, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short yygindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 346 short yytable[] = { 195, 3, 4, 5, 6, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 196, 197, 198, 199, 40, 41, 42, 200, 201, 202, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 2, 164, 203, 165, 166, 204, 173, 205, 84, 85, 86, 206, 87, 88, 174, 175, 180, 181, 182, 183, 184, 185, 186, 207, 208, 209, 210, 3, 211, 212, 213, 214, 215, 4, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 167, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 5, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 6, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 6, }; short yycheck[] = { 264, 0, 0, 0, 0, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 264, 264, 264, 264, 295, 296, 297, 264, 264, 264, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 265, 291, 264, 293, 294, 264, 291, 264, 350, 351, 352, 264, 354, 355, 299, 300, 343, 344, 345, 346, 347, 348, 349, 264, 264, 264, 264, 292, 264, 264, 264, 264, 264, 298, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 353, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 342, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 265, 265, 265, 265, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, 292, 292, 292, -1, -1, 298, 298, 298, 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 342, 342, 342, 342, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 355 #if YYDEBUG char *yyname[] = { "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, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 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", "COMMENT","COLON","ANY","ZONESTR","STRING","VAR_SERVER","VAR_VERBOSITY", "VAR_NUM_THREADS","VAR_PORT","VAR_OUTGOING_RANGE","VAR_INTERFACE","VAR_DO_IP4", "VAR_DO_IP6","VAR_DO_UDP","VAR_DO_TCP","VAR_CHROOT","VAR_USERNAME", "VAR_DIRECTORY","VAR_LOGFILE","VAR_PIDFILE","VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS","VAR_NUM_QUERIES_PER_THREAD","VAR_RRSET_CACHE_SIZE", "VAR_RRSET_CACHE_SLABS","VAR_OUTGOING_NUM_TCP","VAR_INFRA_HOST_TTL", "VAR_INFRA_LAME_TTL","VAR_INFRA_CACHE_SLABS","VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE","VAR_NAME","VAR_STUB_ZONE","VAR_STUB_HOST", "VAR_STUB_ADDR","VAR_TARGET_FETCH_POLICY","VAR_HARDEN_SHORT_BUFSIZE", "VAR_HARDEN_LARGE_QUERIES","VAR_FORWARD_ZONE","VAR_FORWARD_HOST", "VAR_FORWARD_ADDR","VAR_DO_NOT_QUERY_ADDRESS","VAR_HIDE_IDENTITY", "VAR_HIDE_VERSION","VAR_IDENTITY","VAR_VERSION","VAR_HARDEN_GLUE", "VAR_MODULE_CONF","VAR_TRUST_ANCHOR_FILE","VAR_TRUST_ANCHOR", "VAR_VAL_OVERRIDE_DATE","VAR_BOGUS_TTL","VAR_VAL_CLEAN_ADDITIONAL", "VAR_VAL_PERMISSIVE_MODE","VAR_INCOMING_NUM_TCP","VAR_MSG_BUFFER_SIZE", "VAR_KEY_CACHE_SIZE","VAR_KEY_CACHE_SLABS","VAR_TRUSTED_KEYS_FILE", "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS","VAR_USE_SYSLOG","VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS","VAR_DO_NOT_QUERY_LOCALHOST","VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNNSEC_STRIPPED","VAR_ACCESS_CONTROL","VAR_LOCAL_ZONE", "VAR_LOCAL_DATA","VAR_INTERFACE_AUTOMATIC","VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE","VAR_USE_CAPS_FOR_ID","VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT","VAR_OUTGOING_PORT_AVOID","VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR","VAR_NEG_CACHE_SIZE","VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS","VAR_PRIVATE_DOMAIN","VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE","VAR_CONTROL_INTERFACE","VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE","VAR_SERVER_CERT_FILE","VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE","VAR_EXTENDED_STATISTICS","VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT","VAR_STUB_PRIME","VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII", }; char *yyrule[] = { "$accept : toplevelvars", "toplevelvars :", "toplevelvars : toplevelvars toplevelvar", "toplevelvar : serverstart contents_server", "toplevelvar : stubstart contents_stub", "toplevelvar : forwardstart contents_forward", "toplevelvar : rcstart contents_rc", "serverstart : VAR_SERVER", "contents_server : contents_server content_server", "contents_server :", "content_server : server_num_threads", "content_server : server_verbosity", "content_server : server_port", "content_server : server_outgoing_range", "content_server : server_do_ip4", "content_server : server_do_ip6", "content_server : server_do_udp", "content_server : server_do_tcp", "content_server : server_interface", "content_server : server_chroot", "content_server : server_username", "content_server : server_directory", "content_server : server_logfile", "content_server : server_pidfile", "content_server : server_msg_cache_size", "content_server : server_msg_cache_slabs", "content_server : server_num_queries_per_thread", "content_server : server_rrset_cache_size", "content_server : server_rrset_cache_slabs", "content_server : server_outgoing_num_tcp", "content_server : server_infra_host_ttl", "content_server : server_infra_lame_ttl", "content_server : server_infra_cache_slabs", "content_server : server_infra_cache_numhosts", "content_server : server_infra_cache_lame_size", "content_server : server_target_fetch_policy", "content_server : server_harden_short_bufsize", "content_server : server_harden_large_queries", "content_server : server_do_not_query_address", "content_server : server_hide_identity", "content_server : server_hide_version", "content_server : server_identity", "content_server : server_version", "content_server : server_harden_glue", "content_server : server_module_conf", "content_server : server_trust_anchor_file", "content_server : server_trust_anchor", "content_server : server_val_override_date", "content_server : server_bogus_ttl", "content_server : server_val_clean_additional", "content_server : server_val_permissive_mode", "content_server : server_incoming_num_tcp", "content_server : server_msg_buffer_size", "content_server : server_key_cache_size", "content_server : server_key_cache_slabs", "content_server : server_trusted_keys_file", "content_server : server_val_nsec3_keysize_iterations", "content_server : server_use_syslog", "content_server : server_outgoing_interface", "content_server : server_root_hints", "content_server : server_do_not_query_localhost", "content_server : server_cache_max_ttl", "content_server : server_harden_dnssec_stripped", "content_server : server_access_control", "content_server : server_local_zone", "content_server : server_local_data", "content_server : server_interface_automatic", "content_server : server_statistics_interval", "content_server : server_do_daemonize", "content_server : server_use_caps_for_id", "content_server : server_statistics_cumulative", "content_server : server_outgoing_port_permit", "content_server : server_outgoing_port_avoid", "content_server : server_dlv_anchor_file", "content_server : server_dlv_anchor", "content_server : server_neg_cache_size", "content_server : server_harden_referral_path", "content_server : server_private_address", "content_server : server_private_domain", "content_server : server_extended_statistics", "content_server : server_local_data_ptr", "content_server : server_jostle_timeout", "content_server : server_unwanted_reply_threshold", "content_server : server_log_time_ascii", "stubstart : VAR_STUB_ZONE", "contents_stub : contents_stub content_stub", "contents_stub :", "content_stub : stub_name", "content_stub : stub_host", "content_stub : stub_addr", "content_stub : stub_prime", "forwardstart : VAR_FORWARD_ZONE", "contents_forward : contents_forward content_forward", "contents_forward :", "content_forward : forward_name", "content_forward : forward_host", "content_forward : forward_addr", "server_num_threads : VAR_NUM_THREADS STRING", "server_verbosity : VAR_VERBOSITY STRING", "server_statistics_interval : VAR_STATISTICS_INTERVAL STRING", "server_statistics_cumulative : VAR_STATISTICS_CUMULATIVE STRING", "server_extended_statistics : VAR_EXTENDED_STATISTICS STRING", "server_port : VAR_PORT STRING", "server_interface : VAR_INTERFACE STRING", "server_outgoing_interface : VAR_OUTGOING_INTERFACE STRING", "server_outgoing_range : VAR_OUTGOING_RANGE STRING", "server_outgoing_port_permit : VAR_OUTGOING_PORT_PERMIT STRING", "server_outgoing_port_avoid : VAR_OUTGOING_PORT_AVOID STRING", "server_outgoing_num_tcp : VAR_OUTGOING_NUM_TCP STRING", "server_incoming_num_tcp : VAR_INCOMING_NUM_TCP STRING", "server_interface_automatic : VAR_INTERFACE_AUTOMATIC STRING", "server_do_ip4 : VAR_DO_IP4 STRING", "server_do_ip6 : VAR_DO_IP6 STRING", "server_do_udp : VAR_DO_UDP STRING", "server_do_tcp : VAR_DO_TCP STRING", "server_do_daemonize : VAR_DO_DAEMONIZE STRING", "server_use_syslog : VAR_USE_SYSLOG STRING", "server_log_time_ascii : VAR_LOG_TIME_ASCII STRING", "server_chroot : VAR_CHROOT STRING", "server_username : VAR_USERNAME STRING", "server_directory : VAR_DIRECTORY STRING", "server_logfile : VAR_LOGFILE STRING", "server_pidfile : VAR_PIDFILE STRING", "server_root_hints : VAR_ROOT_HINTS STRING", "server_dlv_anchor_file : VAR_DLV_ANCHOR_FILE STRING", "server_dlv_anchor : VAR_DLV_ANCHOR STRING", "server_trust_anchor_file : VAR_TRUST_ANCHOR_FILE STRING", "server_trusted_keys_file : VAR_TRUSTED_KEYS_FILE STRING", "server_trust_anchor : VAR_TRUST_ANCHOR STRING", "server_hide_identity : VAR_HIDE_IDENTITY STRING", "server_hide_version : VAR_HIDE_VERSION STRING", "server_identity : VAR_IDENTITY STRING", "server_version : VAR_VERSION STRING", "server_msg_buffer_size : VAR_MSG_BUFFER_SIZE STRING", "server_msg_cache_size : VAR_MSG_CACHE_SIZE STRING", "server_msg_cache_slabs : VAR_MSG_CACHE_SLABS STRING", "server_num_queries_per_thread : VAR_NUM_QUERIES_PER_THREAD STRING", "server_jostle_timeout : VAR_JOSTLE_TIMEOUT STRING", "server_rrset_cache_size : VAR_RRSET_CACHE_SIZE STRING", "server_rrset_cache_slabs : VAR_RRSET_CACHE_SLABS STRING", "server_infra_host_ttl : VAR_INFRA_HOST_TTL STRING", "server_infra_lame_ttl : VAR_INFRA_LAME_TTL STRING", "server_infra_cache_numhosts : VAR_INFRA_CACHE_NUMHOSTS STRING", "server_infra_cache_lame_size : VAR_INFRA_CACHE_LAME_SIZE STRING", "server_infra_cache_slabs : VAR_INFRA_CACHE_SLABS STRING", "server_target_fetch_policy : VAR_TARGET_FETCH_POLICY STRING", "server_harden_short_bufsize : VAR_HARDEN_SHORT_BUFSIZE STRING", "server_harden_large_queries : VAR_HARDEN_LARGE_QUERIES STRING", "server_harden_glue : VAR_HARDEN_GLUE STRING", "server_harden_dnssec_stripped : VAR_HARDEN_DNNSEC_STRIPPED STRING", "server_harden_referral_path : VAR_HARDEN_REFERRAL_PATH STRING", "server_use_caps_for_id : VAR_USE_CAPS_FOR_ID STRING", "server_private_address : VAR_PRIVATE_ADDRESS STRING", "server_private_domain : VAR_PRIVATE_DOMAIN STRING", "server_unwanted_reply_threshold : VAR_UNWANTED_REPLY_THRESHOLD STRING", "server_do_not_query_address : VAR_DO_NOT_QUERY_ADDRESS STRING", "server_do_not_query_localhost : VAR_DO_NOT_QUERY_LOCALHOST STRING", "server_access_control : VAR_ACCESS_CONTROL STRING STRING", "server_module_conf : VAR_MODULE_CONF STRING", "server_val_override_date : VAR_VAL_OVERRIDE_DATE STRING", "server_cache_max_ttl : VAR_CACHE_MAX_TTL STRING", "server_bogus_ttl : VAR_BOGUS_TTL STRING", "server_val_clean_additional : VAR_VAL_CLEAN_ADDITIONAL STRING", "server_val_permissive_mode : VAR_VAL_PERMISSIVE_MODE STRING", "server_val_nsec3_keysize_iterations : VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING", "server_key_cache_size : VAR_KEY_CACHE_SIZE STRING", "server_key_cache_slabs : VAR_KEY_CACHE_SLABS STRING", "server_neg_cache_size : VAR_NEG_CACHE_SIZE STRING", "server_local_zone : VAR_LOCAL_ZONE STRING STRING", "server_local_data : VAR_LOCAL_DATA STRING", "server_local_data_ptr : VAR_LOCAL_DATA_PTR STRING", "stub_name : VAR_NAME STRING", "stub_host : VAR_STUB_HOST STRING", "stub_addr : VAR_STUB_ADDR STRING", "stub_prime : VAR_STUB_PRIME STRING", "forward_name : VAR_NAME STRING", "forward_host : VAR_FORWARD_HOST STRING", "forward_addr : VAR_FORWARD_ADDR STRING", "rcstart : VAR_REMOTE_CONTROL", "contents_rc : contents_rc content_rc", "contents_rc :", "content_rc : rc_control_enable", "content_rc : rc_control_interface", "content_rc : rc_control_port", "content_rc : rc_server_key_file", "content_rc : rc_server_cert_file", "content_rc : rc_control_key_file", "content_rc : rc_control_cert_file", "rc_control_enable : VAR_CONTROL_ENABLE STRING", "rc_control_port : VAR_CONTROL_PORT STRING", "rc_control_interface : VAR_CONTROL_INTERFACE STRING", "rc_server_key_file : VAR_SERVER_KEY_FILE STRING", "rc_server_cert_file : VAR_SERVER_CERT_FILE STRING", "rc_control_key_file : VAR_CONTROL_KEY_FILE STRING", "rc_control_cert_file : VAR_CONTROL_CERT_FILE STRING", }; #endif #if YYDEBUG #include #endif /* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif #define YYINITSTACKSIZE 500 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; /* variables for the parser stack */ static short *yyss; static short *yysslim; static YYSTYPE *yyvs; static int yystacksize; #line 998 "util/configparser.y" /* parse helper routines could be here */ #line 669 "util/configparser.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { int newsize, i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; newss = (yyss != 0) ? (short *)realloc(yyss, newsize * sizeof(*newss)) : (short *)malloc(newsize * sizeof(*newss)); if (newss == 0) return -1; yyss = newss; yyssp = newss + i; newvs = (yyvs != 0) ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)) : (YYSTYPE *)malloc(newsize * sizeof(*newvs)); if (newvs == 0) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse(void) { register int yym, yyn, yystate; #if YYDEBUG register const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = YYEMPTY; if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; yyerror("syntax error"); #ifdef lint goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = YYEMPTY; goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; if (yym) yyval = yyvsp[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 7: #line 109 "util/configparser.y" { OUTYY(("\nP(server:)\n")); } break; case 84: #line 149 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->stubs; cfg_parser->cfg->stubs = s; } else yyerror("out of memory"); } break; case 91: #line 165 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->forwards; cfg_parser->cfg->forwards = s; } else yyerror("out of memory"); } break; case 97: #line 181 "util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->num_threads = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 98: #line 190 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->verbosity = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 99: #line 199 "util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "") == 0 || strcmp(yyvsp[0].str, "0") == 0) cfg_parser->cfg->stat_interval = 0; else if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else cfg_parser->cfg->stat_interval = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 100: #line 210 "util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_cumulative = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 101: #line 219 "util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_extended = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 102: #line 228 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("port number expected"); else cfg_parser->cfg->port = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 103: #line 237 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", yyvsp[0].str)); if(cfg_parser->cfg->num_ifs == 0) cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); if(!cfg_parser->cfg->ifs) yyerror("out of memory"); else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = yyvsp[0].str; } break; case 104: #line 250 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", yyvsp[0].str)); if(cfg_parser->cfg->num_out_ifs == 0) cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); else cfg_parser->cfg->out_ifs = realloc( cfg_parser->cfg->out_ifs, (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); if(!cfg_parser->cfg->out_ifs) yyerror("out of memory"); else cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = yyvsp[0].str; } break; case 105: #line 265 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_ports = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 106: #line 274 "util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", yyvsp[0].str)); if(!cfg_mark_ports(yyvsp[0].str, 1, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free(yyvsp[0].str); } break; case 107: #line 283 "util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", yyvsp[0].str)); if(!cfg_mark_ports(yyvsp[0].str, 0, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free(yyvsp[0].str); } break; case 108: #line 292 "util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_tcp = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 109: #line 301 "util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->incoming_num_tcp = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 110: #line 310 "util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->if_automatic = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 111: #line 319 "util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip4 = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 112: #line 328 "util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip6 = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 113: #line 337 "util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_udp = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 114: #line 346 "util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 115: #line 355 "util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_daemonize = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 116: #line 364 "util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_syslog = (strcmp(yyvsp[0].str, "yes")==0); #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) if(strcmp(yyvsp[0].str, "yes") == 0) yyerror("no syslog services are available. " "(reconfigure and compile to add)"); #endif free(yyvsp[0].str); } break; case 117: #line 378 "util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_time_ascii = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 118: #line 387 "util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = yyvsp[0].str; } break; case 119: #line 394 "util/configparser.y" { OUTYY(("P(server_username:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->username); cfg_parser->cfg->username = yyvsp[0].str; } break; case 120: #line 401 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->directory); cfg_parser->cfg->directory = yyvsp[0].str; } break; case 121: #line 408 "util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = yyvsp[0].str; cfg_parser->cfg->use_syslog = 0; } break; case 122: #line 416 "util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = yyvsp[0].str; } break; case 123: #line 423 "util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, yyvsp[0].str)) yyerror("out of memory"); } break; case 124: #line 430 "util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = yyvsp[0].str; } break; case 125: #line 437 "util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, yyvsp[0].str)) yyerror("out of memory"); } break; case 126: #line 444 "util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, yyvsp[0].str)) yyerror("out of memory"); } break; case 127: #line 452 "util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, yyvsp[0].str)) yyerror("out of memory"); } break; case 128: #line 460 "util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, yyvsp[0].str)) yyerror("out of memory"); } break; case 129: #line 467 "util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_identity = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 130: #line 476 "util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_version = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 131: #line 485 "util/configparser.y" { OUTYY(("P(server_identity:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = yyvsp[0].str; } break; case 132: #line 492 "util/configparser.y" { OUTYY(("P(server_version:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->version); cfg_parser->cfg->version = yyvsp[0].str; } break; case 133: #line 499 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else if (atoi(yyvsp[0].str) < 4096) yyerror("message buffer size too small (use 4096)"); else cfg_parser->cfg->msg_buffer_size = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 134: #line 510 "util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", yyvsp[0].str)); if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free(yyvsp[0].str); } break; case 135: #line 518 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else { cfg_parser->cfg->msg_cache_slabs = atoi(yyvsp[0].str); if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) yyerror("must be a power of 2"); } free(yyvsp[0].str); } break; case 136: #line 531 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else cfg_parser->cfg->num_queries_per_thread = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 137: #line 540 "util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->jostle_time = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 138: #line 549 "util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", yyvsp[0].str)); if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free(yyvsp[0].str); } break; case 139: #line 557 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else { cfg_parser->cfg->rrset_cache_slabs = atoi(yyvsp[0].str); if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) yyerror("must be a power of 2"); } free(yyvsp[0].str); } break; case 140: #line 570 "util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->host_ttl = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 141: #line 579 "util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->lame_ttl = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 142: #line 588 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_numhosts = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 143: #line 597 "util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", yyvsp[0].str)); if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg-> infra_cache_lame_size)) yyerror("number expected"); free(yyvsp[0].str); } break; case 144: #line 606 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else { cfg_parser->cfg->infra_cache_slabs = atoi(yyvsp[0].str); if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) yyerror("must be a power of 2"); } free(yyvsp[0].str); } break; case 145: #line 619 "util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = yyvsp[0].str; } break; case 146: #line 626 "util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_short_bufsize = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 147: #line 636 "util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_large_queries = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 148: #line 646 "util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_glue = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 149: #line 656 "util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_dnssec_stripped = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 150: #line 666 "util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_referral_path = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 151: #line 676 "util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_caps_bits_for_id = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 152: #line 686 "util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, yyvsp[0].str)) yyerror("out of memory"); } break; case 153: #line 693 "util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, yyvsp[0].str)) yyerror("out of memory"); } break; case 154: #line 700 "util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->unwanted_threshold = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 155: #line 709 "util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, yyvsp[0].str)) yyerror("out of memory"); } break; case 156: #line 716 "util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->donotquery_localhost = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 157: #line 726 "util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", yyvsp[-1].str, yyvsp[0].str)); if(strcmp(yyvsp[0].str, "deny")!=0 && strcmp(yyvsp[0].str, "refuse")!=0 && strcmp(yyvsp[0].str, "allow")!=0 && strcmp(yyvsp[0].str, "allow_snoop")!=0) { yyerror("expected deny, refuse, allow or allow_snoop " "in access control action"); } else { if(!cfg_str2list_insert(&cfg_parser->cfg->acls, yyvsp[-1].str, yyvsp[0].str)) fatal_exit("out of memory adding acl"); } } break; case 158: #line 740 "util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = yyvsp[0].str; } break; case 159: #line 747 "util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", yyvsp[0].str)); if(strlen(yyvsp[0].str) == 0 || strcmp(yyvsp[0].str, "0") == 0) { cfg_parser->cfg->val_date_override = 0; } else if(strlen(yyvsp[0].str) == 14) { cfg_parser->cfg->val_date_override = cfg_convert_timeval(yyvsp[0].str); if(!cfg_parser->cfg->val_date_override) yyerror("bad date/time specification"); } else { if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); cfg_parser->cfg->val_date_override = atoi(yyvsp[0].str); } free(yyvsp[0].str); } break; case 160: #line 765 "util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_ttl = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 161: #line 774 "util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->bogus_ttl = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 162: #line 783 "util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->val_clean_additional = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 163: #line 793 "util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->val_permissive_mode = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 164: #line 803 "util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = yyvsp[0].str; } break; case 165: #line 810 "util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", yyvsp[0].str)); if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free(yyvsp[0].str); } break; case 166: #line 818 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("number expected"); else { cfg_parser->cfg->key_cache_slabs = atoi(yyvsp[0].str); if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) yyerror("must be a power of 2"); } free(yyvsp[0].str); } break; case 167: #line 831 "util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", yyvsp[0].str)); if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free(yyvsp[0].str); } break; case 168: #line 839 "util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", yyvsp[-1].str, yyvsp[0].str)); if(strcmp(yyvsp[0].str, "static")!=0 && strcmp(yyvsp[0].str, "deny")!=0 && strcmp(yyvsp[0].str, "refuse")!=0 && strcmp(yyvsp[0].str, "redirect")!=0 && strcmp(yyvsp[0].str, "transparent")!=0 && strcmp(yyvsp[0].str, "nodefault")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent or nodefault"); else if(strcmp(yyvsp[0].str, "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, yyvsp[-1].str)) fatal_exit("out of memory adding local-zone"); free(yyvsp[0].str); } else { if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, yyvsp[-1].str, yyvsp[0].str)) fatal_exit("out of memory adding local-zone"); } } break; case 169: #line 859 "util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, yyvsp[0].str)) fatal_exit("out of memory adding local-data"); } break; case 170: #line 866 "util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", yyvsp[0].str)); ptr = cfg_ptr_reverse(yyvsp[0].str); free(yyvsp[0].str); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_data, ptr)) fatal_exit("out of memory adding local-data"); } else { yyerror("local-data-ptr could not be reversed"); } } break; case 171: #line 881 "util/configparser.y" { OUTYY(("P(name:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = yyvsp[0].str; } break; case 172: #line 888 "util/configparser.y" { OUTYY(("P(stub-host:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, yyvsp[0].str)) yyerror("out of memory"); } break; case 173: #line 895 "util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, yyvsp[0].str)) yyerror("out of memory"); } break; case 174: #line 902 "util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isprime = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 175: #line 912 "util/configparser.y" { OUTYY(("P(name:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = yyvsp[0].str; } break; case 176: #line 919 "util/configparser.y" { OUTYY(("P(forward-host:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, yyvsp[0].str)) yyerror("out of memory"); } break; case 177: #line 926 "util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, yyvsp[0].str)) yyerror("out of memory"); } break; case 178: #line 933 "util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } break; case 188: #line 944 "util/configparser.y" { OUTYY(("P(control_enable:%s)\n", yyvsp[0].str)); if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->remote_control_enable = (strcmp(yyvsp[0].str, "yes")==0); free(yyvsp[0].str); } break; case 189: #line 954 "util/configparser.y" { OUTYY(("P(control_port:%s)\n", yyvsp[0].str)); if(atoi(yyvsp[0].str) == 0) yyerror("control port number expected"); else cfg_parser->cfg->control_port = atoi(yyvsp[0].str); free(yyvsp[0].str); } break; case 190: #line 963 "util/configparser.y" { OUTYY(("P(control_interface:%s)\n", yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, yyvsp[0].str)) yyerror("out of memory"); } break; case 191: #line 970 "util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = yyvsp[0].str; } break; case 192: #line 977 "util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = yyvsp[0].str; } break; case 193: #line 984 "util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = yyvsp[0].str; } break; case 194: #line 991 "util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", yyvsp[0].str)); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = yyvsp[0].str; } break; #line 1782 "util/configparser.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }