From eda6528c14b401a1897ef965508133156a9f7464 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 19 Nov 2007 15:32:55 +0000 Subject: [PATCH] access-control git-svn-id: file:///svn/unbound/trunk@769 be551aaa-1e26-0410-a405-d3ace91eadb9 --- checkconf/unbound-checkconf.c | 8 + daemon/acl_list.c | 28 +- daemon/daemon.c | 10 + daemon/daemon.h | 3 + daemon/worker.c | 17 + doc/Changelog | 2 + doc/example.conf | 9 + doc/unbound.conf.5 | 13 + iterator/iter_donotq.c | 28 +- testcode/replay.c | 5 + testdata/acl.rpl | 52 ++ util/configlexer.c | 1142 +++++++++++++++++---------------- util/configlexer.lex | 1 + util/configparser.c | 450 +++++++------ util/configparser.h | 6 +- util/configparser.y | 21 +- util/net_help.c | 33 + util/net_help.h | 13 + 18 files changed, 1007 insertions(+), 834 deletions(-) create mode 100644 testdata/acl.rpl diff --git a/checkconf/unbound-checkconf.c b/checkconf/unbound-checkconf.c index 2aaaaec7f..8f1cb9ec6 100644 --- a/checkconf/unbound-checkconf.c +++ b/checkconf/unbound-checkconf.c @@ -92,6 +92,7 @@ morechecks(struct config_file* cfg) int i; struct sockaddr_storage a; socklen_t alen; + struct config_acl* acl; for(i=0; inum_ifs; i++) { if(!ipstrtoaddr(cfg->ifs[i], UNBOUND_DNS_PORT, &a, &alen)) { fatal_exit("cannot parse interface specified as '%s'", @@ -105,6 +106,13 @@ morechecks(struct config_file* cfg) "specified as '%s'", cfg->out_ifs[i]); } } + for(acl=cfg->acls; acl; acl = acl->next) { + if(!netblockstrtoaddr(acl->address, UNBOUND_DNS_PORT, + &a, &alen, &i)) { + fatal_exit("cannot parse access control address %s %s", + acl->address, acl->control); + } + } if(cfg->verbosity < 0) fatal_exit("verbosity value < 0"); diff --git a/daemon/acl_list.c b/daemon/acl_list.c index 82b57952f..366e35e0a 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -116,7 +116,6 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, { struct sockaddr_storage addr; int net; - char* s = NULL; socklen_t addrlen; enum acl_access control; if(strcmp(s2, "allow") == 0) @@ -129,33 +128,10 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, log_err("access control type %s unknown", str); return 0; } - net = (str_is_ip6(str)?128:32); - if((s=strchr(str, '/'))) { - if(atoi(s+1) > net) { - log_err("acl netblock too large: %s", str); - return 0; - } - net = atoi(s+1); - if(net == 0 && strcmp(s+1, "0") != 0) { - log_err("cannot parse acl netblock:" - " '%s'", str); - return 0; - } - if(!(s = strdup(str))) { - log_err("out of memory"); - return 0; - } - *strchr(s, '/') = '\0'; - } - if(!ipstrtoaddr(s?s:str, UNBOUND_DNS_PORT, &addr, &addrlen)) { - free(s); - log_err("cannot parse acl ip address: '%s'", str); + if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { + log_err("cannot parse access control: %s %s", str, s2); return 0; } - if(s) { - free(s); - addr_mask(&addr, addrlen, net); - } if(!acl_list_insert(acl, &addr, addrlen, net, control, complain_duplicates)) { log_err("out of memory"); diff --git a/daemon/daemon.c b/daemon/daemon.c index 8108e850d..5314aa01f 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -42,6 +42,7 @@ #include "config.h" #include "daemon/daemon.h" #include "daemon/worker.h" +#include "daemon/acl_list.h" #include "util/log.h" #include "util/config_file.h" #include "util/data/msgreply.h" @@ -134,6 +135,12 @@ daemon_init() return NULL; } alloc_init(&daemon->superalloc, NULL, 0); + daemon->acl = acl_list_create(); + if(!daemon->acl) { + free(daemon->env); + free(daemon); + return NULL; + } return daemon; } @@ -397,6 +404,8 @@ void daemon_fork(struct daemon* daemon) { log_assert(daemon); + if(!acl_list_apply_cfg(daemon->acl, daemon->cfg)) + fatal_exit("Could not setup access control list"); /* setup modules */ daemon_setup_modules(daemon); @@ -465,6 +474,7 @@ daemon_delete(struct daemon* daemon) infra_delete(daemon->env->infra_cache); } alloc_clear(&daemon->superalloc); + acl_list_delete(daemon->acl); free(daemon->pidfile); free(daemon->env); free(daemon); diff --git a/daemon/daemon.h b/daemon/daemon.h index be24f5bad..8d6f06d56 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -50,6 +50,7 @@ struct listen_port; struct slabhash; struct module_env; struct rrset_cache; +struct acl_list; /** * Structure holding worker list. @@ -78,6 +79,8 @@ struct daemon { int num_modules; /** the module callbacks, array of num_modules length */ struct module_func_block** modfunc; + /** access control, which client IPs are allowed to connect */ + struct acl_list* acl; }; /** diff --git a/daemon/worker.c b/daemon/worker.c index 73cd24b70..2258f0c4d 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -45,6 +45,7 @@ #include "util/random.h" #include "daemon/worker.h" #include "daemon/daemon.h" +#include "daemon/acl_list.h" #include "util/netevent.h" #include "util/config_file.h" #include "util/module.h" @@ -663,12 +664,28 @@ worker_handle_request(struct comm_point* c, void* arg, int error, struct lruhash_entry* e; struct query_info qinfo; struct edns_data edns; + enum acl_access acl; if(error != NETEVENT_NOERROR) { /* some bad tcp query DNS formats give these error calls */ verbose(VERB_ALGO, "handle request called with err=%d", error); return 0; } + acl = acl_list_lookup(worker->daemon->acl, &repinfo->addr, + repinfo->addrlen); + if(acl == acl_deny) { + comm_point_drop_reply(repinfo); + return 0; + } else if(acl == acl_refuse) { + ldns_buffer_set_limit(c->buffer, LDNS_HEADER_SIZE); + ldns_buffer_write_at(c->buffer, 4, + (uint8_t*)"\0\0\0\0\0\0\0\0", 8); + LDNS_QR_SET(ldns_buffer_begin(c->buffer)); + LDNS_RCODE_SET(ldns_buffer_begin(c->buffer), + LDNS_RCODE_REFUSED); + log_buf(VERB_ALGO, "refuse", c->buffer); + return 1; + } if((ret=worker_check_request(c->buffer, worker)) != 0) { verbose(VERB_ALGO, "worker check request: bad query."); if(ret != -1) { diff --git a/doc/Changelog b/doc/Changelog index a3e2e53ba..5a3066726 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,8 @@ - README talks about gnu make. - 0.8: unit test for addr_mask and fixups for it. and unit test for addr_in_common(). + - 0.8: access-control config file element. + and unit test rpl replay file. 16 November 2007: Wouter - privilege separation is not needed in unbound at this time. diff --git a/doc/example.conf b/doc/example.conf index 7684c849d..80ce19efa 100644 --- a/doc/example.conf +++ b/doc/example.conf @@ -113,6 +113,15 @@ server: # Enable TCP, "yes" or "no". # do-tcp: yes + # control which clients are allowed to make (recursive) queries + # to this server. Specify classless netblocks with /size and action. + # By default everything is refused, except for localhost. + # Choose deny (drop message), refuse (polite error reply), allow. + # access-control: 0.0.0.0/0 refuse + # access-control: 127.0.0.0/8 allow + # access-control: ::0/0 refuse + # access-control: ::1 allow + # if given, a chroot(2) is done to the given directory. # i.e. you can chroot to the working directory, for example, # for extra security, but make sure all files are in that directory. diff --git a/doc/unbound.conf.5 b/doc/unbound.conf.5 index c45f4268a..ade71d4df 100644 --- a/doc/unbound.conf.5 +++ b/doc/unbound.conf.5 @@ -48,6 +48,12 @@ server: # logfile: "/etc/unbound/unbound.log" #uncomment to use logfile. pidfile: "/etc/unbound/unbound.pid" # verbosity: 1 # uncomment and increase to get more logging. + + # listen on all interfaces, answer queries from the local subnet. + interface: 0.0.0.0 + interface: ::0 + access-control: 10.0.0.0/8 allow + access-control: 2001:DB8::/64 allow .fi .Sh FILE FORMAT There must be whitespace between keywords. Attribute keywords end with a colon ':'. An attribute @@ -155,6 +161,13 @@ Enable or disable whether ip6 queries are answered. Default is yes. Enable or disable whether UDP queries are answered. Default is yes. .It \fBdo-tcp:\fR Enable or disable whether TCP queries are answered. Default is yes. +.It \fBaccess-control:\fR +The netblock is given as an IP4 or IP6 address with /size appended for a +classless network block. The action can be deny, refuse or allow. +Deny stops queries from hosts from that netblock. +Refuse stops queries too, but sends a DNS rcode REFUSED error message back. +Allow gives access to clients from that netblock. +By default only localhost is allowed, the rest is refused. .It \fBchroot:\fR If given a chroot is done to the given directory. The default is "/etc/unbound". If you give "" no chroot is performed. diff --git a/iterator/iter_donotq.c b/iterator/iter_donotq.c index f415e360c..e9a31fcb3 100644 --- a/iterator/iter_donotq.c +++ b/iterator/iter_donotq.c @@ -114,35 +114,11 @@ donotq_str_cfg(struct iter_donotq* dq, const char* str) { struct sockaddr_storage addr; int net; - char* s = NULL; socklen_t addrlen; - net = (str_is_ip6(str)?128:32); - if((s=strchr(str, '/'))) { - if(atoi(s+1) > net) { - log_err("netblock too large: %s", str); - return 0; - } - net = atoi(s+1); - if(net == 0 && strcmp(s+1, "0") != 0) { - log_err("cannot parse donotquery netblock:" - " '%s'", str); - return 0; - } - if(!(s = strdup(str))) { - log_err("out of memory"); - return 0; - } - *strchr(s, '/') = '\0'; - } - if(!ipstrtoaddr(s?s:str, UNBOUND_DNS_PORT, &addr, &addrlen)) { - free(s); - log_err("cannot parse donotquery ip address: '%s'", str); + if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { + log_err("cannot parse donotquery netblock: %s", str); return 0; } - if(s) { - free(s); - addr_mask(&addr, addrlen, net); - } if(!donotq_insert(dq, &addr, addrlen, net)) { log_err("out of memory"); return 0; diff --git a/testcode/replay.c b/testcode/replay.c index 52a4ef6b6..512c75795 100644 --- a/testcode/replay.c +++ b/testcode/replay.c @@ -229,6 +229,11 @@ replay_moment_read(char* remain, FILE* in, const char* name, int* lineno, while(isspace((int)*remain)) remain++; if(parse_keyword(&remain, "ADDRESS")) { + while(isspace((int)*remain)) + remain++; + if(strlen(remain) > 0) /* remove \n */ + remain[strlen(remain)-1] = 0; + printf("remain '%s'\n", remain); if(!extstrtoaddr(remain, &mom->addr, &mom->addrlen)) { log_err("line %d: could not parse ADDRESS: %s", *lineno, remain); diff --git a/testdata/acl.rpl b/testdata/acl.rpl new file mode 100644 index 000000000..3df7f81c8 --- /dev/null +++ b/testdata/acl.rpl @@ -0,0 +1,52 @@ +; config options +server: + hide-identity: no + hide-version: no + identity: "test-identity" + version: "test-version" + access-control: 20.0.0.0/8 allow + access-control: 20.40.0.0/16 refuse + access-control: 20.40.80.0/24 deny + +CONFIG_END +SCENARIO_BEGIN Test access control list + +; version.bind. +; allow +STEP 1 QUERY ADDRESS 20.1.2.3 +ENTRY_BEGIN +SECTION QUESTION +version.bind. CH TXT +ENTRY_END +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RA +SECTION QUESTION +version.bind. CH TXT +SECTION ANSWER +version.bind. 0 CH TXT "test-version" +ENTRY_END + +; refuse +STEP 3 QUERY ADDRESS 20.40.2.3 +ENTRY_BEGIN +SECTION QUESTION +version.bind. CH TXT +ENTRY_END +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR REFUSED +ENTRY_END + +; deny (drop) +STEP 5 QUERY ADDRESS 20.40.80.3 +ENTRY_BEGIN +SECTION QUESTION +version.bind. CH TXT +ENTRY_END + +; no answer must be pending + +SCENARIO_END diff --git a/util/configlexer.c b/util/configlexer.c index 37160e656..817bfe46d 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -365,8 +365,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 79 -#define YY_END_OF_BUFFER 80 +#define YY_NUM_RULES 80 +#define YY_END_OF_BUFFER 81 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -374,85 +374,86 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[694] = +static yyconst flex_int16_t yy_accept[709] = { 0, - 1, 1, 67, 67, 71, 71, 75, 75, 80, 78, - 1, 65, 66, 2, 79, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 67, 68, 79, 69, 79, 74, 71, 72, 73, - 79, 75, 76, 77, 79, 78, 0, 1, 2, 2, - 2, 2, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 67, - 0, 74, 0, 71, 75, 0, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 1, 1, 68, 68, 72, 72, 76, 76, 81, 79, + 1, 66, 67, 2, 80, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 68, 69, 80, 70, 80, 75, 72, 73, + 74, 80, 76, 77, 78, 80, 79, 0, 1, 2, + 2, 2, 2, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 68, 0, 75, 0, 72, 76, 0, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 41, 78, 78, 78, 78, 6, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 41, 79, 79, 79, 79, + 6, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 17, 78, 11, 12, - 78, 14, 13, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 3, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 70, 78, 78, 78, 78, 78, 78, 20, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 17, 79, 11, 12, 79, 14, 13, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 3, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 78, 78, 78, 78, 78, 78, 21, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 52, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 51, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 18, 78, - 78, 78, 78, 78, 78, 78, 19, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 15, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 42, 43, 40, 78, 78, 78, + 71, 79, 79, 79, 79, 79, 79, 20, 79, 79, + 79, 79, 79, 79, 21, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 53, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 52, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 18, 79, 79, + 79, 79, 79, 79, 79, 79, 19, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 15, 79, 79, 79, 79, 79, 79, 79, 79, - 78, 78, 78, 78, 78, 78, 5, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 22, 78, 78, 78, 78, 64, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 38, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 4, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 45, 46, 44, 78, 78, 78, 78, 50, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 79, 79, 79, 79, 42, 43, 40, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 5, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 22, 79, 79, 79, 79, 65, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 38, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 4, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 45, 46, 44, 79, 79, 79, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 56, - 78, 78, 78, 78, 78, 78, 28, 78, 78, 78, - 78, 78, 49, 78, 78, 78, 78, 78, 78, 78, - 78, 53, 78, 78, 78, 78, 78, 78, 7, 78, - 78, 78, 78, 78, 78, 58, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 29, - 30, 61, 78, 78, 24, 78, 78, 78, 78, 8, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 62, 23, - 25, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 79, 51, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 57, 79, 79, 79, 79, 79, 79, 79, + 28, 79, 79, 79, 79, 79, 50, 79, 79, 79, + 79, 79, 79, 79, 79, 54, 79, 79, 79, 79, + 79, 79, 7, 79, 79, 79, 79, 79, 79, 59, + 79, 79, 79, 79, 49, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 29, 30, 62, 79, 79, 24, + 79, 79, 79, 79, 8, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 78, 78, 78, 78, 78, 78, 78, 78, 10, 78, - 78, 78, 78, 78, 9, 26, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 31, 78, 78, 27, 78, 54, 55, 78, 78, - 57, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 16, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 35, 78, 78, 60, 47, 78, 78, - 37, 36, 78, 32, 78, 59, 78, 78, 78, 33, - 78, 78, 48, 39, 34, 78, 78, 78, 78, 78, - 78, 63, 0 + 79, 79, 79, 63, 23, 25, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 10, 79, 79, 79, 79, 79, 9, + 26, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 31, 79, 79, 27, + 79, 55, 56, 79, 79, 58, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 16, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 35, 79, + 79, 61, 47, 79, 79, 37, 36, 79, 32, 79, + 60, 79, 79, 79, 33, 79, 79, 48, 39, 34, + 79, 79, 79, 79, 79, 79, 64, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -495,494 +496,502 @@ static yyconst flex_int32_t yy_meta[38] = 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[703] = +static yyconst flex_int16_t yy_base[718] = { 0, - 0, 0, 35, 38, 49, 53, 59, 63, 1412, 1399, - 42, 1413, 1413, 68, 72, 66, 69, 33, 70, 72, - 75, 34, 73, 81, 37, 84, 86, 89, 95, 88, - 104, 1398, 1413, 1413, 1413, 118, 1397, 1406, 1413, 1413, - 123, 1395, 1413, 1413, 125, 1394, 129, 130, 0, 133, - 0, 0, 99, 90, 97, 132, 128, 129, 130, 131, - 135, 137, 140, 139, 142, 144, 148, 150, 151, 153, - 152, 157, 159, 158, 162, 163, 167, 171, 164, 1393, - 181, 1392, 194, 1401, 1390, 196, 177, 180, 190, 191, - 192, 193, 196, 199, 202, 198, 203, 222, 218, 205, + 0, 0, 35, 38, 49, 53, 59, 63, 1441, 1428, + 42, 1442, 1442, 68, 72, 34, 66, 69, 33, 70, + 72, 75, 73, 77, 81, 84, 88, 86, 89, 92, + 96, 105, 1427, 1442, 1442, 1442, 106, 1426, 1435, 1442, + 1442, 123, 1424, 1442, 1442, 119, 1423, 127, 128, 0, + 131, 0, 0, 125, 126, 90, 127, 135, 132, 133, + 134, 136, 137, 139, 145, 142, 147, 148, 153, 151, + 155, 157, 158, 161, 164, 162, 166, 167, 168, 169, + 171, 1422, 183, 1421, 199, 1430, 1419, 185, 185, 186, + 184, 195, 193, 196, 197, 199, 203, 208, 207, 205, - 226, 223, 232, 229, 231, 219, 220, 230, 233, 207, - 234, 240, 247, 248, 244, 245, 249, 165, 77, 251, - 252, 253, 259, 256, 271, 267, 268, 269, 272, 270, - 274, 275, 278, 280, 291, 276, 279, 285, 297, 303, - 299, 300, 306, 302, 304, 308, 309, 327, 310, 311, - 317, 313, 314, 337, 319, 316, 321, 328, 339, 344, - 346, 343, 348, 354, 350, 358, 351, 361, 360, 363, - 1389, 367, 368, 369, 370, 1388, 371, 377, 373, 374, - 383, 389, 385, 391, 386, 393, 388, 395, 396, 397, - 398, 405, 408, 410, 414, 419, 425, 422, 427, 428, + 214, 211, 215, 225, 221, 228, 227, 230, 229, 231, + 232, 233, 238, 239, 241, 247, 249, 243, 251, 252, + 253, 255, 256, 260, 262, 266, 272, 263, 280, 276, + 277, 278, 281, 279, 283, 48, 287, 289, 285, 288, + 294, 293, 300, 306, 303, 305, 314, 311, 312, 315, + 313, 334, 318, 319, 317, 325, 321, 323, 341, 324, + 329, 330, 346, 351, 350, 352, 353, 356, 360, 362, + 366, 358, 370, 354, 372, 1418, 376, 377, 378, 379, + 1417, 380, 386, 382, 383, 392, 398, 389, 394, 400, + 401, 397, 402, 404, 406, 405, 421, 410, 418, 420, - 434, 431, 433, 411, 436, 437, 440, 444, 439, 447, - 454, 453, 455, 456, 446, 457, 460, 462, 464, 469, - 472, 466, 473, 479, 477, 481, 475, 482, 483, 484, - 486, 492, 488, 495, 496, 498, 1387, 500, 1386, 1385, - 502, 1384, 1383, 506, 503, 508, 511, 512, 516, 519, - 522, 520, 524, 527, 529, 532, 535, 533, 540, 541, - 542, 543, 545, 546, 551, 1382, 549, 554, 555, 556, - 557, 565, 563, 561, 403, 575, 564, 569, 571, 573, - 578, 579, 580, 581, 587, 584, 582, 589, 591, 585, - 596, 606, 1381, 608, 607, 600, 609, 611, 615, 1380, + 426, 428, 435, 432, 437, 429, 443, 440, 441, 439, + 442, 448, 449, 450, 453, 454, 467, 463, 465, 466, + 455, 464, 470, 473, 476, 481, 474, 483, 484, 490, + 486, 488, 489, 491, 493, 494, 496, 504, 495, 502, + 505, 510, 514, 1416, 506, 1415, 1414, 508, 1413, 1412, + 521, 522, 520, 517, 519, 528, 530, 531, 535, 538, + 541, 542, 546, 548, 547, 552, 554, 556, 555, 558, + 559, 563, 1411, 565, 566, 567, 568, 570, 578, 575, + 576, 577, 587, 579, 585, 589, 590, 592, 593, 594, + 595, 596, 598, 600, 603, 604, 610, 608, 611, 625, - 613, 617, 619, 623, 625, 633, 1379, 629, 631, 630, - 635, 636, 637, 640, 315, 638, 645, 639, 646, 653, - 650, 651, 655, 1378, 661, 663, 664, 666, 658, 668, - 665, 671, 673, 674, 675, 676, 1377, 680, 678, 677, - 684, 698, 692, 695, 699, 705, 701, 703, 702, 704, - 710, 713, 721, 724, 709, 725, 726, 727, 1376, 735, - 737, 741, 729, 739, 743, 740, 1375, 744, 745, 746, - 747, 748, 750, 751, 752, 753, 754, 756, 765, 772, - 778, 1374, 763, 771, 779, 775, 780, 782, 783, 784, - 785, 786, 789, 790, 1373, 1372, 1371, 791, 792, 797, + 1410, 620, 627, 622, 626, 628, 631, 1409, 632, 634, + 637, 635, 647, 650, 1408, 641, 649, 651, 643, 653, + 654, 661, 655, 656, 667, 657, 663, 673, 671, 672, + 674, 1407, 677, 683, 680, 682, 685, 686, 691, 684, + 692, 693, 694, 695, 697, 1406, 696, 699, 701, 711, + 704, 718, 715, 717, 724, 721, 723, 722, 725, 730, + 733, 741, 745, 729, 742, 746, 747, 1405, 757, 758, + 760, 756, 749, 762, 759, 763, 1404, 764, 766, 768, + 771, 769, 772, 773, 774, 776, 775, 779, 783, 795, + 797, 1403, 793, 794, 801, 798, 802, 803, 804, 805, - 802, 803, 807, 805, 809, 810, 1370, 811, 812, 814, - 816, 818, 819, 826, 827, 820, 829, 833, 837, 843, - 834, 840, 841, 842, 844, 845, 860, 858, 847, 861, - 863, 864, 1369, 870, 867, 868, 869, 1368, 871, 872, - 874, 878, 882, 881, 889, 894, 896, 898, 899, 1367, - 905, 906, 886, 904, 912, 908, 909, 911, 888, 914, - 916, 918, 917, 924, 920, 1366, 929, 936, 922, 932, - 933, 943, 945, 952, 937, 946, 949, 958, 954, 956, - 959, 1365, 1364, 1363, 962, 961, 963, 967, 1362, 964, - 968, 971, 974, 976, 978, 979, 980, 993, 972, 981, + 808, 806, 810, 813, 1402, 1401, 1400, 812, 814, 819, + 824, 826, 829, 827, 831, 832, 1399, 834, 833, 836, + 838, 839, 841, 842, 849, 854, 844, 853, 856, 861, + 862, 864, 865, 866, 867, 868, 870, 885, 888, 871, + 882, 874, 889, 1398, 897, 893, 878, 896, 1397, 898, + 899, 900, 904, 906, 907, 908, 916, 913, 923, 925, + 926, 1396, 932, 933, 910, 931, 940, 936, 918, 920, + 938, 941, 943, 944, 945, 951, 946, 1395, 955, 962, + 948, 958, 956, 964, 973, 971, 969, 975, 976, 982, + 978, 981, 984, 985, 1394, 1393, 1392, 993, 987, 989, - 988, 994, 995, 996, 1001, 998, 1002, 1004, 1008, 1361, - 1010, 1006, 1009, 1007, 1017, 1022, 1360, 1020, 1023, 1026, - 1028, 1029, 1359, 1030, 1031, 1034, 1035, 1039, 1041, 1051, - 1042, 1358, 1047, 1054, 1045, 1055, 1056, 1058, 1357, 1065, - 1032, 1066, 1059, 1068, 1069, 1356, 1070, 1071, 1074, 1081, - 1079, 1082, 1084, 1086, 1087, 1090, 1092, 1088, 1098, 1355, - 1354, 1353, 1095, 1102, 1352, 1107, 1104, 1108, 1110, 1351, - 1111, 1112, 1113, 1115, 1117, 1118, 1119, 1120, 1121, 1123, - 1129, 1131, 1132, 1134, 1136, 1142, 1141, 1138, 1350, 1349, - 1348, 1143, 1147, 1146, 1154, 1151, 1157, 1158, 1159, 1160, + 995, 1391, 990, 997, 1001, 1002, 1004, 1005, 1006, 1008, + 1018, 1007, 1014, 1020, 1023, 1012, 1024, 1026, 1030, 1027, + 1031, 1033, 1390, 1034, 1042, 1044, 1037, 1045, 1047, 1051, + 1389, 1054, 1048, 1056, 1057, 1059, 1388, 1060, 1061, 1064, + 1065, 1068, 1070, 1072, 1075, 1387, 1078, 1081, 1082, 1084, + 1085, 1086, 1386, 1088, 1090, 1094, 1092, 1096, 1098, 1385, + 1097, 1099, 1102, 1109, 1384, 1110, 1117, 1111, 1113, 1119, + 1112, 1121, 1123, 1122, 1383, 1382, 1381, 1129, 1133, 1380, + 1135, 1141, 1137, 1139, 1379, 1140, 1142, 1146, 1147, 1148, + 1143, 1149, 1150, 1151, 1153, 1155, 1160, 1161, 1162, 1165, - 1165, 1167, 1161, 1168, 1171, 1176, 1177, 1178, 1347, 1179, - 1180, 1184, 1181, 1188, 1346, 1345, 1191, 1192, 1200, 1202, - 1194, 1208, 1205, 1206, 1196, 1209, 1211, 1213, 1212, 1215, - 1216, 1344, 1219, 1221, 1342, 1222, 1334, 1318, 1227, 1223, - 1317, 1225, 1229, 1231, 1233, 1234, 1238, 1239, 1240, 1244, - 1316, 1242, 1250, 1251, 1254, 1256, 1257, 1260, 1263, 1267, - 1268, 1272, 1276, 1315, 1279, 1269, 1314, 1312, 1280, 1281, - 1310, 1309, 1283, 1308, 1284, 1302, 1286, 1290, 1292, 1259, - 1294, 1295, 1122, 817, 714, 1287, 1298, 1297, 1300, 1301, - 1305, 681, 1413, 1331, 1335, 1339, 605, 1343, 1347, 217, + 1171, 1167, 1168, 1378, 1377, 1376, 1172, 1173, 1183, 1185, + 1175, 1179, 1187, 1189, 1190, 1195, 1196, 1197, 1198, 1199, + 1205, 1206, 1207, 1375, 1202, 1208, 1213, 1209, 1218, 1374, + 1372, 1222, 1224, 1229, 1231, 1219, 1238, 1235, 1236, 1225, + 1237, 1239, 1241, 1242, 1244, 1247, 1364, 1248, 1250, 1348, + 1251, 1347, 1346, 1255, 1252, 1345, 1257, 1258, 1259, 1263, + 1264, 1269, 1260, 1268, 1272, 1344, 1271, 1279, 1280, 1284, + 1288, 1289, 1291, 1293, 1295, 1297, 1301, 1303, 1342, 1306, + 1308, 1341, 1340, 1298, 1310, 1339, 1337, 1312, 1336, 1315, + 1281, 1309, 1321, 1323, 840, 1325, 1327, 736, 612, 536, - 1349, 1351 + 1316, 1329, 1318, 1330, 1331, 1334, 445, 1442, 1361, 1365, + 1369, 418, 1373, 1377, 338, 1379, 1381 } ; -static yyconst flex_int16_t yy_def[703] = +static yyconst flex_int16_t yy_def[718] = { 0, - 693, 1, 694, 694, 695, 695, 696, 696, 693, 697, - 693, 693, 693, 698, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 699, 693, 693, 693, 699, 700, 693, 693, 693, - 700, 701, 693, 693, 701, 697, 697, 693, 702, 698, - 702, 698, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 699, - 699, 700, 700, 693, 701, 701, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 708, 1, 709, 709, 710, 710, 711, 711, 708, 712, + 708, 708, 708, 713, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 714, 708, 708, 708, 714, 715, 708, 708, + 708, 715, 716, 708, 708, 716, 712, 712, 708, 717, + 713, 717, 713, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 714, 714, 715, 715, 708, 716, 716, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, - 697, 697, 0, 693, 693, 693, 693, 693, 693, 693, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 693, 693 + 712, 712, 712, 712, 712, 712, 712, 0, 708, 708, + 708, 708, 708, 708, 708, 708, 708 } ; -static yyconst flex_int16_t yy_nxt[1451] = +static yyconst flex_int16_t yy_nxt[1480] = { 0, 10, 11, 12, 12, 13, 14, 10, 10, 10, 10, - 10, 15, 10, 10, 16, 17, 10, 18, 10, 19, - 20, 21, 22, 23, 24, 25, 26, 10, 27, 28, - 29, 30, 31, 10, 10, 10, 10, 33, 34, 35, - 33, 34, 35, 48, 47, 47, 36, 49, 47, 36, - 38, 39, 39, 40, 38, 39, 39, 40, 57, 63, - 41, 43, 43, 44, 41, 43, 43, 44, 68, 51, - 45, 51, 51, 46, 45, 46, 46, 47, 53, 52, - 47, 47, 58, 47, 47, 54, 47, 60, 47, 55, - 59, 62, 47, 66, 56, 47, 61, 47, 64, 47, + 10, 15, 16, 10, 17, 18, 10, 19, 10, 20, + 21, 22, 23, 24, 25, 26, 27, 10, 28, 29, + 30, 31, 32, 10, 10, 10, 10, 34, 35, 36, + 34, 35, 36, 49, 48, 48, 37, 50, 54, 37, + 39, 40, 40, 41, 39, 40, 40, 41, 59, 48, + 42, 44, 44, 45, 42, 44, 44, 45, 172, 52, + 46, 52, 52, 47, 46, 47, 47, 48, 55, 53, + 48, 48, 60, 48, 48, 56, 48, 62, 48, 57, + 61, 64, 48, 68, 58, 48, 63, 48, 65, 48, - 47, 47, 65, 154, 69, 73, 47, 75, 47, 70, - 47, 71, 67, 87, 72, 47, 78, 77, 88, 74, - 79, 80, 80, 76, 82, 89, 82, 82, 85, 85, - 46, 48, 46, 46, 51, 49, 51, 51, 90, 47, - 47, 47, 47, 47, 52, 93, 47, 94, 47, 95, - 47, 47, 96, 47, 100, 47, 91, 92, 99, 47, - 101, 47, 47, 47, 47, 97, 105, 102, 47, 47, - 47, 103, 98, 47, 47, 47, 47, 107, 47, 153, - 104, 106, 47, 113, 80, 80, 108, 109, 47, 110, - 111, 47, 115, 114, 112, 82, 116, 82, 82, 85, + 48, 48, 66, 48, 77, 75, 67, 48, 71, 82, + 82, 73, 69, 72, 74, 70, 48, 80, 91, 76, + 78, 81, 87, 87, 84, 79, 84, 84, 47, 49, + 47, 47, 52, 50, 52, 52, 48, 48, 48, 89, + 90, 93, 53, 48, 48, 48, 48, 48, 48, 96, + 48, 98, 97, 48, 99, 92, 48, 103, 48, 48, + 94, 95, 48, 102, 48, 104, 48, 100, 48, 48, + 108, 105, 48, 48, 101, 48, 106, 48, 48, 48, + 48, 107, 48, 110, 116, 109, 82, 82, 87, 87, + 111, 117, 112, 113, 114, 48, 48, 48, 115, 118, - 85, 47, 47, 47, 47, 117, 118, 47, 124, 47, - 47, 119, 125, 47, 47, 120, 47, 82, 47, 130, - 143, 121, 122, 126, 127, 123, 129, 128, 131, 47, - 47, 47, 134, 47, 47, 132, 133, 47, 136, 135, - 47, 47, 47, 47, 47, 47, 141, 137, 138, 139, - 140, 47, 144, 146, 148, 47, 47, 149, 47, 47, - 47, 151, 47, 47, 47, 142, 156, 47, 157, 145, - 47, 158, 159, 150, 152, 147, 155, 160, 47, 47, - 47, 47, 47, 47, 164, 47, 47, 47, 166, 47, - 47, 47, 163, 169, 170, 167, 47, 161, 165, 162, + 84, 119, 84, 84, 48, 120, 48, 48, 48, 121, + 48, 122, 128, 123, 48, 129, 48, 124, 48, 48, + 135, 134, 48, 125, 126, 48, 48, 130, 136, 127, + 131, 138, 48, 132, 140, 133, 48, 139, 48, 48, + 48, 48, 48, 48, 48, 141, 137, 142, 145, 48, + 48, 147, 48, 150, 48, 152, 153, 148, 48, 143, + 48, 144, 48, 48, 48, 146, 48, 48, 156, 158, + 149, 48, 154, 48, 48, 151, 161, 48, 157, 164, + 155, 162, 159, 48, 163, 160, 165, 48, 48, 48, + 48, 48, 48, 169, 48, 176, 48, 171, 48, 48, - 168, 171, 47, 172, 174, 175, 173, 176, 47, 177, - 47, 47, 180, 47, 47, 47, 179, 47, 181, 47, - 47, 47, 47, 192, 47, 47, 47, 47, 47, 178, - 47, 191, 47, 184, 182, 190, 357, 183, 47, 47, - 185, 186, 198, 193, 194, 195, 196, 199, 47, 197, - 47, 187, 188, 189, 47, 47, 200, 47, 205, 47, - 207, 47, 47, 201, 202, 47, 204, 208, 206, 47, - 209, 47, 47, 210, 47, 213, 203, 211, 47, 47, - 47, 47, 47, 219, 47, 47, 221, 215, 47, 216, - 218, 212, 217, 222, 47, 225, 47, 47, 214, 47, + 48, 168, 174, 175, 48, 48, 166, 170, 167, 173, + 181, 48, 182, 180, 48, 177, 48, 48, 178, 179, + 185, 184, 48, 48, 48, 48, 48, 186, 48, 48, + 48, 198, 48, 183, 48, 48, 48, 189, 84, 196, + 48, 48, 187, 195, 188, 48, 197, 190, 191, 201, + 202, 199, 48, 200, 203, 204, 205, 48, 192, 193, + 194, 48, 48, 48, 48, 48, 213, 48, 211, 48, + 208, 48, 210, 48, 206, 207, 212, 48, 215, 214, + 216, 48, 209, 48, 219, 218, 217, 48, 48, 48, + 48, 48, 225, 48, 48, 227, 221, 48, 222, 224, - 47, 220, 47, 228, 47, 226, 47, 47, 47, 47, - 223, 229, 233, 224, 47, 230, 47, 231, 237, 47, - 227, 47, 47, 235, 239, 47, 234, 232, 236, 240, - 47, 241, 242, 47, 318, 238, 47, 243, 47, 47, - 245, 248, 47, 244, 47, 47, 246, 47, 47, 247, - 47, 47, 249, 255, 251, 47, 254, 47, 47, 252, - 257, 250, 253, 256, 47, 47, 47, 47, 47, 259, - 258, 47, 260, 47, 261, 47, 263, 47, 265, 266, - 47, 262, 264, 47, 47, 270, 47, 267, 47, 271, - 47, 268, 47, 47, 47, 47, 272, 47, 269, 47, + 48, 223, 228, 48, 231, 48, 234, 220, 48, 48, + 226, 48, 48, 48, 232, 48, 48, 48, 47, 229, + 239, 48, 230, 236, 233, 235, 237, 242, 244, 48, + 241, 48, 48, 243, 238, 240, 246, 48, 247, 48, + 48, 248, 249, 48, 251, 245, 48, 250, 48, 252, + 48, 48, 48, 48, 48, 253, 48, 254, 256, 48, + 48, 48, 261, 258, 48, 48, 48, 262, 259, 255, + 263, 260, 257, 264, 48, 48, 48, 48, 48, 266, + 265, 48, 267, 268, 48, 48, 270, 48, 269, 274, + 272, 273, 48, 271, 48, 48, 277, 48, 278, 48, - 276, 275, 277, 47, 273, 274, 47, 47, 278, 47, - 282, 47, 285, 47, 47, 280, 279, 47, 286, 47, - 281, 287, 47, 47, 290, 288, 293, 47, 283, 284, - 47, 47, 289, 47, 295, 47, 297, 294, 47, 291, - 47, 298, 300, 47, 47, 296, 47, 292, 299, 301, - 302, 47, 47, 47, 47, 307, 47, 47, 305, 303, - 47, 306, 47, 309, 310, 47, 47, 47, 47, 304, - 308, 315, 47, 313, 47, 47, 47, 317, 320, 312, - 47, 314, 47, 311, 47, 316, 47, 319, 324, 47, - 47, 47, 47, 47, 322, 47, 47, 321, 47, 328, + 48, 48, 48, 279, 48, 48, 48, 48, 275, 276, + 283, 282, 284, 48, 281, 48, 48, 48, 280, 48, + 285, 48, 287, 286, 289, 48, 290, 293, 48, 288, + 48, 48, 48, 48, 291, 292, 298, 294, 301, 48, + 295, 48, 48, 303, 296, 299, 48, 48, 302, 48, + 305, 297, 48, 48, 300, 306, 308, 48, 48, 48, + 304, 307, 309, 48, 310, 48, 48, 48, 315, 48, + 48, 311, 313, 314, 48, 317, 48, 48, 48, 48, + 318, 48, 312, 316, 323, 321, 48, 48, 48, 48, + 48, 320, 325, 328, 322, 319, 48, 324, 48, 327, - 47, 333, 47, 323, 332, 46, 329, 47, 331, 335, - 334, 47, 327, 325, 338, 326, 337, 47, 47, 47, - 47, 339, 47, 330, 47, 336, 47, 342, 47, 340, - 47, 343, 341, 345, 47, 346, 47, 348, 344, 349, - 47, 47, 47, 347, 47, 351, 47, 47, 47, 47, - 47, 47, 354, 355, 356, 359, 47, 47, 352, 350, - 362, 47, 47, 358, 47, 353, 47, 366, 360, 47, - 361, 364, 47, 367, 47, 47, 47, 47, 363, 47, - 368, 369, 47, 370, 47, 47, 47, 47, 47, 47, - 365, 47, 47, 371, 372, 47, 377, 379, 383, 375, + 48, 48, 332, 48, 48, 48, 48, 48, 326, 48, + 337, 48, 330, 329, 48, 48, 342, 338, 333, 48, + 331, 48, 48, 48, 340, 341, 347, 336, 334, 343, + 335, 48, 344, 48, 339, 346, 48, 48, 48, 48, + 345, 348, 48, 48, 351, 48, 48, 352, 48, 350, + 354, 349, 48, 355, 48, 356, 358, 353, 48, 357, + 48, 48, 48, 360, 48, 48, 48, 48, 48, 363, + 364, 359, 48, 362, 48, 365, 366, 368, 48, 361, + 371, 367, 48, 48, 48, 48, 369, 370, 48, 376, + 377, 48, 373, 48, 48, 48, 48, 48, 378, 372, - 381, 374, 373, 47, 378, 376, 47, 380, 382, 47, - 47, 386, 47, 47, 47, 47, 47, 387, 388, 384, - 47, 47, 389, 395, 47, 47, 390, 385, 391, 394, - 392, 396, 47, 393, 397, 47, 47, 47, 47, 398, - 47, 402, 400, 403, 399, 401, 47, 404, 47, 405, - 47, 47, 47, 407, 47, 47, 47, 47, 47, 47, - 410, 47, 47, 47, 47, 47, 414, 47, 406, 415, - 408, 412, 409, 417, 47, 411, 47, 413, 421, 418, - 416, 420, 47, 47, 422, 425, 47, 419, 424, 47, - 47, 47, 423, 47, 47, 47, 47, 47, 432, 433, + 379, 375, 48, 48, 48, 48, 48, 48, 48, 374, + 48, 380, 48, 382, 392, 48, 381, 387, 389, 385, + 388, 384, 48, 383, 393, 386, 48, 391, 48, 48, + 396, 390, 48, 48, 48, 48, 48, 397, 398, 394, + 48, 48, 399, 405, 48, 395, 400, 48, 401, 404, + 402, 406, 48, 48, 403, 407, 48, 48, 48, 408, + 48, 409, 410, 412, 413, 411, 414, 48, 48, 48, + 48, 48, 417, 48, 48, 48, 415, 48, 416, 48, + 48, 421, 48, 48, 48, 48, 48, 48, 425, 418, + 48, 426, 420, 419, 48, 423, 428, 422, 424, 431, - 47, 47, 47, 47, 426, 435, 434, 429, 47, 427, - 431, 428, 438, 47, 47, 430, 47, 436, 47, 440, - 47, 47, 47, 47, 442, 47, 441, 47, 47, 47, - 47, 47, 437, 439, 448, 449, 450, 47, 47, 443, - 47, 444, 446, 451, 47, 47, 447, 445, 47, 456, - 452, 47, 47, 47, 47, 47, 47, 454, 47, 453, - 455, 459, 461, 460, 457, 463, 465, 464, 466, 47, - 458, 47, 47, 462, 47, 47, 471, 467, 47, 47, - 47, 47, 47, 47, 468, 47, 472, 476, 470, 47, - 477, 469, 47, 47, 478, 481, 473, 47, 474, 47, + 429, 432, 427, 433, 48, 48, 48, 436, 48, 48, + 430, 435, 48, 48, 48, 48, 48, 48, 443, 48, + 444, 48, 434, 48, 48, 48, 446, 437, 440, 445, + 48, 438, 439, 442, 449, 48, 441, 48, 48, 447, + 48, 451, 48, 48, 48, 48, 453, 48, 452, 48, + 48, 48, 48, 48, 448, 48, 450, 460, 461, 462, + 48, 454, 455, 456, 48, 48, 458, 48, 468, 459, + 463, 457, 48, 48, 464, 48, 48, 48, 48, 48, + 466, 48, 48, 465, 467, 48, 471, 473, 472, 48, + 475, 477, 476, 48, 469, 470, 48, 474, 478, 48, - 47, 475, 479, 480, 482, 47, 483, 47, 484, 47, - 47, 486, 487, 485, 489, 47, 47, 47, 490, 47, - 47, 488, 47, 47, 496, 47, 497, 47, 47, 47, - 491, 47, 492, 47, 498, 47, 501, 493, 499, 494, - 47, 495, 504, 47, 47, 503, 502, 47, 47, 508, - 506, 509, 505, 500, 47, 510, 47, 47, 511, 512, - 47, 513, 507, 47, 515, 47, 517, 47, 520, 47, - 47, 518, 47, 47, 47, 47, 522, 523, 47, 47, - 525, 519, 47, 47, 514, 47, 516, 47, 521, 47, - 47, 47, 47, 531, 524, 530, 527, 534, 528, 47, + 48, 479, 481, 483, 48, 480, 485, 48, 48, 48, + 48, 48, 484, 482, 488, 48, 489, 48, 48, 48, + 490, 48, 494, 495, 48, 486, 491, 48, 487, 48, + 493, 48, 492, 496, 48, 497, 48, 48, 499, 500, + 498, 502, 48, 48, 48, 501, 503, 48, 507, 48, + 508, 48, 48, 510, 48, 48, 48, 48, 504, 48, + 505, 511, 48, 514, 512, 506, 48, 48, 517, 48, + 521, 516, 515, 48, 509, 48, 519, 524, 518, 522, + 48, 513, 48, 523, 48, 520, 48, 48, 528, 48, + 526, 525, 48, 48, 531, 48, 48, 532, 48, 534, - 529, 535, 526, 532, 47, 47, 47, 47, 533, 47, - 536, 539, 47, 47, 540, 47, 546, 47, 47, 47, - 47, 47, 541, 537, 542, 544, 538, 545, 47, 547, - 543, 47, 549, 47, 47, 551, 548, 47, 550, 47, - 47, 47, 47, 47, 556, 47, 47, 559, 552, 560, - 47, 561, 47, 47, 557, 553, 47, 558, 47, 554, - 555, 562, 47, 564, 565, 47, 47, 47, 571, 47, - 47, 563, 569, 568, 566, 570, 47, 47, 572, 47, - 47, 47, 47, 567, 573, 47, 578, 579, 574, 575, - 47, 577, 47, 47, 580, 47, 581, 47, 47, 47, + 48, 48, 536, 530, 48, 537, 48, 533, 48, 539, + 529, 527, 48, 48, 535, 48, 48, 48, 48, 48, + 538, 545, 544, 48, 541, 48, 542, 543, 546, 48, + 548, 48, 540, 549, 48, 48, 553, 48, 48, 550, + 551, 48, 48, 547, 48, 48, 554, 555, 48, 556, + 558, 559, 560, 48, 552, 48, 48, 557, 48, 48, + 563, 565, 48, 564, 561, 48, 562, 48, 48, 566, + 48, 48, 48, 567, 571, 48, 48, 574, 575, 48, + 576, 48, 577, 48, 572, 568, 48, 573, 569, 48, + 570, 580, 48, 48, 579, 48, 48, 48, 585, 48, - 576, 47, 583, 47, 584, 589, 47, 587, 586, 47, - 592, 588, 590, 47, 582, 47, 585, 591, 47, 47, - 593, 47, 47, 47, 47, 596, 47, 595, 47, 47, - 47, 47, 47, 47, 47, 597, 594, 598, 600, 599, - 47, 605, 47, 47, 603, 47, 609, 47, 610, 47, - 602, 604, 47, 47, 47, 601, 615, 47, 47, 606, - 607, 614, 47, 608, 616, 47, 611, 612, 47, 47, - 47, 47, 47, 613, 619, 620, 47, 618, 47, 47, - 617, 622, 47, 623, 625, 621, 624, 47, 47, 47, - 47, 47, 47, 626, 632, 47, 627, 628, 629, 47, + 584, 48, 583, 48, 578, 48, 587, 48, 48, 48, + 48, 581, 582, 48, 593, 594, 589, 588, 590, 592, + 48, 48, 48, 48, 48, 595, 586, 591, 48, 598, + 48, 596, 48, 48, 48, 603, 599, 601, 600, 604, + 48, 597, 602, 605, 48, 606, 48, 607, 48, 608, + 48, 48, 48, 48, 48, 611, 610, 48, 48, 48, + 48, 48, 48, 615, 48, 609, 48, 620, 612, 613, + 614, 48, 48, 48, 618, 624, 48, 625, 48, 48, + 617, 619, 48, 48, 48, 616, 48, 629, 621, 622, + 48, 623, 626, 630, 48, 631, 48, 627, 48, 633, - 633, 635, 47, 47, 634, 47, 636, 47, 630, 631, - 637, 47, 638, 47, 640, 641, 47, 47, 639, 47, - 47, 642, 47, 47, 47, 643, 47, 47, 644, 646, - 47, 651, 47, 47, 47, 648, 47, 645, 47, 653, - 47, 655, 47, 654, 47, 47, 649, 650, 647, 47, - 47, 47, 664, 47, 660, 47, 657, 652, 656, 658, - 663, 47, 47, 659, 667, 47, 668, 47, 47, 662, - 47, 47, 665, 671, 47, 661, 670, 672, 47, 47, - 47, 666, 674, 47, 673, 677, 669, 47, 675, 676, - 47, 47, 47, 680, 47, 47, 679, 47, 47, 681, + 48, 48, 628, 634, 632, 635, 48, 48, 48, 48, + 48, 637, 638, 48, 640, 636, 48, 48, 48, 48, + 48, 641, 639, 647, 48, 642, 643, 644, 648, 48, + 48, 645, 650, 48, 649, 48, 48, 646, 651, 652, + 48, 653, 48, 654, 655, 656, 48, 48, 48, 48, + 48, 657, 48, 48, 658, 48, 659, 661, 48, 48, + 666, 48, 48, 48, 663, 660, 48, 668, 48, 48, + 48, 48, 669, 670, 48, 48, 665, 664, 662, 48, + 48, 679, 48, 48, 672, 675, 667, 671, 678, 673, + 48, 48, 48, 674, 682, 48, 676, 677, 683, 48, - 683, 47, 684, 47, 685, 47, 47, 686, 47, 47, - 678, 47, 47, 47, 682, 692, 47, 687, 688, 47, - 47, 47, 689, 47, 690, 47, 47, 47, 47, 47, - 691, 32, 32, 32, 32, 37, 37, 37, 37, 42, - 42, 42, 42, 50, 50, 47, 50, 80, 80, 85, - 85, 51, 51, 47, 51, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 48, 680, 48, 686, 48, 687, 48, 685, 48, 48, + 681, 689, 48, 688, 48, 690, 691, 48, 684, 48, + 48, 48, 695, 48, 692, 694, 48, 48, 693, 48, + 696, 698, 48, 699, 48, 700, 48, 697, 48, 701, + 48, 48, 48, 704, 707, 48, 702, 48, 48, 703, + 48, 48, 48, 48, 705, 48, 48, 48, 48, 48, + 706, 33, 33, 33, 33, 38, 38, 38, 38, 43, + 43, 43, 43, 51, 51, 48, 51, 82, 82, 87, + 87, 52, 52, 48, 52, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 47, 86, 84, 83, 81, 47, 86, 84, 83, 81, - 47, 693, 9, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693 + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 88, 86, 85, 83, 48, 88, 86, 85, 83, 48, + 708, 9, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708 } ; -static yyconst flex_int16_t yy_chk[1451] = +static yyconst flex_int16_t yy_chk[1480] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, - 4, 4, 4, 11, 18, 22, 3, 11, 25, 4, - 5, 5, 5, 5, 6, 6, 6, 6, 18, 22, - 5, 7, 7, 7, 6, 8, 8, 8, 25, 14, - 7, 14, 14, 15, 8, 15, 15, 16, 16, 14, - 17, 19, 19, 20, 23, 16, 21, 20, 119, 17, - 19, 21, 24, 24, 17, 26, 20, 27, 23, 30, + 4, 4, 4, 11, 19, 16, 3, 11, 16, 4, + 5, 5, 5, 5, 6, 6, 6, 6, 19, 136, + 5, 7, 7, 7, 6, 8, 8, 8, 136, 14, + 7, 14, 14, 15, 8, 15, 15, 17, 17, 14, + 18, 20, 20, 21, 23, 17, 22, 21, 24, 18, + 20, 22, 25, 25, 18, 26, 21, 28, 23, 27, - 28, 54, 23, 119, 26, 28, 29, 29, 55, 26, - 53, 27, 24, 53, 27, 31, 31, 30, 54, 28, - 31, 36, 36, 29, 41, 55, 41, 41, 45, 45, - 47, 48, 47, 47, 50, 48, 50, 50, 56, 57, - 58, 59, 60, 56, 50, 59, 61, 60, 62, 61, - 64, 63, 61, 65, 64, 66, 57, 58, 63, 67, - 65, 68, 69, 71, 70, 61, 69, 66, 72, 74, - 73, 67, 62, 75, 76, 79, 118, 71, 77, 118, - 68, 70, 78, 77, 81, 81, 72, 73, 87, 74, - 75, 88, 79, 78, 76, 83, 87, 83, 83, 86, + 29, 56, 24, 30, 30, 29, 24, 31, 27, 37, + 37, 28, 25, 27, 28, 26, 32, 32, 56, 29, + 30, 32, 46, 46, 42, 31, 42, 42, 48, 49, + 48, 48, 51, 49, 51, 51, 54, 55, 57, 54, + 55, 58, 51, 59, 60, 61, 58, 62, 63, 61, + 64, 63, 62, 66, 63, 57, 65, 66, 67, 68, + 59, 60, 70, 65, 69, 67, 71, 63, 72, 73, + 71, 68, 74, 76, 64, 75, 69, 77, 78, 79, + 80, 70, 81, 73, 79, 72, 83, 83, 88, 88, + 74, 80, 75, 76, 77, 91, 89, 90, 78, 81, - 86, 89, 90, 91, 92, 88, 89, 93, 92, 96, - 94, 90, 93, 95, 97, 90, 100, 700, 110, 97, - 110, 90, 90, 94, 95, 91, 96, 95, 98, 99, - 106, 107, 101, 98, 102, 99, 100, 101, 103, 102, - 104, 108, 105, 103, 109, 111, 108, 104, 105, 106, - 107, 112, 111, 113, 114, 115, 116, 115, 113, 114, - 117, 116, 120, 121, 122, 109, 121, 124, 122, 112, - 123, 123, 124, 115, 117, 113, 120, 125, 126, 127, - 128, 130, 125, 129, 129, 131, 132, 136, 131, 133, - 137, 134, 128, 134, 134, 132, 138, 126, 130, 127, + 85, 89, 85, 85, 93, 90, 92, 94, 95, 91, + 96, 92, 95, 93, 97, 96, 100, 93, 99, 98, + 101, 100, 102, 93, 93, 101, 103, 97, 102, 94, + 98, 104, 105, 98, 106, 99, 104, 105, 107, 106, + 109, 108, 110, 111, 112, 107, 103, 108, 111, 113, + 114, 113, 115, 116, 118, 117, 118, 114, 116, 109, + 117, 110, 119, 120, 121, 112, 122, 123, 120, 122, + 115, 124, 118, 125, 128, 116, 125, 126, 121, 128, + 119, 126, 123, 127, 127, 124, 129, 130, 131, 132, + 134, 129, 133, 133, 135, 139, 139, 135, 137, 140, - 133, 135, 135, 136, 137, 138, 136, 139, 139, 140, - 141, 142, 143, 144, 140, 145, 142, 143, 144, 146, - 147, 149, 150, 151, 152, 153, 315, 156, 151, 141, - 155, 150, 157, 147, 145, 149, 315, 146, 148, 158, - 148, 148, 156, 152, 153, 154, 154, 157, 154, 155, - 159, 148, 148, 148, 162, 160, 158, 161, 162, 163, - 164, 165, 167, 159, 160, 164, 161, 165, 163, 166, - 166, 169, 168, 167, 170, 170, 160, 168, 172, 173, - 174, 175, 177, 178, 179, 180, 180, 173, 178, 174, - 177, 169, 175, 180, 181, 182, 183, 185, 172, 187, + 138, 132, 138, 138, 142, 141, 130, 134, 131, 137, + 143, 143, 144, 142, 145, 140, 146, 144, 140, 141, + 147, 146, 148, 149, 151, 147, 150, 148, 155, 153, + 154, 156, 157, 145, 158, 160, 156, 151, 715, 154, + 161, 162, 149, 153, 150, 152, 155, 152, 152, 159, + 159, 157, 159, 158, 160, 161, 162, 163, 152, 152, + 152, 165, 164, 166, 167, 174, 169, 168, 167, 172, + 165, 169, 166, 170, 163, 164, 168, 171, 171, 170, + 172, 173, 165, 175, 175, 174, 173, 177, 178, 179, + 180, 182, 183, 184, 185, 185, 178, 183, 179, 182, - 182, 179, 184, 184, 186, 182, 188, 189, 190, 191, - 180, 185, 189, 181, 275, 186, 192, 187, 193, 193, - 183, 194, 204, 191, 195, 195, 190, 188, 192, 196, - 196, 197, 198, 198, 275, 194, 197, 199, 199, 200, - 201, 204, 202, 200, 203, 201, 202, 205, 206, 203, - 209, 207, 205, 209, 207, 208, 208, 215, 210, 207, - 211, 206, 207, 210, 212, 211, 213, 214, 216, 213, - 212, 217, 214, 218, 215, 219, 217, 222, 219, 220, - 220, 216, 218, 221, 223, 224, 227, 221, 225, 225, - 224, 222, 226, 228, 229, 230, 226, 231, 223, 233, + 188, 180, 185, 186, 187, 189, 189, 177, 192, 187, + 184, 190, 191, 193, 187, 194, 196, 195, 712, 185, + 194, 198, 186, 191, 188, 190, 192, 197, 199, 199, + 196, 200, 197, 198, 193, 195, 201, 201, 202, 202, + 206, 203, 204, 204, 206, 200, 203, 205, 205, 207, + 210, 208, 209, 211, 207, 208, 707, 209, 211, 212, + 213, 214, 214, 213, 215, 216, 221, 215, 213, 210, + 216, 213, 212, 217, 218, 222, 219, 220, 217, 219, + 218, 223, 220, 221, 224, 227, 223, 225, 222, 227, + 225, 226, 226, 224, 228, 229, 230, 231, 231, 232, - 230, 229, 231, 232, 227, 228, 234, 235, 232, 236, - 236, 238, 244, 241, 245, 234, 233, 244, 245, 246, - 235, 245, 247, 248, 246, 245, 249, 249, 238, 241, - 250, 252, 245, 251, 251, 253, 253, 250, 254, 247, - 255, 254, 256, 256, 258, 252, 257, 248, 255, 257, - 258, 259, 260, 261, 262, 263, 263, 264, 261, 259, - 267, 262, 265, 265, 267, 268, 269, 270, 271, 260, - 264, 272, 274, 270, 273, 277, 272, 274, 277, 269, - 278, 271, 279, 268, 280, 273, 276, 276, 281, 281, - 282, 283, 284, 287, 279, 286, 290, 278, 285, 285, + 233, 230, 234, 232, 235, 236, 239, 237, 228, 229, + 236, 235, 237, 240, 234, 238, 241, 245, 233, 248, + 238, 242, 240, 239, 242, 243, 243, 251, 254, 241, + 255, 253, 251, 252, 245, 248, 253, 252, 256, 256, + 252, 257, 258, 258, 252, 254, 259, 700, 257, 260, + 260, 252, 261, 262, 255, 261, 263, 263, 265, 264, + 259, 262, 264, 266, 265, 267, 269, 268, 270, 270, + 271, 266, 268, 269, 272, 272, 274, 275, 276, 277, + 274, 278, 267, 271, 279, 277, 280, 281, 282, 279, + 284, 276, 281, 284, 278, 275, 285, 280, 283, 283, - 288, 288, 289, 280, 287, 697, 285, 291, 286, 290, - 289, 296, 284, 282, 294, 283, 292, 292, 295, 294, - 297, 295, 298, 285, 301, 291, 299, 298, 302, 296, - 303, 299, 297, 302, 304, 303, 305, 305, 301, 306, - 308, 310, 309, 304, 306, 309, 311, 312, 313, 316, - 318, 314, 312, 313, 314, 317, 317, 319, 310, 308, - 320, 321, 322, 316, 320, 311, 323, 325, 318, 329, - 319, 322, 325, 326, 326, 327, 331, 328, 321, 330, - 327, 328, 332, 329, 333, 334, 335, 336, 340, 339, - 323, 338, 692, 330, 331, 341, 336, 339, 343, 334, + 286, 287, 288, 288, 289, 290, 291, 292, 282, 293, + 293, 294, 286, 285, 295, 296, 296, 293, 289, 298, + 287, 297, 299, 699, 294, 295, 302, 292, 290, 297, + 291, 302, 298, 304, 293, 300, 300, 305, 303, 306, + 299, 303, 307, 309, 306, 310, 312, 307, 311, 305, + 310, 304, 316, 311, 319, 312, 314, 309, 313, 313, + 317, 314, 318, 317, 320, 321, 323, 324, 326, 320, + 321, 316, 322, 319, 327, 322, 323, 325, 325, 318, + 328, 324, 329, 330, 328, 331, 326, 327, 333, 334, + 335, 335, 330, 336, 334, 340, 337, 338, 336, 329, - 341, 333, 332, 343, 338, 335, 344, 340, 342, 342, - 345, 346, 347, 349, 348, 350, 346, 347, 348, 344, - 355, 351, 349, 352, 352, 685, 349, 345, 349, 351, - 349, 353, 353, 350, 354, 354, 356, 357, 358, 355, - 363, 360, 357, 361, 356, 358, 360, 362, 361, 363, - 364, 366, 362, 365, 365, 368, 369, 370, 371, 372, - 369, 373, 374, 375, 376, 377, 373, 378, 364, 374, - 366, 371, 368, 376, 383, 370, 379, 372, 380, 377, - 375, 379, 384, 380, 381, 385, 386, 378, 384, 381, - 385, 387, 383, 388, 389, 390, 391, 392, 392, 393, + 337, 333, 339, 341, 342, 343, 344, 347, 345, 331, + 348, 338, 349, 340, 351, 351, 339, 345, 348, 343, + 347, 342, 350, 341, 352, 344, 353, 350, 354, 352, + 355, 349, 356, 358, 357, 355, 359, 356, 357, 353, + 364, 360, 358, 361, 361, 354, 358, 698, 358, 360, + 358, 362, 362, 365, 359, 363, 363, 366, 367, 364, + 373, 365, 366, 369, 370, 367, 371, 372, 369, 370, + 375, 371, 374, 374, 376, 378, 372, 379, 373, 380, + 382, 379, 381, 383, 384, 385, 387, 386, 383, 375, + 388, 384, 378, 376, 389, 381, 386, 380, 382, 389, - 393, 394, 398, 399, 386, 398, 394, 389, 400, 387, - 391, 388, 401, 401, 402, 390, 404, 399, 403, 403, - 405, 406, 408, 409, 405, 410, 404, 411, 684, 412, - 413, 416, 400, 402, 412, 413, 414, 414, 415, 406, - 417, 408, 410, 415, 418, 421, 411, 409, 419, 420, - 416, 422, 423, 424, 420, 425, 426, 418, 429, 417, - 419, 423, 424, 423, 421, 426, 427, 426, 428, 428, - 422, 427, 430, 425, 431, 432, 434, 429, 435, 436, - 437, 434, 439, 440, 430, 441, 435, 440, 432, 442, - 441, 431, 444, 443, 442, 445, 436, 453, 437, 459, + 387, 390, 385, 391, 393, 394, 390, 395, 391, 396, + 388, 394, 395, 397, 398, 399, 400, 402, 402, 401, + 403, 403, 393, 408, 404, 409, 408, 396, 399, 404, + 410, 397, 398, 401, 411, 411, 400, 412, 414, 409, + 413, 413, 415, 416, 419, 418, 415, 420, 414, 421, + 422, 695, 423, 424, 410, 427, 412, 423, 424, 425, + 425, 416, 418, 419, 428, 426, 421, 429, 431, 422, + 426, 420, 430, 431, 427, 432, 433, 434, 435, 436, + 429, 437, 440, 428, 430, 442, 434, 435, 434, 447, + 437, 438, 437, 441, 432, 433, 438, 436, 439, 439, - 445, 439, 443, 444, 446, 446, 447, 447, 448, 448, - 449, 451, 452, 449, 454, 454, 451, 452, 455, 456, - 457, 453, 458, 455, 459, 460, 460, 461, 463, 462, - 456, 465, 456, 469, 461, 464, 464, 456, 462, 457, - 467, 458, 468, 470, 471, 467, 465, 468, 475, 472, - 470, 473, 469, 463, 472, 473, 473, 476, 474, 475, - 477, 476, 471, 474, 478, 479, 480, 480, 485, 478, - 481, 481, 486, 485, 487, 490, 487, 488, 488, 491, - 491, 481, 492, 499, 477, 493, 479, 494, 486, 495, - 496, 497, 500, 497, 490, 496, 493, 500, 494, 501, + 443, 440, 442, 445, 446, 441, 447, 448, 445, 450, + 451, 452, 446, 443, 451, 453, 452, 454, 455, 456, + 453, 465, 457, 458, 458, 448, 454, 457, 450, 469, + 456, 470, 455, 459, 459, 460, 460, 461, 463, 464, + 461, 466, 466, 463, 464, 465, 467, 468, 469, 471, + 470, 467, 472, 472, 473, 474, 475, 477, 468, 481, + 468, 473, 476, 476, 474, 468, 479, 483, 480, 482, + 484, 479, 477, 480, 471, 484, 482, 486, 481, 485, + 487, 475, 486, 485, 485, 483, 488, 489, 490, 491, + 488, 487, 492, 490, 493, 493, 494, 494, 499, 498, - 495, 501, 492, 498, 498, 502, 503, 504, 499, 506, - 502, 505, 505, 507, 506, 508, 512, 512, 514, 509, - 513, 511, 507, 503, 507, 509, 504, 511, 515, 513, - 508, 518, 515, 516, 519, 518, 514, 520, 516, 521, - 522, 524, 525, 541, 524, 526, 527, 527, 519, 528, - 528, 529, 529, 531, 525, 520, 535, 526, 533, 521, - 522, 530, 530, 533, 534, 534, 536, 537, 541, 538, - 543, 531, 538, 537, 535, 540, 540, 542, 542, 544, - 545, 547, 548, 536, 543, 549, 549, 550, 544, 545, - 551, 548, 550, 552, 551, 553, 552, 554, 555, 558, + 500, 503, 500, 492, 498, 501, 501, 494, 504, 504, + 491, 489, 505, 506, 499, 507, 508, 509, 512, 510, + 503, 510, 509, 516, 506, 513, 507, 508, 511, 511, + 513, 514, 505, 514, 515, 517, 518, 518, 520, 515, + 516, 519, 521, 512, 522, 524, 519, 520, 527, 520, + 522, 524, 525, 525, 517, 526, 528, 521, 529, 533, + 528, 530, 530, 529, 526, 532, 527, 534, 535, 532, + 536, 538, 539, 533, 538, 540, 541, 541, 542, 542, + 543, 543, 544, 544, 539, 534, 545, 540, 535, 547, + 536, 548, 548, 549, 547, 550, 551, 552, 554, 554, - 547, 556, 554, 557, 555, 563, 563, 558, 557, 559, - 567, 559, 564, 564, 553, 567, 556, 566, 566, 568, - 568, 569, 571, 572, 573, 572, 574, 571, 575, 576, - 577, 578, 579, 683, 580, 573, 569, 574, 576, 575, - 581, 581, 582, 583, 579, 584, 585, 585, 586, 588, - 578, 580, 587, 586, 592, 577, 594, 594, 593, 582, - 583, 593, 596, 584, 595, 595, 587, 588, 597, 598, - 599, 600, 603, 592, 598, 599, 601, 597, 602, 604, - 596, 601, 605, 602, 604, 600, 603, 606, 607, 608, - 610, 611, 613, 605, 612, 612, 606, 607, 608, 614, + 552, 555, 551, 557, 545, 556, 556, 558, 561, 559, + 562, 549, 550, 563, 563, 564, 558, 557, 559, 562, + 564, 566, 568, 571, 569, 566, 555, 561, 567, 569, + 570, 567, 572, 574, 573, 574, 570, 572, 571, 578, + 578, 568, 573, 579, 579, 581, 581, 582, 583, 583, + 584, 586, 582, 587, 591, 587, 586, 588, 589, 590, + 592, 593, 594, 591, 595, 584, 596, 596, 588, 589, + 590, 597, 598, 599, 594, 600, 600, 601, 602, 603, + 593, 595, 601, 607, 608, 592, 611, 608, 597, 598, + 612, 599, 602, 609, 609, 610, 610, 603, 613, 612, - 613, 617, 617, 618, 614, 621, 618, 625, 610, 611, - 619, 619, 620, 620, 622, 623, 623, 624, 621, 622, - 626, 624, 627, 629, 628, 625, 630, 631, 626, 628, - 633, 634, 634, 636, 640, 630, 642, 627, 639, 639, - 643, 642, 644, 640, 645, 646, 631, 633, 629, 647, - 648, 649, 652, 652, 647, 650, 644, 636, 643, 645, - 650, 653, 654, 646, 655, 655, 656, 656, 657, 649, - 680, 658, 653, 659, 659, 648, 658, 660, 660, 661, - 666, 654, 662, 662, 661, 666, 657, 663, 663, 665, - 665, 669, 670, 673, 673, 675, 670, 677, 686, 675, + 614, 615, 607, 613, 611, 614, 616, 617, 618, 619, + 620, 616, 617, 625, 619, 615, 621, 622, 623, 626, + 628, 620, 618, 627, 627, 621, 622, 623, 628, 629, + 636, 625, 632, 632, 629, 633, 640, 626, 633, 634, + 634, 635, 635, 636, 637, 638, 638, 639, 641, 637, + 642, 639, 643, 644, 640, 645, 641, 643, 646, 648, + 649, 649, 651, 655, 645, 642, 654, 654, 657, 658, + 659, 663, 655, 657, 660, 661, 648, 646, 644, 664, + 662, 667, 667, 665, 659, 662, 651, 658, 665, 660, + 668, 669, 691, 661, 670, 670, 663, 664, 671, 671, - 678, 678, 679, 679, 681, 681, 682, 682, 688, 687, - 669, 689, 690, 676, 677, 691, 691, 686, 687, 674, - 672, 671, 688, 668, 689, 667, 664, 651, 641, 638, - 690, 694, 694, 694, 694, 695, 695, 695, 695, 696, - 696, 696, 696, 698, 698, 637, 698, 699, 699, 701, - 701, 702, 702, 635, 702, 632, 616, 615, 609, 591, - 590, 589, 570, 565, 562, 561, 560, 546, 539, 532, - 523, 517, 510, 489, 484, 483, 482, 466, 450, 438, - 433, 407, 397, 396, 395, 382, 367, 359, 337, 324, - 307, 300, 293, 266, 243, 242, 240, 239, 237, 176, + 672, 668, 673, 674, 674, 675, 675, 673, 676, 684, + 669, 677, 677, 676, 678, 678, 680, 680, 672, 681, + 692, 685, 688, 688, 681, 685, 690, 701, 684, 703, + 690, 693, 693, 694, 694, 696, 696, 692, 697, 697, + 702, 704, 705, 703, 706, 706, 701, 689, 687, 702, + 686, 683, 682, 679, 704, 666, 656, 653, 652, 650, + 705, 709, 709, 709, 709, 710, 710, 710, 710, 711, + 711, 711, 711, 713, 713, 647, 713, 714, 714, 716, + 716, 717, 717, 631, 717, 630, 624, 606, 605, 604, + 585, 580, 577, 576, 575, 565, 560, 553, 546, 537, - 171, 85, 84, 82, 80, 46, 42, 38, 37, 32, - 10, 9, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693 + 531, 523, 502, 497, 496, 495, 478, 462, 449, 444, + 417, 407, 406, 405, 392, 377, 368, 346, 332, 315, + 308, 301, 273, 250, 249, 247, 246, 244, 181, 176, + 87, 86, 84, 82, 47, 43, 39, 38, 33, 10, + 9, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708 } ; static yy_state_type yy_last_accepting_state; @@ -1088,7 +1097,7 @@ static void config_end_include(void) #endif -#line 1091 "" +#line 1100 "" #define INITIAL 0 #define quotedstring 1 @@ -1244,7 +1253,7 @@ YY_DECL #line 98 "util/configlexer.lex" -#line 1247 "" +#line 1256 "" if ( !(yy_init) ) { @@ -1303,13 +1312,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 >= 694 ) + if ( yy_current_state >= 709 ) 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] != 1413 ); + while ( yy_base[yy_current_state] != 1442 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1576,116 +1585,121 @@ YY_RULE_SETUP case 49: YY_RULE_SETUP #line 147 "util/configlexer.lex" -{ YDOUT; return VAR_HIDE_IDENTITY;} +{ YDOUT; return VAR_ACCESS_CONTROL;} YY_BREAK case 50: YY_RULE_SETUP #line 148 "util/configlexer.lex" -{ YDOUT; return VAR_HIDE_VERSION;} +{ YDOUT; return VAR_HIDE_IDENTITY;} YY_BREAK case 51: YY_RULE_SETUP #line 149 "util/configlexer.lex" -{ YDOUT; return VAR_IDENTITY;} +{ YDOUT; return VAR_HIDE_VERSION;} YY_BREAK case 52: YY_RULE_SETUP #line 150 "util/configlexer.lex" -{ YDOUT; return VAR_VERSION;} +{ YDOUT; return VAR_IDENTITY;} YY_BREAK case 53: YY_RULE_SETUP #line 151 "util/configlexer.lex" -{ YDOUT; return VAR_MODULE_CONF;} +{ YDOUT; return VAR_VERSION;} YY_BREAK case 54: YY_RULE_SETUP #line 152 "util/configlexer.lex" -{ YDOUT; return VAR_TRUST_ANCHOR_FILE;} +{ YDOUT; return VAR_MODULE_CONF;} YY_BREAK case 55: YY_RULE_SETUP #line 153 "util/configlexer.lex" -{ YDOUT; return VAR_TRUSTED_KEYS_FILE;} +{ YDOUT; return VAR_TRUST_ANCHOR_FILE;} YY_BREAK case 56: YY_RULE_SETUP #line 154 "util/configlexer.lex" -{ YDOUT; return VAR_TRUST_ANCHOR;} +{ YDOUT; return VAR_TRUSTED_KEYS_FILE;} YY_BREAK case 57: YY_RULE_SETUP #line 155 "util/configlexer.lex" -{ YDOUT; return VAR_VAL_OVERRIDE_DATE;} +{ YDOUT; return VAR_TRUST_ANCHOR;} YY_BREAK case 58: YY_RULE_SETUP #line 156 "util/configlexer.lex" -{ YDOUT; return VAR_BOGUS_TTL;} +{ YDOUT; return VAR_VAL_OVERRIDE_DATE;} YY_BREAK case 59: YY_RULE_SETUP #line 157 "util/configlexer.lex" -{ YDOUT; return VAR_VAL_CLEAN_ADDITIONAL;} +{ YDOUT; return VAR_BOGUS_TTL;} YY_BREAK case 60: YY_RULE_SETUP #line 158 "util/configlexer.lex" -{ YDOUT; return VAR_VAL_PERMISSIVE_MODE;} +{ YDOUT; return VAR_VAL_CLEAN_ADDITIONAL;} YY_BREAK case 61: YY_RULE_SETUP #line 159 "util/configlexer.lex" -{ YDOUT; return VAR_KEY_CACHE_SIZE;} +{ YDOUT; return VAR_VAL_PERMISSIVE_MODE;} YY_BREAK case 62: YY_RULE_SETUP #line 160 "util/configlexer.lex" -{ YDOUT; return VAR_KEY_CACHE_SLABS;} +{ YDOUT; return VAR_KEY_CACHE_SIZE;} YY_BREAK case 63: YY_RULE_SETUP #line 161 "util/configlexer.lex" -{ YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERATIONS;} +{ YDOUT; return VAR_KEY_CACHE_SLABS;} YY_BREAK case 64: YY_RULE_SETUP #line 162 "util/configlexer.lex" -{ YDOUT; return VAR_USE_SYSLOG;} +{ YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERATIONS;} YY_BREAK case 65: -/* rule 65 can match eol */ YY_RULE_SETUP #line 163 "util/configlexer.lex" +{ YDOUT; return VAR_USE_SYSLOG;} + YY_BREAK +case 66: +/* rule 66 can match eol */ +YY_RULE_SETUP +#line 164 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 66: +case 67: YY_RULE_SETUP -#line 166 "util/configlexer.lex" +#line 167 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 167 "util/configlexer.lex" +#line 168 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(INITIAL); } YY_BREAK -case 67: -YY_RULE_SETUP -#line 171 "util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 68: -/* rule 68 can match eol */ YY_RULE_SETUP #line 172 "util/configlexer.lex" -{ cfg_parser->line++; yymore(); } +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK case 69: +/* rule 69 can match eol */ YY_RULE_SETUP #line 173 "util/configlexer.lex" +{ cfg_parser->line++; yymore(); } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 174 "util/configlexer.lex" { LEXOUT(("QE ")); BEGIN(INITIAL); @@ -1697,37 +1711,37 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 70: +case 71: YY_RULE_SETUP -#line 184 "util/configlexer.lex" +#line 185 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 185 "util/configlexer.lex" +#line 186 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(INITIAL); } YY_BREAK -case 71: -YY_RULE_SETUP -#line 189 "util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 72: -/* rule 72 can match eol */ YY_RULE_SETUP #line 190 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 73: +/* rule 73 can match eol */ YY_RULE_SETUP #line 191 "util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 74: YY_RULE_SETUP #line 192 "util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 193 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include(yytext); @@ -1735,26 +1749,26 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 197 "util/configlexer.lex" +#line 198 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(INITIAL); } YY_BREAK -case 75: -YY_RULE_SETUP -#line 201 "util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 76: -/* rule 76 can match eol */ YY_RULE_SETUP #line 202 "util/configlexer.lex" -{ cfg_parser->line++; yymore(); } +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK case 77: +/* rule 77 can match eol */ YY_RULE_SETUP #line 203 "util/configlexer.lex" +{ cfg_parser->line++; yymore(); } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 204 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -1763,7 +1777,7 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 209 "util/configlexer.lex" +#line 210 "util/configlexer.lex" { yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ if (config_include_stack_ptr == 0) { @@ -1774,18 +1788,18 @@ case YY_STATE_EOF(INITIAL): } } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 219 "util/configlexer.lex" +#line 220 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); yylval.str = strdup(yytext); return STRING; } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 222 "util/configlexer.lex" +#line 223 "util/configlexer.lex" ECHO; YY_BREAK -#line 1788 "" +#line 1802 "" case YY_END_OF_BUFFER: { @@ -2067,7 +2081,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 >= 694 ) + if ( yy_current_state >= 709 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2095,11 +2109,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 >= 694 ) + if ( yy_current_state >= 709 ) 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 == 693); + yy_is_jam = (yy_current_state == 708); return yy_is_jam ? 0 : yy_current_state; } @@ -2732,7 +2746,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 222 "util/configlexer.lex" +#line 223 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 22438955e..8e510bce2 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -144,6 +144,7 @@ forward-addr{COLON} { YDOUT; return VAR_FORWARD_ADDR;} forward-host{COLON} { YDOUT; return VAR_FORWARD_HOST;} do-not-query-address{COLON} { YDOUT; return VAR_DO_NOT_QUERY_ADDRESS;} do-not-query-localhost{COLON} { YDOUT; return VAR_DO_NOT_QUERY_LOCALHOST;} +access-control{COLON} { YDOUT; return VAR_ACCESS_CONTROL;} hide-identity{COLON} { YDOUT; return VAR_HIDE_IDENTITY;} hide-version{COLON} { YDOUT; return VAR_HIDE_VERSION;} identity{COLON} { YDOUT; return VAR_IDENTITY;} diff --git a/util/configparser.c b/util/configparser.c index 82dd39905..ecf3db8b6 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -135,7 +135,8 @@ VAR_ROOT_HINTS = 324, VAR_DO_NOT_QUERY_LOCALHOST = 325, VAR_CACHE_MAX_TTL = 326, - VAR_HARDEN_DNNSEC_STRIPPED = 327 + VAR_HARDEN_DNNSEC_STRIPPED = 327, + VAR_ACCESS_CONTROL = 328 }; #endif /* Tokens. */ @@ -209,6 +210,7 @@ #define VAR_DO_NOT_QUERY_LOCALHOST 325 #define VAR_CACHE_MAX_TTL 326 #define VAR_HARDEN_DNNSEC_STRIPPED 327 +#define VAR_ACCESS_CONTROL 328 @@ -267,7 +269,7 @@ typedef union YYSTYPE char* str; } /* Line 187 of yacc.c. */ -#line 271 "util/configparser.c" +#line 273 "util/configparser.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -280,7 +282,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 284 "util/configparser.c" +#line 286 "util/configparser.c" #ifdef short # undef short @@ -495,20 +497,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 125 +#define YYLAST 127 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 73 +#define YYNTOKENS 74 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 72 +#define YYNNTS 73 /* YYNRULES -- Number of rules. */ -#define YYNRULES 135 +#define YYNRULES 137 /* YYNRULES -- Number of states. */ -#define YYNSTATES 196 +#define YYNSTATES 200 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 327 +#define YYMAXUTOK 328 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -548,7 +550,7 @@ static const yytype_uint8 yytranslate[] = 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72 + 65, 66, 67, 68, 69, 70, 71, 72, 73 }; #if YYDEBUG @@ -562,53 +564,53 @@ static const yytype_uint16 yyprhs[] = 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, - 122, 124, 126, 128, 130, 132, 135, 136, 138, 140, - 142, 144, 147, 148, 150, 152, 154, 157, 160, 163, - 166, 169, 172, 175, 178, 181, 184, 187, 190, 193, - 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, - 226, 229, 232, 235, 238, 241, 244, 247, 250, 253, - 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, - 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, - 316, 319, 322, 325, 328, 331 + 122, 124, 126, 128, 130, 132, 134, 137, 138, 140, + 142, 144, 146, 149, 150, 152, 154, 156, 159, 162, + 165, 168, 171, 174, 177, 180, 183, 186, 189, 192, + 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, + 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, + 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, + 285, 288, 291, 295, 298, 301, 304, 307, 310, 313, + 316, 319, 322, 325, 328, 331, 334, 337 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 74, 0, -1, -1, 74, 75, -1, 76, 77, -1, - 79, 80, -1, 82, 83, -1, 11, -1, 77, 78, - -1, -1, 85, -1, 86, -1, 87, -1, 90, -1, - 91, -1, 94, -1, 95, -1, 96, -1, 97, -1, - 88, -1, 99, -1, 100, -1, 101, -1, 102, -1, - 103, -1, 113, -1, 114, -1, 115, -1, 116, -1, - 117, -1, 92, -1, 118, -1, 119, -1, 122, -1, - 120, -1, 121, -1, 123, -1, 124, -1, 125, -1, - 128, -1, 108, -1, 109, -1, 110, -1, 111, -1, - 126, -1, 130, -1, 105, -1, 107, -1, 131, -1, - 133, -1, 134, -1, 135, -1, 93, -1, 112, -1, - 137, -1, 138, -1, 106, -1, 136, -1, 98, -1, - 89, -1, 104, -1, 129, -1, 132, -1, 127, -1, - 39, -1, 80, 81, -1, -1, 139, -1, 140, -1, - 141, -1, 45, -1, 83, 84, -1, -1, 142, -1, - 143, -1, 144, -1, 13, 10, -1, 12, 10, -1, - 14, 10, -1, 17, 10, -1, 68, 10, -1, 15, - 10, -1, 16, 10, -1, 32, 10, -1, 61, 10, - -1, 18, 10, -1, 19, 10, -1, 20, 10, -1, - 21, 10, -1, 67, 10, -1, 22, 10, -1, 23, - 10, -1, 24, 10, -1, 25, 10, -1, 26, 10, - -1, 69, 10, -1, 55, 10, -1, 65, 10, -1, - 56, 10, -1, 49, 10, -1, 50, 10, -1, 51, - 10, -1, 52, 10, -1, 62, 10, -1, 27, 10, - -1, 28, 10, -1, 29, 10, -1, 30, 10, -1, - 31, 10, -1, 33, 10, -1, 34, 10, -1, 36, - 10, -1, 37, 10, -1, 35, 10, -1, 42, 10, - -1, 43, 10, -1, 44, 10, -1, 53, 10, -1, - 72, 10, -1, 48, 10, -1, 70, 10, -1, 54, - 10, -1, 57, 10, -1, 71, 10, -1, 58, 10, - -1, 59, 10, -1, 60, 10, -1, 66, 10, -1, - 63, 10, -1, 64, 10, -1, 38, 10, -1, 40, - 10, -1, 41, 10, -1, 38, 10, -1, 46, 10, - -1, 47, 10, -1 + 75, 0, -1, -1, 75, 76, -1, 77, 78, -1, + 80, 81, -1, 83, 84, -1, 11, -1, 78, 79, + -1, -1, 86, -1, 87, -1, 88, -1, 91, -1, + 92, -1, 95, -1, 96, -1, 97, -1, 98, -1, + 89, -1, 100, -1, 101, -1, 102, -1, 103, -1, + 104, -1, 114, -1, 115, -1, 116, -1, 117, -1, + 118, -1, 93, -1, 119, -1, 120, -1, 123, -1, + 121, -1, 122, -1, 124, -1, 125, -1, 126, -1, + 129, -1, 109, -1, 110, -1, 111, -1, 112, -1, + 127, -1, 132, -1, 106, -1, 108, -1, 133, -1, + 135, -1, 136, -1, 137, -1, 94, -1, 113, -1, + 139, -1, 140, -1, 107, -1, 138, -1, 99, -1, + 90, -1, 105, -1, 130, -1, 134, -1, 128, -1, + 131, -1, 39, -1, 81, 82, -1, -1, 141, -1, + 142, -1, 143, -1, 45, -1, 84, 85, -1, -1, + 144, -1, 145, -1, 146, -1, 13, 10, -1, 12, + 10, -1, 14, 10, -1, 17, 10, -1, 68, 10, + -1, 15, 10, -1, 16, 10, -1, 32, 10, -1, + 61, 10, -1, 18, 10, -1, 19, 10, -1, 20, + 10, -1, 21, 10, -1, 67, 10, -1, 22, 10, + -1, 23, 10, -1, 24, 10, -1, 25, 10, -1, + 26, 10, -1, 69, 10, -1, 55, 10, -1, 65, + 10, -1, 56, 10, -1, 49, 10, -1, 50, 10, + -1, 51, 10, -1, 52, 10, -1, 62, 10, -1, + 27, 10, -1, 28, 10, -1, 29, 10, -1, 30, + 10, -1, 31, 10, -1, 33, 10, -1, 34, 10, + -1, 36, 10, -1, 37, 10, -1, 35, 10, -1, + 42, 10, -1, 43, 10, -1, 44, 10, -1, 53, + 10, -1, 72, 10, -1, 48, 10, -1, 70, 10, + -1, 73, 10, 10, -1, 54, 10, -1, 57, 10, + -1, 71, 10, -1, 58, 10, -1, 59, 10, -1, + 60, 10, -1, 66, 10, -1, 63, 10, -1, 64, + 10, -1, 38, 10, -1, 40, 10, -1, 41, 10, + -1, 38, 10, -1, 46, 10, -1, 47, 10, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -620,14 +622,14 @@ static const yytype_uint16 yyrline[] = 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, - 125, 126, 126, 127, 129, 141, 142, 143, 143, 143, - 145, 157, 158, 159, 159, 159, 161, 170, 179, 188, - 201, 216, 225, 234, 243, 252, 261, 270, 279, 288, - 302, 309, 316, 323, 331, 338, 345, 353, 361, 368, - 377, 386, 393, 400, 411, 420, 433, 442, 451, 464, - 473, 482, 491, 500, 513, 520, 530, 540, 550, 560, - 567, 577, 584, 602, 611, 620, 630, 640, 647, 656, - 669, 676, 683, 690, 697, 704 + 125, 126, 126, 127, 127, 129, 141, 142, 143, 143, + 143, 145, 157, 158, 159, 159, 159, 161, 170, 179, + 188, 201, 216, 225, 234, 243, 252, 261, 270, 279, + 288, 302, 309, 316, 323, 331, 338, 345, 353, 361, + 368, 377, 386, 393, 400, 411, 420, 433, 442, 451, + 464, 473, 482, 491, 500, 513, 520, 530, 540, 550, + 560, 567, 577, 594, 601, 619, 628, 637, 647, 657, + 664, 673, 686, 693, 700, 707, 714, 721 }; #endif @@ -657,10 +659,10 @@ static const char *const yytname[] = "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE", "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG", "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST", - "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNNSEC_STRIPPED", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", + "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNNSEC_STRIPPED", "VAR_ACCESS_CONTROL", + "$accept", "toplevelvars", "toplevelvar", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", "server_num_threads", "server_verbosity", "server_port", "server_interface", "server_outgoing_interface", "server_outgoing_port", "server_outgoing_range", "server_outgoing_num_tcp", @@ -679,11 +681,12 @@ static const char *const yytname[] = "server_harden_short_bufsize", "server_harden_large_queries", "server_harden_glue", "server_harden_dnssec_stripped", "server_do_not_query_address", "server_do_not_query_localhost", - "server_module_conf", "server_val_override_date", "server_cache_max_ttl", - "server_bogus_ttl", "server_val_clean_additional", - "server_val_permissive_mode", "server_val_nsec3_keysize_iterations", - "server_key_cache_size", "server_key_cache_slabs", "stub_name", - "stub_host", "stub_addr", "forward_name", "forward_host", "forward_addr", 0 + "server_access_control", "server_module_conf", + "server_val_override_date", "server_cache_max_ttl", "server_bogus_ttl", + "server_val_clean_additional", "server_val_permissive_mode", + "server_val_nsec3_keysize_iterations", "server_key_cache_size", + "server_key_cache_slabs", "stub_name", "stub_host", "stub_addr", + "forward_name", "forward_host", "forward_addr", 0 }; #endif @@ -699,27 +702,27 @@ static const yytype_uint16 yytoknum[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327 + 325, 326, 327, 328 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 73, 74, 74, 75, 75, 75, 76, 77, 77, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 79, 80, 80, 81, 81, 81, - 82, 83, 83, 84, 84, 84, 85, 86, 87, 88, + 0, 74, 75, 75, 76, 76, 76, 77, 78, 78, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 80, 81, 81, 82, 82, + 82, 83, 84, 84, 85, 85, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144 + 139, 140, 141, 142, 143, 144, 145, 146 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -731,14 +734,14 @@ 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, 2, 0, 1, 1, 1, - 1, 2, 0, 1, 1, 1, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 2, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2 + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -746,39 +749,39 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 0, 1, 7, 64, 70, 3, 9, 66, 72, + 2, 0, 1, 7, 65, 71, 3, 9, 67, 73, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8, 10, 11, - 12, 19, 59, 13, 14, 30, 52, 15, 16, 17, - 18, 58, 20, 21, 22, 23, 24, 60, 46, 56, - 47, 40, 41, 42, 43, 53, 25, 26, 27, 28, - 29, 31, 32, 34, 35, 33, 36, 37, 38, 44, - 63, 39, 61, 45, 48, 62, 49, 50, 51, 57, - 54, 55, 0, 0, 0, 65, 67, 68, 69, 0, - 0, 0, 71, 73, 74, 75, 77, 76, 78, 81, - 82, 79, 85, 86, 87, 88, 90, 91, 92, 93, - 94, 104, 105, 106, 107, 108, 83, 109, 110, 113, - 111, 112, 114, 115, 116, 119, 99, 100, 101, 102, - 117, 121, 96, 98, 122, 124, 125, 126, 84, 103, - 128, 129, 97, 127, 89, 80, 95, 120, 123, 118, - 130, 131, 132, 133, 134, 135 + 0, 0, 0, 0, 0, 0, 0, 0, 8, 10, + 11, 12, 19, 59, 13, 14, 30, 52, 15, 16, + 17, 18, 58, 20, 21, 22, 23, 24, 60, 46, + 56, 47, 40, 41, 42, 43, 53, 25, 26, 27, + 28, 29, 31, 32, 34, 35, 33, 36, 37, 38, + 44, 63, 39, 61, 64, 45, 48, 62, 49, 50, + 51, 57, 54, 55, 0, 0, 0, 66, 68, 69, + 70, 0, 0, 0, 72, 74, 75, 76, 78, 77, + 79, 82, 83, 80, 86, 87, 88, 89, 91, 92, + 93, 94, 95, 105, 106, 107, 108, 109, 84, 110, + 111, 114, 112, 113, 115, 116, 117, 120, 100, 101, + 102, 103, 118, 123, 97, 99, 124, 126, 127, 128, + 85, 104, 130, 131, 98, 129, 90, 81, 96, 121, + 125, 119, 0, 132, 133, 134, 135, 136, 137, 122 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 6, 7, 10, 67, 8, 11, 125, 9, - 12, 132, 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, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 126, 127, 128, 133, - 134, 135 + -1, 1, 6, 7, 10, 68, 8, 11, 127, 9, + 12, 134, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 128, 129, 130, + 135, 136, 137 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -786,26 +789,26 @@ static const yytype_int16 yydefgoto[] = #define YYPACT_NINF -13 static const yytype_int8 yypact[] = { - -13, 61, -13, -13, -13, -13, -13, -13, -13, -13, - -12, 25, 24, 16, 17, 18, 19, 23, 54, 57, - 58, 59, 63, 64, 65, 66, 67, 68, 69, 70, + -13, 62, -13, -13, -13, -13, -13, -13, -13, -13, + -12, 26, 25, 16, 17, 18, 19, 23, 24, 55, + 58, 59, 60, 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, 91, - 92, 93, 94, 95, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, -13, -13, -13, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, - -13, -13, 110, 111, 112, -13, -13, -13, -13, 113, - 114, 115, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, 111, 112, 113, -13, -13, -13, + -13, 114, 115, 116, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, - -13, -13, -13, -13, -13, -13 + -13, -13, 117, -13, -13, -13, -13, -13, -13, -13 }; /* YYPGOTO[NTERM-NUM]. */ @@ -818,7 +821,7 @@ static const yytype_int8 yypgoto[] = -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, - -13, -13 + -13, -13, -13 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -830,17 +833,17 @@ static const yytype_uint8 yytable[] = { 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, 136, 137, 138, 139, - 39, 40, 41, 140, 0, 0, 42, 43, 44, 45, + 33, 34, 35, 36, 37, 38, 138, 139, 140, 141, + 39, 40, 41, 142, 143, 0, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 2, 129, 122, 141, 123, 124, 142, 143, 144, - 130, 131, 3, 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, - 4, 172, 173, 174, 175, 176, 5, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195 + 66, 67, 2, 131, 124, 144, 125, 126, 145, 146, + 147, 132, 133, 3, 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, 4, 175, 176, 177, 178, 179, 5, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199 }; static const yytype_int8 yycheck[] = @@ -848,42 +851,42 @@ static const yytype_int8 yycheck[] = 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, 10, 10, 10, 10, - 42, 43, 44, 10, -1, -1, 48, 49, 50, 51, + 42, 43, 44, 10, 10, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 0, 38, 38, 10, 40, 41, 10, 10, 10, - 46, 47, 11, 10, 10, 10, 10, 10, 10, 10, + 72, 73, 0, 38, 38, 10, 40, 41, 10, 10, + 10, 46, 47, 11, 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, - 39, 10, 10, 10, 10, 10, 45, 10, 10, 10, + 10, 39, 10, 10, 10, 10, 10, 45, 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_uint8 yystos[] = { - 0, 74, 0, 11, 39, 45, 75, 76, 79, 82, - 77, 80, 83, 12, 13, 14, 15, 16, 17, 18, + 0, 75, 0, 11, 39, 45, 76, 77, 80, 83, + 78, 81, 84, 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, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 78, 85, 86, + 66, 67, 68, 69, 70, 71, 72, 73, 79, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 38, 40, 41, 81, 139, 140, 141, 38, - 46, 47, 84, 142, 143, 144, 10, 10, 10, 10, + 137, 138, 139, 140, 38, 40, 41, 82, 141, 142, + 143, 38, 46, 47, 85, 144, 145, 146, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; #define yyerrok (yyerrstatus = 0) @@ -1704,7 +1707,7 @@ yyreduce: } break; - case 64: + case 65: #line 130 "util/configparser.y" { struct config_stub* s; @@ -1718,7 +1721,7 @@ yyreduce: } break; - case 70: + case 71: #line 146 "util/configparser.y" { struct config_stub* s; @@ -1732,7 +1735,7 @@ yyreduce: } break; - case 76: + case 77: #line 162 "util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1743,7 +1746,7 @@ yyreduce: } break; - case 77: + case 78: #line 171 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1754,7 +1757,7 @@ yyreduce: } break; - case 78: + case 79: #line 180 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1765,7 +1768,7 @@ yyreduce: } break; - case 79: + case 80: #line 189 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1780,7 +1783,7 @@ yyreduce: } break; - case 80: + case 81: #line 202 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1797,7 +1800,7 @@ yyreduce: } break; - case 81: + case 82: #line 217 "util/configparser.y" { OUTYY(("P(server_outgoing_port:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1808,7 +1811,7 @@ yyreduce: } break; - case 82: + case 83: #line 226 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1819,7 +1822,7 @@ yyreduce: } break; - case 83: + case 84: #line 235 "util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1830,7 +1833,7 @@ yyreduce: } break; - case 84: + case 85: #line 244 "util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1841,7 +1844,7 @@ yyreduce: } break; - case 85: + case 86: #line 253 "util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1852,7 +1855,7 @@ yyreduce: } break; - case 86: + case 87: #line 262 "util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1863,7 +1866,7 @@ yyreduce: } break; - case 87: + case 88: #line 271 "util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1874,7 +1877,7 @@ yyreduce: } break; - case 88: + case 89: #line 280 "util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1885,7 +1888,7 @@ yyreduce: } break; - case 89: + case 90: #line 289 "util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1901,7 +1904,7 @@ yyreduce: } break; - case 90: + case 91: #line 303 "util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1910,7 +1913,7 @@ yyreduce: } break; - case 91: + case 92: #line 310 "util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1919,7 +1922,7 @@ yyreduce: } break; - case 92: + case 93: #line 317 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1928,7 +1931,7 @@ yyreduce: } break; - case 93: + case 94: #line 324 "util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1938,7 +1941,7 @@ yyreduce: } break; - case 94: + case 95: #line 332 "util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1947,7 +1950,7 @@ yyreduce: } break; - case 95: + case 96: #line 339 "util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1956,7 +1959,7 @@ yyreduce: } break; - case 96: + case 97: #line 346 "util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1966,7 +1969,7 @@ yyreduce: } break; - case 97: + case 98: #line 354 "util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1976,7 +1979,7 @@ yyreduce: } break; - case 98: + case 99: #line 362 "util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1985,7 +1988,7 @@ yyreduce: } break; - case 99: + case 100: #line 369 "util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); @@ -1996,7 +1999,7 @@ yyreduce: } break; - case 100: + case 101: #line 378 "util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2007,7 +2010,7 @@ yyreduce: } break; - case 101: + case 102: #line 387 "util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2016,7 +2019,7 @@ yyreduce: } break; - case 102: + case 103: #line 394 "util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2025,7 +2028,7 @@ yyreduce: } break; - case 103: + case 104: #line 401 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2038,7 +2041,7 @@ yyreduce: } break; - case 104: + case 105: #line 412 "util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2049,7 +2052,7 @@ yyreduce: } break; - case 105: + case 106: #line 421 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2064,7 +2067,7 @@ yyreduce: } break; - case 106: + case 107: #line 434 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2075,7 +2078,7 @@ yyreduce: } break; - case 107: + case 108: #line 443 "util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2086,7 +2089,7 @@ yyreduce: } break; - case 108: + case 109: #line 452 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2101,7 +2104,7 @@ yyreduce: } break; - case 109: + case 110: #line 465 "util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2112,7 +2115,7 @@ yyreduce: } break; - case 110: + case 111: #line 474 "util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2123,7 +2126,7 @@ yyreduce: } break; - case 111: + case 112: #line 483 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2134,7 +2137,7 @@ yyreduce: } break; - case 112: + case 113: #line 492 "util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2145,7 +2148,7 @@ yyreduce: } break; - case 113: + case 114: #line 501 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2160,7 +2163,7 @@ yyreduce: } break; - case 114: + case 115: #line 514 "util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2169,7 +2172,7 @@ yyreduce: } break; - case 115: + case 116: #line 521 "util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2181,7 +2184,7 @@ yyreduce: } break; - case 116: + case 117: #line 531 "util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2193,7 +2196,7 @@ yyreduce: } break; - case 117: + case 118: #line 541 "util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2205,7 +2208,7 @@ yyreduce: } break; - case 118: + case 119: #line 551 "util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2217,7 +2220,7 @@ yyreduce: } break; - case 119: + case 120: #line 561 "util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2226,7 +2229,7 @@ yyreduce: } break; - case 120: + case 121: #line 568 "util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str))); @@ -2238,8 +2241,27 @@ yyreduce: } break; - case 121: + case 122: #line 578 "util/configparser.y" + { + OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && + strcmp((yyvsp[(3) - (3)].str), "allow")!=0) { + yyerror("expected deny, refuse or allow in " + "access control action"); + } else { + struct config_acl* n = calloc(1, sizeof(*n)); + if(!n) fatal_exit("out of memory adding acl"); + n->address = (yyvsp[(2) - (3)].str); + n->control = (yyvsp[(3) - (3)].str); + n->next = cfg_parser->cfg->acls; + cfg_parser->cfg->acls = n; + } + } + break; + + case 123: +#line 595 "util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->module_conf); @@ -2247,8 +2269,8 @@ yyreduce: } break; - case 122: -#line 585 "util/configparser.y" + case 124: +#line 602 "util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -2267,8 +2289,8 @@ yyreduce: } break; - case 123: -#line 603 "util/configparser.y" + case 125: +#line 620 "util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2278,8 +2300,8 @@ yyreduce: } break; - case 124: -#line 612 "util/configparser.y" + case 126: +#line 629 "util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2289,8 +2311,8 @@ yyreduce: } break; - case 125: -#line 621 "util/configparser.y" + case 127: +#line 638 "util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2301,8 +2323,8 @@ yyreduce: } break; - case 126: -#line 631 "util/configparser.y" + case 128: +#line 648 "util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2313,8 +2335,8 @@ yyreduce: } break; - case 127: -#line 641 "util/configparser.y" + case 129: +#line 658 "util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); @@ -2322,8 +2344,8 @@ yyreduce: } break; - case 128: -#line 648 "util/configparser.y" + case 130: +#line 665 "util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2333,8 +2355,8 @@ yyreduce: } break; - case 129: -#line 657 "util/configparser.y" + case 131: +#line 674 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2348,8 +2370,8 @@ yyreduce: } break; - case 130: -#line 670 "util/configparser.y" + case 132: +#line 687 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->stubs->name); @@ -2357,8 +2379,8 @@ yyreduce: } break; - case 131: -#line 677 "util/configparser.y" + case 133: +#line 694 "util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str))) @@ -2366,8 +2388,8 @@ yyreduce: } break; - case 132: -#line 684 "util/configparser.y" + case 134: +#line 701 "util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str))) @@ -2375,8 +2397,8 @@ yyreduce: } break; - case 133: -#line 691 "util/configparser.y" + case 135: +#line 708 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->forwards->name); @@ -2384,8 +2406,8 @@ yyreduce: } break; - case 134: -#line 698 "util/configparser.y" + case 136: +#line 715 "util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str))) @@ -2393,8 +2415,8 @@ yyreduce: } break; - case 135: -#line 705 "util/configparser.y" + case 137: +#line 722 "util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str))) @@ -2404,7 +2426,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 2408 "util/configparser.c" +#line 2430 "util/configparser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2618,7 +2640,7 @@ yyreturn: } -#line 711 "util/configparser.y" +#line 728 "util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 6d42264da..1e8602e7b 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -108,7 +108,8 @@ VAR_ROOT_HINTS = 324, VAR_DO_NOT_QUERY_LOCALHOST = 325, VAR_CACHE_MAX_TTL = 326, - VAR_HARDEN_DNNSEC_STRIPPED = 327 + VAR_HARDEN_DNNSEC_STRIPPED = 327, + VAR_ACCESS_CONTROL = 328 }; #endif /* Tokens. */ @@ -182,6 +183,7 @@ #define VAR_DO_NOT_QUERY_LOCALHOST 325 #define VAR_CACHE_MAX_TTL 326 #define VAR_HARDEN_DNNSEC_STRIPPED 327 +#define VAR_ACCESS_CONTROL 328 @@ -193,7 +195,7 @@ typedef union YYSTYPE char* str; } /* Line 1489 of yacc.c. */ -#line 197 "util/configparser.h" +#line 199 "util/configparser.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index df6ba2232..a9a387a22 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -86,7 +86,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE %token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG %token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST -%token VAR_CACHE_MAX_TTL VAR_HARDEN_DNNSEC_STRIPPED +%token VAR_CACHE_MAX_TTL VAR_HARDEN_DNNSEC_STRIPPED VAR_ACCESS_CONTROL %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -124,7 +124,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_trusted_keys_file | server_val_nsec3_keysize_iterations | server_use_syslog | server_outgoing_interface | server_root_hints | server_do_not_query_localhost | server_cache_max_ttl | - server_harden_dnssec_stripped + server_harden_dnssec_stripped | server_access_control ; stubstart: VAR_STUB_ZONE { @@ -574,6 +574,23 @@ server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING free($2); } ; +server_access_control: VAR_ACCESS_CONTROL STRING STRING + { + OUTYY(("P(server_access_control:%s %s)\n", $2, $3)); + if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && + strcmp($3, "allow")!=0) { + yyerror("expected deny, refuse or allow in " + "access control action"); + } else { + struct config_acl* n = calloc(1, sizeof(*n)); + if(!n) fatal_exit("out of memory adding acl"); + n->address = $2; + n->control = $3; + n->next = cfg_parser->cfg->acls; + cfg_parser->cfg->acls = n; + } + } + ; server_module_conf: VAR_MODULE_CONF STRING { OUTYY(("P(server_module_conf:%s)\n", $2)); diff --git a/util/net_help.c b/util/net_help.c index 37d97f06c..21e37cbe6 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -229,6 +229,39 @@ ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, return 1; } +int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr, + socklen_t* addrlen, int* net) +{ + char* s = NULL; + *net = (str_is_ip6(str)?128:32); + if((s=strchr(str, '/'))) { + if(atoi(s+1) > *net) { + log_err("netblock too large: %s", str); + return 0; + } + *net = atoi(s+1); + if(net == 0 && strcmp(s+1, "0") != 0) { + log_err("cannot parse netblock: '%s'", str); + return 0; + } + if(!(s = strdup(str))) { + log_err("out of memory"); + return 0; + } + *strchr(s, '/') = '\0'; + } + if(!ipstrtoaddr(s?s:str, port, addr, addrlen)) { + free(s); + log_err("cannot parse ip address: '%s'", str); + return 0; + } + if(s) { + free(s); + addr_mask(addr, *addrlen, *net); + } + return 1; +} + void log_nametypeclass(enum verbosity_value v, const char* str, uint8_t* name, uint16_t type, uint16_t dclass) diff --git a/util/net_help.h b/util/net_help.h index 02f59758c..e70502cd6 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -186,6 +186,19 @@ int extstrtoaddr(const char* str, struct sockaddr_storage* addr, int ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, socklen_t* addrlen); +/** + * Convert ip netblock (ip/netsize) string and port to sockaddr. + * *SLOW*, does a malloc internally to avoid writing over 'ip' string. + * @param ip: ip4 or ip6 address string. + * @param port: port number, host format. + * @param addr: where to store sockaddr. + * @param addrlen: length of stored sockaddr is returned. + * @param net: netblock size is returned. + * @return 0 on error. + */ +int netblockstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, + socklen_t* addrlen, int* net); + /** * Print string with neat domain name, type and class. * @param v: at what verbosity level to print this.