]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Test for module-config "iterator"
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 1 Dec 2009 08:12:12 +0000 (08:12 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 1 Dec 2009 08:12:12 +0000 (08:12 +0000)
git-svn-id: file:///svn/unbound/trunk@1925 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
testdata/iter_mod.rpl [new file with mode: 0644]
util/configlexer.c

index efddaf1e6371c08dba8d9e09df82532a07aea99b..96d0ff7b777b591eea55df7b6ac45f6e778ceb5c 100644 (file)
@@ -1,3 +1,7 @@
+1 December 2009: Wouter
+       - Fix crash with module-config "iterator".
+       - Added unit test that has "iterator" module-config.
+
 30 November 2009: Wouter
        - bug#284: fix parse of # without end-of-line at end-of-file.
 
diff --git a/testdata/iter_mod.rpl b/testdata/iter_mod.rpl
new file mode 100644 (file)
index 0000000..f7dd43e
--- /dev/null
@@ -0,0 +1,121 @@
+; config options
+server:
+       target-fetch-policy: "0 0 0 0 0"
+       module-config: "iterator"
+
+stub-zone:
+       name: "."
+       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic iterative resolve without validator module
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+       ADDRESS 193.0.14.129 
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS        K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET.    IN      A       193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+       ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com.   IN NS   a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net.    IN      A       192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+       ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A  10.20.30.40
+SECTION AUTHORITY
+example.com.   IN NS   ns.example.com.
+SECTION ADDITIONAL
+ns.example.com.                IN      A       1.2.3.4
+ENTRY_END
+
+SCENARIO_END
index 6fc9c2798eb7edc5608ac97c879d9a1093a413d6..fe1b2fce9eb607b17ca891651a42d38667c40b5d 100644 (file)
@@ -1782,543 +1782,544 @@ case 2:
 YY_RULE_SETUP
 #line 126 "util/configlexer.lex"
 { 
+       /* note that flex makes the longest match and '.' is any but not nl */
        LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 128 "util/configlexer.lex"
+#line 129 "util/configlexer.lex"
 { YDVAR(0, VAR_SERVER) }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 129 "util/configlexer.lex"
+#line 130 "util/configlexer.lex"
 { YDVAR(1, VAR_NUM_THREADS) }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 130 "util/configlexer.lex"
+#line 131 "util/configlexer.lex"
 { YDVAR(1, VAR_VERBOSITY) }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 131 "util/configlexer.lex"
+#line 132 "util/configlexer.lex"
 { YDVAR(1, VAR_PORT) }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 132 "util/configlexer.lex"
+#line 133 "util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_RANGE) }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 133 "util/configlexer.lex"
+#line 134 "util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 134 "util/configlexer.lex"
+#line 135 "util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 135 "util/configlexer.lex"
+#line 136 "util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_NUM_TCP) }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 136 "util/configlexer.lex"
+#line 137 "util/configlexer.lex"
 { YDVAR(1, VAR_INCOMING_NUM_TCP) }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 137 "util/configlexer.lex"
+#line 138 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_IP4) }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 138 "util/configlexer.lex"
+#line 139 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_IP6) }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 139 "util/configlexer.lex"
+#line 140 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_UDP) }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 140 "util/configlexer.lex"
+#line 141 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_TCP) }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 141 "util/configlexer.lex"
+#line 142 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_DAEMONIZE) }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 142 "util/configlexer.lex"
+#line 143 "util/configlexer.lex"
 { YDVAR(1, VAR_INTERFACE) }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 143 "util/configlexer.lex"
+#line 144 "util/configlexer.lex"
 { YDVAR(1, VAR_OUTGOING_INTERFACE) }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 144 "util/configlexer.lex"
+#line 145 "util/configlexer.lex"
 { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 145 "util/configlexer.lex"
+#line 146 "util/configlexer.lex"
 { YDVAR(1, VAR_SO_RCVBUF) }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 146 "util/configlexer.lex"
+#line 147 "util/configlexer.lex"
 { YDVAR(1, VAR_CHROOT) }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 147 "util/configlexer.lex"
+#line 148 "util/configlexer.lex"
 { YDVAR(1, VAR_USERNAME) }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 148 "util/configlexer.lex"
+#line 149 "util/configlexer.lex"
 { YDVAR(1, VAR_DIRECTORY) }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 149 "util/configlexer.lex"
+#line 150 "util/configlexer.lex"
 { YDVAR(1, VAR_LOGFILE) }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 150 "util/configlexer.lex"
+#line 151 "util/configlexer.lex"
 { YDVAR(1, VAR_PIDFILE) }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 151 "util/configlexer.lex"
+#line 152 "util/configlexer.lex"
 { YDVAR(1, VAR_ROOT_HINTS) }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 152 "util/configlexer.lex"
+#line 153 "util/configlexer.lex"
 { YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 153 "util/configlexer.lex"
+#line 154 "util/configlexer.lex"
 { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 154 "util/configlexer.lex"
+#line 155 "util/configlexer.lex"
 { YDVAR(1, VAR_MSG_CACHE_SIZE) }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 155 "util/configlexer.lex"
+#line 156 "util/configlexer.lex"
 { YDVAR(1, VAR_MSG_CACHE_SLABS) }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 156 "util/configlexer.lex"
+#line 157 "util/configlexer.lex"
 { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 157 "util/configlexer.lex"
+#line 158 "util/configlexer.lex"
 { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 158 "util/configlexer.lex"
+#line 159 "util/configlexer.lex"
 { YDVAR(1, VAR_CACHE_MAX_TTL) }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 159 "util/configlexer.lex"
+#line 160 "util/configlexer.lex"
 { YDVAR(1, VAR_CACHE_MIN_TTL) }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 160 "util/configlexer.lex"
+#line 161 "util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_HOST_TTL) }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 161 "util/configlexer.lex"
+#line 162 "util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_LAME_TTL) }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 162 "util/configlexer.lex"
+#line 163 "util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 163 "util/configlexer.lex"
+#line 164 "util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 164 "util/configlexer.lex"
+#line 165 "util/configlexer.lex"
 { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 165 "util/configlexer.lex"
+#line 166 "util/configlexer.lex"
 { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 166 "util/configlexer.lex"
+#line 167 "util/configlexer.lex"
 { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 167 "util/configlexer.lex"
+#line 168 "util/configlexer.lex"
 { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 168 "util/configlexer.lex"
+#line 169 "util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 169 "util/configlexer.lex"
+#line 170 "util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 170 "util/configlexer.lex"
+#line 171 "util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_GLUE) }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 171 "util/configlexer.lex"
+#line 172 "util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_DNNSEC_STRIPPED) }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 172 "util/configlexer.lex"
+#line 173 "util/configlexer.lex"
 { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 173 "util/configlexer.lex"
+#line 174 "util/configlexer.lex"
 { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 174 "util/configlexer.lex"
+#line 175 "util/configlexer.lex"
 { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 175 "util/configlexer.lex"
+#line 176 "util/configlexer.lex"
 { YDVAR(1, VAR_PRIVATE_ADDRESS) }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 176 "util/configlexer.lex"
+#line 177 "util/configlexer.lex"
 { YDVAR(1, VAR_PRIVATE_DOMAIN) }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 177 "util/configlexer.lex"
+#line 178 "util/configlexer.lex"
 { YDVAR(0, VAR_STUB_ZONE) }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 178 "util/configlexer.lex"
+#line 179 "util/configlexer.lex"
 { YDVAR(1, VAR_NAME) }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 179 "util/configlexer.lex"
+#line 180 "util/configlexer.lex"
 { YDVAR(1, VAR_STUB_ADDR) }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 180 "util/configlexer.lex"
+#line 181 "util/configlexer.lex"
 { YDVAR(1, VAR_STUB_HOST) }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 181 "util/configlexer.lex"
+#line 182 "util/configlexer.lex"
 { YDVAR(1, VAR_STUB_PRIME) }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 182 "util/configlexer.lex"
+#line 183 "util/configlexer.lex"
 { YDVAR(0, VAR_FORWARD_ZONE) }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 183 "util/configlexer.lex"
+#line 184 "util/configlexer.lex"
 { YDVAR(1, VAR_FORWARD_ADDR) }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 184 "util/configlexer.lex"
+#line 185 "util/configlexer.lex"
 { YDVAR(1, VAR_FORWARD_HOST) }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 185 "util/configlexer.lex"
+#line 186 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 186 "util/configlexer.lex"
+#line 187 "util/configlexer.lex"
 { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 187 "util/configlexer.lex"
+#line 188 "util/configlexer.lex"
 { YDVAR(2, VAR_ACCESS_CONTROL) }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 188 "util/configlexer.lex"
+#line 189 "util/configlexer.lex"
 { YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 189 "util/configlexer.lex"
+#line 190 "util/configlexer.lex"
 { YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 190 "util/configlexer.lex"
+#line 191 "util/configlexer.lex"
 { YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 191 "util/configlexer.lex"
+#line 192 "util/configlexer.lex"
 { YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 192 "util/configlexer.lex"
+#line 193 "util/configlexer.lex"
 { YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 193 "util/configlexer.lex"
+#line 194 "util/configlexer.lex"
 { YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 194 "util/configlexer.lex"
+#line 195 "util/configlexer.lex"
 { YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 195 "util/configlexer.lex"
+#line 196 "util/configlexer.lex"
 { YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 196 "util/configlexer.lex"
+#line 197 "util/configlexer.lex"
 { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 197 "util/configlexer.lex"
+#line 198 "util/configlexer.lex"
 { YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 198 "util/configlexer.lex"
+#line 199 "util/configlexer.lex"
 { YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 199 "util/configlexer.lex"
+#line 200 "util/configlexer.lex"
 { YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 200 "util/configlexer.lex"
+#line 201 "util/configlexer.lex"
 { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 201 "util/configlexer.lex"
+#line 202 "util/configlexer.lex"
 { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 202 "util/configlexer.lex"
+#line 203 "util/configlexer.lex"
 { YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 203 "util/configlexer.lex"
+#line 204 "util/configlexer.lex"
 { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 204 "util/configlexer.lex"
+#line 205 "util/configlexer.lex"
 { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 205 "util/configlexer.lex"
+#line 206 "util/configlexer.lex"
 { YDVAR(1, VAR_VAL_LOG_LEVEL) }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 206 "util/configlexer.lex"
+#line 207 "util/configlexer.lex"
 { YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 207 "util/configlexer.lex"
+#line 208 "util/configlexer.lex"
 { YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 208 "util/configlexer.lex"
+#line 209 "util/configlexer.lex"
 { YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 209 "util/configlexer.lex"
+#line 210 "util/configlexer.lex"
 { 
                                  YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 211 "util/configlexer.lex"
+#line 212 "util/configlexer.lex"
 { YDVAR(1, VAR_ADD_HOLDDOWN) }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 212 "util/configlexer.lex"
+#line 213 "util/configlexer.lex"
 { YDVAR(1, VAR_DEL_HOLDDOWN) }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 213 "util/configlexer.lex"
+#line 214 "util/configlexer.lex"
 { YDVAR(1, VAR_KEEP_MISSING) }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 214 "util/configlexer.lex"
+#line 215 "util/configlexer.lex"
 { YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 215 "util/configlexer.lex"
+#line 216 "util/configlexer.lex"
 { YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 216 "util/configlexer.lex"
+#line 217 "util/configlexer.lex"
 { YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 217 "util/configlexer.lex"
+#line 218 "util/configlexer.lex"
 { YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 218 "util/configlexer.lex"
+#line 219 "util/configlexer.lex"
 { YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 219 "util/configlexer.lex"
+#line 220 "util/configlexer.lex"
 { YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 220 "util/configlexer.lex"
+#line 221 "util/configlexer.lex"
 { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 221 "util/configlexer.lex"
+#line 222 "util/configlexer.lex"
 { YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 222 "util/configlexer.lex"
+#line 223 "util/configlexer.lex"
 { YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 223 "util/configlexer.lex"
+#line 224 "util/configlexer.lex"
 { YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 224 "util/configlexer.lex"
+#line 225 "util/configlexer.lex"
 { YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 225 "util/configlexer.lex"
+#line 226 "util/configlexer.lex"
 { YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 226 "util/configlexer.lex"
+#line 227 "util/configlexer.lex"
 { YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 227 "util/configlexer.lex"
+#line 228 "util/configlexer.lex"
 { YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 228 "util/configlexer.lex"
+#line 229 "util/configlexer.lex"
 { YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 229 "util/configlexer.lex"
+#line 230 "util/configlexer.lex"
 { YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 230 "util/configlexer.lex"
+#line 231 "util/configlexer.lex"
 { YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 231 "util/configlexer.lex"
+#line 232 "util/configlexer.lex"
 { YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 232 "util/configlexer.lex"
+#line 233 "util/configlexer.lex"
 { YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 107:
 /* rule 107 can match eol */
 YY_RULE_SETUP
-#line 233 "util/configlexer.lex"
+#line 234 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
 case 108:
 YY_RULE_SETUP
-#line 236 "util/configlexer.lex"
+#line 237 "util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 237 "util/configlexer.lex"
+#line 238 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2327,19 +2328,19 @@ case YY_STATE_EOF(quotedstring):
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 242 "util/configlexer.lex"
+#line 243 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 110:
 /* rule 110 can match eol */
 YY_RULE_SETUP
-#line 243 "util/configlexer.lex"
+#line 244 "util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 245 "util/configlexer.lex"
+#line 246 "util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2354,11 +2355,11 @@ YY_RULE_SETUP
 /* Single Quoted strings. Strip leading and ending quotes */
 case 112:
 YY_RULE_SETUP
-#line 257 "util/configlexer.lex"
+#line 258 "util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 258 "util/configlexer.lex"
+#line 259 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2367,19 +2368,19 @@ case YY_STATE_EOF(singlequotedstr):
        YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 263 "util/configlexer.lex"
+#line 264 "util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 114:
 /* rule 114 can match eol */
 YY_RULE_SETUP
-#line 264 "util/configlexer.lex"
+#line 265 "util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 266 "util/configlexer.lex"
+#line 267 "util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -2394,12 +2395,12 @@ YY_RULE_SETUP
 /* include: directive */
 case 116:
 YY_RULE_SETUP
-#line 278 "util/configlexer.lex"
+#line 279 "util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 280 "util/configlexer.lex"
+#line 281 "util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
@@ -2407,23 +2408,23 @@ case YY_STATE_EOF(include):
        YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 284 "util/configlexer.lex"
+#line 285 "util/configlexer.lex"
 { LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 118:
 /* rule 118 can match eol */
 YY_RULE_SETUP
-#line 285 "util/configlexer.lex"
+#line 286 "util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 286 "util/configlexer.lex"
+#line 287 "util/configlexer.lex"
 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 287 "util/configlexer.lex"
+#line 288 "util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include(yytext);
@@ -2431,7 +2432,7 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 292 "util/configlexer.lex"
+#line 293 "util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
@@ -2439,19 +2440,19 @@ case YY_STATE_EOF(include_quoted):
        YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 296 "util/configlexer.lex"
+#line 297 "util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
 case 122:
 /* rule 122 can match eol */
 YY_RULE_SETUP
-#line 297 "util/configlexer.lex"
+#line 298 "util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 299 "util/configlexer.lex"
+#line 300 "util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -2461,7 +2462,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 305 "util/configlexer.lex"
+#line 306 "util/configlexer.lex"
 {
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
        if (config_include_stack_ptr == 0) {
@@ -2474,31 +2475,31 @@ case YY_STATE_EOF(val):
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 315 "util/configlexer.lex"
+#line 316 "util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 319 "util/configlexer.lex"
+#line 320 "util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 323 "util/configlexer.lex"
+#line 324 "util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 327 "util/configlexer.lex"
+#line 328 "util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 2500 "<stdout>"
+#line 2501 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3457,7 +3458,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 327 "util/configlexer.lex"
+#line 328 "util/configlexer.lex"