From: Wouter Wijngaards Date: Thu, 21 Apr 2016 09:49:02 +0000 (+0000) Subject: define-tag and local-zone-tag configuration. X-Git-Tag: release-1.5.9rc1~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=46d476b0c25bae23c3560aa4dff5014ae8118c46;p=thirdparty%2Funbound.git define-tag and local-zone-tag configuration. git-svn-id: file:///svn/unbound/trunk@3708 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/doc/example.conf.in b/doc/example.conf.in index 8ccb90875..bbd65f6b4 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -481,6 +481,10 @@ server: # plain value in bytes or you can append k, m or G. default is "1Mb". # neg-cache-size: 1m + # define a number of tags here, you can use them to tag localzones. + # repeat the define-tag statement to add additional tags. + # define-tag: "tag1 tag2 tag3" + # By default, for a number of zones a small default 'nothing here' # reply is built-in. Query traffic is thus blocked. If you # wish to serve such zone you can unblock them by uncommenting one @@ -573,6 +577,9 @@ server: # you need to do the reverse notation yourself. # local-data-ptr: "192.0.2.3 www.example.com" + # tag a localzone with a list of tag names (in "" with spaces between) + # local-zone-tag: "example.com" "tag2 tag3" + # service clients over SSL (on the TCP sockets), with plain DNS inside # the SSL stream. Give the certificate to use and private key. # default is "" (disabled). requires restart to take effect. diff --git a/services/localzone.c b/services/localzone.c index 1fcac9713..120c8fbeb 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -94,6 +94,7 @@ local_zone_delete(struct local_zone* z) lock_rw_destroy(&z->lock); regional_destroy(z->region); free(z->name); + free(z->taglist); free(z); } @@ -506,6 +507,40 @@ lz_enter_rr_str(struct local_zones* zones, const char* rr) return r; } +/** enter tagstring into zone */ +static int +lz_enter_zone_tag(struct local_zones* zones, char* zname, uint8_t* list, + size_t len, uint16_t rr_class) +{ + uint8_t dname[LDNS_MAX_DOMAINLEN+1]; + size_t dname_len, dname_labs; + struct local_zone* z; + int r = 0; + + if(sldns_str2wire_dname_buf(zname, dname, &dname_len) != 0) { + log_err("cannot parse zone name in local-zone-tag: %s", zname); + return 0; + } + dname_labs = dname_count_labels(dname); + + lock_rw_rdlock(&zones->lock); + z = local_zones_lookup(zones, dname, dname_len, dname_labs, rr_class); + if(!z) { + lock_rw_unlock(&zones->lock); + log_err("no local-zone for tag %s", zname); + return 0; + } + lock_rw_wrlock(&z->lock); + lock_rw_unlock(&zones->lock); + free(z->taglist); + z->taglist = memdup(list, len); + z->taglen = len; + if(z->taglist) + r = 1; + lock_rw_unlock(&z->lock); + return r; +} + /** parse local-zone: statements */ static int lz_enter_zones(struct local_zones* zones, struct config_file* cfg) @@ -800,6 +835,22 @@ lz_setup_implicit(struct local_zones* zones, struct config_file* cfg) return 1; } +/** enter local-zone-tag info */ +static int +lz_enter_zone_tags(struct local_zones* zones, struct config_file* cfg) +{ + struct config_strbytelist* p; + int c = 0; + for(p = cfg->local_zone_tags; p; p = p->next) { + if(!lz_enter_zone_tag(zones, p->str, p->str2, p->str2len, + LDNS_RR_CLASS_IN)) + return 0; + c++; + } + if(c) verbose(VERB_ALGO, "applied tags to %d local zones", c); + return 1; +} + /** enter auth data */ static int lz_enter_data(struct local_zones* zones, struct config_file* cfg) @@ -842,6 +893,10 @@ local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg) /* setup parent ptrs for lookup during data entry */ init_parents(zones); + /* insert local zone tags */ + if(!lz_enter_zone_tags(zones, cfg)) { + return 0; + } /* insert local data */ if(!lz_enter_data(zones, cfg)) { return 0; diff --git a/services/localzone.h b/services/localzone.h index 3d62a69d1..964df1938 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -115,6 +115,10 @@ struct local_zone { /** how to process zone */ enum localzone_type type; + /** tag bitlist */ + uint8_t* taglist; + /** length of the taglist (in bytes) */ + size_t taglen; /** in this region the zone's data is allocated. * the struct local_zone itself is malloced. */ diff --git a/testcode/unitmain.c b/testcode/unitmain.c index a690dcaa8..e8bb898b0 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -380,6 +380,28 @@ config_memsize_test(void) unit_assert( cfg_parse_memsize("0 Gb", &v) && v==0*1024*1024); } +/** test config_file: test tag code */ +static void +config_tag_test(void) +{ + unit_show_func("util/config_file.c", "taglist_intersect"); + unit_assert( taglist_intersect( + (uint8_t*)"\000\000\000", 3, (uint8_t*)"\001\000\001", 3 + ) == 0); + unit_assert( taglist_intersect( + (uint8_t*)"\000\000\001", 3, (uint8_t*)"\001\000\001", 3 + ) == 1); + unit_assert( taglist_intersect( + (uint8_t*)"\001\000\000", 3, (uint8_t*)"\001\000\001", 3 + ) == 1); + unit_assert( taglist_intersect( + (uint8_t*)"\001", 1, (uint8_t*)"\001\000\001", 3 + ) == 1); + unit_assert( taglist_intersect( + (uint8_t*)"\001\000\001", 3, (uint8_t*)"\001", 1 + ) == 1); +} + #include "util/rtt.h" /** test RTT code */ static void @@ -577,6 +599,7 @@ main(int argc, char* argv[]) verify_test(); net_test(); config_memsize_test(); + config_tag_test(); dname_test(); rtt_test(); anchors_test(); diff --git a/util/config_file.c b/util/config_file.c index e0102836b..fdf2d841a 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -483,9 +483,11 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_POW2("ratelimit-slabs:", ratelimit_slabs) else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor) else S_YNO("qname-minimisation:", qname_minimisation) + else if(strcmp(opt, "define-tag:") ==0) { + return config_add_tag(cfg, val); /* val_sig_skew_min and max are copied into val_env during init, * so this does not update val_env with set_option */ - else if(strcmp(opt, "val-sig-skew-min:") == 0) + } else if(strcmp(opt, "val-sig-skew-min:") == 0) { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); } else if(strcmp(opt, "val-sig-skew-max:") == 0) { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); } @@ -506,7 +508,8 @@ int config_set_option(struct config_file* cfg, const char* opt, * stub-zone, name, stub-addr, stub-host, stub-prime * forward-first, stub-first, * forward-zone, name, forward-addr, forward-host, - * ratelimit-for-domain, ratelimit-below-domain */ + * ratelimit-for-domain, ratelimit-below-domain, + * local-zone-tag */ return 0; } return 1; @@ -630,9 +633,23 @@ config_collate_cat(struct config_strlist* list) /** compare and print list option */ #define O_LS2(opt, name, lst) if(strcmp(opt, name)==0) { \ struct config_str2list* p = cfg->lst; \ - for(p = cfg->lst; p; p = p->next) \ - snprintf(buf, len, "%s %s\n", p->str, p->str2); \ + for(p = cfg->lst; p; p = p->next) { \ + snprintf(buf, len, "%s %s", p->str, p->str2); \ func(buf, arg); \ + } \ + } +/** compare and print taglist option */ +#define O_LTG(opt, name, lst) if(strcmp(opt, name)==0) { \ + char* tmpstr = NULL; \ + struct config_strbytelist *p = cfg->lst; \ + for(p = cfg->lst; p; p = p->next) {\ + tmpstr = config_taglist2str(cfg, p->str2, p->str2len); \ + if(tmpstr) {\ + snprintf(buf, len, "%s %s", p->str, tmpstr); \ + func(buf, arg); \ + free(tmpstr); \ + } \ + } \ } int @@ -762,6 +779,8 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min) else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max) else O_YNO(opt, "qname-minimisation", qname_minimisation) + else O_IFC(opt, "define-tag", num_tags, tagname) + else O_LTG(opt, "local-zone-tag", local_zone_tags) /* not here: * outgoing-permit, outgoing-avoid - have list of ports * local-zone - zones and nodefault variables @@ -934,6 +953,33 @@ config_delstubs(struct config_stub* p) } } +/** delete string array */ +static void +config_del_strarray(char** array, int num) +{ + int i; + if(!array) + return; + for(i=0; inext; + free(p->str); + free(p->str2); + free(p); + p = np; + } +} + void config_delete(struct config_file* cfg) { @@ -946,18 +992,8 @@ config_delete(struct config_file* cfg) free(cfg->target_fetch_policy); free(cfg->ssl_service_key); free(cfg->ssl_service_pem); - if(cfg->ifs) { - int i; - for(i=0; inum_ifs; i++) - free(cfg->ifs[i]); - free(cfg->ifs); - } - if(cfg->out_ifs) { - int i; - for(i=0; inum_out_ifs; i++) - free(cfg->out_ifs[i]); - free(cfg->out_ifs); - } + config_del_strarray(cfg->ifs, cfg->num_ifs); + config_del_strarray(cfg->out_ifs, cfg->num_out_ifs); config_delstubs(cfg->stubs); config_delstubs(cfg->forwards); config_delstrlist(cfg->donotqueryaddrs); @@ -981,6 +1017,8 @@ config_delete(struct config_file* cfg) config_deldblstrlist(cfg->local_zones); config_delstrlist(cfg->local_zones_nodefault); config_delstrlist(cfg->local_data); + config_del_strarray(cfg->tagname, cfg->num_tags); + config_del_strbytelist(cfg->local_zone_tags); config_delstrlist(cfg->control_ifs); free(cfg->server_key_file); free(cfg->server_cert_file); @@ -1169,6 +1207,24 @@ cfg_str2list_insert(struct config_str2list** head, char* item, char* i2) return 1; } +int +cfg_strbytelist_insert(struct config_strbytelist** head, char* item, + uint8_t* i2, size_t i2len) +{ + struct config_strbytelist* s; + if(!item || !i2 || !head) + return 0; + s = (struct config_strbytelist*)calloc(1, sizeof(*s)); + if(!s) + return 0; + s->str = item; + s->str2 = i2; + s->str2len = i2len; + s->next = *head; + *head = s; + return 1; +} + time_t cfg_convert_timeval(const char* str) { @@ -1273,6 +1329,124 @@ cfg_parse_memsize(const char* str, size_t* res) return 1; } +int +find_tag_id(struct config_file* cfg, const char* tag) +{ + int i; + for(i=0; inum_tags; i++) { + if(strcmp(cfg->tagname[i], tag) == 0) + return i; + } + return -1; +} + +int +config_add_tag(struct config_file* cfg, const char* tag) +{ + char** newarray; + char* newtag; + if(find_tag_id(cfg, tag) != -1) + return 1; /* nothing to do */ + newarray = (char**)malloc(sizeof(char*)*(cfg->num_tags+1)); + if(!newarray) + return 0; + newtag = strdup(tag); + if(!newtag) { + free(newarray); + return 0; + } + if(cfg->tagname) { + memcpy(newarray, cfg->tagname, sizeof(char*)*cfg->num_tags); + free(cfg->tagname); + } + newarray[cfg->num_tags] = newtag; + cfg->tagname = newarray; + cfg->num_tags++; + return 1; +} + +/** set a bit in a bit array */ +static void +cfg_set_bit(uint8_t* bitlist, size_t len, int id) +{ + int pos = id/8; + log_assert((size_t)pos < len); + bitlist[pos] |= 1<<(id%8); +} + +uint8_t* config_parse_taglist(struct config_file* cfg, char* str, + size_t* listlen) +{ + uint8_t* taglist = NULL; + size_t len = 0; + char* p, *s; + + /* allocate */ + if(cfg->num_tags == 0) { + log_err("parse taglist, but no tags defined"); + return 0; + } + len = (cfg->num_tags+7)/8; + taglist = calloc(1, len); + if(!taglist) { + log_err("out of memory"); + return 0; + } + + /* parse */ + s = str; + while((p=strsep(&s, " \t\n")) != NULL) { + if(*p) { + int id = find_tag_id(cfg, p); + /* set this bit in the bitlist */ + if(id == -1) { + log_err("unknown tag: %s", p); + free(taglist); + return 0; + } + cfg_set_bit(taglist, len, id); + } + } + + *listlen = len; + return taglist; +} + +char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, + size_t taglen) +{ + char buf[10240]; + size_t i, len = 0; + int j; + buf[0] = 0; + for(i=0; itagname[id]); + len += strlen(buf+len); + } + } + } + return strdup(buf); +} + +int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2, + size_t list2len) +{ + size_t i; + if(!list1 || !list2) + return 0; + for(i=0; i" +#line 2044 "" #define INITIAL 0 #define quotedstring 1 @@ -2246,7 +2256,7 @@ YY_DECL { #line 201 "./util/configlexer.lex" -#line 2248 "" +#line 2258 "" while ( 1 ) /* loops until end-of-file is reached */ { @@ -2279,13 +2289,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1809 ) + if ( yy_current_state >= 1823 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 3572 ); + while ( yy_base[yy_current_state] != 3611 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3016,139 +3026,149 @@ YY_RULE_SETUP case 141: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 142: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 143: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 144: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 145: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 146: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 147: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 148: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 149: YY_RULE_SETUP -#line 355 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 354 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 150: YY_RULE_SETUP -#line 357 "./util/configlexer.lex" +#line 355 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 151: YY_RULE_SETUP -#line 359 "./util/configlexer.lex" +#line 357 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 152: YY_RULE_SETUP -#line 361 "./util/configlexer.lex" +#line 359 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 153: YY_RULE_SETUP -#line 363 "./util/configlexer.lex" +#line 361 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 154: YY_RULE_SETUP -#line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 363 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 155: YY_RULE_SETUP -#line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +#line 365 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 156: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 157: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 158: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 159: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 160: -/* rule 160 can match eol */ YY_RULE_SETUP #line 371 "./util/configlexer.lex" +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } + YY_BREAK +case 161: +YY_RULE_SETUP +#line 372 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } + YY_BREAK +case 162: +/* rule 162 can match eol */ +YY_RULE_SETUP +#line 373 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 161: +case 163: YY_RULE_SETUP -#line 374 "./util/configlexer.lex" +#line 376 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 375 "./util/configlexer.lex" +#line 377 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 162: +case 164: YY_RULE_SETUP -#line 380 "./util/configlexer.lex" +#line 382 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 163: -/* rule 163 can match eol */ +case 165: +/* rule 165 can match eol */ YY_RULE_SETUP -#line 381 "./util/configlexer.lex" +#line 383 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 164: +case 166: YY_RULE_SETUP -#line 383 "./util/configlexer.lex" +#line 385 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3161,34 +3181,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 165: +case 167: YY_RULE_SETUP -#line 395 "./util/configlexer.lex" +#line 397 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 396 "./util/configlexer.lex" +#line 398 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 166: +case 168: YY_RULE_SETUP -#line 401 "./util/configlexer.lex" +#line 403 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 167: -/* rule 167 can match eol */ +case 169: +/* rule 169 can match eol */ YY_RULE_SETUP -#line 402 "./util/configlexer.lex" +#line 404 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 168: +case 170: YY_RULE_SETUP -#line 404 "./util/configlexer.lex" +#line 406 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3201,38 +3221,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 169: +case 171: YY_RULE_SETUP -#line 416 "./util/configlexer.lex" +#line 418 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 418 "./util/configlexer.lex" +#line 420 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 170: +case 172: YY_RULE_SETUP -#line 422 "./util/configlexer.lex" +#line 424 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 171: -/* rule 171 can match eol */ +case 173: +/* rule 173 can match eol */ YY_RULE_SETUP -#line 423 "./util/configlexer.lex" +#line 425 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 172: +case 174: YY_RULE_SETUP -#line 424 "./util/configlexer.lex" +#line 426 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 173: +case 175: YY_RULE_SETUP -#line 425 "./util/configlexer.lex" +#line 427 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -3240,27 +3260,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 430 "./util/configlexer.lex" +#line 432 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 174: +case 176: YY_RULE_SETUP -#line 434 "./util/configlexer.lex" +#line 436 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 175: -/* rule 175 can match eol */ +case 177: +/* rule 177 can match eol */ YY_RULE_SETUP -#line 435 "./util/configlexer.lex" +#line 437 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 176: +case 178: YY_RULE_SETUP -#line 437 "./util/configlexer.lex" +#line 439 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -3270,7 +3290,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 443 "./util/configlexer.lex" +#line 445 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -3282,33 +3302,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 177: +case 179: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" +#line 456 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 178: +case 180: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" +#line 460 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 179: +case 181: YY_RULE_SETUP -#line 462 "./util/configlexer.lex" +#line 464 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 180: +case 182: YY_RULE_SETUP -#line 466 "./util/configlexer.lex" +#line 468 "./util/configlexer.lex" ECHO; YY_BREAK -#line 3310 "" +#line 3330 "" case YY_END_OF_BUFFER: { @@ -3599,7 +3619,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1809 ) + if ( yy_current_state >= 1823 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3627,11 +3647,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1809 ) + if ( yy_current_state >= 1823 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1808); + yy_is_jam = (yy_current_state == 1822); return yy_is_jam ? 0 : yy_current_state; } @@ -4264,7 +4284,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 466 "./util/configlexer.lex" +#line 468 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 8c69467c9..5d966895c 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -343,6 +343,8 @@ rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) } max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) } dns64-prefix{COLON} { YDVAR(1, VAR_DNS64_PREFIX) } dns64-synthall{COLON} { YDVAR(1, VAR_DNS64_SYNTHALL) } +define-tag{COLON} { YDVAR(1, VAR_DEFINE_TAG) } +local-zone-tag{COLON} { YDVAR(2, VAR_LOCAL_ZONE_TAG) } dnstap{COLON} { YDVAR(0, VAR_DNSTAP) } dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) } dnstap-socket-path{COLON} { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } diff --git a/util/configparser.c b/util/configparser.c index fa513753c..0fe13b89e 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -287,7 +287,9 @@ extern int yydebug; VAR_CACHE_MAX_NEGATIVE_TTL = 418, VAR_PERMIT_SMALL_HOLDDOWN = 419, VAR_QNAME_MINIMISATION = 420, - VAR_IP_FREEBIND = 421 + VAR_IP_FREEBIND = 421, + VAR_DEFINE_TAG = 422, + VAR_LOCAL_ZONE_TAG = 423 }; #endif /* Tokens. */ @@ -455,6 +457,8 @@ extern int yydebug; #define VAR_PERMIT_SMALL_HOLDDOWN 419 #define VAR_QNAME_MINIMISATION 420 #define VAR_IP_FREEBIND 421 +#define VAR_DEFINE_TAG 422 +#define VAR_LOCAL_ZONE_TAG 423 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -465,7 +469,7 @@ union YYSTYPE char* str; -#line 469 "util/configparser.c" /* yacc.c:355 */ +#line 473 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -482,7 +486,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 486 "util/configparser.c" /* yacc.c:358 */ +#line 490 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -724,21 +728,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 312 +#define YYLAST 317 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 167 +#define YYNTOKENS 169 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 172 +#define YYNNTS 174 /* YYNRULES -- Number of rules. */ -#define YYNRULES 329 +#define YYNRULES 333 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 485 +#define YYNSTATES 492 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 421 +#define YYMAXUTOK 423 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -789,7 +793,7 @@ static const yytype_uint8 yytranslate[] = 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, 164, - 165, 166 + 165, 166, 167, 168 }; #if YYDEBUG @@ -809,26 +813,27 @@ static const yytype_uint16 yyrline[] = 181, 181, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 190, 190, 191, 191, 192, 192, 193, - 193, 194, 194, 195, 197, 209, 210, 211, 211, 211, - 211, 211, 213, 225, 226, 227, 227, 227, 227, 229, - 238, 247, 258, 267, 276, 285, 298, 313, 322, 331, - 340, 349, 358, 367, 376, 385, 394, 403, 412, 421, - 430, 439, 446, 453, 462, 471, 485, 494, 503, 510, - 517, 524, 532, 539, 546, 553, 560, 568, 576, 584, - 591, 598, 607, 616, 623, 630, 638, 646, 656, 666, - 676, 689, 700, 708, 721, 730, 739, 748, 758, 768, - 776, 789, 798, 806, 815, 823, 836, 845, 852, 862, - 872, 882, 892, 902, 912, 922, 932, 939, 946, 953, - 962, 971, 980, 987, 997, 1014, 1021, 1039, 1052, 1065, - 1074, 1083, 1092, 1101, 1111, 1121, 1130, 1139, 1146, 1155, - 1164, 1173, 1182, 1190, 1203, 1211, 1235, 1242, 1257, 1267, - 1277, 1284, 1291, 1300, 1309, 1317, 1330, 1343, 1356, 1365, - 1375, 1385, 1392, 1399, 1408, 1418, 1428, 1435, 1442, 1451, - 1456, 1457, 1458, 1458, 1458, 1459, 1459, 1459, 1460, 1460, - 1462, 1472, 1481, 1488, 1498, 1505, 1512, 1519, 1526, 1531, - 1532, 1533, 1533, 1534, 1534, 1535, 1535, 1536, 1537, 1538, - 1539, 1540, 1541, 1543, 1551, 1558, 1566, 1574, 1581, 1588, - 1597, 1606, 1615, 1624, 1633, 1642, 1647, 1648, 1649, 1651 + 193, 194, 194, 195, 195, 195, 197, 209, 210, 211, + 211, 211, 211, 211, 213, 225, 226, 227, 227, 227, + 227, 229, 238, 247, 258, 267, 276, 285, 298, 313, + 322, 331, 340, 349, 358, 367, 376, 385, 394, 403, + 412, 421, 430, 439, 446, 453, 462, 471, 485, 494, + 503, 510, 517, 524, 532, 539, 546, 553, 560, 568, + 576, 584, 591, 598, 607, 616, 623, 630, 638, 646, + 656, 666, 676, 689, 700, 708, 721, 730, 739, 748, + 758, 768, 776, 789, 798, 806, 815, 823, 836, 845, + 852, 862, 872, 882, 892, 902, 912, 922, 932, 939, + 946, 953, 962, 971, 980, 987, 997, 1014, 1021, 1039, + 1052, 1065, 1074, 1083, 1092, 1101, 1111, 1121, 1130, 1139, + 1146, 1155, 1164, 1173, 1182, 1190, 1203, 1211, 1235, 1242, + 1257, 1267, 1277, 1284, 1291, 1300, 1314, 1333, 1342, 1350, + 1363, 1376, 1389, 1398, 1408, 1418, 1425, 1432, 1441, 1451, + 1461, 1468, 1475, 1484, 1489, 1490, 1491, 1491, 1491, 1492, + 1492, 1492, 1493, 1493, 1495, 1505, 1514, 1521, 1531, 1538, + 1545, 1552, 1559, 1564, 1565, 1566, 1566, 1567, 1567, 1568, + 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1576, 1584, 1591, + 1599, 1607, 1614, 1621, 1630, 1639, 1648, 1657, 1666, 1675, + 1680, 1681, 1682, 1684 }; #endif @@ -895,10 +900,11 @@ static const char *const yytname[] = "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_RATELIMIT_FACTOR", "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_IP_FREEBIND", - "$accept", "toplevelvars", "toplevelvar", "serverstart", - "contents_server", "content_server", "stubstart", "contents_stub", - "content_stub", "forwardstart", "contents_forward", "content_forward", - "server_num_threads", "server_verbosity", "server_statistics_interval", + "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "server_num_threads", + "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_port", "server_interface", "server_outgoing_interface", "server_outgoing_range", "server_outgoing_port_permit", @@ -945,18 +951,18 @@ static const char *const yytname[] = "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", "server_rrset_roundrobin", "server_max_udp_size", "server_dns64_prefix", - "server_dns64_synthall", "server_ratelimit", "server_ratelimit_size", - "server_ratelimit_slabs", "server_ratelimit_for_domain", - "server_ratelimit_below_domain", "server_ratelimit_factor", - "server_qname_minimisation", "stub_name", "stub_host", "stub_addr", - "stub_first", "stub_prime", "forward_name", "forward_host", - "forward_addr", "forward_first", "rcstart", "contents_rc", "content_rc", - "rc_control_enable", "rc_control_port", "rc_control_interface", - "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", - "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", - "content_dt", "dt_dnstap_enable", "dt_dnstap_socket_path", - "dt_dnstap_send_identity", "dt_dnstap_send_version", - "dt_dnstap_identity", "dt_dnstap_version", + "server_dns64_synthall", "server_define_tag", "server_local_zone_tag", + "server_ratelimit", "server_ratelimit_size", "server_ratelimit_slabs", + "server_ratelimit_for_domain", "server_ratelimit_below_domain", + "server_ratelimit_factor", "server_qname_minimisation", "stub_name", + "stub_host", "stub_addr", "stub_first", "stub_prime", "forward_name", + "forward_host", "forward_addr", "forward_first", "rcstart", + "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", + "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", + "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", + "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", + "dt_dnstap_socket_path", "dt_dnstap_send_identity", + "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", "dt_dnstap_log_resolver_query_messages", "dt_dnstap_log_resolver_response_messages", "dt_dnstap_log_client_query_messages", @@ -988,7 +994,7 @@ static const yytype_uint16 yytoknum[] = 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421 + 415, 416, 417, 418, 419, 420, 421, 422, 423 }; # endif @@ -1009,19 +1015,18 @@ static const yytype_int16 yypact[] = -81, 118, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -12, 39, 47, 40, 36, -80, 18, 19, 20, 24, 25, 26, 69, 72, - 73, 74, 75, 80, 109, 120, 129, 130, 145, 146, - 147, 149, 150, 151, 152, 153, 155, 156, 157, 158, - 159, 161, 162, 163, 164, 165, 166, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 215, 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, - 245, 246, 247, 248, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + 73, 74, 75, 80, 109, 120, 129, 130, 147, 149, + 150, 151, 152, 153, 155, 156, 157, 158, 159, 161, + 162, 163, 164, 165, 166, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 215, 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, 245, 246, + 247, 248, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, @@ -1032,29 +1037,31 @@ static const yytype_int16 yypact[] = -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, 269, 270, 271, 272, 273, - -81, -81, -81, -81, -81, -81, 274, 275, 276, 277, - -81, -81, -81, -81, -81, 278, 279, 280, 281, 282, - 283, 284, 285, -81, -81, -81, -81, -81, -81, -81, - -81, -81, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, 298, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, 273, + 274, 275, 276, 277, -81, -81, -81, -81, -81, -81, + 278, 279, 280, 281, -81, -81, -81, -81, -81, 282, + 283, 284, 285, 286, 287, 288, 289, -81, -81, -81, + -81, -81, -81, -81, -81, -81, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, 302, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, 299, 300, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, 303, + 304, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, 301, 302, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, 305, 306, -81, + -81, -81, -81, -81, -81, -81, 307, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81 + -81, -81 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1062,8 +1069,8 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 10, 134, 142, 279, 325, 298, 3, - 12, 136, 144, 281, 300, 327, 4, 5, 6, 8, + 2, 0, 1, 10, 136, 144, 283, 329, 302, 3, + 12, 138, 146, 285, 304, 331, 4, 5, 6, 8, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1076,41 +1083,42 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 13, 14, 72, 75, 84, 15, - 23, 63, 16, 76, 77, 34, 56, 71, 17, 18, - 19, 20, 21, 22, 106, 107, 108, 109, 110, 73, - 62, 88, 105, 24, 25, 26, 27, 28, 64, 78, - 79, 94, 50, 60, 51, 89, 44, 45, 46, 47, - 98, 102, 114, 122, 133, 99, 57, 29, 30, 31, - 86, 115, 116, 117, 32, 33, 35, 36, 38, 39, - 37, 120, 40, 41, 42, 48, 67, 103, 81, 121, - 74, 129, 82, 83, 100, 101, 87, 43, 65, 68, - 49, 52, 90, 91, 66, 130, 92, 53, 54, 55, - 104, 93, 61, 95, 96, 97, 131, 58, 59, 80, - 69, 70, 85, 111, 112, 113, 118, 119, 123, 125, - 124, 126, 127, 128, 132, 0, 0, 0, 0, 0, - 135, 137, 138, 139, 141, 140, 0, 0, 0, 0, - 143, 145, 146, 147, 148, 0, 0, 0, 0, 0, - 0, 0, 0, 280, 282, 284, 283, 289, 285, 286, - 287, 288, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 299, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 0, 326, 328, - 150, 149, 154, 157, 155, 163, 164, 165, 166, 167, - 168, 178, 179, 180, 181, 182, 202, 203, 204, 209, - 210, 160, 211, 212, 215, 213, 214, 217, 218, 219, - 232, 191, 192, 193, 194, 220, 235, 187, 189, 236, - 242, 243, 244, 161, 201, 252, 253, 188, 247, 175, - 156, 183, 233, 239, 221, 0, 0, 256, 162, 151, - 174, 225, 152, 158, 159, 184, 185, 254, 223, 227, - 228, 153, 257, 205, 231, 176, 190, 237, 238, 241, - 246, 186, 250, 248, 249, 195, 200, 229, 230, 196, - 197, 222, 245, 177, 169, 170, 171, 172, 173, 258, - 259, 260, 206, 207, 208, 216, 261, 262, 224, 198, - 263, 265, 264, 0, 0, 268, 226, 240, 251, 269, - 199, 270, 271, 272, 274, 273, 275, 276, 277, 278, - 290, 292, 291, 294, 295, 296, 297, 293, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 329, 234, 255, 266, 267 + 0, 0, 0, 0, 0, 11, 13, 14, 72, 75, + 84, 15, 23, 63, 16, 76, 77, 34, 56, 71, + 17, 18, 19, 20, 21, 22, 106, 107, 108, 109, + 110, 73, 62, 88, 105, 24, 25, 26, 27, 28, + 64, 78, 79, 94, 50, 60, 51, 89, 44, 45, + 46, 47, 98, 102, 114, 122, 133, 99, 57, 29, + 30, 31, 86, 115, 116, 117, 32, 33, 35, 36, + 38, 39, 37, 120, 40, 41, 42, 48, 67, 103, + 81, 121, 74, 129, 82, 83, 100, 101, 87, 43, + 65, 68, 49, 52, 90, 91, 66, 130, 92, 53, + 54, 55, 104, 93, 61, 95, 96, 97, 131, 58, + 59, 80, 69, 70, 85, 111, 112, 113, 118, 119, + 134, 135, 123, 125, 124, 126, 127, 128, 132, 0, + 0, 0, 0, 0, 137, 139, 140, 141, 143, 142, + 0, 0, 0, 0, 145, 147, 148, 149, 150, 0, + 0, 0, 0, 0, 0, 0, 0, 284, 286, 288, + 287, 293, 289, 290, 291, 292, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 303, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 0, 330, 332, 152, 151, 156, 159, 157, 165, + 166, 167, 168, 169, 170, 180, 181, 182, 183, 184, + 204, 205, 206, 211, 212, 162, 213, 214, 217, 215, + 216, 219, 220, 221, 234, 193, 194, 195, 196, 222, + 237, 189, 191, 238, 244, 245, 246, 163, 203, 254, + 255, 190, 249, 177, 158, 185, 235, 241, 223, 0, + 0, 258, 164, 153, 176, 227, 154, 160, 161, 186, + 187, 256, 225, 229, 230, 155, 259, 207, 233, 178, + 192, 239, 240, 243, 248, 188, 252, 250, 251, 197, + 202, 231, 232, 198, 199, 224, 247, 179, 171, 172, + 173, 174, 175, 260, 261, 262, 208, 209, 210, 218, + 263, 264, 226, 200, 267, 269, 268, 0, 0, 272, + 228, 242, 253, 273, 201, 265, 0, 274, 275, 276, + 278, 277, 279, 280, 281, 282, 294, 296, 295, 298, + 299, 300, 301, 297, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 333, 236, 257, 270, + 271, 266 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1133,30 +1141,30 @@ static const yytype_int8 yypgoto[] = -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81 + -81, -81, -81, -81 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 9, 10, 16, 143, 11, 17, 270, 12, - 18, 280, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 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, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 271, 272, 273, 274, 275, 281, 282, - 283, 284, 13, 19, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 14, 20, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 15, 21, - 328, 329 + -1, 1, 9, 10, 16, 145, 11, 17, 274, 12, + 18, 284, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 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, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 275, 276, 277, 278, 279, + 285, 286, 287, 288, 13, 19, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 14, 20, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 15, 21, 332, 333 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1166,36 +1174,36 @@ static const yytype_uint16 yytable[] = { 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, 327, 330, 331, - 332, 49, 50, 51, 333, 334, 335, 52, 53, 54, + 42, 43, 44, 45, 46, 47, 48, 331, 334, 335, + 336, 49, 50, 51, 337, 338, 339, 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, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 265, 336, - 266, 267, 337, 338, 339, 340, 276, 93, 94, 95, - 341, 96, 97, 98, 277, 278, 99, 100, 101, 102, + 85, 86, 87, 88, 89, 90, 91, 92, 269, 340, + 270, 271, 341, 342, 343, 344, 280, 93, 94, 95, + 345, 96, 97, 98, 281, 282, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 2, 342, + 113, 114, 115, 116, 117, 118, 119, 120, 2, 346, 121, 122, 123, 124, 125, 126, 127, 128, 129, 3, - 343, 285, 286, 287, 288, 289, 290, 291, 292, 344, - 345, 268, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 346, 347, 348, 4, 349, - 350, 351, 352, 353, 5, 354, 355, 356, 357, 358, - 269, 359, 360, 361, 362, 363, 364, 279, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 6, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 7, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 8, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 483, 484 + 347, 289, 290, 291, 292, 293, 294, 295, 296, 348, + 349, 272, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 350, 4, 351, + 352, 353, 354, 355, 5, 356, 357, 358, 359, 360, + 273, 361, 362, 363, 364, 365, 366, 283, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 6, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 7, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 8, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491 }; static const yytype_uint8 yycheck[] = @@ -1215,7 +1223,7 @@ static const yytype_uint8 yycheck[] = 132, 133, 134, 135, 136, 137, 138, 139, 140, 11, 10, 91, 92, 93, 94, 95, 96, 97, 98, 10, 10, 102, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 10, 10, 10, 40, 10, + 162, 163, 164, 165, 166, 167, 168, 10, 40, 10, 10, 10, 10, 10, 46, 10, 10, 10, 10, 10, 131, 10, 10, 10, 10, 10, 10, 130, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, @@ -1231,16 +1239,16 @@ static const yytype_uint8 yycheck[] = 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 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 168, 0, 11, 40, 46, 90, 106, 141, 169, - 170, 173, 176, 309, 320, 335, 171, 174, 177, 310, - 321, 336, 12, 13, 14, 15, 16, 17, 18, 19, + 0, 170, 0, 11, 40, 46, 90, 106, 141, 171, + 172, 175, 178, 313, 324, 339, 173, 176, 179, 314, + 325, 340, 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, 43, 44, 45, 49, 50, 51, 52, 53, 54, 55, 56, @@ -1252,7 +1260,7 @@ static const yytype_uint16 yystos[] = 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, 138, 139, 140, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 172, 179, 180, 181, 182, 183, 184, + 164, 165, 166, 167, 168, 174, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, @@ -1264,13 +1272,14 @@ static const yytype_uint16 yystos[] = 265, 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, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 39, 41, 42, 102, 131, - 175, 300, 301, 302, 303, 304, 39, 47, 48, 130, - 178, 305, 306, 307, 308, 91, 92, 93, 94, 95, - 96, 97, 98, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 107, 337, 338, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 39, + 41, 42, 102, 131, 177, 304, 305, 306, 307, 308, + 39, 47, 48, 130, 180, 309, 310, 311, 312, 91, + 92, 93, 94, 95, 96, 97, 98, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 107, 341, 342, 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, @@ -1286,27 +1295,27 @@ static const yytype_uint16 yystos[] = 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 167, 168, 168, 169, 169, 169, 169, 169, 169, - 170, 171, 171, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 173, 174, 174, 175, 175, 175, - 175, 175, 176, 177, 177, 178, 178, 178, 178, 179, + 0, 169, 170, 170, 171, 171, 171, 171, 171, 171, + 172, 173, 173, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 175, 176, 176, 177, + 177, 177, 177, 177, 178, 179, 179, 180, 180, 180, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, @@ -1320,11 +1329,12 @@ static const yytype_uint16 yyr1[] = 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 310, 311, 311, 311, 311, 311, 311, 311, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 321, 322, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 336, 337, 338 + 310, 311, 312, 313, 314, 314, 315, 315, 315, 315, + 315, 315, 315, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 325, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 340, 341, 342 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1343,9 +1353,9 @@ static const yytype_uint8 yyr2[] = 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, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 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, @@ -1353,16 +1363,17 @@ static const yytype_uint8 yyr2[] = 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, 2, 3, 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, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, + 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 2 + 2, 0, 1, 2 }; @@ -2043,10 +2054,10 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2047 "util/configparser.c" /* yacc.c:1646 */ +#line 2058 "util/configparser.c" /* yacc.c:1646 */ break; - case 134: + case 136: #line 198 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; @@ -2058,10 +2069,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2062 "util/configparser.c" /* yacc.c:1646 */ +#line 2073 "util/configparser.c" /* yacc.c:1646 */ break; - case 142: + case 144: #line 214 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; @@ -2073,10 +2084,10 @@ yyreduce: } else yyerror("out of memory"); } -#line 2077 "util/configparser.c" /* yacc.c:1646 */ +#line 2088 "util/configparser.c" /* yacc.c:1646 */ break; - case 149: + case 151: #line 230 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); @@ -2085,10 +2096,10 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2089 "util/configparser.c" /* yacc.c:1646 */ +#line 2100 "util/configparser.c" /* yacc.c:1646 */ break; - case 150: + case 152: #line 239 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); @@ -2097,10 +2108,10 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2101 "util/configparser.c" /* yacc.c:1646 */ +#line 2112 "util/configparser.c" /* yacc.c:1646 */ break; - case 151: + case 153: #line 248 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); @@ -2111,10 +2122,10 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2115 "util/configparser.c" /* yacc.c:1646 */ +#line 2126 "util/configparser.c" /* yacc.c:1646 */ break; - case 152: + case 154: #line 259 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); @@ -2123,10 +2134,10 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2127 "util/configparser.c" /* yacc.c:1646 */ +#line 2138 "util/configparser.c" /* yacc.c:1646 */ break; - case 153: + case 155: #line 268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); @@ -2135,10 +2146,10 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2139 "util/configparser.c" /* yacc.c:1646 */ +#line 2150 "util/configparser.c" /* yacc.c:1646 */ break; - case 154: + case 156: #line 277 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); @@ -2147,10 +2158,10 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2151 "util/configparser.c" /* yacc.c:1646 */ +#line 2162 "util/configparser.c" /* yacc.c:1646 */ break; - case 155: + case 157: #line 286 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); @@ -2163,10 +2174,10 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2167 "util/configparser.c" /* yacc.c:1646 */ +#line 2178 "util/configparser.c" /* yacc.c:1646 */ break; - case 156: + case 158: #line 299 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); @@ -2181,10 +2192,10 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2185 "util/configparser.c" /* yacc.c:1646 */ +#line 2196 "util/configparser.c" /* yacc.c:1646 */ break; - case 157: + case 159: #line 314 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); @@ -2193,10 +2204,10 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2197 "util/configparser.c" /* yacc.c:1646 */ +#line 2208 "util/configparser.c" /* yacc.c:1646 */ break; - case 158: + case 160: #line 323 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); @@ -2205,10 +2216,10 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2209 "util/configparser.c" /* yacc.c:1646 */ +#line 2220 "util/configparser.c" /* yacc.c:1646 */ break; - case 159: + case 161: #line 332 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); @@ -2217,10 +2228,10 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2221 "util/configparser.c" /* yacc.c:1646 */ +#line 2232 "util/configparser.c" /* yacc.c:1646 */ break; - case 160: + case 162: #line 341 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); @@ -2229,10 +2240,10 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2233 "util/configparser.c" /* yacc.c:1646 */ +#line 2244 "util/configparser.c" /* yacc.c:1646 */ break; - case 161: + case 163: #line 350 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); @@ -2241,10 +2252,10 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2245 "util/configparser.c" /* yacc.c:1646 */ +#line 2256 "util/configparser.c" /* yacc.c:1646 */ break; - case 162: + case 164: #line 359 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); @@ -2253,10 +2264,10 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2257 "util/configparser.c" /* yacc.c:1646 */ +#line 2268 "util/configparser.c" /* yacc.c:1646 */ break; - case 163: + case 165: #line 368 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); @@ -2265,10 +2276,10 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2269 "util/configparser.c" /* yacc.c:1646 */ +#line 2280 "util/configparser.c" /* yacc.c:1646 */ break; - case 164: + case 166: #line 377 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); @@ -2277,10 +2288,10 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2281 "util/configparser.c" /* yacc.c:1646 */ +#line 2292 "util/configparser.c" /* yacc.c:1646 */ break; - case 165: + case 167: #line 386 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); @@ -2289,10 +2300,10 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2293 "util/configparser.c" /* yacc.c:1646 */ +#line 2304 "util/configparser.c" /* yacc.c:1646 */ break; - case 166: + case 168: #line 395 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); @@ -2301,10 +2312,10 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2305 "util/configparser.c" /* yacc.c:1646 */ +#line 2316 "util/configparser.c" /* yacc.c:1646 */ break; - case 167: + case 169: #line 404 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); @@ -2313,10 +2324,10 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2317 "util/configparser.c" /* yacc.c:1646 */ +#line 2328 "util/configparser.c" /* yacc.c:1646 */ break; - case 168: + case 170: #line 413 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); @@ -2325,10 +2336,10 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2329 "util/configparser.c" /* yacc.c:1646 */ +#line 2340 "util/configparser.c" /* yacc.c:1646 */ break; - case 169: + case 171: #line 422 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); @@ -2337,10 +2348,10 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2341 "util/configparser.c" /* yacc.c:1646 */ +#line 2352 "util/configparser.c" /* yacc.c:1646 */ break; - case 170: + case 172: #line 431 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); @@ -2349,30 +2360,30 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2353 "util/configparser.c" /* yacc.c:1646 */ +#line 2364 "util/configparser.c" /* yacc.c:1646 */ break; - case 171: + case 173: #line 440 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 2363 "util/configparser.c" /* yacc.c:1646 */ +#line 2374 "util/configparser.c" /* yacc.c:1646 */ break; - case 172: + case 174: #line 447 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 2373 "util/configparser.c" /* yacc.c:1646 */ +#line 2384 "util/configparser.c" /* yacc.c:1646 */ break; - case 173: + case 175: #line 454 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); @@ -2381,10 +2392,10 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2385 "util/configparser.c" /* yacc.c:1646 */ +#line 2396 "util/configparser.c" /* yacc.c:1646 */ break; - case 174: + case 176: #line 463 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); @@ -2393,10 +2404,10 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2397 "util/configparser.c" /* yacc.c:1646 */ +#line 2408 "util/configparser.c" /* yacc.c:1646 */ break; - case 175: + case 177: #line 472 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); @@ -2410,10 +2421,10 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2414 "util/configparser.c" /* yacc.c:1646 */ +#line 2425 "util/configparser.c" /* yacc.c:1646 */ break; - case 176: + case 178: #line 486 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); @@ -2422,10 +2433,10 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2426 "util/configparser.c" /* yacc.c:1646 */ +#line 2437 "util/configparser.c" /* yacc.c:1646 */ break; - case 177: + case 179: #line 495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); @@ -2434,40 +2445,40 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2438 "util/configparser.c" /* yacc.c:1646 */ +#line 2449 "util/configparser.c" /* yacc.c:1646 */ break; - case 178: + case 180: #line 504 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 2448 "util/configparser.c" /* yacc.c:1646 */ +#line 2459 "util/configparser.c" /* yacc.c:1646 */ break; - case 179: + case 181: #line 511 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 2458 "util/configparser.c" /* yacc.c:1646 */ +#line 2469 "util/configparser.c" /* yacc.c:1646 */ break; - case 180: + case 182: #line 518 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); cfg_parser->cfg->directory = (yyvsp[0].str); } -#line 2468 "util/configparser.c" /* yacc.c:1646 */ +#line 2479 "util/configparser.c" /* yacc.c:1646 */ break; - case 181: + case 183: #line 525 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); @@ -2475,50 +2486,50 @@ yyreduce: cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 2479 "util/configparser.c" /* yacc.c:1646 */ +#line 2490 "util/configparser.c" /* yacc.c:1646 */ break; - case 182: + case 184: #line 533 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 2489 "util/configparser.c" /* yacc.c:1646 */ +#line 2500 "util/configparser.c" /* yacc.c:1646 */ break; - case 183: + case 185: #line 540 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 2499 "util/configparser.c" /* yacc.c:1646 */ +#line 2510 "util/configparser.c" /* yacc.c:1646 */ break; - case 184: + case 186: #line 547 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 2509 "util/configparser.c" /* yacc.c:1646 */ +#line 2520 "util/configparser.c" /* yacc.c:1646 */ break; - case 185: + case 187: #line 554 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 2519 "util/configparser.c" /* yacc.c:1646 */ +#line 2530 "util/configparser.c" /* yacc.c:1646 */ break; - case 186: + case 188: #line 561 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); @@ -2526,10 +2537,10 @@ yyreduce: auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2530 "util/configparser.c" /* yacc.c:1646 */ +#line 2541 "util/configparser.c" /* yacc.c:1646 */ break; - case 187: + case 189: #line 569 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); @@ -2537,10 +2548,10 @@ yyreduce: trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2541 "util/configparser.c" /* yacc.c:1646 */ +#line 2552 "util/configparser.c" /* yacc.c:1646 */ break; - case 188: + case 190: #line 577 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); @@ -2548,30 +2559,30 @@ yyreduce: trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2552 "util/configparser.c" /* yacc.c:1646 */ +#line 2563 "util/configparser.c" /* yacc.c:1646 */ break; - case 189: + case 191: #line 585 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 2562 "util/configparser.c" /* yacc.c:1646 */ +#line 2573 "util/configparser.c" /* yacc.c:1646 */ break; - case 190: + case 192: #line 592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2572 "util/configparser.c" /* yacc.c:1646 */ +#line 2583 "util/configparser.c" /* yacc.c:1646 */ break; - case 191: + case 193: #line 599 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); @@ -2580,10 +2591,10 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2584 "util/configparser.c" /* yacc.c:1646 */ +#line 2595 "util/configparser.c" /* yacc.c:1646 */ break; - case 192: + case 194: #line 608 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); @@ -2592,30 +2603,30 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2596 "util/configparser.c" /* yacc.c:1646 */ +#line 2607 "util/configparser.c" /* yacc.c:1646 */ break; - case 193: + case 195: #line 617 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 2606 "util/configparser.c" /* yacc.c:1646 */ +#line 2617 "util/configparser.c" /* yacc.c:1646 */ break; - case 194: + case 196: #line 624 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 2616 "util/configparser.c" /* yacc.c:1646 */ +#line 2627 "util/configparser.c" /* yacc.c:1646 */ break; - case 195: + case 197: #line 631 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); @@ -2623,10 +2634,10 @@ yyreduce: yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 2627 "util/configparser.c" /* yacc.c:1646 */ +#line 2638 "util/configparser.c" /* yacc.c:1646 */ break; - case 196: + case 198: #line 639 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); @@ -2634,10 +2645,10 @@ yyreduce: yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 2638 "util/configparser.c" /* yacc.c:1646 */ +#line 2649 "util/configparser.c" /* yacc.c:1646 */ break; - case 197: + case 199: #line 647 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); @@ -2647,10 +2658,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2651 "util/configparser.c" /* yacc.c:1646 */ +#line 2662 "util/configparser.c" /* yacc.c:1646 */ break; - case 198: + case 200: #line 657 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); @@ -2660,10 +2671,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2664 "util/configparser.c" /* yacc.c:1646 */ +#line 2675 "util/configparser.c" /* yacc.c:1646 */ break; - case 199: + case 201: #line 667 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); @@ -2673,10 +2684,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2677 "util/configparser.c" /* yacc.c:1646 */ +#line 2688 "util/configparser.c" /* yacc.c:1646 */ break; - case 200: + case 202: #line 677 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); @@ -2689,10 +2700,10 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2693 "util/configparser.c" /* yacc.c:1646 */ +#line 2704 "util/configparser.c" /* yacc.c:1646 */ break; - case 201: + case 203: #line 690 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); @@ -2703,10 +2714,10 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2707 "util/configparser.c" /* yacc.c:1646 */ +#line 2718 "util/configparser.c" /* yacc.c:1646 */ break; - case 202: + case 204: #line 701 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); @@ -2714,10 +2725,10 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 2718 "util/configparser.c" /* yacc.c:1646 */ +#line 2729 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: + case 205: #line 709 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); @@ -2730,10 +2741,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 2734 "util/configparser.c" /* yacc.c:1646 */ +#line 2745 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: + case 206: #line 722 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); @@ -2742,10 +2753,10 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2746 "util/configparser.c" /* yacc.c:1646 */ +#line 2757 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: + case 207: #line 731 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); @@ -2754,10 +2765,10 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2758 "util/configparser.c" /* yacc.c:1646 */ +#line 2769 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: + case 208: #line 740 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); @@ -2766,10 +2777,10 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2770 "util/configparser.c" /* yacc.c:1646 */ +#line 2781 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: + case 209: #line 749 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); @@ -2779,10 +2790,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2783 "util/configparser.c" /* yacc.c:1646 */ +#line 2794 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: + case 210: #line 759 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); @@ -2792,10 +2803,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2796 "util/configparser.c" /* yacc.c:1646 */ +#line 2807 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: + case 211: #line 769 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); @@ -2803,10 +2814,10 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 2807 "util/configparser.c" /* yacc.c:1646 */ +#line 2818 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: + case 212: #line 777 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); @@ -2819,10 +2830,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 2823 "util/configparser.c" /* yacc.c:1646 */ +#line 2834 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: + case 213: #line 790 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); @@ -2831,10 +2842,10 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2835 "util/configparser.c" /* yacc.c:1646 */ +#line 2846 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: + case 214: #line 799 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); @@ -2842,10 +2853,10 @@ yyreduce: "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2846 "util/configparser.c" /* yacc.c:1646 */ +#line 2857 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: + case 215: #line 807 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); @@ -2854,10 +2865,10 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2858 "util/configparser.c" /* yacc.c:1646 */ +#line 2869 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: + case 216: #line 816 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); @@ -2865,10 +2876,10 @@ yyreduce: "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2869 "util/configparser.c" /* yacc.c:1646 */ +#line 2880 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: + case 217: #line 824 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); @@ -2881,10 +2892,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 2885 "util/configparser.c" /* yacc.c:1646 */ +#line 2896 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: + case 218: #line 837 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); @@ -2893,20 +2904,20 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2897 "util/configparser.c" /* yacc.c:1646 */ +#line 2908 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: + case 219: #line 846 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 2907 "util/configparser.c" /* yacc.c:1646 */ +#line 2918 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: + case 220: #line 853 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); @@ -2916,10 +2927,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2920 "util/configparser.c" /* yacc.c:1646 */ +#line 2931 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: + case 221: #line 863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); @@ -2929,10 +2940,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2933 "util/configparser.c" /* yacc.c:1646 */ +#line 2944 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: + case 222: #line 873 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); @@ -2942,10 +2953,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2946 "util/configparser.c" /* yacc.c:1646 */ +#line 2957 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: + case 223: #line 883 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); @@ -2955,10 +2966,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2959 "util/configparser.c" /* yacc.c:1646 */ +#line 2970 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: + case 224: #line 893 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); @@ -2968,10 +2979,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2972 "util/configparser.c" /* yacc.c:1646 */ +#line 2983 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: + case 225: #line 903 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); @@ -2981,10 +2992,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2985 "util/configparser.c" /* yacc.c:1646 */ +#line 2996 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: + case 226: #line 913 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); @@ -2994,10 +3005,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2998 "util/configparser.c" /* yacc.c:1646 */ +#line 3009 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: + case 227: #line 923 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); @@ -3007,40 +3018,40 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3011 "util/configparser.c" /* yacc.c:1646 */ +#line 3022 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: + case 228: #line 933 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3021 "util/configparser.c" /* yacc.c:1646 */ +#line 3032 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: + case 229: #line 940 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3031 "util/configparser.c" /* yacc.c:1646 */ +#line 3042 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: + case 230: #line 947 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3041 "util/configparser.c" /* yacc.c:1646 */ +#line 3052 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: + case 231: #line 954 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); @@ -3049,10 +3060,10 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3053 "util/configparser.c" /* yacc.c:1646 */ +#line 3064 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: + case 232: #line 963 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); @@ -3061,10 +3072,10 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3065 "util/configparser.c" /* yacc.c:1646 */ +#line 3076 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: + case 233: #line 972 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); @@ -3073,20 +3084,20 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3077 "util/configparser.c" /* yacc.c:1646 */ +#line 3088 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: + case 234: #line 981 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3087 "util/configparser.c" /* yacc.c:1646 */ +#line 3098 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: + case 235: #line 988 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); @@ -3096,10 +3107,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3100 "util/configparser.c" /* yacc.c:1646 */ +#line 3111 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: + case 236: #line 998 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); @@ -3116,20 +3127,20 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 3120 "util/configparser.c" /* yacc.c:1646 */ +#line 3131 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: + case 237: #line 1015 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 3130 "util/configparser.c" /* yacc.c:1646 */ +#line 3141 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: + case 238: #line 1022 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); @@ -3147,10 +3158,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3151 "util/configparser.c" /* yacc.c:1646 */ +#line 3162 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: + case 239: #line 1040 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); @@ -3163,10 +3174,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3167 "util/configparser.c" /* yacc.c:1646 */ +#line 3178 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: + case 240: #line 1053 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); @@ -3179,10 +3190,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3183 "util/configparser.c" /* yacc.c:1646 */ +#line 3194 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: + case 241: #line 1066 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); @@ -3191,10 +3202,10 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3195 "util/configparser.c" /* yacc.c:1646 */ +#line 3206 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: + case 242: #line 1075 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); @@ -3203,10 +3214,10 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3207 "util/configparser.c" /* yacc.c:1646 */ +#line 3218 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: + case 243: #line 1084 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); @@ -3215,10 +3226,10 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3219 "util/configparser.c" /* yacc.c:1646 */ +#line 3230 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: + case 244: #line 1093 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); @@ -3227,10 +3238,10 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3231 "util/configparser.c" /* yacc.c:1646 */ +#line 3242 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: + case 245: #line 1102 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); @@ -3240,10 +3251,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3244 "util/configparser.c" /* yacc.c:1646 */ +#line 3255 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: + case 246: #line 1112 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); @@ -3253,10 +3264,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3257 "util/configparser.c" /* yacc.c:1646 */ +#line 3268 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: + case 247: #line 1122 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); @@ -3265,10 +3276,10 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3269 "util/configparser.c" /* yacc.c:1646 */ +#line 3280 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: + case 248: #line 1131 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); @@ -3277,20 +3288,20 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3281 "util/configparser.c" /* yacc.c:1646 */ +#line 3292 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: + case 249: #line 1140 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 3291 "util/configparser.c" /* yacc.c:1646 */ +#line 3302 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: + case 250: #line 1147 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); @@ -3299,10 +3310,10 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3314 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: + case 251: #line 1156 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); @@ -3311,10 +3322,10 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3315 "util/configparser.c" /* yacc.c:1646 */ +#line 3326 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: + case 252: #line 1165 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); @@ -3323,10 +3334,10 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3327 "util/configparser.c" /* yacc.c:1646 */ +#line 3338 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: + case 253: #line 1174 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); @@ -3336,10 +3347,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3340 "util/configparser.c" /* yacc.c:1646 */ +#line 3351 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: + case 254: #line 1183 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); @@ -3347,10 +3358,10 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3351 "util/configparser.c" /* yacc.c:1646 */ +#line 3362 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: + case 255: #line 1191 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); @@ -3363,10 +3374,10 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3367 "util/configparser.c" /* yacc.c:1646 */ +#line 3378 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: + case 256: #line 1204 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); @@ -3374,10 +3385,10 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" /* yacc.c:1646 */ +#line 3389 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: + case 257: #line 1212 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); @@ -3401,20 +3412,20 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 3405 "util/configparser.c" /* yacc.c:1646 */ +#line 3416 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: + case 258: #line 1236 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3415 "util/configparser.c" /* yacc.c:1646 */ +#line 3426 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: + case 259: #line 1243 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; @@ -3429,10 +3440,10 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 3433 "util/configparser.c" /* yacc.c:1646 */ +#line 3444 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: + case 260: #line 1258 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); @@ -3442,10 +3453,10 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3446 "util/configparser.c" /* yacc.c:1646 */ +#line 3457 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: + case 261: #line 1268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); @@ -3455,30 +3466,30 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3459 "util/configparser.c" /* yacc.c:1646 */ +#line 3470 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: + case 262: #line 1278 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3469 "util/configparser.c" /* yacc.c:1646 */ +#line 3480 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: + case 263: #line 1285 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 3479 "util/configparser.c" /* yacc.c:1646 */ +#line 3490 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: + case 264: #line 1292 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); @@ -3487,11 +3498,50 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3491 "util/configparser.c" /* yacc.c:1646 */ +#line 3502 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: + case 265: #line 1301 "./util/configparser.y" /* yacc.c:1646 */ + { + char* p, *s = (yyvsp[0].str); + OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); + while((p=strsep(&s, " \t\n")) != NULL) { + if(*p) { + if(!config_add_tag(cfg_parser->cfg, p)) + yyerror("could not define-tag, " + "out of memory"); + } + } + free((yyvsp[0].str)); + } +#line 3519 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 266: +#line 1315 "./util/configparser.y" /* yacc.c:1646 */ + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + &len); + free((yyvsp[0].str)); + OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str))); + if(!bitlist) + yyerror("could not parse tags, (define-tag them first)"); + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->local_zone_tags, + (yyvsp[-1].str), bitlist, len)) { + yyerror("out of memory"); + free((yyvsp[-1].str)); + } + } + } +#line 3541 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 267: +#line 1334 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3499,22 +3549,22 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3503 "util/configparser.c" /* yacc.c:1646 */ +#line 3553 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 1310 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 1343 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3514 "util/configparser.c" /* yacc.c:1646 */ +#line 3564 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 1318 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 1351 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3526,11 +3576,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3530 "util/configparser.c" /* yacc.c:1646 */ +#line 3580 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 1331 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 1364 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -3542,11 +3592,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 3546 "util/configparser.c" /* yacc.c:1646 */ +#line 3596 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 1344 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 1377 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -3558,11 +3608,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 3562 "util/configparser.c" /* yacc.c:1646 */ +#line 3612 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 1357 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 1390 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3570,11 +3620,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3574 "util/configparser.c" /* yacc.c:1646 */ +#line 3624 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 1366 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 1399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3583,11 +3633,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" /* yacc.c:1646 */ +#line 3637 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 1376 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 1409 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -3596,31 +3646,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 3600 "util/configparser.c" /* yacc.c:1646 */ +#line 3650 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 1386 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 1419 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3610 "util/configparser.c" /* yacc.c:1646 */ +#line 3660 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 1393 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 1426 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3620 "util/configparser.c" /* yacc.c:1646 */ +#line 3670 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 1400 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 1433 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3628,11 +3678,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3632 "util/configparser.c" /* yacc.c:1646 */ +#line 3682 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 1409 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 1442 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3641,11 +3691,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3645 "util/configparser.c" /* yacc.c:1646 */ +#line 3695 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 1419 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 1452 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -3654,31 +3704,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 3658 "util/configparser.c" /* yacc.c:1646 */ +#line 3708 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 1429 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 1462 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3668 "util/configparser.c" /* yacc.c:1646 */ +#line 3718 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1436 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 1469 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3678 "util/configparser.c" /* yacc.c:1646 */ +#line 3728 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1443 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 1476 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3686,19 +3736,19 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3690 "util/configparser.c" /* yacc.c:1646 */ +#line 3740 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1452 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 1485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 3698 "util/configparser.c" /* yacc.c:1646 */ +#line 3748 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1463 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1496 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3707,11 +3757,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3711 "util/configparser.c" /* yacc.c:1646 */ +#line 3761 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1473 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1506 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3719,21 +3769,21 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3723 "util/configparser.c" /* yacc.c:1646 */ +#line 3773 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1482 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1515 "./util/configparser.y" /* yacc.c:1646 */ { 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"); } -#line 3733 "util/configparser.c" /* yacc.c:1646 */ +#line 3783 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1489 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1522 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3742,122 +3792,122 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3746 "util/configparser.c" /* yacc.c:1646 */ +#line 3796 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1499 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1532 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 3756 "util/configparser.c" /* yacc.c:1646 */ +#line 3806 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1506 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1539 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 3766 "util/configparser.c" /* yacc.c:1646 */ +#line 3816 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1513 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1546 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 3776 "util/configparser.c" /* yacc.c:1646 */ +#line 3826 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1520 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1553 "./util/configparser.y" /* yacc.c:1646 */ { 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); } -#line 3786 "util/configparser.c" /* yacc.c:1646 */ +#line 3836 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1527 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1560 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 3794 "util/configparser.c" /* yacc.c:1646 */ +#line 3844 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1544 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1577 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_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->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3805 "util/configparser.c" /* yacc.c:1646 */ +#line 3855 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1552 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1585 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 3815 "util/configparser.c" /* yacc.c:1646 */ +#line 3865 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1559 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_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->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3826 "util/configparser.c" /* yacc.c:1646 */ +#line 3876 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1567 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1600 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_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->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3837 "util/configparser.c" /* yacc.c:1646 */ +#line 3887 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1575 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1608 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 3847 "util/configparser.c" /* yacc.c:1646 */ +#line 3897 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1582 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1615 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 3857 "util/configparser.c" /* yacc.c:1646 */ +#line 3907 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1589 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1622 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3865,11 +3915,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3869 "util/configparser.c" /* yacc.c:1646 */ +#line 3919 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1598 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1631 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3877,11 +3927,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3881 "util/configparser.c" /* yacc.c:1646 */ +#line 3931 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1607 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1640 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3889,11 +3939,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3893 "util/configparser.c" /* yacc.c:1646 */ +#line 3943 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1616 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1649 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3901,11 +3951,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3905 "util/configparser.c" /* yacc.c:1646 */ +#line 3955 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1625 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1658 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3913,11 +3963,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3917 "util/configparser.c" /* yacc.c:1646 */ +#line 3967 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1634 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1667 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3925,29 +3975,29 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 3929 "util/configparser.c" /* yacc.c:1646 */ +#line 3979 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1643 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1676 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 3937 "util/configparser.c" /* yacc.c:1646 */ +#line 3987 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1652 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1685 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 3947 "util/configparser.c" /* yacc.c:1646 */ +#line 3997 "util/configparser.c" /* yacc.c:1646 */ break; -#line 3951 "util/configparser.c" /* yacc.c:1646 */ +#line 4001 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4175,7 +4225,7 @@ yyreturn: #endif return yyresult; } -#line 1657 "./util/configparser.y" /* yacc.c:1906 */ +#line 1690 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 2bc38000a..2930ca01b 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -208,7 +208,9 @@ extern int yydebug; VAR_CACHE_MAX_NEGATIVE_TTL = 418, VAR_PERMIT_SMALL_HOLDDOWN = 419, VAR_QNAME_MINIMISATION = 420, - VAR_IP_FREEBIND = 421 + VAR_IP_FREEBIND = 421, + VAR_DEFINE_TAG = 422, + VAR_LOCAL_ZONE_TAG = 423 }; #endif /* Tokens. */ @@ -376,6 +378,8 @@ extern int yydebug; #define VAR_PERMIT_SMALL_HOLDDOWN 419 #define VAR_QNAME_MINIMISATION 420 #define VAR_IP_FREEBIND 421 +#define VAR_DEFINE_TAG 422 +#define VAR_LOCAL_ZONE_TAG 423 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -386,7 +390,7 @@ union YYSTYPE char* str; -#line 390 "util/configparser.h" /* yacc.c:1909 */ +#line 394 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 1b92cc03c..d4201c921 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -124,7 +124,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN -%token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND +%token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -192,7 +192,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_ratelimit_below_domain | server_ratelimit_factor | server_caps_whitelist | server_cache_max_negative_ttl | server_permit_small_holddown | server_qname_minimisation | - server_ip_freebind + server_ip_freebind | server_define_tag | server_local_zone_tag ; stubstart: VAR_STUB_ZONE { @@ -1297,6 +1297,39 @@ server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG free($2); } ; +server_define_tag: VAR_DEFINE_TAG STRING_ARG + { + char* p, *s = $2; + OUTYY(("P(server_define_tag:%s)\n", $2)); + while((p=strsep(&s, " \t\n")) != NULL) { + if(*p) { + if(!config_add_tag(cfg_parser->cfg, p)) + yyerror("could not define-tag, " + "out of memory"); + } + } + free($2); + } + ; +server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, + &len); + free($3); + OUTYY(("P(server_local_zone_tag:%s)\n", $2)); + if(!bitlist) + yyerror("could not parse tags, (define-tag them first)"); + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->local_zone_tags, + $2, bitlist, len)) { + yyerror("out of memory"); + free($2); + } + } + } + ; server_ratelimit: VAR_RATELIMIT STRING_ARG { OUTYY(("P(server_ratelimit:%s)\n", $2));