]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fixup tests.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 22 Oct 2007 06:25:46 +0000 (06:25 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 22 Oct 2007 06:25:46 +0000 (06:25 +0000)
git-svn-id: file:///svn/unbound/trunk@711 be551aaa-1e26-0410-a405-d3ace91eadb9

22 files changed:
doc/Changelog
doc/example.conf
doc/unbound.conf.5
iterator/iter_donotq.c
testdata/fwd_compress_c00c.tpkg
testdata/fwd_no_edns.tpkg
testdata/fwd_tcp.tpkg
testdata/fwd_tcp_tc.tpkg
testdata/fwd_tcp_tc6.tpkg
testdata/fwd_three.tpkg
testdata/fwd_three_service.tpkg
testdata/fwd_ttlexpire.tpkg
testdata/fwd_udp.tpkg
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
util/net_help.c
util/net_help.h

index 4e6a40a07202c4a502c4223fb8268055ba2fc15e..da16371c998cab114bc984f5d20b317696d101db 100644 (file)
@@ -1,3 +1,7 @@
+22 October 2007: Wouter
+       - added donotquerylocalhost config option. Can be turned off for
+         out test cases.
+
 19 October 2007: Wouter
        - added configure (and its files) to svn, so that the trunk is easier
          to use. ./configure, config.guess, config.sub, ltmain.sh,
index c5b0c2344f1042251c8a557f5beeac9c9776f158..8aacc1d4e3eda38cc6452c4e4ff87527e202c49a 100644 (file)
@@ -170,6 +170,10 @@ server:
        # do-not-query-address: 127.0.0.1/8
        # do-not-query-address: ::1
        
+       # if yes, the above default do-not-query-address entries are present.
+       # if no, localhost can be queried (for testing and debugging).
+       # do-not-query-localhost: yes
+       
        # module configuration of the server. A string with identifiers
        # separated by spaces. "iterator" or "validator iterator"
        # module-config: "validator iterator"
index a6bbb23397723e2897cc82e89a4a19cd49f0066f..76182a71a8e7b26ffb8c813e5ca71b8a33fe04a8 100644 (file)
@@ -217,6 +217,10 @@ Will trust glue only if it is within the servers authority. Default is on.
 Do not query the given IP address. Can be IP4 or IP6. Append /num to 
 indicate a classless delegation netblock, for example like
 10.2.3.4/24 or 2001::11/64.
+.It \fBdo-not-query-localhost:\fR <yes or no>
+If yes, localhost is added to the do-not-query-address entries, both
+IP6 ::1 and IP4 127.0.0.1/8. If no, then localhost can be used to send
+queries to. Default is yes.
 .It \fBmodule-config:\fR <"module names">
 Module configuration, a list of module names separated by spaces, surround
 the string with quotes (""). The modules can be validator, iterator.
index ce6d52e786c4f0383c2568a7b53551a6cce627ef..df0908ebdfcd1eefa5c8ec3624cf41150201a201 100644 (file)
@@ -53,7 +53,8 @@ donotq_cmp(const void* k1, const void* k2)
 {
        struct iter_donotq_addr* n1 = (struct iter_donotq_addr*)k1;
        struct iter_donotq_addr* n2 = (struct iter_donotq_addr*)k2;
-       int r = sockaddr_cmp(&n1->addr, n1->addrlen, &n2->addr, n2->addrlen);
+       int r = sockaddr_cmp_addr(&n1->addr, n1->addrlen, &n2->addr, 
+               n2->addrlen);
        if(r != 0) return r;
        if(n1->net < n2->net)
                return -1;
@@ -129,45 +130,57 @@ mask_block(int ip6, struct sockaddr_storage* addr, int net)
        s[net/8] &= mask[net&0x7];
 }
 
-/** read donotq config */
-static int 
-read_donotq(struct iter_donotq* dq, struct config_file* cfg)
+/** apply donotq string */
+static int
+donotq_str_cfg(struct iter_donotq* dq, const char* str)
 {
-       struct config_strlist* p;
        struct sockaddr_storage addr;
        int net;
-       char* s;
+       char* s = NULL;
        socklen_t addrlen;
-       for(p = cfg->donotqueryaddrs; p; p = p->next) {
-               log_assert(p->str);
-               net = (str_is_ip6(p->str)?128:32);
-               if((s=strchr(p->str, '/'))) {
-                       if(atoi(s+1) > net) {
-                               log_err("netblock too large: %s", p->str);
-                               return 0;
-                       }
-                       net = atoi(s+1);
-                       if(net == 0 && strcmp(s+1, "0") != 0) {
-                               log_err("cannot parse donotquery netblock:"
-                                       " '%s'", p->str);
-                               return 0;
-                       }
-                       *s = '\0';
-               }
-               if(!ipstrtoaddr(p->str, UNBOUND_DNS_PORT, &addr, &addrlen)) {
-                       if(s) *s = '/';
-                       log_err("cannot parse donotquery ip address: '%s'", 
-                               p->str);
+       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;
                }
-               if(s) {
-                       *s = '/';
-                       mask_block(str_is_ip6(p->str), &addr, net);
+               net = atoi(s+1);
+               if(net == 0 && strcmp(s+1, "0") != 0) {
+                       log_err("cannot parse donotquery netblock:"
+                               " '%s'", str);
+                       return 0;
                }
-               if(!donotq_insert(dq, &addr, addrlen, net)) {
+               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);
+               return 0;
+       }
+       if(s) {
+               free(s);
+               mask_block(str_is_ip6(str), &addr, net);
+       }
+       if(!donotq_insert(dq, &addr, addrlen, net)) {
+               log_err("out of memory");
+               return 0;
+       }
+       return 1;
+}
+
+/** read donotq config */
+static int 
+read_donotq(struct iter_donotq* dq, struct config_file* cfg)
+{
+       struct config_strlist* p;
+       for(p = cfg->donotqueryaddrs; p; p = p->next) {
+               log_assert(p->str);
+               if(!donotq_str_cfg(dq, p->str))
+                       return 0;
        }
        return 1;
 }
@@ -245,6 +258,12 @@ donotq_apply_cfg(struct iter_donotq* dq, struct config_file* cfg)
                return 0;
        if(!read_donotq(dq, cfg))
                return 0;
+       if(cfg->donotquery_localhost) {
+               if(!donotq_str_cfg(dq, "127.0.0.0/8"))
+                       return 0;
+               if(!donotq_str_cfg(dq, "::1"))
+                       return 0;
+       }
        donotq_init_parents(dq);
        return 1;
 }
index 9e6b8524433e740326765b1ba6a09eff2fea888e..1bac0886d0491d3252a81aa742c176f5233d7b40 100644 (file)
Binary files a/testdata/fwd_compress_c00c.tpkg and b/testdata/fwd_compress_c00c.tpkg differ
index 4ea4b76116292a351d8bbe6eea2a285df0d2908e..1b8e1bedcbda0c58d4a17a0d197323e28989ddec 100644 (file)
Binary files a/testdata/fwd_no_edns.tpkg and b/testdata/fwd_no_edns.tpkg differ
index 15d53985effadf1b677d0b52c345ac78dd14eb3c..cad670dd8b1796c159b0772694805433c0ec0876 100644 (file)
Binary files a/testdata/fwd_tcp.tpkg and b/testdata/fwd_tcp.tpkg differ
index f62ebd74f7071e2ce4e434be2fcb4e37c20fc281..e061afe5ebbec3b1227a7b4ead79cbf54b4b8a64 100644 (file)
Binary files a/testdata/fwd_tcp_tc.tpkg and b/testdata/fwd_tcp_tc.tpkg differ
index 6d6547cfffba35196a8638fd6594756c81c9712a..f7762488e7ee0d5a252fc7dfc8be071214728634 100644 (file)
Binary files a/testdata/fwd_tcp_tc6.tpkg and b/testdata/fwd_tcp_tc6.tpkg differ
index 4cdf73050bb160994b3a9492657d8e86c9e0c8e2..ca8946971d39f70f2dd2e03134ec70e7198b8a34 100644 (file)
Binary files a/testdata/fwd_three.tpkg and b/testdata/fwd_three.tpkg differ
index b98a5b88c7baf219c55147a8bb87a12dcc547855..65e6148d84c2ecce2d808de0f20791803e9703ed 100644 (file)
Binary files a/testdata/fwd_three_service.tpkg and b/testdata/fwd_three_service.tpkg differ
index 57e78d42e0ad48a0628983b900dbf6dd452cf47e..3c3b120fc985f59fafe576d2f053e45b54425745 100644 (file)
Binary files a/testdata/fwd_ttlexpire.tpkg and b/testdata/fwd_ttlexpire.tpkg differ
index 02d566150793bc989ddabb2e29eb000a4c4569ce..cb5482090add398607bc25854caa1d3594b94716 100644 (file)
Binary files a/testdata/fwd_udp.tpkg and b/testdata/fwd_udp.tpkg differ
index 8b44e11fcf24505ffb6b3a5f0b24ef836462b26e..46c390c1734725627e4e2a7dd32a4306fbdd168d 100644 (file)
@@ -99,10 +99,7 @@ config_create()
        if(!(cfg->pidfile = strdup("unbound.pid"))) goto error_exit;
        if(!(cfg->target_fetch_policy = strdup("3 2 1 0 0"))) goto error_exit;
        cfg->donotqueryaddrs = NULL;
-       if(!cfg_strlist_insert(&cfg->donotqueryaddrs, strdup("127.0.0.0/8")))
-               goto error_exit;
-       if(!cfg_strlist_insert(&cfg->donotqueryaddrs, strdup("::1")))
-               goto error_exit;
+       cfg->donotquery_localhost = 1;
        cfg->root_hints = NULL;
        cfg->do_daemonize = 1;
        cfg->num_ifs = 0;
index 96890ab6a3c90625ac06bed4544b4217f0b062b6..34ceb91c31b64305878fcae56360c75dfc5ddb3b 100644 (file)
@@ -120,6 +120,8 @@ struct config_file {
        struct config_stub* forwards;
        /** list of donotquery addresses, linked list */
        struct config_strlist* donotqueryaddrs;
+       /** use default localhost donotqueryaddr entries */
+       int donotquery_localhost;
 
        /** harden against very small edns buffer sizes */
        int harden_short_bufsize;
index 62d9f94df13c04c358eea86a0e47af7356233a2e..9f2924bf3195d341bf84ecc9e522d48ff0c1ce9b 100644 (file)
@@ -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 76
-#define YY_END_OF_BUFFER 77
+#define YY_NUM_RULES 77
+#define YY_END_OF_BUFFER 78
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -374,80 +374,81 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[655] =
+static yyconst flex_int16_t yy_accept[665] =
     {   0,
-        1,    1,   64,   64,   68,   68,   72,   72,   77,   75,
-        1,   62,   63,    2,   76,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   64,   65,   76,   66,   76,   71,   68,   69,   70,
-       76,   72,   73,   74,   76,   75,    0,    1,    2,    2,
-        2,    2,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   64,    0,
-       71,    0,   68,   72,    0,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   39,   75,   75,   75,
-       75,    6,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       17,   75,   11,   12,   75,   14,   13,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,    3,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   67,   75,   75,   75,   75,   75,
-       75,   20,   75,   75,   75,   75,   75,   75,   21,   75,
-
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   49,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   48,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   18,   75,
-       75,   75,   75,   75,   75,   19,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   15,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   40,   41,   38,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,    5,   75,   75,   75,   75,   75,
-
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   22,   75,
-       75,   75,   75,   61,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   37,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,    4,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   43,   44,   42,   75,   75,   75,
-       47,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   53,   75,   75,   75,   75,   75,   75,   75,   75,
-
-       75,   46,   75,   75,   75,   75,   75,   75,   75,   75,
-       50,   75,   75,   75,   75,   75,   75,    7,   75,   75,
-       75,   75,   75,   75,   55,   75,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   28,   29,   58,   75,
-       75,   24,   75,   75,   75,   75,    8,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   75,   75,   59,   23,   25,   75,   75,   75,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       75,   10,   75,   75,   75,   75,   75,    9,   26,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-
-       75,   75,   30,   75,   75,   27,   75,   51,   52,   75,
-       75,   54,   75,   75,   75,   75,   75,   75,   75,   16,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-       34,   75,   75,   57,   45,   36,   35,   75,   31,   75,
-       56,   75,   32,   75,   75,   33,   75,   75,   75,   75,
-       75,   75,   60,    0
+        1,    1,   65,   65,   69,   69,   73,   73,   78,   76,
+        1,   63,   64,    2,   77,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   65,   66,   77,   67,   77,   72,   69,   70,   71,
+       77,   73,   74,   75,   77,   76,    0,    1,    2,    2,
+        2,    2,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   65,    0,
+       72,    0,   69,   73,    0,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   39,   76,   76,   76,
+       76,    6,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       17,   76,   11,   12,   76,   14,   13,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,    3,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   68,   76,   76,   76,   76,   76,
+       76,   20,   76,   76,   76,   76,   76,   76,   21,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   50,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   49,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   18,   76,
+       76,   76,   76,   76,   76,   19,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   15,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   40,   41,   38,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,    5,   76,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   22,   76,
+       76,   76,   76,   62,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   37,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,    4,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   43,   44,   42,   76,   76,   76,
+       48,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   54,   76,   76,   76,   76,   76,   76,   76,   76,
+
+       76,   76,   47,   76,   76,   76,   76,   76,   76,   76,
+       76,   51,   76,   76,   76,   76,   76,   76,    7,   76,
+       76,   76,   76,   76,   76,   56,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   28,   29,
+       59,   76,   76,   24,   76,   76,   76,   76,    8,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   60,   23,   25,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   10,   76,   76,   76,   76,
+       76,    9,   26,   76,   76,   76,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   30,   76,   76,
+       27,   76,   52,   53,   76,   76,   55,   76,   76,   76,
+       76,   76,   76,   76,   76,   16,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   34,   76,   76,
+       58,   45,   76,   36,   35,   76,   31,   76,   57,   76,
+       76,   32,   76,   76,   46,   33,   76,   76,   76,   76,
+       76,   76,   61,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -490,17 +491,17 @@ static yyconst flex_int32_t yy_meta[37] =
         1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[664] =
+static yyconst flex_int16_t yy_base[674] =
     {   0,
-        0,    0,   34,   37,   48,   52,   58,   62, 1333, 1320,
-       41, 1334, 1334,   67,   71,   65,   66,   32,   68,   70,
+        0,    0,   34,   37,   48,   52,   58,   62, 1353, 1340,
+       41, 1354, 1354,   67,   71,   65,   66,   32,   68,   70,
        71,   33,   72,   78,   36,   82,   85,   84,   87,   92,
-      100, 1319, 1334, 1334, 1334,  101, 1318, 1327, 1334, 1334,
-      116, 1316, 1334, 1334,  119, 1315,  123,  124,    0,  127,
+      100, 1339, 1354, 1354, 1354,  101, 1338, 1347, 1354, 1354,
+      116, 1336, 1354, 1354,  119, 1335,  123,  124,    0,  127,
         0,    0,  107,  121,  128,  122,  125,  126,  129,  137,
       131,  141,  132,  144,  133,  135,  146,  149,  150,   81,
-      152,  155,  157,  158,  159,  161,  160,  163, 1314,  176,
-     1313,  191, 1322, 1311,  181,  162,  182,  185,  164,  188,
+      152,  155,  157,  158,  159,  161,  160,  163, 1334,  176,
+     1333,  191, 1342, 1331,  181,  162,  182,  185,  164,  188,
       190,  178,  189,  193,  196,  202,  206,  199,  213,  209,
 
       216,  215,  217,  207,  218,  220,  221,  227,  224,  228,
@@ -509,142 +510,144 @@ static yyconst flex_int16_t yy_base[664] =
       272,  283,  271,  278,  276,  289,  291,  284,  293,  299,
       295,  296,  301,  297,  320,  302,  304,  305,  306,  311,
       307,  312,  314,  321,  317,  328,  331,  332,  339,  346,
-      344,  342,  345,  347,  351,  353, 1310,  355,  357,  358,
-      359, 1309,  360,  366,  362,  372,  363,  369,  376,  377,
+      344,  342,  345,  347,  351,  353, 1330,  355,  357,  358,
+      359, 1329,  360,  366,  362,  372,  363,  369,  376,  377,
       381,  383,  384,  385,  386,  387,  389,  393,  390,  398,
       401,  412,  409,  411,  413,  419,  416,  418,  415,  421,
 
       422,  425,  429,  424,  432,  443,  439,  441,  442,  431,
       440,  446,  449,  452,  457,  450,  459,  460,  466,  462,
       464,  465,  467,  469,  470,  472,  480,  471,  478,  481,
-     1308,  482, 1307, 1306,  484, 1305, 1304,  491,  490,  493,
+     1328,  482, 1327, 1326,  484, 1325, 1324,  491,  490,  493,
       489,  492,  496,  502,  503,  505,  510,  513,  512,  518,
-      521,  522,  523,  525,  527,  507,  530,  526,  533, 1303,
+      521,  522,  523,  525,  527,  507,  530,  526,  533, 1323,
       536,  535,  537,  538,  541,  548,  545,  546,  547,  557,
       549,  555,  559,  560,  562,  563,  564,  565,  569,  574,
-      568,  570,  577,  582, 1302,  590,  588,  578,  587,  592,
-      593, 1301,  594,  600,  601,  602,  603,  612, 1300,  609,
+      568,  570,  577,  582, 1322,  590,  588,  578,  587,  592,
+      593, 1321,  594,  600,  601,  602,  603,  612, 1320,  609,
 
       610,  614,  615,  616,  617,  620,  619,  618,  625,  626,
-      627,  637,  630,  636,  635, 1299,  639,  641,  648,  642,
-      643,  649,  650,  651,  653,  654, 1298,  655,  662,  659,
+      627,  637,  630,  636,  635, 1319,  639,  641,  648,  642,
+      643,  649,  650,  651,  653,  654, 1318,  655,  662,  659,
       661,  674,  676,  664,  675,  684,  680,  682,  681,  683,
-      687,  689,  700,  703,  691,  697,  704,  706, 1297,  712,
-      716,  719,  708,  715,  721, 1296,  718,  722,  723,  724,
-      725,  727,  728,  729,  732,  731,  739,  747,  748, 1295,
+      687,  689,  700,  703,  691,  697,  704,  706, 1317,  712,
+      716,  719,  708,  715,  721, 1316,  718,  722,  723,  724,
+      725,  727,  728,  729,  732,  731,  739,  747,  748, 1315,
       736,  749,  757,  740,  750,  753,  756,  759,  760,  761,
-      764,  765, 1294, 1293, 1292,  772,  766,  767,  777,  773,
-      781,  778,  783,  784, 1291,  785,  786,  791,  789,  796,
+      764,  765, 1314, 1313, 1312,  772,  766,  767,  777,  773,
+      781,  778,  783,  784, 1311,  785,  786,  791,  789,  796,
 
       793,  797,  799,  800,  805,  806,  804,  807,  811,  812,
-      809,  819,  829,  815,  825,  831,  832,  833, 1290,  839,
-      837,  835,  836, 1289,  838,  847,  848,  850,  856,  863,
-      841,  860,  862, 1288,  869,  871,  867,  873,  875,  868,
-      874,  876,  877,  882,  878,  880,  884,  887,  891, 1287,
+      809,  819,  829,  815,  825,  831,  832,  833, 1310,  839,
+      837,  835,  836, 1309,  838,  847,  848,  850,  856,  863,
+      841,  860,  862, 1308,  869,  871,  867,  873,  875,  868,
+      874,  876,  877,  882,  878,  880,  884,  887,  891, 1307,
       892,  899,  896,  898,  900,  907,  914,  916,  910,  919,
-      903,  917,  904,  927, 1286, 1285, 1284,  920,  922,  930,
-     1283,  931,  932,  934,  935,  937,  938,  939,  940,  952,
-      941,  953,  943,  955,  947,  956,  962,  963,  967,  957,
-      971, 1282,  973,  970,  974,  966,  981,  982,  986,  980,
-
-      988, 1281,  989,  991,  993,  994,  997,  999, 1002, 1004,
-     1280, 1006, 1010, 1007, 1012, 1013, 1014, 1279, 1016, 1018,
-     1020, 1023, 1024, 1026, 1278, 1027, 1030, 1031, 1041, 1034,
-     1040, 1043, 1044, 1047, 1048, 1051, 1277, 1276, 1275, 1055,
-     1058, 1274, 1061, 1067, 1063, 1050, 1273, 1066, 1068, 1069,
-     1072, 1073, 1076, 1074, 1075, 1077, 1078, 1079, 1081, 1087,
-     1093, 1090, 1082, 1272, 1270, 1262, 1091, 1102, 1107, 1109,
-     1097, 1092, 1111, 1112, 1113, 1114, 1118, 1120, 1121, 1122,
-     1124, 1246, 1125, 1128, 1130, 1132, 1136, 1245, 1244, 1138,
-     1139, 1145, 1148, 1149, 1155, 1152, 1153, 1154, 1156, 1135,
-
-     1158, 1160, 1243, 1163, 1165, 1242, 1166, 1238, 1237, 1168,
-     1173, 1234, 1170, 1174, 1176, 1178, 1171, 1181, 1185, 1233,
-     1187, 1177, 1184, 1197, 1201, 1205, 1207, 1193, 1209, 1210,
-     1232, 1213, 1214, 1202, 1191, 1103, 1028, 1216,  959, 1217,
-      842, 1218,  693, 1223, 1224,  660, 1220, 1227, 1226, 1228,
-     1229, 1231,  388, 1334, 1259, 1263, 1267,  329, 1271, 1275,
-      108, 1277, 1279
+      903,  917,  904,  927, 1306, 1305, 1304,  920,  922,  930,
+     1303,  931,  932,  934,  935,  937,  940,  939,  941,  953,
+      942,  955,  945,  956,  957,  949,  959,  962,  964,  963,
+      965, 1302,  970,  980,  972,  969,  982,  983,  985,  977,
+
+      984,  990, 1301,  992,  993,  994,  996,  999, 1001, 1003,
+     1007, 1300, 1008, 1012, 1009, 1014, 1015, 1016, 1299, 1018,
+     1020, 1022, 1024, 1026, 1028, 1298, 1029, 1030, 1032, 1041,
+     1042, 1040, 1045, 1047, 1034, 1051, 1052, 1055, 1297, 1296,
+     1295, 1059, 1062, 1294, 1064, 1070, 1066, 1054, 1293, 1068,
+     1072, 1071, 1075, 1076, 1079, 1077, 1078, 1080, 1081, 1083,
+     1085, 1089, 1091, 1099, 1095, 1093, 1292, 1291, 1290, 1096,
+     1100, 1105, 1113, 1106, 1108, 1114, 1116, 1118, 1120, 1122,
+     1123, 1126, 1128, 1129, 1133, 1289, 1130, 1134, 1136, 1141,
+     1140, 1288, 1287, 1144, 1147, 1154, 1156, 1146, 1162, 1161,
+
+     1163, 1151, 1158, 1165, 1164, 1168, 1171, 1285, 1172, 1174,
+     1277, 1175, 1261, 1260, 1178, 1176, 1259, 1181, 1182, 1180,
+     1183, 1187, 1184, 1191, 1197, 1256, 1196, 1193, 1199, 1206,
+     1211, 1203, 1213, 1215, 1217, 1220, 1223, 1255, 1226, 1227,
+     1254, 1253, 1216, 1250, 1249, 1229, 1207, 1230, 1110, 1231,
+     1237,  842, 1239, 1240,  693,  660, 1233, 1242, 1243, 1245,
+     1244, 1247,  388, 1354, 1274, 1278, 1282,  329, 1286, 1290,
+      108, 1292, 1294
     } ;
 
-static yyconst flex_int16_t yy_def[664] =
+static yyconst flex_int16_t yy_def[674] =
     {   0,
-      654,    1,  655,  655,  656,  656,  657,  657,  654,  658,
-      654,  654,  654,  659,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  660,  654,  654,  654,  660,  661,  654,  654,  654,
-      661,  662,  654,  654,  662,  658,  658,  654,  663,  659,
-      663,  659,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  660,  660,
-      661,  661,  654,  662,  662,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,  658,  658,  658,  658,  658,  658,  658,
-      658,  658,  658,    0,  654,  654,  654,  654,  654,  654,
-      654,  654,  654
+      664,    1,  665,  665,  666,  666,  667,  667,  664,  668,
+      664,  664,  664,  669,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  670,  664,  664,  664,  670,  671,  664,  664,  664,
+      671,  672,  664,  664,  672,  668,  668,  664,  673,  669,
+      673,  669,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  670,  670,
+      671,  671,  664,  672,  672,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
+      668,  668,  668,    0,  664,  664,  664,  664,  664,  664,
+      664,  664,  664
     } ;
 
-static yyconst flex_int16_t yy_nxt[1371] =
+static yyconst flex_int16_t yy_nxt[1391] =
     {   0,
        10,   11,   12,   12,   13,   14,   10,   10,   10,   10,
        10,   15,   10,   10,   16,   17,   10,   18,   10,   19,
@@ -748,57 +751,59 @@ static yyconst flex_int16_t yy_nxt[1371] =
       481,  470,   47,   47,  476,  486,  477,   47,  485,   47,
        47,   47,  478,  490,   47,   47,  488,  484,   47,  482,
       491,   47,  493,  497,  492,   47,  487,   47,   47,  489,
-       47,   47,  494,   47,  495,  501,  498,  496,   47,  499,
-      502,   47,   47,   47,  504,   47,   47,  500,   47,   47,
-       47,   47,   47,  510,   47,  509,  514,  506,   47,  507,
-      508,  503,  511,   47,   47,  505,   47,   47,   47,  513,
-       47,  515,  518,   47,   47,  516,  512,   47,   47,  519,
-      525,   47,   47,  522,   47,   47,  517,  520,  523,  521,
-      524,   47,   47,   47,  526,  527,  528,   47,  529,   47,
-
-       47,  530,   47,  533,   47,   47,  536,  537,   47,  538,
-       47,  531,  539,   47,  534,   47,  535,   47,   47,  532,
-      542,   47,  541,   47,   47,   47,  547,   47,  546,   47,
-      545,   47,  549,  540,   47,   47,  543,   47,   47,   47,
-      544,   47,   47,  555,  551,   47,  552,  556,  550,  557,
-      554,   47,   47,  548,   47,   47,  558,  553,   47,   47,
-      559,   47,   47,  561,  563,  564,   47,  562,  565,   47,
-      560,  566,   47,  567,   47,  568,  569,   47,   47,   47,
-       47,  571,  570,   47,   47,   47,   47,   47,   47,   47,
-       47,  572,   47,   47,  573,  574,  575,  582,   47,  583,
-
-      578,   47,   47,   47,   47,  577,  579,  580,   47,  576,
-      581,  585,  591,   47,   47,  584,  587,  588,   47,  589,
-       47,  586,   47,   47,   47,   47,  590,  592,  593,   47,
-      595,   47,   47,   47,  596,   47,   47,  598,  594,   47,
-      603,   47,  599,   47,  600,  597,   47,   47,  606,   47,
-       47,  604,  605,  607,  601,  608,   47,  602,  609,   47,
-       47,  611,  612,   47,   47,   47,   47,   47,  613,   47,
-      616,   47,  615,  610,   47,  620,   47,   47,  617,   47,
-      622,   47,   47,  614,   47,   47,  624,   47,   47,   47,
-      618,  619,   47,  623,  627,   47,   47,  631,   47,  632,
-
-      621,  630,   47,  625,   47,  626,  628,  634,   47,  638,
-      629,  635,   47,   47,  633,  636,   47,  637,   47,  639,
-       47,   47,  640,  641,   47,   47,  643,   47,   47,   47,
-      642,   47,  644,  646,   47,   47,  647,   47,   47,   47,
-       47,  653,   47,   47,   47,   47,  645,  649,   47,   47,
-      648,  650,  651,   47,   47,   47,   47,   47,  652,   32,
-       32,   32,   32,   37,   37,   37,   37,   42,   42,   42,
-       42,   50,   50,   47,   50,   79,   79,   84,   84,   51,
-       51,   47,   51,   47,   47,   47,   47,   47,   47,   47,
-       47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
+       47,   47,  494,   47,  495,  502,  498,  496,   47,  499,
+      503,   47,   47,   47,  505,   47,   47,  501,   47,  500,
+       47,   47,   47,   47,  511,  510,   47,  507,  515,  508,
+       47,  504,  509,  512,   47,  506,   47,   47,   47,  519,
+       47,  514,  516,   47,   47,   47,   47,  513,  520,  518,
+       47,   47,  524,   47,  521,  517,  522,  525,   47,  523,
+      526,   47,  527,   47,   47,   47,   47,  529,  528,  530,
+
+      531,   47,  532,   47,   47,   47,  535,   47,  538,  539,
+       47,  540,   47,  541,   47,  533,  536,  537,   47,   47,
+       47,  534,  544,   47,  543,   47,   47,   47,  549,   47,
+      548,   47,  547,   47,  551,   47,  542,   47,  545,   47,
+       47,   47,  546,   47,  557,   47,  553,  558,  554,  552,
+      556,   47,   47,   47,  560,  550,   47,  559,   47,  555,
+      563,  561,   47,   47,  562,   47,   47,  564,  566,  567,
+       47,  565,  568,   47,  569,   47,  570,   47,  571,   47,
+      572,   47,   47,   47,  573,  574,   47,   47,   47,   47,
+       47,   47,   47,  575,   47,  583,   47,  576,  577,  578,
+
+       47,  586,   47,  581,   47,  587,   47,   47,  580,  582,
+       47,   47,  579,  584,  591,  592,   47,   47,  585,   47,
+      588,   47,  589,  593,   47,   47,  590,   47,  595,   47,
+      596,   47,  597,   47,   47,  594,  599,   47,  600,   47,
+       47,   47,  602,  598,   47,   47,  608,   47,  601,  604,
+      603,   47,   47,  605,  611,   47,  610,   47,   47,  606,
+      609,  612,   47,  607,  613,   47,  614,   47,  616,   47,
+      615,  617,   47,   47,   47,   47,   47,  620,  618,   47,
+      619,  621,   47,   47,  626,   47,   47,   47,  623,   47,
+      628,   47,   47,   47,   47,   47,  629,  630,   47,  622,
+
+      625,  624,   47,  634,   47,  632,  638,   47,   47,  627,
+       47,  631,  633,  637,   47,  639,  641,   47,   47,  635,
+      636,  642,   47,  644,   47,  645,   47,   47,   47,  640,
+      647,   47,  643,  646,   47,  648,  649,   47,   47,  652,
+       47,   47,   47,  650,   47,  653,  651,  655,   47,  656,
+       47,   47,  657,   47,   47,   47,   47,  663,   47,  654,
+       47,   47,  659,  658,   47,   47,   47,   47,  660,  661,
+       47,   47,   47,  662,   32,   32,   32,   32,   37,   37,
+       37,   37,   42,   42,   42,   42,   50,   50,   47,   50,
+       79,   79,   84,   84,   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,   85,   83,   82,   80,   47,   85,   83,   82,
-       80,   47,  654,    9,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654
+       80,   47,  664,    9,  664,  664,  664,  664,  664,  664,
+      664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
+      664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
+      664,  664,  664,  664,  664,  664,  664,  664,  664,  664
     } ;
 
-static yyconst flex_int16_t yy_chk[1371] =
+static yyconst flex_int16_t yy_chk[1391] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -811,7 +816,7 @@ static yyconst flex_int16_t yy_chk[1371] =
        19,   20,   21,   23,   16,   20,   17,   21,   19,   24,
        24,   17,   70,   26,   20,   28,   27,   23,   29,   29,
 
-       28,   23,   26,   30,   36,   36,   70,   26,  661,   24,
+       28,   23,   26,   30,   36,   36,   70,   26,  671,   24,
        27,   31,   31,   27,   28,   29,   31,   41,   53,   41,
        41,   30,   45,   45,   47,   48,   47,   47,   50,   48,
        50,   50,   54,   56,   55,   53,   57,   58,   50,   55,
@@ -835,14 +840,14 @@ static yyconst flex_int16_t yy_chk[1371] =
 
       136,  133,  137,  134,  139,  140,  141,  142,  144,  139,
       140,  141,  143,  146,  138,  147,  148,  149,  151,  150,
-      150,  144,  150,  152,  147,  153,  142,  146,  155,  658,
+      150,  144,  150,  152,  147,  153,  142,  146,  155,  668,
       143,  145,  154,  145,  145,  148,  149,  151,  152,  156,
       153,  155,  157,  158,  145,  145,  145,  158,  156,  154,
       159,  157,  160,  162,  162,  161,  163,  160,  164,  159,
       156,  161,  165,  164,  166,  166,  168,  163,  169,  170,
       171,  173,  174,  175,  177,  178,  169,  174,  170,  173,
       178,  171,  165,  176,  176,  178,  168,  179,  180,  180,
-      175,  176,  181,  177,  182,  183,  184,  185,  186,  653,
+      175,  176,  181,  177,  182,  183,  184,  185,  186,  663,
 
       187,  189,  185,  188,  188,  182,  181,  176,  190,  190,
       179,  191,  191,  183,  187,  189,  186,  184,  192,  193,
@@ -873,11 +878,11 @@ static yyconst flex_int16_t yy_chk[1371] =
       307,  313,  302,  308,  312,  303,  315,  314,  312,  317,
       317,  311,  318,  320,  321,  310,  314,  318,  313,  319,
       322,  323,  324,  319,  325,  326,  328,  320,  321,  315,
-      330,  646,  331,  329,  326,  334,  324,  331,  323,  328,
+      330,  656,  331,  329,  326,  334,  324,  331,  323,  328,
       322,  329,  333,  325,  332,  332,  335,  333,  334,  330,
       336,  337,  339,  338,  340,  336,  337,  338,  341,  342,
 
-      342,  339,  345,  335,  643,  339,  341,  339,  346,  339,
+      342,  339,  345,  335,  655,  339,  341,  339,  346,  339,
       343,  343,  340,  344,  344,  347,  346,  348,  350,  353,
       347,  345,  351,  350,  348,  352,  354,  351,  353,  357,
       352,  355,  355,  358,  359,  360,  361,  358,  362,  363,
@@ -893,7 +898,7 @@ static yyconst flex_int16_t yy_chk[1371] =
       411,  398,  409,  410,  404,  414,  414,  402,  405,  403,
       412,  409,  410,  409,  407,  413,  415,  408,  411,  412,
       413,  412,  416,  417,  418,  420,  422,  423,  421,  425,
-      420,  431,  431,  641,  416,  415,  421,  418,  426,  427,
+      420,  431,  431,  652,  416,  415,  421,  418,  426,  427,
       417,  428,  426,  422,  427,  423,  428,  429,  425,  430,
       432,  432,  433,  433,  430,  435,  429,  436,  437,  440,
       435,  439,  436,  438,  438,  441,  439,  442,  443,  445,
@@ -903,53 +908,55 @@ static yyconst flex_int16_t yy_chk[1371] =
       452,  455,  443,  456,  461,  463,  454,  449,  456,  447,
       457,  459,  458,  462,  457,  457,  453,  458,  462,  455,
       460,  468,  459,  469,  460,  469,  463,  461,  464,  464,
-      470,  470,  472,  473,  473,  474,  475,  468,  476,  477,
-      478,  479,  481,  479,  483,  478,  483,  475,  485,  476,
-      477,  472,  480,  480,  482,  474,  484,  486,  490,  482,
-      639,  484,  487,  487,  488,  485,  481,  496,  489,  488,
-      494,  494,  491,  490,  493,  495,  486,  489,  491,  489,
-      493,  500,  497,  498,  495,  496,  497,  499,  498,  501,
-
-      503,  499,  504,  503,  505,  506,  506,  507,  507,  508,
-      508,  500,  509,  509,  504,  510,  505,  512,  514,  501,
-      513,  513,  512,  515,  516,  517,  519,  519,  517,  520,
-      516,  521,  521,  510,  522,  523,  514,  524,  526,  637,
-      515,  527,  528,  528,  523,  530,  524,  529,  522,  530,
-      527,  531,  529,  520,  532,  533,  531,  526,  534,  535,
-      532,  546,  536,  534,  536,  540,  540,  535,  541,  541,
-      533,  543,  543,  544,  545,  545,  546,  548,  544,  549,
-      550,  549,  548,  551,  552,  554,  555,  553,  556,  557,
-      558,  550,  559,  563,  551,  552,  553,  560,  560,  561,
-
-      556,  562,  567,  572,  561,  555,  557,  558,  571,  554,
-      559,  563,  572,  568,  636,  562,  568,  569,  569,  570,
-      570,  567,  573,  574,  575,  576,  571,  573,  574,  577,
-      576,  578,  579,  580,  577,  581,  583,  579,  575,  584,
-      585,  585,  580,  586,  581,  578,  600,  587,  590,  590,
-      591,  586,  587,  591,  583,  592,  592,  584,  593,  593,
-      594,  595,  596,  596,  597,  598,  595,  599,  597,  601,
-      600,  602,  599,  594,  604,  605,  605,  607,  601,  610,
-      610,  613,  617,  598,  611,  614,  613,  615,  622,  616,
-      602,  604,  618,  611,  616,  623,  619,  621,  621,  622,
-
-      607,  619,  635,  614,  628,  615,  617,  624,  624,  628,
-      618,  625,  625,  634,  623,  626,  626,  627,  627,  629,
-      629,  630,  630,  632,  632,  633,  638,  638,  640,  642,
-      633,  647,  640,  644,  644,  645,  645,  649,  648,  650,
-      651,  652,  652,  631,  620,  612,  642,  648,  609,  608,
-      647,  649,  650,  606,  603,  589,  588,  582,  651,  655,
-      655,  655,  655,  656,  656,  656,  656,  657,  657,  657,
-      657,  659,  659,  566,  659,  660,  660,  662,  662,  663,
-      663,  565,  663,  564,  547,  542,  539,  538,  537,  525,
-      518,  511,  502,  492,  471,  467,  466,  465,  450,  434,
-
+      470,  470,  472,  473,  473,  474,  475,  468,  476,  464,
+      478,  477,  479,  481,  479,  478,  483,  475,  483,  476,
+      486,  472,  477,  480,  480,  474,  482,  484,  485,  487,
+      487,  482,  484,  488,  490,  489,  491,  481,  488,  486,
+      496,  493,  491,  495,  489,  485,  489,  493,  500,  490,
+      494,  494,  495,  497,  498,  501,  499,  497,  496,  498,
+
+      499,  502,  500,  504,  505,  506,  504,  507,  507,  508,
+      508,  509,  509,  510,  510,  501,  505,  506,  511,  513,
+      515,  502,  514,  514,  513,  516,  517,  518,  520,  520,
+      518,  521,  517,  522,  522,  523,  511,  524,  515,  525,
+      527,  528,  516,  529,  529,  535,  524,  530,  525,  523,
+      528,  532,  530,  531,  532,  521,  533,  531,  534,  527,
+      535,  533,  536,  537,  534,  548,  538,  536,  538,  542,
+      542,  537,  543,  543,  545,  545,  546,  547,  547,  550,
+      548,  546,  552,  551,  550,  551,  553,  554,  556,  557,
+      555,  558,  559,  552,  560,  560,  561,  553,  554,  555,
+
+      562,  563,  563,  558,  566,  564,  565,  570,  557,  559,
+      564,  571,  556,  561,  571,  572,  572,  574,  562,  575,
+      565,  649,  566,  573,  573,  576,  570,  577,  575,  578,
+      576,  579,  577,  580,  581,  574,  579,  582,  580,  583,
+      584,  587,  582,  578,  585,  588,  589,  589,  581,  584,
+      583,  591,  590,  585,  594,  594,  591,  598,  595,  587,
+      590,  595,  602,  588,  596,  596,  597,  597,  599,  603,
+      598,  600,  600,  599,  601,  605,  604,  603,  601,  606,
+      602,  604,  607,  609,  610,  610,  612,  616,  606,  615,
+      615,  620,  618,  619,  621,  623,  616,  618,  622,  605,
+
+      609,  607,  624,  622,  628,  620,  627,  627,  625,  612,
+      629,  619,  621,  625,  632,  628,  630,  630,  647,  623,
+      624,  631,  631,  633,  633,  634,  634,  643,  635,  629,
+      636,  636,  632,  635,  637,  637,  639,  639,  640,  646,
+      646,  648,  650,  640,  657,  648,  643,  651,  651,  653,
+      653,  654,  654,  658,  659,  661,  660,  662,  662,  650,
+      645,  644,  658,  657,  642,  641,  638,  626,  659,  660,
+      617,  614,  613,  661,  665,  665,  665,  665,  666,  666,
+      666,  666,  667,  667,  667,  667,  669,  669,  611,  669,
+      670,  670,  672,  672,  673,  673,  608,  673,  593,  592,
+
+      586,  569,  568,  567,  549,  544,  541,  540,  539,  526,
+      519,  512,  503,  492,  471,  467,  466,  465,  450,  434,
       424,  419,  395,  385,  384,  383,  370,  356,  349,  327,
       316,  299,  292,  285,  260,  237,  236,  234,  233,  231,
       172,  167,   84,   83,   81,   79,   46,   42,   38,   37,
-       32,   10,    9,  654,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654
+       32,   10,    9,  664,  664,  664,  664,  664,  664,  664,
+      664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
+      664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
+      664,  664,  664,  664,  664,  664,  664,  664,  664,  664
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1055,7 +1062,7 @@ static void config_end_include(void)
 #endif
 
 
-#line 1058 "<stdout>"
+#line 1065 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -1211,7 +1218,7 @@ YY_DECL
     
 #line 98 "util/configlexer.lex"
 
-#line 1214 "<stdout>"
+#line 1221 "<stdout>"
 
        if ( !(yy_init) )
                {
@@ -1270,13 +1277,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 >= 655 )
+                               if ( yy_current_state >= 665 )
                                        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] != 1334 );
+               while ( yy_base[yy_current_state] != 1354 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1528,116 +1535,121 @@ YY_RULE_SETUP
 case 46:
 YY_RULE_SETUP
 #line 144 "util/configlexer.lex"
-{ YDOUT; return VAR_HIDE_IDENTITY;}
+{ YDOUT; return VAR_DO_NOT_QUERY_LOCALHOST;}
        YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 145 "util/configlexer.lex"
-{ YDOUT; return VAR_HIDE_VERSION;}
+{ YDOUT; return VAR_HIDE_IDENTITY;}
        YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 146 "util/configlexer.lex"
-{ YDOUT; return VAR_IDENTITY;}
+{ YDOUT; return VAR_HIDE_VERSION;}
        YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 147 "util/configlexer.lex"
-{ YDOUT; return VAR_VERSION;}
+{ YDOUT; return VAR_IDENTITY;}
        YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 148 "util/configlexer.lex"
-{ YDOUT; return VAR_MODULE_CONF;}
+{ YDOUT; return VAR_VERSION;}
        YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 149 "util/configlexer.lex"
-{ YDOUT; return VAR_TRUST_ANCHOR_FILE;}
+{ YDOUT; return VAR_MODULE_CONF;}
        YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 150 "util/configlexer.lex"
-{ YDOUT; return VAR_TRUSTED_KEYS_FILE;}
+{ YDOUT; return VAR_TRUST_ANCHOR_FILE;}
        YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 151 "util/configlexer.lex"
-{ YDOUT; return VAR_TRUST_ANCHOR;}
+{ YDOUT; return VAR_TRUSTED_KEYS_FILE;}
        YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 152 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_OVERRIDE_DATE;}
+{ YDOUT; return VAR_TRUST_ANCHOR;}
        YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 153 "util/configlexer.lex"
-{ YDOUT; return VAR_BOGUS_TTL;}
+{ YDOUT; return VAR_VAL_OVERRIDE_DATE;}
        YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 154 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_CLEAN_ADDITIONAL;}
+{ YDOUT; return VAR_BOGUS_TTL;}
        YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 155 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_PERMISSIVE_MODE;}
+{ YDOUT; return VAR_VAL_CLEAN_ADDITIONAL;}
        YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 156 "util/configlexer.lex"
-{ YDOUT; return VAR_KEY_CACHE_SIZE;}
+{ YDOUT; return VAR_VAL_PERMISSIVE_MODE;}
        YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 157 "util/configlexer.lex"
-{ YDOUT; return VAR_KEY_CACHE_SLABS;}
+{ YDOUT; return VAR_KEY_CACHE_SIZE;}
        YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 158 "util/configlexer.lex"
-{ YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERATIONS;}
+{ YDOUT; return VAR_KEY_CACHE_SLABS;}
        YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 159 "util/configlexer.lex"
-{ YDOUT; return VAR_USE_SYSLOG;}
+{ YDOUT; return VAR_VAL_NSEC3_KEYSIZE_ITERATIONS;}
        YY_BREAK
 case 62:
-/* rule 62 can match eol */
 YY_RULE_SETUP
 #line 160 "util/configlexer.lex"
+{ YDOUT; return VAR_USE_SYSLOG;}
+       YY_BREAK
+case 63:
+/* rule 63 can match eol */
+YY_RULE_SETUP
+#line 161 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 63:
+case 64:
 YY_RULE_SETUP
-#line 163 "util/configlexer.lex"
+#line 164 "util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 164 "util/configlexer.lex"
+#line 165 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(INITIAL);
 }
        YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 168 "util/configlexer.lex"
-{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
-       YY_BREAK
 case 65:
-/* rule 65 can match eol */
 YY_RULE_SETUP
 #line 169 "util/configlexer.lex"
-{ cfg_parser->line++; yymore(); }
+{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 66:
+/* rule 66 can match eol */
 YY_RULE_SETUP
 #line 170 "util/configlexer.lex"
+{ cfg_parser->line++; yymore(); }
+       YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 171 "util/configlexer.lex"
 {
         LEXOUT(("QE "));
         BEGIN(INITIAL);
@@ -1649,37 +1661,37 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 67:
+case 68:
 YY_RULE_SETUP
-#line 181 "util/configlexer.lex"
+#line 182 "util/configlexer.lex"
 { LEXOUT(("v(%s) ", yytext)); BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 182 "util/configlexer.lex"
+#line 183 "util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(INITIAL);
 }
        YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 186 "util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 69:
-/* rule 69 can match eol */
 YY_RULE_SETUP
 #line 187 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 70:
+/* rule 70 can match eol */
 YY_RULE_SETUP
 #line 188 "util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 189 "util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 190 "util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include(yytext);
@@ -1687,26 +1699,26 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 194 "util/configlexer.lex"
+#line 195 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(INITIAL);
 }
        YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 198 "util/configlexer.lex"
-{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
-       YY_BREAK
 case 73:
-/* rule 73 can match eol */
 YY_RULE_SETUP
 #line 199 "util/configlexer.lex"
-{ cfg_parser->line++; yymore(); }
+{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 74:
+/* rule 74 can match eol */
 YY_RULE_SETUP
 #line 200 "util/configlexer.lex"
+{ cfg_parser->line++; yymore(); }
+       YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 201 "util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -1715,7 +1727,7 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 206 "util/configlexer.lex"
+#line 207 "util/configlexer.lex"
 {
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
        if (config_include_stack_ptr == 0) {
@@ -1726,18 +1738,18 @@ case YY_STATE_EOF(INITIAL):
        }
 }
        YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 216 "util/configlexer.lex"
+#line 217 "util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        yylval.str = strdup(yytext); return STRING; }
        YY_BREAK
-case 76:
+case 77:
 YY_RULE_SETUP
-#line 219 "util/configlexer.lex"
+#line 220 "util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 1740 "<stdout>"
+#line 1752 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -2019,7 +2031,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 >= 655 )
+                       if ( yy_current_state >= 665 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2047,11 +2059,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 >= 655 )
+               if ( yy_current_state >= 665 )
                        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 == 654);
+       yy_is_jam = (yy_current_state == 664);
 
        return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2684,7 +2696,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 219 "util/configlexer.lex"
+#line 220 "util/configlexer.lex"
 
 
 
index 54130cd268194d3cf1e17437b3ef2bd708f86e70..621857e2f2f3375147eff8bd26af7f7e2770092f 100644 (file)
@@ -141,6 +141,7 @@ forward-zone{COLON} { YDOUT; return VAR_FORWARD_ZONE;}
 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;}
 hide-identity{COLON}   { YDOUT; return VAR_HIDE_IDENTITY;}
 hide-version{COLON}     { YDOUT; return VAR_HIDE_VERSION;}
 identity{COLON}                { YDOUT; return VAR_IDENTITY;}
index cb331b425ecfd9ec43b0e251ff77a62965d08d0c..c92cc62f9fcd42017a23c2b991d3596290885611 100644 (file)
      VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 321,
      VAR_USE_SYSLOG = 322,
      VAR_OUTGOING_INTERFACE = 323,
-     VAR_ROOT_HINTS = 324
+     VAR_ROOT_HINTS = 324,
+     VAR_DO_NOT_QUERY_LOCALHOST = 325
    };
 #endif
 /* Tokens.  */
 #define VAR_USE_SYSLOG 322
 #define VAR_OUTGOING_INTERFACE 323
 #define VAR_ROOT_HINTS 324
+#define VAR_DO_NOT_QUERY_LOCALHOST 325
 
 
 
@@ -261,7 +263,7 @@ typedef union YYSTYPE
        char*   str;
 }
 /* Line 187 of yacc.c.  */
-#line 265 "util/configparser.c"
+#line 267 "util/configparser.c"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -274,7 +276,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 278 "util/configparser.c"
+#line 280 "util/configparser.c"
 
 #ifdef short
 # undef short
@@ -489,20 +491,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   117
+#define YYLAST   120
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  70
+#define YYNTOKENS  71
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  69
+#define YYNNTS  70
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  129
+#define YYNRULES  131
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  187
+#define YYNSTATES  190
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   324
+#define YYMAXUTOK   325
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -542,7 +544,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
+      65,    66,    67,    68,    69,    70
 };
 
 #if YYDEBUG
@@ -556,50 +558,52 @@ 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,   129,   130,   132,   134,   136,   138,   141,
-     142,   144,   146,   148,   151,   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
+     122,   124,   126,   128,   131,   132,   134,   136,   138,   140,
+     143,   144,   146,   148,   150,   153,   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,   294,   297,   300,   303,   306,   309,   312,   315,
+     318,   321
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      71,     0,    -1,    -1,    71,    72,    -1,    73,    74,    -1,
-      76,    77,    -1,    79,    80,    -1,    11,    -1,    74,    75,
-      -1,    -1,    82,    -1,    83,    -1,    84,    -1,    87,    -1,
-      88,    -1,    91,    -1,    92,    -1,    93,    -1,    94,    -1,
-      85,    -1,    96,    -1,    97,    -1,    98,    -1,    99,    -1,
-     100,    -1,   110,    -1,   111,    -1,   112,    -1,   113,    -1,
-     114,    -1,    89,    -1,   115,    -1,   116,    -1,   119,    -1,
-     117,    -1,   118,    -1,   120,    -1,   121,    -1,   122,    -1,
-     124,    -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,
-     123,    -1,   125,    -1,   102,    -1,   104,    -1,   126,    -1,
-     127,    -1,   128,    -1,   129,    -1,    90,    -1,   109,    -1,
-     131,    -1,   132,    -1,   103,    -1,   130,    -1,    95,    -1,
-      86,    -1,   101,    -1,    39,    -1,    77,    78,    -1,    -1,
-     133,    -1,   134,    -1,   135,    -1,    45,    -1,    80,    81,
-      -1,    -1,   136,    -1,   137,    -1,   138,    -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,    48,    10,    -1,    54,    10,    -1,
-      57,    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
+      72,     0,    -1,    -1,    72,    73,    -1,    74,    75,    -1,
+      77,    78,    -1,    80,    81,    -1,    11,    -1,    75,    76,
+      -1,    -1,    83,    -1,    84,    -1,    85,    -1,    88,    -1,
+      89,    -1,    92,    -1,    93,    -1,    94,    -1,    95,    -1,
+      86,    -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,
+     101,    -1,   111,    -1,   112,    -1,   113,    -1,   114,    -1,
+     115,    -1,    90,    -1,   116,    -1,   117,    -1,   120,    -1,
+     118,    -1,   119,    -1,   121,    -1,   122,    -1,   123,    -1,
+     125,    -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,
+     124,    -1,   127,    -1,   103,    -1,   105,    -1,   128,    -1,
+     129,    -1,   130,    -1,   131,    -1,    91,    -1,   110,    -1,
+     133,    -1,   134,    -1,   104,    -1,   132,    -1,    96,    -1,
+      87,    -1,   102,    -1,   126,    -1,    39,    -1,    78,    79,
+      -1,    -1,   135,    -1,   136,    -1,   137,    -1,    45,    -1,
+      81,    82,    -1,    -1,   138,    -1,   139,    -1,   140,    -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,    48,    10,    -1,    70,
+      10,    -1,    54,    10,    -1,    57,    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.  */
@@ -611,13 +615,14 @@ static const yytype_uint16 yyrline[] =
      111,   112,   112,   113,   113,   114,   114,   115,   115,   116,
      116,   117,   117,   117,   118,   118,   118,   119,   119,   119,
      120,   120,   121,   121,   122,   122,   123,   123,   124,   124,
-     124,   126,   138,   139,   140,   140,   140,   142,   154,   155,
-     156,   156,   156,   158,   167,   176,   185,   198,   213,   222,
-     231,   240,   249,   258,   267,   276,   285,   299,   306,   313,
-     320,   328,   335,   342,   350,   358,   365,   374,   383,   390,
-     397,   408,   417,   430,   439,   448,   461,   470,   479,   488,
-     497,   510,   517,   527,   537,   547,   554,   561,   579,   588,
-     598,   608,   615,   624,   637,   644,   651,   658,   665,   672
+     124,   125,   127,   139,   140,   141,   141,   141,   143,   155,
+     156,   157,   157,   157,   159,   168,   177,   186,   199,   214,
+     223,   232,   241,   250,   259,   268,   277,   286,   300,   307,
+     314,   321,   329,   336,   343,   351,   359,   366,   375,   384,
+     391,   398,   409,   418,   431,   440,   449,   462,   471,   480,
+     489,   498,   511,   518,   528,   538,   548,   555,   565,   572,
+     590,   599,   609,   619,   626,   635,   648,   655,   662,   669,
+     676,   683
 };
 #endif
 
@@ -646,12 +651,12 @@ static const char *const yytname[] =
   "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
   "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
   "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
-  "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "$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",
+  "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
+  "$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",
   "server_incoming_num_tcp", "server_do_ip4", "server_do_ip6",
   "server_do_udp", "server_do_tcp", "server_use_syslog", "server_chroot",
@@ -667,7 +672,8 @@ static const char *const yytname[] =
   "server_infra_cache_slabs", "server_target_fetch_policy",
   "server_harden_short_bufsize", "server_harden_large_queries",
   "server_harden_glue", "server_do_not_query_address",
-  "server_module_conf", "server_val_override_date", "server_bogus_ttl",
+  "server_do_not_query_localhost", "server_module_conf",
+  "server_val_override_date", "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",
@@ -686,26 +692,28 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    70,    71,    71,    72,    72,    72,    73,    74,    74,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    75,
-      75,    76,    77,    77,    78,    78,    78,    79,    80,    80,
-      81,    81,    81,    82,    83,    84,    85,    86,    87,    88,
+       0,    71,    72,    72,    73,    73,    73,    74,    75,    75,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    77,    78,    78,    79,    79,    79,    80,    81,
+      81,    82,    82,    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,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -717,13 +725,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,     2,     0,     1,     1,     1,     1,     2,     0,
-       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
+       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,     2,     2,     2,     2,     2,
+       2,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -731,37 +740,37 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     7,    61,    67,     3,     9,    63,    69,
+       2,     0,     1,     7,    62,    68,     3,     9,    64,    70,
        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,     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,    39,    45,    48,
-      49,    50,    51,    57,    54,    55,     0,     0,     0,    62,
-      64,    65,    66,     0,     0,     0,    68,    70,    71,    72,
-      74,    73,    75,    78,    79,    76,    82,    83,    84,    85,
-      87,    88,    89,    90,    91,   101,   102,   103,   104,   105,
-      80,   106,   107,   110,   108,   109,   111,   112,   113,   115,
-      96,    97,    98,    99,   114,   116,    93,    95,   117,   118,
-     119,   120,    81,   100,   122,   123,    94,   121,    86,    77,
-      92,   124,   125,   126,   127,   128,   129
+       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,    39,    61,
+      45,    48,    49,    50,    51,    57,    54,    55,     0,     0,
+       0,    63,    65,    66,    67,     0,     0,     0,    69,    71,
+      72,    73,    75,    74,    76,    79,    80,    77,    83,    84,
+      85,    86,    88,    89,    90,    91,    92,   102,   103,   104,
+     105,   106,    81,   107,   108,   111,   109,   110,   112,   113,
+     114,   116,    97,    98,    99,   100,   115,   118,    94,    96,
+     119,   120,   121,   122,    82,   101,   124,   125,    95,   123,
+      87,    78,    93,   117,   126,   127,   128,   129,   130,   131
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     6,     7,    10,    64,     8,    11,   119,     9,
-      12,   126,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   120,   121,   122,   127,   128,   129
+      -1,     1,     6,     7,    10,    65,     8,    11,   121,     9,
+      12,   128,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    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,   122,   123,   124,   129,   130,   131
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -769,25 +778,25 @@ static const yytype_int16 yydefgoto[] =
 #define YYPACT_NINF -13
 static const yytype_int8 yypact[] =
 {
-     -13,    58,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -12,    22,    21,    16,    17,    18,    19,    23,    24,    25,
-      51,    54,    55,    56,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    88,    89,    90,    91,    92,    94,    95,    96,    97,
-      98,    99,   100,   101,   -13,   -13,   -13,   -13,   -13,   -13,
+     -13,    59,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
+     -12,    23,    22,    16,    17,    18,    19,    24,    25,    52,
+      55,    56,    57,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      89,    90,    91,    92,    93,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   -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,   102,   103,   104,   -13,
-     -13,   -13,   -13,   105,   106,   107,   -13,   -13,   -13,   -13,
+     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   105,   106,
+     107,   -13,   -13,   -13,   -13,   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,   -13,   -13,   -13,   -13,   -13
+     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13
 };
 
 /* YYPGOTO[NTERM-NUM].  */
@@ -799,7 +808,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,   -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
@@ -811,57 +820,59 @@ 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,   130,   131,   132,   133,
-      39,    40,    41,   134,   135,   136,    42,    43,    44,    45,
+      33,    34,    35,    36,    37,    38,   132,   133,   134,   135,
+      39,    40,    41,     0,   136,   137,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,     2,   123,
-     116,   137,   117,   118,   138,   139,   140,   124,   125,     3,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,     2,
+     125,   118,   138,   119,   120,   139,   140,   141,   126,   127,
+       3,   142,   143,   144,   145,   146,   147,   148,   149,   150,
      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,     4,   168,   169,
-     170,   171,   172,     5,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186
+     161,   162,   163,   164,   165,   166,   167,   168,     4,   169,
+     170,   171,   172,   173,     5,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189
 };
 
-static const yytype_uint8 yycheck[] =
+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,    10,    10,    48,    49,    50,    51,
+      42,    43,    44,    -1,    10,    10,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,     0,    38,
-      38,    10,    40,    41,    10,    10,    10,    46,    47,    11,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,     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,    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,    39,    10,    10,
-      10,    10,    10,    45,    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,    71,     0,    11,    39,    45,    72,    73,    76,    79,
-      74,    77,    80,    12,    13,    14,    15,    16,    17,    18,
+       0,    72,     0,    11,    39,    45,    73,    74,    77,    80,
+      75,    78,    81,    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,    75,    82,    83,    84,    85,    86,
+      66,    67,    68,    69,    70,    76,    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,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,    38,    40,    41,    78,
-     133,   134,   135,    38,    46,    47,    81,   136,   137,   138,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+     127,   128,   129,   130,   131,   132,   133,   134,    38,    40,
+      41,    79,   135,   136,   137,    38,    46,    47,    82,   138,
+     139,   140,    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)
@@ -1682,8 +1693,8 @@ yyreduce:
        }
     break;
 
-  case 61:
-#line 127 "util/configparser.y"
+  case 62:
+#line 128 "util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -1696,8 +1707,8 @@ yyreduce:
        }
     break;
 
-  case 67:
-#line 143 "util/configparser.y"
+  case 68:
+#line 144 "util/configparser.y"
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -1710,8 +1721,8 @@ yyreduce:
        }
     break;
 
-  case 73:
-#line 159 "util/configparser.y"
+  case 74:
+#line 160 "util/configparser.y"
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -1721,8 +1732,8 @@ yyreduce:
        }
     break;
 
-  case 74:
-#line 168 "util/configparser.y"
+  case 75:
+#line 169 "util/configparser.y"
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); 
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -1732,8 +1743,8 @@ yyreduce:
        }
     break;
 
-  case 75:
-#line 177 "util/configparser.y"
+  case 76:
+#line 178 "util/configparser.y"
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -1743,8 +1754,8 @@ yyreduce:
        }
     break;
 
-  case 76:
-#line 186 "util/configparser.y"
+  case 77:
+#line 187 "util/configparser.y"
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -1758,8 +1769,8 @@ yyreduce:
        }
     break;
 
-  case 77:
-#line 199 "util/configparser.y"
+  case 78:
+#line 200 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -1775,8 +1786,8 @@ yyreduce:
        }
     break;
 
-  case 78:
-#line 214 "util/configparser.y"
+  case 79:
+#line 215 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_port:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -1786,8 +1797,8 @@ yyreduce:
        }
     break;
 
-  case 79:
-#line 223 "util/configparser.y"
+  case 80:
+#line 224 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -1797,8 +1808,8 @@ yyreduce:
        }
     break;
 
-  case 80:
-#line 232 "util/configparser.y"
+  case 81:
+#line 233 "util/configparser.y"
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -1808,8 +1819,8 @@ yyreduce:
        }
     break;
 
-  case 81:
-#line 241 "util/configparser.y"
+  case 82:
+#line 242 "util/configparser.y"
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -1819,8 +1830,8 @@ yyreduce:
        }
     break;
 
-  case 82:
-#line 250 "util/configparser.y"
+  case 83:
+#line 251 "util/configparser.y"
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1830,8 +1841,8 @@ yyreduce:
        }
     break;
 
-  case 83:
-#line 259 "util/configparser.y"
+  case 84:
+#line 260 "util/configparser.y"
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1841,8 +1852,8 @@ yyreduce:
        }
     break;
 
-  case 84:
-#line 268 "util/configparser.y"
+  case 85:
+#line 269 "util/configparser.y"
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1852,8 +1863,8 @@ yyreduce:
        }
     break;
 
-  case 85:
-#line 277 "util/configparser.y"
+  case 86:
+#line 278 "util/configparser.y"
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1863,8 +1874,8 @@ yyreduce:
        }
     break;
 
-  case 86:
-#line 286 "util/configparser.y"
+  case 87:
+#line 287 "util/configparser.y"
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1879,8 +1890,8 @@ yyreduce:
        }
     break;
 
-  case 87:
-#line 300 "util/configparser.y"
+  case 88:
+#line 301 "util/configparser.y"
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->chrootdir);
@@ -1888,8 +1899,8 @@ yyreduce:
        }
     break;
 
-  case 88:
-#line 307 "util/configparser.y"
+  case 89:
+#line 308 "util/configparser.y"
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->username);
@@ -1897,8 +1908,8 @@ yyreduce:
        }
     break;
 
-  case 89:
-#line 314 "util/configparser.y"
+  case 90:
+#line 315 "util/configparser.y"
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->directory);
@@ -1906,8 +1917,8 @@ yyreduce:
        }
     break;
 
-  case 90:
-#line 321 "util/configparser.y"
+  case 91:
+#line 322 "util/configparser.y"
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->logfile);
@@ -1916,8 +1927,8 @@ yyreduce:
        }
     break;
 
-  case 91:
-#line 329 "util/configparser.y"
+  case 92:
+#line 330 "util/configparser.y"
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->pidfile);
@@ -1925,8 +1936,8 @@ yyreduce:
        }
     break;
 
-  case 92:
-#line 336 "util/configparser.y"
+  case 93:
+#line 337 "util/configparser.y"
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str)))
@@ -1934,8 +1945,8 @@ yyreduce:
        }
     break;
 
-  case 93:
-#line 343 "util/configparser.y"
+  case 94:
+#line 344 "util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -1944,8 +1955,8 @@ yyreduce:
        }
     break;
 
-  case 94:
-#line 351 "util/configparser.y"
+  case 95:
+#line 352 "util/configparser.y"
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
@@ -1954,8 +1965,8 @@ yyreduce:
        }
     break;
 
-  case 95:
-#line 359 "util/configparser.y"
+  case 96:
+#line 360 "util/configparser.y"
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str)))
@@ -1963,8 +1974,8 @@ yyreduce:
        }
     break;
 
-  case 96:
-#line 366 "util/configparser.y"
+  case 97:
+#line 367 "util/configparser.y"
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1974,8 +1985,8 @@ yyreduce:
        }
     break;
 
-  case 97:
-#line 375 "util/configparser.y"
+  case 98:
+#line 376 "util/configparser.y"
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -1985,8 +1996,8 @@ yyreduce:
        }
     break;
 
-  case 98:
-#line 384 "util/configparser.y"
+  case 99:
+#line 385 "util/configparser.y"
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->identity);
@@ -1994,8 +2005,8 @@ yyreduce:
        }
     break;
 
-  case 99:
-#line 391 "util/configparser.y"
+  case 100:
+#line 392 "util/configparser.y"
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->version);
@@ -2003,8 +2014,8 @@ yyreduce:
        }
     break;
 
-  case 100:
-#line 398 "util/configparser.y"
+  case 101:
+#line 399 "util/configparser.y"
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2016,8 +2027,8 @@ yyreduce:
        }
     break;
 
-  case 101:
-#line 409 "util/configparser.y"
+  case 102:
+#line 410 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2027,8 +2038,8 @@ yyreduce:
        }
     break;
 
-  case 102:
-#line 418 "util/configparser.y"
+  case 103:
+#line 419 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2042,8 +2053,8 @@ yyreduce:
        }
     break;
 
-  case 103:
-#line 431 "util/configparser.y"
+  case 104:
+#line 432 "util/configparser.y"
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2053,8 +2064,8 @@ yyreduce:
        }
     break;
 
-  case 104:
-#line 440 "util/configparser.y"
+  case 105:
+#line 441 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2064,8 +2075,8 @@ yyreduce:
        }
     break;
 
-  case 105:
-#line 449 "util/configparser.y"
+  case 106:
+#line 450 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2079,8 +2090,8 @@ yyreduce:
        }
     break;
 
-  case 106:
-#line 462 "util/configparser.y"
+  case 107:
+#line 463 "util/configparser.y"
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2090,8 +2101,8 @@ yyreduce:
        }
     break;
 
-  case 107:
-#line 471 "util/configparser.y"
+  case 108:
+#line 472 "util/configparser.y"
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2101,8 +2112,8 @@ yyreduce:
        }
     break;
 
-  case 108:
-#line 480 "util/configparser.y"
+  case 109:
+#line 481 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2112,8 +2123,8 @@ yyreduce:
        }
     break;
 
-  case 109:
-#line 489 "util/configparser.y"
+  case 110:
+#line 490 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2123,8 +2134,8 @@ yyreduce:
        }
     break;
 
-  case 110:
-#line 498 "util/configparser.y"
+  case 111:
+#line 499 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2138,8 +2149,8 @@ yyreduce:
        }
     break;
 
-  case 111:
-#line 511 "util/configparser.y"
+  case 112:
+#line 512 "util/configparser.y"
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->target_fetch_policy);
@@ -2147,8 +2158,8 @@ yyreduce:
        }
     break;
 
-  case 112:
-#line 518 "util/configparser.y"
+  case 113:
+#line 519 "util/configparser.y"
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2159,8 +2170,8 @@ yyreduce:
        }
     break;
 
-  case 113:
-#line 528 "util/configparser.y"
+  case 114:
+#line 529 "util/configparser.y"
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2171,8 +2182,8 @@ yyreduce:
        }
     break;
 
-  case 114:
-#line 538 "util/configparser.y"
+  case 115:
+#line 539 "util/configparser.y"
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2183,8 +2194,8 @@ yyreduce:
        }
     break;
 
-  case 115:
-#line 548 "util/configparser.y"
+  case 116:
+#line 549 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str)))
@@ -2192,8 +2203,20 @@ yyreduce:
        }
     break;
 
-  case 116:
-#line 555 "util/configparser.y"
+  case 117:
+#line 556 "util/configparser.y"
+    {
+               OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
+               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->donotquery_localhost = 
+                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+               free((yyvsp[(2) - (2)].str));
+       }
+    break;
+
+  case 118:
+#line 566 "util/configparser.y"
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->module_conf);
@@ -2201,8 +2224,8 @@ yyreduce:
        }
     break;
 
-  case 117:
-#line 562 "util/configparser.y"
+  case 119:
+#line 573 "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) {
@@ -2221,8 +2244,8 @@ yyreduce:
        }
     break;
 
-  case 118:
-#line 580 "util/configparser.y"
+  case 120:
+#line 591 "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)
@@ -2232,8 +2255,8 @@ yyreduce:
        }
     break;
 
-  case 119:
-#line 589 "util/configparser.y"
+  case 121:
+#line 600 "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)
@@ -2244,8 +2267,8 @@ yyreduce:
        }
     break;
 
-  case 120:
-#line 599 "util/configparser.y"
+  case 122:
+#line 610 "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)
@@ -2256,8 +2279,8 @@ yyreduce:
        }
     break;
 
-  case 121:
-#line 609 "util/configparser.y"
+  case 123:
+#line 620 "util/configparser.y"
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
@@ -2265,8 +2288,8 @@ yyreduce:
        }
     break;
 
-  case 122:
-#line 616 "util/configparser.y"
+  case 124:
+#line 627 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2276,8 +2299,8 @@ yyreduce:
        }
     break;
 
-  case 123:
-#line 625 "util/configparser.y"
+  case 125:
+#line 636 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2291,8 +2314,8 @@ yyreduce:
        }
     break;
 
-  case 124:
-#line 638 "util/configparser.y"
+  case 126:
+#line 649 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->stubs->name);
@@ -2300,8 +2323,8 @@ yyreduce:
        }
     break;
 
-  case 125:
-#line 645 "util/configparser.y"
+  case 127:
+#line 656 "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)))
@@ -2309,8 +2332,8 @@ yyreduce:
        }
     break;
 
-  case 126:
-#line 652 "util/configparser.y"
+  case 128:
+#line 663 "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)))
@@ -2318,8 +2341,8 @@ yyreduce:
        }
     break;
 
-  case 127:
-#line 659 "util/configparser.y"
+  case 129:
+#line 670 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->forwards->name);
@@ -2327,8 +2350,8 @@ yyreduce:
        }
     break;
 
-  case 128:
-#line 666 "util/configparser.y"
+  case 130:
+#line 677 "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)))
@@ -2336,8 +2359,8 @@ yyreduce:
        }
     break;
 
-  case 129:
-#line 673 "util/configparser.y"
+  case 131:
+#line 684 "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)))
@@ -2347,7 +2370,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2351 "util/configparser.c"
+#line 2374 "util/configparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2561,7 +2584,7 @@ yyreturn:
 }
 
 
-#line 679 "util/configparser.y"
+#line 690 "util/configparser.y"
 
 
 /* parse helper routines could be here */
index a4aa494225ec33e497e1510efe0f26d8a3059cab..3b75248e682a1149c5c03e1e5010b12276564827 100644 (file)
      VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 321,
      VAR_USE_SYSLOG = 322,
      VAR_OUTGOING_INTERFACE = 323,
-     VAR_ROOT_HINTS = 324
+     VAR_ROOT_HINTS = 324,
+     VAR_DO_NOT_QUERY_LOCALHOST = 325
    };
 #endif
 /* Tokens.  */
 #define VAR_USE_SYSLOG 322
 #define VAR_OUTGOING_INTERFACE 323
 #define VAR_ROOT_HINTS 324
+#define VAR_DO_NOT_QUERY_LOCALHOST 325
 
 
 
@@ -187,7 +189,7 @@ typedef union YYSTYPE
        char*   str;
 }
 /* Line 1489 of yacc.c.  */
-#line 191 "util/configparser.h"
+#line 193 "util/configparser.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index 9d4e769e41496f29a685b029e06cd55b54052312..b1408dd2131a4605381e2591aa4c363340eb2def 100644 (file)
@@ -85,7 +85,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_INCOMING_NUM_TCP VAR_MSG_BUFFER_SIZE VAR_KEY_CACHE_SIZE
 %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
+%token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -121,7 +121,8 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_incoming_num_tcp | server_msg_buffer_size | 
        server_key_cache_size | server_key_cache_slabs | 
        server_trusted_keys_file | server_val_nsec3_keysize_iterations |
-       server_use_syslog | server_outgoing_interface | server_root_hints
+       server_use_syslog | server_outgoing_interface | server_root_hints |
+       server_do_not_query_localhost
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -551,6 +552,16 @@ server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING
                        yyerror("out of memory");
        }
        ;
+server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING
+       {
+               OUTYY(("P(server_do_not_query_localhost:%s)\n", $2));
+               if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+                       yyerror("expected yes or no.");
+               else cfg_parser->cfg->donotquery_localhost = 
+                       (strcmp($2, "yes")==0);
+               free($2);
+       }
+       ;
 server_module_conf: VAR_MODULE_CONF STRING
        {
                OUTYY(("P(server_module_conf:%s)\n", $2));
index 9a1ea69486ae47bd4b030ac9802c69ddb72a620a..d9535c15249a6f43af4b4c25c4544d1e55a96bed 100644 (file)
@@ -335,6 +335,36 @@ sockaddr_cmp(struct sockaddr_storage* addr1, socklen_t len1,
        }
 }
 
+int
+sockaddr_cmp_addr(struct sockaddr_storage* addr1, socklen_t len1, 
+       struct sockaddr_storage* addr2, socklen_t len2)
+{
+       struct sockaddr_in* p1_in = (struct sockaddr_in*)addr1;
+       struct sockaddr_in* p2_in = (struct sockaddr_in*)addr2;
+       struct sockaddr_in6* p1_in6 = (struct sockaddr_in6*)addr1;
+       struct sockaddr_in6* p2_in6 = (struct sockaddr_in6*)addr2;
+       if(len1 < len2)
+               return -1;
+       if(len1 > len2)
+               return 1;
+       log_assert(len1 == len2);
+       if( p1_in->sin_family < p2_in->sin_family)
+               return -1;
+       if( p1_in->sin_family > p2_in->sin_family)
+               return 1;
+       log_assert( p1_in->sin_family == p2_in->sin_family );
+       /* compare ip4 */
+       if( p1_in->sin_family == AF_INET ) {
+               return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE);
+       } else if (p1_in6->sin6_family == AF_INET6) {
+               return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr, 
+                       INET6_SIZE);
+       } else {
+               /* eek unknown type, perform this comparison for sanity. */
+               return memcmp(addr1, addr2, len1);
+       }
+}
+
 int
 addr_is_ip6(struct sockaddr_storage* addr, socklen_t len)
 {
index c5b574e8888dd0f34a0edf710092279b591cfb41..a635a1045c32b117b3aac99434432c92f4840cc9 100644 (file)
@@ -199,6 +199,7 @@ void log_nametypeclass(enum verbosity_value v, const char* str,
 
 /**
  * Compare two sockaddrs. Imposes an ordering on the addresses.
+ * Compares address and port.
  * @param addr1: address 1.
  * @param len1: lengths of addr1.
  * @param addr2: address 2.
@@ -208,6 +209,17 @@ void log_nametypeclass(enum verbosity_value v, const char* str,
 int sockaddr_cmp(struct sockaddr_storage* addr1, socklen_t len1, 
        struct sockaddr_storage* addr2, socklen_t len2);
 
+/**
+ * Compare two sockaddrs. Compares address, not the port.
+ * @param addr1: address 1.
+ * @param len1: lengths of addr1.
+ * @param addr2: address 2.
+ * @param len2: lengths of addr2.
+ * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger.
+ */
+int sockaddr_cmp_addr(struct sockaddr_storage* addr1, socklen_t len1, 
+       struct sockaddr_storage* addr2, socklen_t len2);
+
 /**
  * Checkout address family.
  * @param addr: the sockaddr to examine.