]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix to simplify empty string checking from Michael McConville.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 14 Jan 2016 08:28:46 +0000 (08:28 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 14 Jan 2016 08:28:46 +0000 (08:28 +0000)
git-svn-id: file:///svn/unbound/trunk@3600 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
sldns/str2wire.c
testcode/testbound.c
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y

index 8e1d9e46bcb0e99c1f0da8b88f2682117a2edbdc..f5dd3e8e07bd5127755796024037255d225a26f7 100644 (file)
@@ -1,3 +1,6 @@
+14 January 2016: Wouter
+       - Fix to simplify empty string checking from Michael McConville.
+
 12 January 2016: Wouter
        - Fix #734: Do not log an error when the PID file cannot be chown'ed.
          Patch from Simon Deziel.
index 8cda8c750fb9b58b4aae0a5b199ee05e30644f12..c54108332d15ae911ffe810341058e32e6602dd3 100644 (file)
@@ -204,7 +204,7 @@ rrinternal_get_owner(sldns_buffer* strbuf, uint8_t* rr, size_t* len,
                        return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL,
                                sldns_buffer_position(strbuf));
                memmove(rr, tocopy, *dname_len);
-       } else if(strlen(token) == 0) {
+       } else if(*token == '\0') {
                /* no ownername was given, try prev, if that fails
                 * origin, else default to root */
                uint8_t* tocopy;
@@ -1091,7 +1091,7 @@ int sldns_str2wire_apl_buf(const char* str, uint8_t* rd, size_t* len)
        uint8_t prefix;
        size_t i;
 
-       if(strlen(my_str) == 0) {
+       if(*my_str == '\0') {
                /* empty APL element, no data, no string */
                *len = 0;
                return LDNS_WIREPARSE_ERR_OK;
index d908150a017b7a63984bd94ae55e220cd6cb3394..674b39ac8942caf97a8ac52c7699c4f0fdd7c0e1 100644 (file)
@@ -142,7 +142,7 @@ spool_auto_file(FILE* in, int* lineno, FILE* cfg, char* id)
        /* find filename for new file */
        while(isspace((unsigned char)*id))
                id++;
-       if(strlen(id)==0
+       if(*id == '\0'
                fatal_exit("AUTROTRUST_FILE must have id, line %d", *lineno);
        id[strlen(id)-1]=0; /* remove newline */
        fake_temp_file("_auto_", id, line, sizeof(line));
index 63ac1920d4d133eb316f5111747fce355664a1db..5949545f59a6b4e9d9c06759a19187b2e1b5212b 100644 (file)
@@ -10,7 +10,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_SUBMINOR_VERSION 39
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -169,6 +169,7 @@ extern FILE *yyin, *yyout;
 #define EOB_ACT_LAST_MATCH 2
 
     #define YY_LESS_LINENO(n)
+    #define YY_LINENO_REWIND_TO(ptr)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -1890,7 +1891,7 @@ static void config_start_include(const char* filename)
                ub_c_error_msg("too many include files");
                return;
        }
-       if(strlen(filename) == 0) {
+       if(*filename == '\0') {
                ub_c_error_msg("empty include file name");
                return;
        }
@@ -2010,7 +2011,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2012 "<stdout>"
+#line 2013 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2195,10 +2196,6 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
-#line 201 "./util/configlexer.lex"
-
-#line 2199 "<stdout>"
-
        if ( !(yy_init) )
                {
                (yy_init) = 1;
@@ -2225,6 +2222,11 @@ YY_DECL
                yy_load_buffer_state( );
                }
 
+       {
+#line 201 "./util/configlexer.lex"
+
+#line 2227 "<stdout>"
+
        while ( 1 )             /* loops until end-of-file is reached */
                {
                (yy_more_len) = 0;
@@ -2247,7 +2249,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -3275,7 +3277,7 @@ YY_RULE_SETUP
 #line 464 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3277 "<stdout>"
+#line 3279 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3404,6 +3406,7 @@ ECHO;
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
+       } /* end of user's declarations */
 } /* end of yylex */
 
 /* yy_get_next_buffer - try to read in a new buffer
index e0ea425487bea59d08168bfd05168a41d7cedae5..123d9ff5b16b75a97db42619441aea55608277c0 100644 (file)
@@ -63,7 +63,7 @@ static void config_start_include(const char* filename)
                ub_c_error_msg("too many include files");
                return;
        }
-       if(strlen(filename) == 0) {
+       if(*filename == '\0') {
                ub_c_error_msg("empty include file name");
                return;
        }
index 180733db0e93029937b235de95569a80edb0486d..6841a9e045511c9faf8005d30b329a72258c40f5 100644 (file)
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.7"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -62,8 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-/* Line 371 of yacc.c  */
-#line 38 "./util/configparser.y"
+#line 38 "./util/configparser.y" /* yacc.c:339  */
 
 #include "config.h"
 
@@ -90,14 +89,13 @@ extern struct config_parser_state* cfg_parser;
 #endif
 
 
-/* Line 371 of yacc.c  */
-#line 95 "util/configparser.c"
+#line 93 "util/configparser.c" /* yacc.c:339  */
 
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULL 0
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
@@ -113,7 +111,7 @@ extern struct config_parser_state* cfg_parser;
    by #include "configparser.h".  */
 #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
 # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
-/* Enabling traces.  */
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
@@ -121,175 +119,174 @@ extern struct config_parser_state* cfg_parser;
 extern int yydebug;
 #endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     SPACE = 258,
-     LETTER = 259,
-     NEWLINE = 260,
-     COMMENT = 261,
-     COLON = 262,
-     ANY = 263,
-     ZONESTR = 264,
-     STRING_ARG = 265,
-     VAR_SERVER = 266,
-     VAR_VERBOSITY = 267,
-     VAR_NUM_THREADS = 268,
-     VAR_PORT = 269,
-     VAR_OUTGOING_RANGE = 270,
-     VAR_INTERFACE = 271,
-     VAR_DO_IP4 = 272,
-     VAR_DO_IP6 = 273,
-     VAR_DO_UDP = 274,
-     VAR_DO_TCP = 275,
-     VAR_TCP_MSS = 276,
-     VAR_OUTGOING_TCP_MSS = 277,
-     VAR_CHROOT = 278,
-     VAR_USERNAME = 279,
-     VAR_DIRECTORY = 280,
-     VAR_LOGFILE = 281,
-     VAR_PIDFILE = 282,
-     VAR_MSG_CACHE_SIZE = 283,
-     VAR_MSG_CACHE_SLABS = 284,
-     VAR_NUM_QUERIES_PER_THREAD = 285,
-     VAR_RRSET_CACHE_SIZE = 286,
-     VAR_RRSET_CACHE_SLABS = 287,
-     VAR_OUTGOING_NUM_TCP = 288,
-     VAR_INFRA_HOST_TTL = 289,
-     VAR_INFRA_LAME_TTL = 290,
-     VAR_INFRA_CACHE_SLABS = 291,
-     VAR_INFRA_CACHE_NUMHOSTS = 292,
-     VAR_INFRA_CACHE_LAME_SIZE = 293,
-     VAR_NAME = 294,
-     VAR_STUB_ZONE = 295,
-     VAR_STUB_HOST = 296,
-     VAR_STUB_ADDR = 297,
-     VAR_TARGET_FETCH_POLICY = 298,
-     VAR_HARDEN_SHORT_BUFSIZE = 299,
-     VAR_HARDEN_LARGE_QUERIES = 300,
-     VAR_FORWARD_ZONE = 301,
-     VAR_FORWARD_HOST = 302,
-     VAR_FORWARD_ADDR = 303,
-     VAR_DO_NOT_QUERY_ADDRESS = 304,
-     VAR_HIDE_IDENTITY = 305,
-     VAR_HIDE_VERSION = 306,
-     VAR_IDENTITY = 307,
-     VAR_VERSION = 308,
-     VAR_HARDEN_GLUE = 309,
-     VAR_MODULE_CONF = 310,
-     VAR_TRUST_ANCHOR_FILE = 311,
-     VAR_TRUST_ANCHOR = 312,
-     VAR_VAL_OVERRIDE_DATE = 313,
-     VAR_BOGUS_TTL = 314,
-     VAR_VAL_CLEAN_ADDITIONAL = 315,
-     VAR_VAL_PERMISSIVE_MODE = 316,
-     VAR_INCOMING_NUM_TCP = 317,
-     VAR_MSG_BUFFER_SIZE = 318,
-     VAR_KEY_CACHE_SIZE = 319,
-     VAR_KEY_CACHE_SLABS = 320,
-     VAR_TRUSTED_KEYS_FILE = 321,
-     VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 322,
-     VAR_USE_SYSLOG = 323,
-     VAR_OUTGOING_INTERFACE = 324,
-     VAR_ROOT_HINTS = 325,
-     VAR_DO_NOT_QUERY_LOCALHOST = 326,
-     VAR_CACHE_MAX_TTL = 327,
-     VAR_HARDEN_DNSSEC_STRIPPED = 328,
-     VAR_ACCESS_CONTROL = 329,
-     VAR_LOCAL_ZONE = 330,
-     VAR_LOCAL_DATA = 331,
-     VAR_INTERFACE_AUTOMATIC = 332,
-     VAR_STATISTICS_INTERVAL = 333,
-     VAR_DO_DAEMONIZE = 334,
-     VAR_USE_CAPS_FOR_ID = 335,
-     VAR_STATISTICS_CUMULATIVE = 336,
-     VAR_OUTGOING_PORT_PERMIT = 337,
-     VAR_OUTGOING_PORT_AVOID = 338,
-     VAR_DLV_ANCHOR_FILE = 339,
-     VAR_DLV_ANCHOR = 340,
-     VAR_NEG_CACHE_SIZE = 341,
-     VAR_HARDEN_REFERRAL_PATH = 342,
-     VAR_PRIVATE_ADDRESS = 343,
-     VAR_PRIVATE_DOMAIN = 344,
-     VAR_REMOTE_CONTROL = 345,
-     VAR_CONTROL_ENABLE = 346,
-     VAR_CONTROL_INTERFACE = 347,
-     VAR_CONTROL_PORT = 348,
-     VAR_SERVER_KEY_FILE = 349,
-     VAR_SERVER_CERT_FILE = 350,
-     VAR_CONTROL_KEY_FILE = 351,
-     VAR_CONTROL_CERT_FILE = 352,
-     VAR_CONTROL_USE_CERT = 353,
-     VAR_EXTENDED_STATISTICS = 354,
-     VAR_LOCAL_DATA_PTR = 355,
-     VAR_JOSTLE_TIMEOUT = 356,
-     VAR_STUB_PRIME = 357,
-     VAR_UNWANTED_REPLY_THRESHOLD = 358,
-     VAR_LOG_TIME_ASCII = 359,
-     VAR_DOMAIN_INSECURE = 360,
-     VAR_PYTHON = 361,
-     VAR_PYTHON_SCRIPT = 362,
-     VAR_VAL_SIG_SKEW_MIN = 363,
-     VAR_VAL_SIG_SKEW_MAX = 364,
-     VAR_CACHE_MIN_TTL = 365,
-     VAR_VAL_LOG_LEVEL = 366,
-     VAR_AUTO_TRUST_ANCHOR_FILE = 367,
-     VAR_KEEP_MISSING = 368,
-     VAR_ADD_HOLDDOWN = 369,
-     VAR_DEL_HOLDDOWN = 370,
-     VAR_SO_RCVBUF = 371,
-     VAR_EDNS_BUFFER_SIZE = 372,
-     VAR_PREFETCH = 373,
-     VAR_PREFETCH_KEY = 374,
-     VAR_SO_SNDBUF = 375,
-     VAR_SO_REUSEPORT = 376,
-     VAR_HARDEN_BELOW_NXDOMAIN = 377,
-     VAR_IGNORE_CD_FLAG = 378,
-     VAR_LOG_QUERIES = 379,
-     VAR_TCP_UPSTREAM = 380,
-     VAR_SSL_UPSTREAM = 381,
-     VAR_SSL_SERVICE_KEY = 382,
-     VAR_SSL_SERVICE_PEM = 383,
-     VAR_SSL_PORT = 384,
-     VAR_FORWARD_FIRST = 385,
-     VAR_STUB_FIRST = 386,
-     VAR_MINIMAL_RESPONSES = 387,
-     VAR_RRSET_ROUNDROBIN = 388,
-     VAR_MAX_UDP_SIZE = 389,
-     VAR_DELAY_CLOSE = 390,
-     VAR_UNBLOCK_LAN_ZONES = 391,
-     VAR_INFRA_CACHE_MIN_RTT = 392,
-     VAR_DNS64_PREFIX = 393,
-     VAR_DNS64_SYNTHALL = 394,
-     VAR_DNSTAP = 395,
-     VAR_DNSTAP_ENABLE = 396,
-     VAR_DNSTAP_SOCKET_PATH = 397,
-     VAR_DNSTAP_SEND_IDENTITY = 398,
-     VAR_DNSTAP_SEND_VERSION = 399,
-     VAR_DNSTAP_IDENTITY = 400,
-     VAR_DNSTAP_VERSION = 401,
-     VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 402,
-     VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 403,
-     VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 404,
-     VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 405,
-     VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 406,
-     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 407,
-     VAR_HARDEN_ALGO_DOWNGRADE = 408,
-     VAR_IP_TRANSPARENT = 409,
-     VAR_RATELIMIT = 410,
-     VAR_RATELIMIT_SLABS = 411,
-     VAR_RATELIMIT_SIZE = 412,
-     VAR_RATELIMIT_FOR_DOMAIN = 413,
-     VAR_RATELIMIT_BELOW_DOMAIN = 414,
-     VAR_RATELIMIT_FACTOR = 415,
-     VAR_CAPS_WHITELIST = 416,
-     VAR_CACHE_MAX_NEGATIVE_TTL = 417,
-     VAR_PERMIT_SMALL_HOLDDOWN = 418,
-     VAR_QNAME_MINIMISATION = 419
-   };
+  enum yytokentype
+  {
+    SPACE = 258,
+    LETTER = 259,
+    NEWLINE = 260,
+    COMMENT = 261,
+    COLON = 262,
+    ANY = 263,
+    ZONESTR = 264,
+    STRING_ARG = 265,
+    VAR_SERVER = 266,
+    VAR_VERBOSITY = 267,
+    VAR_NUM_THREADS = 268,
+    VAR_PORT = 269,
+    VAR_OUTGOING_RANGE = 270,
+    VAR_INTERFACE = 271,
+    VAR_DO_IP4 = 272,
+    VAR_DO_IP6 = 273,
+    VAR_DO_UDP = 274,
+    VAR_DO_TCP = 275,
+    VAR_TCP_MSS = 276,
+    VAR_OUTGOING_TCP_MSS = 277,
+    VAR_CHROOT = 278,
+    VAR_USERNAME = 279,
+    VAR_DIRECTORY = 280,
+    VAR_LOGFILE = 281,
+    VAR_PIDFILE = 282,
+    VAR_MSG_CACHE_SIZE = 283,
+    VAR_MSG_CACHE_SLABS = 284,
+    VAR_NUM_QUERIES_PER_THREAD = 285,
+    VAR_RRSET_CACHE_SIZE = 286,
+    VAR_RRSET_CACHE_SLABS = 287,
+    VAR_OUTGOING_NUM_TCP = 288,
+    VAR_INFRA_HOST_TTL = 289,
+    VAR_INFRA_LAME_TTL = 290,
+    VAR_INFRA_CACHE_SLABS = 291,
+    VAR_INFRA_CACHE_NUMHOSTS = 292,
+    VAR_INFRA_CACHE_LAME_SIZE = 293,
+    VAR_NAME = 294,
+    VAR_STUB_ZONE = 295,
+    VAR_STUB_HOST = 296,
+    VAR_STUB_ADDR = 297,
+    VAR_TARGET_FETCH_POLICY = 298,
+    VAR_HARDEN_SHORT_BUFSIZE = 299,
+    VAR_HARDEN_LARGE_QUERIES = 300,
+    VAR_FORWARD_ZONE = 301,
+    VAR_FORWARD_HOST = 302,
+    VAR_FORWARD_ADDR = 303,
+    VAR_DO_NOT_QUERY_ADDRESS = 304,
+    VAR_HIDE_IDENTITY = 305,
+    VAR_HIDE_VERSION = 306,
+    VAR_IDENTITY = 307,
+    VAR_VERSION = 308,
+    VAR_HARDEN_GLUE = 309,
+    VAR_MODULE_CONF = 310,
+    VAR_TRUST_ANCHOR_FILE = 311,
+    VAR_TRUST_ANCHOR = 312,
+    VAR_VAL_OVERRIDE_DATE = 313,
+    VAR_BOGUS_TTL = 314,
+    VAR_VAL_CLEAN_ADDITIONAL = 315,
+    VAR_VAL_PERMISSIVE_MODE = 316,
+    VAR_INCOMING_NUM_TCP = 317,
+    VAR_MSG_BUFFER_SIZE = 318,
+    VAR_KEY_CACHE_SIZE = 319,
+    VAR_KEY_CACHE_SLABS = 320,
+    VAR_TRUSTED_KEYS_FILE = 321,
+    VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 322,
+    VAR_USE_SYSLOG = 323,
+    VAR_OUTGOING_INTERFACE = 324,
+    VAR_ROOT_HINTS = 325,
+    VAR_DO_NOT_QUERY_LOCALHOST = 326,
+    VAR_CACHE_MAX_TTL = 327,
+    VAR_HARDEN_DNSSEC_STRIPPED = 328,
+    VAR_ACCESS_CONTROL = 329,
+    VAR_LOCAL_ZONE = 330,
+    VAR_LOCAL_DATA = 331,
+    VAR_INTERFACE_AUTOMATIC = 332,
+    VAR_STATISTICS_INTERVAL = 333,
+    VAR_DO_DAEMONIZE = 334,
+    VAR_USE_CAPS_FOR_ID = 335,
+    VAR_STATISTICS_CUMULATIVE = 336,
+    VAR_OUTGOING_PORT_PERMIT = 337,
+    VAR_OUTGOING_PORT_AVOID = 338,
+    VAR_DLV_ANCHOR_FILE = 339,
+    VAR_DLV_ANCHOR = 340,
+    VAR_NEG_CACHE_SIZE = 341,
+    VAR_HARDEN_REFERRAL_PATH = 342,
+    VAR_PRIVATE_ADDRESS = 343,
+    VAR_PRIVATE_DOMAIN = 344,
+    VAR_REMOTE_CONTROL = 345,
+    VAR_CONTROL_ENABLE = 346,
+    VAR_CONTROL_INTERFACE = 347,
+    VAR_CONTROL_PORT = 348,
+    VAR_SERVER_KEY_FILE = 349,
+    VAR_SERVER_CERT_FILE = 350,
+    VAR_CONTROL_KEY_FILE = 351,
+    VAR_CONTROL_CERT_FILE = 352,
+    VAR_CONTROL_USE_CERT = 353,
+    VAR_EXTENDED_STATISTICS = 354,
+    VAR_LOCAL_DATA_PTR = 355,
+    VAR_JOSTLE_TIMEOUT = 356,
+    VAR_STUB_PRIME = 357,
+    VAR_UNWANTED_REPLY_THRESHOLD = 358,
+    VAR_LOG_TIME_ASCII = 359,
+    VAR_DOMAIN_INSECURE = 360,
+    VAR_PYTHON = 361,
+    VAR_PYTHON_SCRIPT = 362,
+    VAR_VAL_SIG_SKEW_MIN = 363,
+    VAR_VAL_SIG_SKEW_MAX = 364,
+    VAR_CACHE_MIN_TTL = 365,
+    VAR_VAL_LOG_LEVEL = 366,
+    VAR_AUTO_TRUST_ANCHOR_FILE = 367,
+    VAR_KEEP_MISSING = 368,
+    VAR_ADD_HOLDDOWN = 369,
+    VAR_DEL_HOLDDOWN = 370,
+    VAR_SO_RCVBUF = 371,
+    VAR_EDNS_BUFFER_SIZE = 372,
+    VAR_PREFETCH = 373,
+    VAR_PREFETCH_KEY = 374,
+    VAR_SO_SNDBUF = 375,
+    VAR_SO_REUSEPORT = 376,
+    VAR_HARDEN_BELOW_NXDOMAIN = 377,
+    VAR_IGNORE_CD_FLAG = 378,
+    VAR_LOG_QUERIES = 379,
+    VAR_TCP_UPSTREAM = 380,
+    VAR_SSL_UPSTREAM = 381,
+    VAR_SSL_SERVICE_KEY = 382,
+    VAR_SSL_SERVICE_PEM = 383,
+    VAR_SSL_PORT = 384,
+    VAR_FORWARD_FIRST = 385,
+    VAR_STUB_FIRST = 386,
+    VAR_MINIMAL_RESPONSES = 387,
+    VAR_RRSET_ROUNDROBIN = 388,
+    VAR_MAX_UDP_SIZE = 389,
+    VAR_DELAY_CLOSE = 390,
+    VAR_UNBLOCK_LAN_ZONES = 391,
+    VAR_INFRA_CACHE_MIN_RTT = 392,
+    VAR_DNS64_PREFIX = 393,
+    VAR_DNS64_SYNTHALL = 394,
+    VAR_DNSTAP = 395,
+    VAR_DNSTAP_ENABLE = 396,
+    VAR_DNSTAP_SOCKET_PATH = 397,
+    VAR_DNSTAP_SEND_IDENTITY = 398,
+    VAR_DNSTAP_SEND_VERSION = 399,
+    VAR_DNSTAP_IDENTITY = 400,
+    VAR_DNSTAP_VERSION = 401,
+    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 402,
+    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 403,
+    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 404,
+    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 405,
+    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 406,
+    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 407,
+    VAR_HARDEN_ALGO_DOWNGRADE = 408,
+    VAR_IP_TRANSPARENT = 409,
+    VAR_RATELIMIT = 410,
+    VAR_RATELIMIT_SLABS = 411,
+    VAR_RATELIMIT_SIZE = 412,
+    VAR_RATELIMIT_FOR_DOMAIN = 413,
+    VAR_RATELIMIT_BELOW_DOMAIN = 414,
+    VAR_RATELIMIT_FACTOR = 415,
+    VAR_CAPS_WHITELIST = 416,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 417,
+    VAR_PERMIT_SMALL_HOLDDOWN = 418,
+    VAR_QNAME_MINIMISATION = 419
+  };
 #endif
 /* Tokens.  */
 #define SPACE 258
@@ -455,47 +452,33 @@ extern int yydebug;
 #define VAR_PERMIT_SMALL_HOLDDOWN 418
 #define VAR_QNAME_MINIMISATION 419
 
-
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+
+union YYSTYPE
 {
-/* Line 387 of yacc.c  */
-#line 64 "./util/configparser.y"
+#line 64 "./util/configparser.y" /* yacc.c:355  */
 
        char*   str;
 
+#line 465 "util/configparser.c" /* yacc.c:355  */
+};
 
-/* Line 387 of yacc.c  */
-#line 471 "util/configparser.c"
-} YYSTYPE;
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
+
 extern YYSTYPE yylval;
 
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
 
 #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 
-/* Line 390 of yacc.c  */
-#line 499 "util/configparser.c"
+#line 482 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -509,11 +492,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -533,8 +513,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -556,6 +535,33 @@ typedef short int yytype_int16;
 # endif
 #endif
 
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# endif
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -563,23 +569,25 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(N) (N)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
 #endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
 
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
@@ -598,8 +606,7 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
@@ -611,8 +618,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -628,7 +635,7 @@ YYID (yyi)
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-            && (defined YYFREE || defined free)))
+             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -636,15 +643,13 @@ YYID (yyi)
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined malloc && ! defined EXIT_SUCCESS
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined free && ! defined EXIT_SUCCESS
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -654,7 +659,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
@@ -679,16 +684,16 @@ union yyalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-       Stack = &yyptr->Stack_alloc;                                    \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
@@ -707,7 +712,7 @@ union yyalloc
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (YYID (0))
+      while (0)
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
@@ -723,17 +728,19 @@ union yyalloc
 #define YYNNTS  170
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  325
-/* YYNRULES -- Number of states.  */
+/* YYNSTATES -- Number of states.  */
 #define YYNSTATES  479
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   419
 
-#define YYTRANSLATE(YYX)                                               \
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -781,132 +788,7 @@ static const yytype_uint8 yytranslate[] =
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     4,     7,    10,    13,    16,    19,    22,
-      25,    27,    30,    31,    33,    35,    37,    39,    41,    43,
-      45,    47,    49,    51,    53,    55,    57,    59,    61,    63,
-      65,    67,    69,    71,    73,    75,    77,    79,    81,    83,
-      85,    87,    89,    91,    93,    95,    97,    99,   101,   103,
-     105,   107,   109,   111,   113,   115,   117,   119,   121,   123,
-     125,   127,   129,   131,   133,   135,   137,   139,   141,   143,
-     145,   147,   149,   151,   153,   155,   157,   159,   161,   163,
-     165,   167,   169,   171,   173,   175,   177,   179,   181,   183,
-     185,   187,   189,   191,   193,   195,   197,   199,   201,   203,
-     205,   207,   209,   211,   213,   215,   217,   219,   221,   223,
-     225,   227,   229,   231,   233,   235,   237,   239,   241,   243,
-     245,   247,   249,   251,   253,   255,   257,   259,   261,   263,
-     265,   267,   269,   271,   274,   275,   277,   279,   281,   283,
-     285,   287,   290,   291,   293,   295,   297,   299,   302,   305,
-     308,   311,   314,   317,   320,   323,   326,   329,   332,   335,
-     338,   341,   344,   347,   350,   353,   356,   359,   362,   365,
-     368,   371,   374,   377,   380,   383,   386,   389,   392,   395,
-     398,   401,   404,   407,   410,   413,   416,   419,   422,   425,
-     428,   431,   434,   437,   440,   443,   446,   449,   452,   455,
-     458,   461,   464,   467,   470,   473,   476,   479,   482,   485,
-     488,   491,   494,   497,   500,   503,   506,   509,   512,   515,
-     518,   521,   524,   527,   530,   533,   536,   539,   542,   545,
-     548,   552,   555,   558,   561,   564,   567,   570,   573,   576,
-     579,   582,   585,   588,   591,   594,   597,   600,   603,   606,
-     609,   612,   616,   619,   622,   625,   628,   631,   634,   637,
-     640,   643,   646,   650,   654,   657,   660,   663,   666,   669,
-     672,   675,   678,   681,   684,   687,   689,   692,   693,   695,
-     697,   699,   701,   703,   705,   707,   709,   712,   715,   718,
-     721,   724,   727,   730,   733,   735,   738,   739,   741,   743,
-     745,   747,   749,   751,   753,   755,   757,   759,   761,   763,
-     766,   769,   772,   775,   778,   781,   784,   787,   790,   793,
-     796,   799,   801,   804,   805,   807
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-     166,     0,    -1,    -1,   166,   167,    -1,   168,   169,    -1,
-     171,   172,    -1,   174,   175,    -1,   331,   332,    -1,   305,
-     306,    -1,   316,   317,    -1,    11,    -1,   169,   170,    -1,
-      -1,   177,    -1,   178,    -1,   182,    -1,   185,    -1,   191,
-      -1,   192,    -1,   193,    -1,   194,    -1,   195,    -1,   196,
-      -1,   183,    -1,   206,    -1,   207,    -1,   208,    -1,   209,
-      -1,   210,    -1,   229,    -1,   230,    -1,   231,    -1,   235,
-      -1,   236,    -1,   188,    -1,   237,    -1,   238,    -1,   241,
-      -1,   239,    -1,   240,    -1,   243,    -1,   244,    -1,   245,
-      -1,   258,    -1,   219,    -1,   220,    -1,   221,    -1,   222,
-      -1,   246,    -1,   261,    -1,   215,    -1,   217,    -1,   262,
-      -1,   268,    -1,   269,    -1,   270,    -1,   189,    -1,   228,
-      -1,   278,    -1,   279,    -1,   216,    -1,   273,    -1,   203,
-      -1,   184,    -1,   211,    -1,   259,    -1,   265,    -1,   247,
-      -1,   260,    -1,   281,    -1,   282,    -1,   190,    -1,   179,
-      -1,   202,    -1,   251,    -1,   180,    -1,   186,    -1,   187,
-      -1,   212,    -1,   213,    -1,   280,    -1,   249,    -1,   253,
-      -1,   254,    -1,   181,    -1,   283,    -1,   232,    -1,   257,
-      -1,   204,    -1,   218,    -1,   263,    -1,   264,    -1,   267,
-      -1,   272,    -1,   214,    -1,   274,    -1,   275,    -1,   276,
-      -1,   223,    -1,   227,    -1,   255,    -1,   256,    -1,   224,
-      -1,   248,    -1,   271,    -1,   205,    -1,   197,    -1,   198,
-      -1,   199,    -1,   200,    -1,   201,    -1,   284,    -1,   285,
-      -1,   286,    -1,   225,    -1,   233,    -1,   234,    -1,   287,
-      -1,   288,    -1,   242,    -1,   250,    -1,   226,    -1,   289,
-      -1,   291,    -1,   290,    -1,   292,    -1,   293,    -1,   294,
-      -1,   252,    -1,   266,    -1,   277,    -1,   295,    -1,    40,
-      -1,   172,   173,    -1,    -1,   296,    -1,   297,    -1,   298,
-      -1,   300,    -1,   299,    -1,    46,    -1,   175,   176,    -1,
-      -1,   301,    -1,   302,    -1,   303,    -1,   304,    -1,    13,
-      10,    -1,    12,    10,    -1,    78,    10,    -1,    81,    10,
-      -1,    99,    10,    -1,    14,    10,    -1,    16,    10,    -1,
-      69,    10,    -1,    15,    10,    -1,    82,    10,    -1,    83,
-      10,    -1,    33,    10,    -1,    62,    10,    -1,    77,    10,
-      -1,    17,    10,    -1,    18,    10,    -1,    19,    10,    -1,
-      20,    10,    -1,    21,    10,    -1,    22,    10,    -1,   125,
-      10,    -1,   126,    10,    -1,   127,    10,    -1,   128,    10,
-      -1,   129,    10,    -1,    79,    10,    -1,    68,    10,    -1,
-     104,    10,    -1,   124,    10,    -1,    23,    10,    -1,    24,
-      10,    -1,    25,    10,    -1,    26,    10,    -1,    27,    10,
-      -1,    70,    10,    -1,    84,    10,    -1,    85,    10,    -1,
-     112,    10,    -1,    56,    10,    -1,    66,    10,    -1,    57,
-      10,    -1,   105,    10,    -1,    50,    10,    -1,    51,    10,
-      -1,    52,    10,    -1,    53,    10,    -1,   116,    10,    -1,
-     120,    10,    -1,   121,    10,    -1,   154,    10,    -1,   117,
-      10,    -1,    63,    10,    -1,    28,    10,    -1,    29,    10,
-      -1,    30,    10,    -1,   101,    10,    -1,   135,    10,    -1,
-     136,    10,    -1,    31,    10,    -1,    32,    10,    -1,    34,
-      10,    -1,    35,    10,    -1,    37,    10,    -1,    38,    10,
-      -1,    36,    10,    -1,   137,    10,    -1,    43,    10,    -1,
-      44,    10,    -1,    45,    10,    -1,    54,    10,    -1,    73,
-      10,    -1,   122,    10,    -1,    87,    10,    -1,   153,    10,
-      -1,    80,    10,    -1,   161,    10,    -1,    88,    10,    -1,
-      89,    10,    -1,   118,    10,    -1,   119,    10,    -1,   103,
-      10,    -1,    49,    10,    -1,    71,    10,    -1,    74,    10,
-      10,    -1,    55,    10,    -1,    58,    10,    -1,   108,    10,
-      -1,   109,    10,    -1,    72,    10,    -1,   162,    10,    -1,
-     110,    10,    -1,    59,    10,    -1,    60,    10,    -1,    61,
-      10,    -1,   123,    10,    -1,   111,    10,    -1,    67,    10,
-      -1,   114,    10,    -1,   115,    10,    -1,   113,    10,    -1,
-     163,    10,    -1,    64,    10,    -1,    65,    10,    -1,    86,
-      10,    -1,    75,    10,    10,    -1,    76,    10,    -1,   100,
-      10,    -1,   132,    10,    -1,   133,    10,    -1,   134,    10,
-      -1,   138,    10,    -1,   139,    10,    -1,   155,    10,    -1,
-     157,    10,    -1,   156,    10,    -1,   158,    10,    10,    -1,
-     159,    10,    10,    -1,   160,    10,    -1,   164,    10,    -1,
-      39,    10,    -1,    41,    10,    -1,    42,    10,    -1,   131,
-      10,    -1,   102,    10,    -1,    39,    10,    -1,    47,    10,
-      -1,    48,    10,    -1,   130,    10,    -1,    90,    -1,   306,
-     307,    -1,    -1,   308,    -1,   310,    -1,   309,    -1,   312,
-      -1,   313,    -1,   314,    -1,   315,    -1,   311,    -1,    91,
-      10,    -1,    93,    10,    -1,    92,    10,    -1,    98,    10,
-      -1,    94,    10,    -1,    95,    10,    -1,    96,    10,    -1,
-      97,    10,    -1,   140,    -1,   317,   318,    -1,    -1,   319,
-      -1,   320,    -1,   321,    -1,   322,    -1,   323,    -1,   324,
-      -1,   325,    -1,   326,    -1,   327,    -1,   328,    -1,   329,
-      -1,   330,    -1,   141,    10,    -1,   142,    10,    -1,   143,
-      10,    -1,   144,    10,    -1,   145,    10,    -1,   146,    10,
-      -1,   147,    10,    -1,   148,    10,    -1,   149,    10,    -1,
-     150,    10,    -1,   151,    10,    -1,   152,    10,    -1,   106,
-      -1,   332,   333,    -1,    -1,   334,    -1,   107,    10,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   129,   129,   129,   130,   130,   131,   131,   132,   132,
@@ -1075,13 +957,13 @@ static const char *const yytname[] =
   "dt_dnstap_log_client_response_messages",
   "dt_dnstap_log_forwarder_query_messages",
   "dt_dnstap_log_forwarder_response_messages", "pythonstart",
-  "contents_py", "content_py", "py_script", YY_NULL
+  "contents_py", "content_py", "py_script", YY_NULLPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -1104,85 +986,73 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint16 yyr1[] =
-{
-       0,   165,   166,   166,   167,   167,   167,   167,   167,   167,
-     168,   169,   169,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   171,   172,   172,   173,   173,   173,   173,   173,
-     174,   175,   175,   176,   176,   176,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   306,   307,   307,
-     307,   307,   307,   307,   307,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   317,   318,   318,   318,
-     318,   318,   318,   318,   318,   318,   318,   318,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   332,   333,   334
-};
+#define YYPACT_NINF -81
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-81)))
+
+#define YYTABLE_NINF -1
+
+#define yytable_value_is_error(Yytable_value) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-       0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
-       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     1,     1,     1,     1,     1,
-       1,     2,     0,     1,     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,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     3,     3,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
-       2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     1,     2,     0,     1,     2
+     -81,   118,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -12,    89,    47,   -13,
+      24,   -80,    18,    19,    20,    25,    26,    80,   109,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   143,   144,
+     145,   146,   147,   149,   150,   151,   152,   153,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   211,   212,
+     213,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   266,   267,   268,   269,   270,   -81,   -81,   -81,   -81,
+     -81,   -81,   271,   272,   273,   274,   -81,   -81,   -81,   -81,
+     -81,   275,   276,   277,   278,   279,   280,   281,   282,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   295,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   296,   297,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   298,   299,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
 };
 
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
-   Performed when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
        2,     0,     1,    10,   132,   140,   275,   321,   294,     3,
@@ -1235,109 +1105,53 @@ static const yytype_uint16 yydefact[] =
      317,   318,   319,   320,   325,   230,   251,   262,   263
 };
 
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     1,     9,    10,    16,   141,    11,    17,   266,    12,
-      18,   276,   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,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   267,   268,   269,   270,   271,   277,   278,   279,   280,
-      13,    19,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,    14,    20,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,    15,    21,   324,   325
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -81
-static const yytype_int16 yypact[] =
+  /* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
 {
-     -81,   118,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -12,    89,    47,   -13,
-      24,   -80,    18,    19,    20,    25,    26,    80,   109,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   143,   144,
-     145,   146,   147,   149,   150,   151,   152,   153,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   211,   212,
-     213,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   266,   267,   268,   269,   270,   -81,   -81,   -81,   -81,
-     -81,   -81,   271,   272,   273,   274,   -81,   -81,   -81,   -81,
-     -81,   275,   276,   277,   278,   279,   280,   281,   282,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   295,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   296,   297,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   298,   299,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
 };
 
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
+      -1,     1,     9,    10,    16,   141,    11,    17,   266,    12,
+      18,   276,   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,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   267,   268,   269,   270,   271,   277,   278,   279,   280,
+      13,    19,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,    14,    20,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,    15,    21,   324,   325
 };
 
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -1
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
@@ -1373,12 +1187,6 @@ static const yytype_uint16 yytable[] =
      469,   470,   471,   472,   473,   474,   475,   476,   477,   478
 };
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-81)))
-
-#define yytable_value_is_error(Yytable_value) \
-  YYID (0)
-
 static const yytype_int16 yycheck[] =
 {
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -1414,8 +1222,8 @@ static const yytype_int16 yycheck[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
        0,   166,     0,    11,    40,    46,    90,   106,   140,   167,
@@ -1468,30 +1276,92 @@ static const yytype_uint16 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10
 };
 
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
-
-#define YYFAIL         goto yyerrlab
-#if defined YYFAIL
-  /* This is here to suppress warnings from the GCC cpp's
-     -Wunused-macros.  Normally we don't worry about that warning, but
-     some users do, and we want to make it easy for users to remove
-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
-#endif
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint16 yyr1[] =
+{
+       0,   165,   166,   166,   167,   167,   167,   167,   167,   167,
+     168,   169,   169,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   171,   172,   172,   173,   173,   173,   173,   173,
+     174,   175,   175,   176,   176,   176,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   306,   307,   307,
+     307,   307,   307,   307,   307,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   317,   318,   318,   318,
+     318,   318,   318,   318,   318,   318,   318,   318,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   332,   333,   334
+};
+
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
+       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     0,     1,     1,     1,     1,     1,
+       1,     2,     0,     1,     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,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     3,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
+       2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     1,     2,     0,     1,     2
+};
+
+
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
+
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -1508,27 +1378,15 @@ do                                                              \
   else                                                          \
     {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                 \
-    }                                                          \
-while (YYID (0))
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
 
 /* Error token number */
-#define YYTERROR       1
-#define YYERRCODE      256
+#define YYTERROR        1
+#define YYERRCODE       256
 
 
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -1538,40 +1396,36 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
-do {                                                                     \
-  if (yydebug)                                                           \
-    {                                                                    \
-      YYFPRINTF (stderr, "%s ", Title);                                          \
-      yy_symbol_print (stderr,                                           \
-                 Type, Value); \
-      YYFPRINTF (stderr, "\n");                                                  \
-    }                                                                    \
-} while (YYID (0))
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
 {
   FILE *yyo = yyoutput;
   YYUSE (yyo);
@@ -1580,14 +1434,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-        break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1595,22 +1443,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
   YYFPRINTF (yyoutput, ")");
@@ -1621,16 +1458,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep)
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1641,49 +1470,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-            yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-                      &(yyvsp[(yyi + 1) - (yynrhs)])
-                                      );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1697,7 +1519,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1720,15 +1542,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1744,16 +1559,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1783,27 +1590,27 @@ yytnamerr (char *yyres, const char *yystr)
       char const *yyp = yystr;
 
       for (;;)
-       switch (*++yyp)
-         {
-         case '\'':
-         case ',':
-           goto do_not_strip_quotes;
-
-         case '\\':
-           if (*++yyp != '\\')
-             goto do_not_strip_quotes;
-           /* Fall through.  */
-         default:
-           if (yyres)
-             yyres[yyn] = *yyp;
-           yyn++;
-           break;
-
-         case '"':
-           if (yyres)
-             yyres[yyn] = '\0';
-           return yyn;
-         }
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
+
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -1826,11 +1633,11 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULL;
+  const char *yyformat = YY_NULLPTR;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1838,10 +1645,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
   int yycount = 0;
 
   /* There are many possibilities here to consider:
-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
-       for details.  YYERROR is fine as it does not invoke this
-       function.
      - If this state is a consistent state with a default action, then
        the only way this function was invoked is if the default action
        is an error action.  In that case, don't check for expected
@@ -1891,7 +1694,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -1958,31 +1761,17 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
@@ -1991,18 +1780,8 @@ yydestruct (yymsg, yytype, yyvaluep)
 /* The lookahead symbol.  */
 int yychar;
 
-
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
-
+YYSTYPE yylval;
 /* Number of syntax errors so far.  */
 int yynerrs;
 
@@ -2011,35 +1790,16 @@ int yynerrs;
 | yyparse.  |
 `----------*/
 
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
     int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
        Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
@@ -2107,23 +1867,23 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-       /* Give user a chance to reallocate the stack.  Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       yytype_int16 *yyss1 = yyss;
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow (YY_("memory exhausted"),
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-                   &yystacksize);
-
-       yyss = yyss1;
-       yyvs = yyvs1;
+        /* Give user a chance to reallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
+
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -2131,22 +1891,22 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-       goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-       yytype_int16 *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyexhaustedlab;
-       YYSTACK_RELOCATE (yyss_alloc, yyss);
-       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union yyalloc *yyptr =
+          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -2155,10 +1915,10 @@ yyparse ()
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -2187,7 +1947,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
@@ -2252,7 +2012,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -2266,16 +2026,15 @@ yyreduce:
   switch (yyn)
     {
         case 10:
-/* Line 1792 of yacc.c  */
-#line 137 "./util/configparser.y"
+#line 137 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
+#line 2034 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 132:
-/* Line 1792 of yacc.c  */
-#line 195 "./util/configparser.y"
+#line 195 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2286,11 +2045,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
+#line 2049 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 140:
-/* Line 1792 of yacc.c  */
-#line 211 "./util/configparser.y"
+#line 211 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2301,87 +2060,87 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
+#line 2064 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 147:
-/* Line 1792 of yacc.c  */
-#line 227 "./util/configparser.y"
+#line 227 "./util/configparser.y" /* yacc.c:1646  */
     { 
-               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)
+               OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); 
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->num_threads = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2076 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 148:
-/* Line 1792 of yacc.c  */
-#line 236 "./util/configparser.y"
+#line 236 "./util/configparser.y" /* yacc.c:1646  */
     { 
-               OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); 
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->verbosity = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2088 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 149:
-/* Line 1792 of yacc.c  */
-#line 245 "./util/configparser.y"
+#line 245 "./util/configparser.y" /* yacc.c:1646  */
     { 
-               OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0)
+               OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); 
+               if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
                        cfg_parser->cfg->stat_interval = 0;
-               else if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               else if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->stat_interval = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2102 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 150:
-/* Line 1792 of yacc.c  */
-#line 256 "./util/configparser.y"
+#line 256 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2114 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 151:
-/* Line 1792 of yacc.c  */
-#line 265 "./util/configparser.y"
+#line 265 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2126 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 152:
-/* Line 1792 of yacc.c  */
-#line 274 "./util/configparser.y"
+#line 274 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("port number expected");
-               else cfg_parser->cfg->port = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->port = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2138 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 153:
-/* Line 1792 of yacc.c  */
-#line 283 "./util/configparser.y"
+#line 283 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
                        cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
                else    cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
@@ -2389,15 +2148,15 @@ yyreduce:
                if(!cfg_parser->cfg->ifs)
                        yyerror("out of memory");
                else
-                       cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[(2) - (2)].str);
+                       cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
+#line 2154 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 154:
-/* Line 1792 of yacc.c  */
-#line 296 "./util/configparser.y"
+#line 296 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
                        cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
                else    cfg_parser->cfg->out_ifs = realloc(
@@ -2407,1222 +2166,1222 @@ yyreduce:
                        yyerror("out of memory");
                else
                        cfg_parser->cfg->out_ifs[
-                               cfg_parser->cfg->num_out_ifs++] = (yyvsp[(2) - (2)].str);
+                               cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
+#line 2172 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 155:
-/* Line 1792 of yacc.c  */
-#line 311 "./util/configparser.y"
+#line 311 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2184 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 156:
-/* Line 1792 of yacc.c  */
-#line 320 "./util/configparser.y"
+#line 320 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, 
+               OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
+               if(!cfg_mark_ports((yyvsp[0].str), 1, 
                        cfg_parser->cfg->outgoing_avail_ports, 65536))
                        yyerror("port number or range (\"low-high\") expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2196 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 157:
-/* Line 1792 of yacc.c  */
-#line 329 "./util/configparser.y"
+#line 329 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, 
+               OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
+               if(!cfg_mark_ports((yyvsp[0].str), 0, 
                        cfg_parser->cfg->outgoing_avail_ports, 65536))
                        yyerror("port number or range (\"low-high\") expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2208 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 158:
-/* Line 1792 of yacc.c  */
-#line 338 "./util/configparser.y"
+#line 338 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2220 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 159:
-/* Line 1792 of yacc.c  */
-#line 347 "./util/configparser.y"
+#line 347 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2232 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 160:
-/* Line 1792 of yacc.c  */
-#line 356 "./util/configparser.y"
+#line 356 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2244 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 161:
-/* Line 1792 of yacc.c  */
-#line 365 "./util/configparser.y"
+#line 365 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2256 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 162:
-/* Line 1792 of yacc.c  */
-#line 374 "./util/configparser.y"
+#line 374 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2268 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 163:
-/* Line 1792 of yacc.c  */
-#line 383 "./util/configparser.y"
+#line 383 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_udp = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2280 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 164:
-/* Line 1792 of yacc.c  */
-#line 392 "./util/configparser.y"
+#line 392 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2292 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 165:
-/* Line 1792 of yacc.c  */
-#line 401 "./util/configparser.y"
+#line 401 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str)));
-                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
+                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                         yyerror("number expected");
-                else cfg_parser->cfg->tcp_mss = atoi((yyvsp[(2) - (2)].str));
-                free((yyvsp[(2) - (2)].str));
+                else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
+                free((yyvsp[0].str));
        }
+#line 2304 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 166:
-/* Line 1792 of yacc.c  */
-#line 410 "./util/configparser.y"
+#line 410 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2316 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 167:
-/* Line 1792 of yacc.c  */
-#line 419 "./util/configparser.y"
+#line 419 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2328 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 168:
-/* Line 1792 of yacc.c  */
-#line 428 "./util/configparser.y"
+#line 428 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2340 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 169:
-/* Line 1792 of yacc.c  */
-#line 437 "./util/configparser.y"
+#line 437 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_key);
-               cfg_parser->cfg->ssl_service_key = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
        }
+#line 2350 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 170:
-/* Line 1792 of yacc.c  */
-#line 444 "./util/configparser.y"
+#line 444 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_pem);
-               cfg_parser->cfg->ssl_service_pem = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
        }
+#line 2360 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 171:
-/* Line 1792 of yacc.c  */
-#line 451 "./util/configparser.y"
+#line 451 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("port number expected");
-               else cfg_parser->cfg->ssl_port = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2372 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 172:
-/* Line 1792 of yacc.c  */
-#line 460 "./util/configparser.y"
+#line 460 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2384 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 173:
-/* Line 1792 of yacc.c  */
-#line 469 "./util/configparser.y"
+#line 469 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+               else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0);
 #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") == 0)
+               if(strcmp((yyvsp[0].str), "yes") == 0)
                        yyerror("no syslog services are available. "
                                "(reconfigure and compile to add)");
 #endif
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2401 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 174:
-/* Line 1792 of yacc.c  */
-#line 483 "./util/configparser.y"
+#line 483 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2413 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 175:
-/* Line 1792 of yacc.c  */
-#line 492 "./util/configparser.y"
+#line 492 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->log_queries = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2425 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 176:
-/* Line 1792 of yacc.c  */
-#line 501 "./util/configparser.y"
+#line 501 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->chrootdir);
-               cfg_parser->cfg->chrootdir = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->chrootdir = (yyvsp[0].str);
        }
+#line 2435 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 177:
-/* Line 1792 of yacc.c  */
-#line 508 "./util/configparser.y"
+#line 508 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->username);
-               cfg_parser->cfg->username = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->username = (yyvsp[0].str);
        }
+#line 2445 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 178:
-/* Line 1792 of yacc.c  */
-#line 515 "./util/configparser.y"
+#line 515 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
-               cfg_parser->cfg->directory = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->directory = (yyvsp[0].str);
        }
+#line 2455 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 179:
-/* Line 1792 of yacc.c  */
-#line 522 "./util/configparser.y"
+#line 522 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->logfile);
-               cfg_parser->cfg->logfile = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->logfile = (yyvsp[0].str);
                cfg_parser->cfg->use_syslog = 0;
        }
+#line 2466 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 180:
-/* Line 1792 of yacc.c  */
-#line 530 "./util/configparser.y"
+#line 530 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->pidfile);
-               cfg_parser->cfg->pidfile = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->pidfile = (yyvsp[0].str);
        }
+#line 2476 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 181:
-/* Line 1792 of yacc.c  */
-#line 537 "./util/configparser.y"
+#line 537 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2486 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 182:
-/* Line 1792 of yacc.c  */
-#line 544 "./util/configparser.y"
+#line 544 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
-               cfg_parser->cfg->dlv_anchor_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
        }
+#line 2496 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 183:
-/* Line 1792 of yacc.c  */
-#line 551 "./util/configparser.y"
+#line 551 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2506 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 184:
-/* Line 1792 of yacc.c  */
-#line 558 "./util/configparser.y"
+#line 558 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
-                       auto_trust_anchor_file_list, (yyvsp[(2) - (2)].str)))
+                       auto_trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2517 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 185:
-/* Line 1792 of yacc.c  */
-#line 566 "./util/configparser.y"
+#line 566 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
-                       trust_anchor_file_list, (yyvsp[(2) - (2)].str)))
+                       trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2528 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 186:
-/* Line 1792 of yacc.c  */
-#line 574 "./util/configparser.y"
+#line 574 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
-                       trusted_keys_file_list, (yyvsp[(2) - (2)].str)))
+                       trusted_keys_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2539 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 187:
-/* Line 1792 of yacc.c  */
-#line 582 "./util/configparser.y"
+#line 582 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)))
+               OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2549 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 188:
-/* Line 1792 of yacc.c  */
-#line 589 "./util/configparser.y"
+#line 589 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2559 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 189:
-/* Line 1792 of yacc.c  */
-#line 596 "./util/configparser.y"
+#line 596 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2571 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 190:
-/* Line 1792 of yacc.c  */
-#line 605 "./util/configparser.y"
+#line 605 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->hide_version = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2583 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 191:
-/* Line 1792 of yacc.c  */
-#line 614 "./util/configparser.y"
+#line 614 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->identity);
-               cfg_parser->cfg->identity = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->identity = (yyvsp[0].str);
        }
+#line 2593 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 192:
-/* Line 1792 of yacc.c  */
-#line 621 "./util/configparser.y"
+#line 621 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->version);
-               cfg_parser->cfg->version = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->version = (yyvsp[0].str);
        }
+#line 2603 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 193:
-/* Line 1792 of yacc.c  */
-#line 628 "./util/configparser.y"
+#line 628 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf))
+               OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
                        yyerror("buffer size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2614 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 194:
-/* Line 1792 of yacc.c  */
-#line 636 "./util/configparser.y"
+#line 636 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf))
+               OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
                        yyerror("buffer size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2625 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 195:
-/* Line 1792 of yacc.c  */
-#line 644 "./util/configparser.y"
+#line 644 "./util/configparser.y" /* yacc.c:1646  */
     {
-        OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[(2) - (2)].str)));
-        if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+        OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
+        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
             yyerror("expected yes or no.");
         else cfg_parser->cfg->so_reuseport =
-            (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-        free((yyvsp[(2) - (2)].str));
+            (strcmp((yyvsp[0].str), "yes")==0);
+        free((yyvsp[0].str));
     }
+#line 2638 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 196:
-/* Line 1792 of yacc.c  */
-#line 654 "./util/configparser.y"
+#line 654 "./util/configparser.y" /* yacc.c:1646  */
     {
-        OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[(2) - (2)].str)));
-        if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+        OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
+        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
             yyerror("expected yes or no.");
         else cfg_parser->cfg->ip_transparent =
-            (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-        free((yyvsp[(2) - (2)].str));
+            (strcmp((yyvsp[0].str), "yes")==0);
+        free((yyvsp[0].str));
     }
+#line 2651 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 197:
-/* Line 1792 of yacc.c  */
-#line 664 "./util/configparser.y"
+#line 664 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
-               else if (atoi((yyvsp[(2) - (2)].str)) < 12)
+               else if (atoi((yyvsp[0].str)) < 12)
                        yyerror("edns buffer size too small");
-               else if (atoi((yyvsp[(2) - (2)].str)) > 65535)
+               else if (atoi((yyvsp[0].str)) > 65535)
                        cfg_parser->cfg->edns_buffer_size = 65535;
-               else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2667 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 198:
-/* Line 1792 of yacc.c  */
-#line 677 "./util/configparser.y"
+#line 677 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
-               else if (atoi((yyvsp[(2) - (2)].str)) < 4096)
+               else if (atoi((yyvsp[0].str)) < 4096)
                        yyerror("message buffer size too small (use 4096)");
-               else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2681 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 199:
-/* Line 1792 of yacc.c  */
-#line 688 "./util/configparser.y"
+#line 688 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size))
+               OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2692 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 200:
-/* Line 1792 of yacc.c  */
-#line 696 "./util/configparser.y"
+#line 696 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
                        if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2708 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 201:
-/* Line 1792 of yacc.c  */
-#line 709 "./util/configparser.y"
+#line 709 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2720 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 202:
-/* Line 1792 of yacc.c  */
-#line 718 "./util/configparser.y"
+#line 718 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->jostle_time = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2732 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 203:
-/* Line 1792 of yacc.c  */
-#line 727 "./util/configparser.y"
+#line 727 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_delay_close:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->delay_close = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2744 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 204:
-/* Line 1792 of yacc.c  */
-#line 736 "./util/configparser.y"
+#line 736 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->unblock_lan_zones = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2757 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 205:
-/* Line 1792 of yacc.c  */
-#line 746 "./util/configparser.y"
+#line 746 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size))
+               OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2768 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 206:
-/* Line 1792 of yacc.c  */
-#line 754 "./util/configparser.y"
+#line 754 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
                        if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2784 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 207:
-/* Line 1792 of yacc.c  */
-#line 767 "./util/configparser.y"
+#line 767 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->host_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2796 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 208:
-/* Line 1792 of yacc.c  */
-#line 776 "./util/configparser.y"
+#line 776 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
-                       "removed, use infra-host-ttl)", (yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+                       "removed, use infra-host-ttl)", (yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2807 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 209:
-/* Line 1792 of yacc.c  */
-#line 784 "./util/configparser.y"
+#line 784 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2819 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 210:
-/* Line 1792 of yacc.c  */
-#line 793 "./util/configparser.y"
+#line 793 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
-                       "(option removed, use infra-cache-numhosts)", (yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+                       "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2830 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 211:
-/* Line 1792 of yacc.c  */
-#line 801 "./util/configparser.y"
+#line 801 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
                        if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 2846 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 212:
-/* Line 1792 of yacc.c  */
-#line 814 "./util/configparser.y"
+#line 814 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 2858 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 213:
-/* Line 1792 of yacc.c  */
-#line 823 "./util/configparser.y"
+#line 823 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->target_fetch_policy);
-               cfg_parser->cfg->target_fetch_policy = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
        }
+#line 2868 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 214:
-/* Line 1792 of yacc.c  */
-#line 830 "./util/configparser.y"
+#line 830 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_short_bufsize = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2881 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 215:
-/* Line 1792 of yacc.c  */
-#line 840 "./util/configparser.y"
+#line 840 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_large_queries = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2894 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 216:
-/* Line 1792 of yacc.c  */
-#line 850 "./util/configparser.y"
+#line 850 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_glue = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2907 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 217:
-/* Line 1792 of yacc.c  */
-#line 860 "./util/configparser.y"
+#line 860 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_dnssec_stripped = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2920 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 218:
-/* Line 1792 of yacc.c  */
-#line 870 "./util/configparser.y"
+#line 870 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_below_nxdomain = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2933 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 219:
-/* Line 1792 of yacc.c  */
-#line 880 "./util/configparser.y"
+#line 880 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_referral_path = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2946 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 220:
-/* Line 1792 of yacc.c  */
-#line 890 "./util/configparser.y"
+#line 890 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_algo_downgrade = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2959 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 221:
-/* Line 1792 of yacc.c  */
-#line 900 "./util/configparser.y"
+#line 900 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->use_caps_bits_for_id = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 2972 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 222:
-/* Line 1792 of yacc.c  */
-#line 910 "./util/configparser.y"
+#line 910 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2982 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 223:
-/* Line 1792 of yacc.c  */
-#line 917 "./util/configparser.y"
+#line 917 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 2992 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 224:
-/* Line 1792 of yacc.c  */
-#line 924 "./util/configparser.y"
+#line 924 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3002 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 225:
-/* Line 1792 of yacc.c  */
-#line 931 "./util/configparser.y"
+#line 931 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->prefetch = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3014 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 226:
-/* Line 1792 of yacc.c  */
-#line 940 "./util/configparser.y"
+#line 940 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3026 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 227:
-/* Line 1792 of yacc.c  */
-#line 949 "./util/configparser.y"
+#line 949 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3038 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 228:
-/* Line 1792 of yacc.c  */
-#line 958 "./util/configparser.y"
+#line 958 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)))
+               OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3048 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 229:
-/* Line 1792 of yacc.c  */
-#line 965 "./util/configparser.y"
+#line 965 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->donotquery_localhost = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3061 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 230:
-/* Line 1792 of yacc.c  */
-#line 975 "./util/configparser.y"
-    {
-               OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
-               if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 &&
-                       strcmp((yyvsp[(3) - (3)].str), "deny_non_local")!=0 &&
-                       strcmp((yyvsp[(3) - (3)].str), "refuse_non_local")!=0 &&
-                       strcmp((yyvsp[(3) - (3)].str), "allow")!=0 && 
-                       strcmp((yyvsp[(3) - (3)].str), "allow_snoop")!=0) {
+#line 975 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
+                       strcmp((yyvsp[0].str), "deny_non_local")!=0 &&
+                       strcmp((yyvsp[0].str), "refuse_non_local")!=0 &&
+                       strcmp((yyvsp[0].str), "allow")!=0 && 
+                       strcmp((yyvsp[0].str), "allow_snoop")!=0) {
                        yyerror("expected deny, refuse, deny_non_local, "
                                "refuse_non_local, allow or allow_snoop "
                                "in access control action");
                } else {
-                       if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)))
+                       if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
                                fatal_exit("out of memory adding acl");
                }
        }
+#line 3081 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 231:
-/* Line 1792 of yacc.c  */
-#line 992 "./util/configparser.y"
+#line 992 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->module_conf);
-               cfg_parser->cfg->module_conf = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->module_conf = (yyvsp[0].str);
        }
+#line 3091 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 232:
-/* Line 1792 of yacc.c  */
-#line 999 "./util/configparser.y"
+#line 999 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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) {
+               OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
+               if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
                        cfg_parser->cfg->val_date_override = 0;
-               } else if(strlen((yyvsp[(2) - (2)].str)) == 14) {
+               } else if(strlen((yyvsp[0].str)) == 14) {
                        cfg_parser->cfg->val_date_override = 
-                               cfg_convert_timeval((yyvsp[(2) - (2)].str));
+                               cfg_convert_timeval((yyvsp[0].str));
                        if(!cfg_parser->cfg->val_date_override)
                                yyerror("bad date/time specification");
                } else {
-                       if(atoi((yyvsp[(2) - (2)].str)) == 0)
+                       if(atoi((yyvsp[0].str)) == 0)
                                yyerror("number expected");
-                       cfg_parser->cfg->val_date_override = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str));
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3112 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 233:
-/* Line 1792 of yacc.c  */
-#line 1017 "./util/configparser.y"
+#line 1017 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
+               OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
+               if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
                        cfg_parser->cfg->val_sig_skew_min = 0;
                } else {
-                       cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str));
                        if(!cfg_parser->cfg->val_sig_skew_min)
                                yyerror("number expected");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3128 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 234:
-/* Line 1792 of yacc.c  */
-#line 1030 "./util/configparser.y"
+#line 1030 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
+               OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
+               if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
                        cfg_parser->cfg->val_sig_skew_max = 0;
                } else {
-                       cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str));
                        if(!cfg_parser->cfg->val_sig_skew_max)
                                yyerror("number expected");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3144 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 235:
-/* Line 1792 of yacc.c  */
-#line 1043 "./util/configparser.y"
+#line 1043 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->max_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3156 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 236:
-/* Line 1792 of yacc.c  */
-#line 1052 "./util/configparser.y"
+#line 1052 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3168 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 237:
-/* Line 1792 of yacc.c  */
-#line 1061 "./util/configparser.y"
+#line 1061 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->min_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3180 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 238:
-/* Line 1792 of yacc.c  */
-#line 1070 "./util/configparser.y"
+#line 1070 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3192 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 239:
-/* Line 1792 of yacc.c  */
-#line 1079 "./util/configparser.y"
+#line 1079 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->val_clean_additional = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3205 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 240:
-/* Line 1792 of yacc.c  */
-#line 1089 "./util/configparser.y"
+#line 1089 "./util/configparser.y" /* yacc.c:1646  */
     {
-               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)
+               OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->val_permissive_mode = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3218 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 241:
-/* Line 1792 of yacc.c  */
-#line 1099 "./util/configparser.y"
+#line 1099 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3230 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 242:
-/* Line 1792 of yacc.c  */
-#line 1108 "./util/configparser.y"
+#line 1108 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->val_log_level = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3242 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 243:
-/* Line 1792 of yacc.c  */
-#line 1117 "./util/configparser.y"
+#line 1117 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
-               cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
        }
+#line 3252 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 244:
-/* Line 1792 of yacc.c  */
-#line 1124 "./util/configparser.y"
+#line 1124 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->add_holddown = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3264 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 245:
-/* Line 1792 of yacc.c  */
-#line 1133 "./util/configparser.y"
+#line 1133 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->del_holddown = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3276 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 246:
-/* Line 1792 of yacc.c  */
-#line 1142 "./util/configparser.y"
+#line 1142 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->keep_missing = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3288 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 247:
-/* Line 1792 of yacc.c  */
-#line 1151 "./util/configparser.y"
+#line 1151 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->permit_small_holddown =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3301 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 248:
-/* Line 1792 of yacc.c  */
-#line 1160 "./util/configparser.y"
+#line 1160 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size))
+               OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3312 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 249:
-/* Line 1792 of yacc.c  */
-#line 1168 "./util/configparser.y"
+#line 1168 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
                        if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3328 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 250:
-/* Line 1792 of yacc.c  */
-#line 1181 "./util/configparser.y"
+#line 1181 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size))
+               OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3339 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 251:
-/* Line 1792 of yacc.c  */
-#line 1189 "./util/configparser.y"
-    {
-               OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
-               if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 &&
-                  strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 &&
-                  strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0
-                  && strcmp((yyvsp[(3) - (3)].str), "typetransparent")!=0 &&
-                  strcmp((yyvsp[(3) - (3)].str), "inform")!=0 && strcmp((yyvsp[(3) - (3)].str), "inform_deny")!=0)
+#line 1189 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
+                  strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
+                  strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
+                  && strcmp((yyvsp[0].str), "typetransparent")!=0 &&
+                  strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0)
                        yyerror("local-zone type: expected static, deny, "
                                "refuse, redirect, transparent, "
                                "typetransparent, inform, inform_deny "
                                "or nodefault");
-               else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) {
+               else if(strcmp((yyvsp[0].str), "nodefault")==0) {
                        if(!cfg_strlist_insert(&cfg_parser->cfg->
-                               local_zones_nodefault, (yyvsp[(2) - (3)].str)))
+                               local_zones_nodefault, (yyvsp[-1].str)))
                                fatal_exit("out of memory adding local-zone");
-                       free((yyvsp[(3) - (3)].str));
+                       free((yyvsp[0].str));
                } else {
                        if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 
-                               (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)))
+                               (yyvsp[-1].str), (yyvsp[0].str)))
                                fatal_exit("out of memory adding local-zone");
                }
        }
+#line 3366 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 252:
-/* Line 1792 of yacc.c  */
-#line 1213 "./util/configparser.y"
+#line 1213 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
                        fatal_exit("out of memory adding local-data");
        }
+#line 3376 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 253:
-/* Line 1792 of yacc.c  */
-#line 1220 "./util/configparser.y"
+#line 1220 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
-               OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str)));
-               ptr = cfg_ptr_reverse((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
+               ptr = cfg_ptr_reverse((yyvsp[0].str));
+               free((yyvsp[0].str));
                if(ptr) {
                        if(!cfg_strlist_insert(&cfg_parser->cfg->
                                local_data, ptr))
@@ -3631,525 +3390,525 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
+#line 3394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 254:
-/* Line 1792 of yacc.c  */
-#line 1235 "./util/configparser.y"
+#line 1235 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->minimal_responses =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3407 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 255:
-/* Line 1792 of yacc.c  */
-#line 1245 "./util/configparser.y"
+#line 1245 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->rrset_roundrobin =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3420 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 256:
-/* Line 1792 of yacc.c  */
-#line 1255 "./util/configparser.y"
+#line 1255 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
+               cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3430 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 257:
-/* Line 1792 of yacc.c  */
-#line 1262 "./util/configparser.y"
+#line 1262 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dns64_prefix);
-               cfg_parser->cfg->dns64_prefix = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
        }
+#line 3440 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 258:
-/* Line 1792 of yacc.c  */
-#line 1269 "./util/configparser.y"
+#line 1269 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3452 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 259:
-/* Line 1792 of yacc.c  */
-#line 1278 "./util/configparser.y"
+#line 1278 "./util/configparser.y" /* yacc.c:1646  */
     { 
-               OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->ratelimit = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3464 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 260:
-/* Line 1792 of yacc.c  */
-#line 1287 "./util/configparser.y"
+#line 1287 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ratelimit_size))
+               OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
+               if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3475 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 261:
-/* Line 1792 of yacc.c  */
-#line 1295 "./util/configparser.y"
+#line 1295 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
                        if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free((yyvsp[0].str));
        }
+#line 3491 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 262:
-/* Line 1792 of yacc.c  */
-#line 1308 "./util/configparser.y"
+#line 1308 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
-               if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) {
+               OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
                        yyerror("number expected");
                } else {
                        if(!cfg_str2list_insert(&cfg_parser->cfg->
-                               ratelimit_for_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)))
+                               ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
                                fatal_exit("out of memory adding "
                                        "ratelimit-for-domain");
                }
        }
+#line 3507 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 263:
-/* Line 1792 of yacc.c  */
-#line 1321 "./util/configparser.y"
+#line 1321 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
-               if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) {
+               OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
                        yyerror("number expected");
                } else {
                        if(!cfg_str2list_insert(&cfg_parser->cfg->
-                               ratelimit_below_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)))
+                               ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
                                fatal_exit("out of memory adding "
                                        "ratelimit-below-domain");
                }
        }
+#line 3523 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 264:
-/* Line 1792 of yacc.c  */
-#line 1334 "./util/configparser.y"
+#line 1334 "./util/configparser.y" /* yacc.c:1646  */
     { 
-               OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+               OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
+               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3535 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 265:
-/* Line 1792 of yacc.c  */
-#line 1343 "./util/configparser.y"
+#line 1343 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->qname_minimisation = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3548 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 266:
-/* Line 1792 of yacc.c  */
-#line 1353 "./util/configparser.y"
+#line 1353 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
                        yyerror("stub name override, there must be one name "
                                "for one stub-zone");
                free(cfg_parser->cfg->stubs->name);
-               cfg_parser->cfg->stubs->name = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
+#line 3561 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 267:
-/* Line 1792 of yacc.c  */
-#line 1363 "./util/configparser.y"
+#line 1363 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3571 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 268:
-/* Line 1792 of yacc.c  */
-#line 1370 "./util/configparser.y"
+#line 1370 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3581 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 269:
-/* Line 1792 of yacc.c  */
-#line 1377 "./util/configparser.y"
+#line 1377 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3593 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 270:
-/* Line 1792 of yacc.c  */
-#line 1386 "./util/configparser.y"
+#line 1386 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->stubs->isprime = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3606 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 271:
-/* Line 1792 of yacc.c  */
-#line 1396 "./util/configparser.y"
+#line 1396 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
                        yyerror("forward name override, there must be one "
                                "name for one forward-zone");
                free(cfg_parser->cfg->forwards->name);
-               cfg_parser->cfg->forwards->name = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
+#line 3619 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 272:
-/* Line 1792 of yacc.c  */
-#line 1406 "./util/configparser.y"
+#line 1406 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3629 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 273:
-/* Line 1792 of yacc.c  */
-#line 1413 "./util/configparser.y"
+#line 1413 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3639 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 274:
-/* Line 1792 of yacc.c  */
-#line 1420 "./util/configparser.y"
+#line 1420 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3651 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 275:
-/* Line 1792 of yacc.c  */
-#line 1429 "./util/configparser.y"
+#line 1429 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
+#line 3659 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 286:
-/* Line 1792 of yacc.c  */
-#line 1440 "./util/configparser.y"
+#line 1440 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->remote_control_enable = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3672 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 287:
-/* Line 1792 of yacc.c  */
-#line 1450 "./util/configparser.y"
+#line 1450 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
+               if(atoi((yyvsp[0].str)) == 0)
                        yyerror("control port number expected");
-               else cfg_parser->cfg->control_port = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
+#line 3684 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 288:
-/* Line 1792 of yacc.c  */
-#line 1459 "./util/configparser.y"
+#line 1459 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str)))
+               OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
+#line 3694 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 289:
-/* Line 1792 of yacc.c  */
-#line 1466 "./util/configparser.y"
+#line 1466 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(control_use_cert:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->remote_control_use_cert =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp((yyvsp[0].str), "yes")==0);
+               free((yyvsp[0].str));
        }
+#line 3707 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 290:
-/* Line 1792 of yacc.c  */
-#line 1476 "./util/configparser.y"
+#line 1476 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_key_file);
-               cfg_parser->cfg->server_key_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->server_key_file = (yyvsp[0].str);
        }
+#line 3717 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 291:
-/* Line 1792 of yacc.c  */
-#line 1483 "./util/configparser.y"
+#line 1483 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_cert_file);
-               cfg_parser->cfg->server_cert_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
        }
+#line 3727 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 292:
-/* Line 1792 of yacc.c  */
-#line 1490 "./util/configparser.y"
+#line 1490 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_key_file);
-               cfg_parser->cfg->control_key_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->control_key_file = (yyvsp[0].str);
        }
+#line 3737 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 293:
-/* Line 1792 of yacc.c  */
-#line 1497 "./util/configparser.y"
+#line 1497 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_cert_file);
-               cfg_parser->cfg->control_cert_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
        }
+#line 3747 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 294:
-/* Line 1792 of yacc.c  */
-#line 1504 "./util/configparser.y"
+#line 1504 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
+#line 3755 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 309:
-/* Line 1792 of yacc.c  */
-#line 1521 "./util/configparser.y"
+#line 1521 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->dnstap = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+               else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3766 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 310:
-/* Line 1792 of yacc.c  */
-#line 1529 "./util/configparser.y"
+#line 1529 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_socket_path);
-               cfg_parser->cfg->dnstap_socket_path = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
        }
+#line 3776 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 311:
-/* Line 1792 of yacc.c  */
-#line 1536 "./util/configparser.y"
+#line 1536 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+               else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3787 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 312:
-/* Line 1792 of yacc.c  */
-#line 1544 "./util/configparser.y"
+#line 1544 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+               else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3798 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 313:
-/* Line 1792 of yacc.c  */
-#line 1552 "./util/configparser.y"
+#line 1552 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_identity);
-               cfg_parser->cfg->dnstap_identity = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
        }
+#line 3808 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 314:
-/* Line 1792 of yacc.c  */
-#line 1559 "./util/configparser.y"
+#line 1559 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_version);
-               cfg_parser->cfg->dnstap_version = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
        }
+#line 3818 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 315:
-/* Line 1792 of yacc.c  */
-#line 1566 "./util/configparser.y"
+#line 1566 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+                       (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3830 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 316:
-/* Line 1792 of yacc.c  */
-#line 1575 "./util/configparser.y"
+#line 1575 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+                       (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3842 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 317:
-/* Line 1792 of yacc.c  */
-#line 1584 "./util/configparser.y"
+#line 1584 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_log_client_query_messages =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+                       (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3854 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 318:
-/* Line 1792 of yacc.c  */
-#line 1593 "./util/configparser.y"
+#line 1593 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_log_client_response_messages =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+                       (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3866 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 319:
-/* Line 1792 of yacc.c  */
-#line 1602 "./util/configparser.y"
+#line 1602 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+                       (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3878 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 320:
-/* Line 1792 of yacc.c  */
-#line 1611 "./util/configparser.y"
+#line 1611 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+               OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
+               if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
+                       (strcmp((yyvsp[0].str), "yes")==0);
        }
+#line 3890 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 321:
-/* Line 1792 of yacc.c  */
-#line 1620 "./util/configparser.y"
+#line 1620 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
+#line 3898 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 325:
-/* Line 1792 of yacc.c  */
-#line 1629 "./util/configparser.y"
+#line 1629 "./util/configparser.y" /* yacc.c:1646  */
     {
-               OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str)));
+               OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->python_script);
-               cfg_parser->cfg->python_script = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->python_script = (yyvsp[0].str);
        }
+#line 3908 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-/* Line 1792 of yacc.c  */
-#line 4153 "util/configparser.c"
+#line 3912 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4171,7 +3930,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -4186,9 +3945,9 @@ yyreduce:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error |
+`--------------------------------------*/
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
@@ -4239,20 +3998,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-       {
-         /* Return failure if at end of input.  */
-         if (yychar == YYEOF)
-           YYABORT;
-       }
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-       {
-         yydestruct ("Error: discarding",
-                     yytoken, &yylval);
-         yychar = YYEMPTY;
-       }
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -4271,7 +4030,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -4284,29 +4043,29 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-       YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-                 yystos[yystate], yyvsp);
+                  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -4357,14 +4116,14 @@ yyreturn:
       yydestruct ("Cleanup: discarding lookahead",
                   yytoken, &yylval);
     }
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                 yystos[*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -4375,13 +4134,9 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-/* Line 2055 of yacc.c  */
-#line 1634 "./util/configparser.y"
+#line 1634 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 40ad011d7819db34141e385fbd0fa00919f0ad7c..85cf7ed7ca86817ea85136cecffbac1b53085465 100644 (file)
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison interface for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
 #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
 # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
-/* Enabling traces.  */
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
 extern int yydebug;
 #endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     SPACE = 258,
-     LETTER = 259,
-     NEWLINE = 260,
-     COMMENT = 261,
-     COLON = 262,
-     ANY = 263,
-     ZONESTR = 264,
-     STRING_ARG = 265,
-     VAR_SERVER = 266,
-     VAR_VERBOSITY = 267,
-     VAR_NUM_THREADS = 268,
-     VAR_PORT = 269,
-     VAR_OUTGOING_RANGE = 270,
-     VAR_INTERFACE = 271,
-     VAR_DO_IP4 = 272,
-     VAR_DO_IP6 = 273,
-     VAR_DO_UDP = 274,
-     VAR_DO_TCP = 275,
-     VAR_TCP_MSS = 276,
-     VAR_OUTGOING_TCP_MSS = 277,
-     VAR_CHROOT = 278,
-     VAR_USERNAME = 279,
-     VAR_DIRECTORY = 280,
-     VAR_LOGFILE = 281,
-     VAR_PIDFILE = 282,
-     VAR_MSG_CACHE_SIZE = 283,
-     VAR_MSG_CACHE_SLABS = 284,
-     VAR_NUM_QUERIES_PER_THREAD = 285,
-     VAR_RRSET_CACHE_SIZE = 286,
-     VAR_RRSET_CACHE_SLABS = 287,
-     VAR_OUTGOING_NUM_TCP = 288,
-     VAR_INFRA_HOST_TTL = 289,
-     VAR_INFRA_LAME_TTL = 290,
-     VAR_INFRA_CACHE_SLABS = 291,
-     VAR_INFRA_CACHE_NUMHOSTS = 292,
-     VAR_INFRA_CACHE_LAME_SIZE = 293,
-     VAR_NAME = 294,
-     VAR_STUB_ZONE = 295,
-     VAR_STUB_HOST = 296,
-     VAR_STUB_ADDR = 297,
-     VAR_TARGET_FETCH_POLICY = 298,
-     VAR_HARDEN_SHORT_BUFSIZE = 299,
-     VAR_HARDEN_LARGE_QUERIES = 300,
-     VAR_FORWARD_ZONE = 301,
-     VAR_FORWARD_HOST = 302,
-     VAR_FORWARD_ADDR = 303,
-     VAR_DO_NOT_QUERY_ADDRESS = 304,
-     VAR_HIDE_IDENTITY = 305,
-     VAR_HIDE_VERSION = 306,
-     VAR_IDENTITY = 307,
-     VAR_VERSION = 308,
-     VAR_HARDEN_GLUE = 309,
-     VAR_MODULE_CONF = 310,
-     VAR_TRUST_ANCHOR_FILE = 311,
-     VAR_TRUST_ANCHOR = 312,
-     VAR_VAL_OVERRIDE_DATE = 313,
-     VAR_BOGUS_TTL = 314,
-     VAR_VAL_CLEAN_ADDITIONAL = 315,
-     VAR_VAL_PERMISSIVE_MODE = 316,
-     VAR_INCOMING_NUM_TCP = 317,
-     VAR_MSG_BUFFER_SIZE = 318,
-     VAR_KEY_CACHE_SIZE = 319,
-     VAR_KEY_CACHE_SLABS = 320,
-     VAR_TRUSTED_KEYS_FILE = 321,
-     VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 322,
-     VAR_USE_SYSLOG = 323,
-     VAR_OUTGOING_INTERFACE = 324,
-     VAR_ROOT_HINTS = 325,
-     VAR_DO_NOT_QUERY_LOCALHOST = 326,
-     VAR_CACHE_MAX_TTL = 327,
-     VAR_HARDEN_DNSSEC_STRIPPED = 328,
-     VAR_ACCESS_CONTROL = 329,
-     VAR_LOCAL_ZONE = 330,
-     VAR_LOCAL_DATA = 331,
-     VAR_INTERFACE_AUTOMATIC = 332,
-     VAR_STATISTICS_INTERVAL = 333,
-     VAR_DO_DAEMONIZE = 334,
-     VAR_USE_CAPS_FOR_ID = 335,
-     VAR_STATISTICS_CUMULATIVE = 336,
-     VAR_OUTGOING_PORT_PERMIT = 337,
-     VAR_OUTGOING_PORT_AVOID = 338,
-     VAR_DLV_ANCHOR_FILE = 339,
-     VAR_DLV_ANCHOR = 340,
-     VAR_NEG_CACHE_SIZE = 341,
-     VAR_HARDEN_REFERRAL_PATH = 342,
-     VAR_PRIVATE_ADDRESS = 343,
-     VAR_PRIVATE_DOMAIN = 344,
-     VAR_REMOTE_CONTROL = 345,
-     VAR_CONTROL_ENABLE = 346,
-     VAR_CONTROL_INTERFACE = 347,
-     VAR_CONTROL_PORT = 348,
-     VAR_SERVER_KEY_FILE = 349,
-     VAR_SERVER_CERT_FILE = 350,
-     VAR_CONTROL_KEY_FILE = 351,
-     VAR_CONTROL_CERT_FILE = 352,
-     VAR_CONTROL_USE_CERT = 353,
-     VAR_EXTENDED_STATISTICS = 354,
-     VAR_LOCAL_DATA_PTR = 355,
-     VAR_JOSTLE_TIMEOUT = 356,
-     VAR_STUB_PRIME = 357,
-     VAR_UNWANTED_REPLY_THRESHOLD = 358,
-     VAR_LOG_TIME_ASCII = 359,
-     VAR_DOMAIN_INSECURE = 360,
-     VAR_PYTHON = 361,
-     VAR_PYTHON_SCRIPT = 362,
-     VAR_VAL_SIG_SKEW_MIN = 363,
-     VAR_VAL_SIG_SKEW_MAX = 364,
-     VAR_CACHE_MIN_TTL = 365,
-     VAR_VAL_LOG_LEVEL = 366,
-     VAR_AUTO_TRUST_ANCHOR_FILE = 367,
-     VAR_KEEP_MISSING = 368,
-     VAR_ADD_HOLDDOWN = 369,
-     VAR_DEL_HOLDDOWN = 370,
-     VAR_SO_RCVBUF = 371,
-     VAR_EDNS_BUFFER_SIZE = 372,
-     VAR_PREFETCH = 373,
-     VAR_PREFETCH_KEY = 374,
-     VAR_SO_SNDBUF = 375,
-     VAR_SO_REUSEPORT = 376,
-     VAR_HARDEN_BELOW_NXDOMAIN = 377,
-     VAR_IGNORE_CD_FLAG = 378,
-     VAR_LOG_QUERIES = 379,
-     VAR_TCP_UPSTREAM = 380,
-     VAR_SSL_UPSTREAM = 381,
-     VAR_SSL_SERVICE_KEY = 382,
-     VAR_SSL_SERVICE_PEM = 383,
-     VAR_SSL_PORT = 384,
-     VAR_FORWARD_FIRST = 385,
-     VAR_STUB_FIRST = 386,
-     VAR_MINIMAL_RESPONSES = 387,
-     VAR_RRSET_ROUNDROBIN = 388,
-     VAR_MAX_UDP_SIZE = 389,
-     VAR_DELAY_CLOSE = 390,
-     VAR_UNBLOCK_LAN_ZONES = 391,
-     VAR_INFRA_CACHE_MIN_RTT = 392,
-     VAR_DNS64_PREFIX = 393,
-     VAR_DNS64_SYNTHALL = 394,
-     VAR_DNSTAP = 395,
-     VAR_DNSTAP_ENABLE = 396,
-     VAR_DNSTAP_SOCKET_PATH = 397,
-     VAR_DNSTAP_SEND_IDENTITY = 398,
-     VAR_DNSTAP_SEND_VERSION = 399,
-     VAR_DNSTAP_IDENTITY = 400,
-     VAR_DNSTAP_VERSION = 401,
-     VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 402,
-     VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 403,
-     VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 404,
-     VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 405,
-     VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 406,
-     VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 407,
-     VAR_HARDEN_ALGO_DOWNGRADE = 408,
-     VAR_IP_TRANSPARENT = 409,
-     VAR_RATELIMIT = 410,
-     VAR_RATELIMIT_SLABS = 411,
-     VAR_RATELIMIT_SIZE = 412,
-     VAR_RATELIMIT_FOR_DOMAIN = 413,
-     VAR_RATELIMIT_BELOW_DOMAIN = 414,
-     VAR_RATELIMIT_FACTOR = 415,
-     VAR_CAPS_WHITELIST = 416,
-     VAR_CACHE_MAX_NEGATIVE_TTL = 417,
-     VAR_PERMIT_SMALL_HOLDDOWN = 418,
-     VAR_QNAME_MINIMISATION = 419
-   };
+  enum yytokentype
+  {
+    SPACE = 258,
+    LETTER = 259,
+    NEWLINE = 260,
+    COMMENT = 261,
+    COLON = 262,
+    ANY = 263,
+    ZONESTR = 264,
+    STRING_ARG = 265,
+    VAR_SERVER = 266,
+    VAR_VERBOSITY = 267,
+    VAR_NUM_THREADS = 268,
+    VAR_PORT = 269,
+    VAR_OUTGOING_RANGE = 270,
+    VAR_INTERFACE = 271,
+    VAR_DO_IP4 = 272,
+    VAR_DO_IP6 = 273,
+    VAR_DO_UDP = 274,
+    VAR_DO_TCP = 275,
+    VAR_TCP_MSS = 276,
+    VAR_OUTGOING_TCP_MSS = 277,
+    VAR_CHROOT = 278,
+    VAR_USERNAME = 279,
+    VAR_DIRECTORY = 280,
+    VAR_LOGFILE = 281,
+    VAR_PIDFILE = 282,
+    VAR_MSG_CACHE_SIZE = 283,
+    VAR_MSG_CACHE_SLABS = 284,
+    VAR_NUM_QUERIES_PER_THREAD = 285,
+    VAR_RRSET_CACHE_SIZE = 286,
+    VAR_RRSET_CACHE_SLABS = 287,
+    VAR_OUTGOING_NUM_TCP = 288,
+    VAR_INFRA_HOST_TTL = 289,
+    VAR_INFRA_LAME_TTL = 290,
+    VAR_INFRA_CACHE_SLABS = 291,
+    VAR_INFRA_CACHE_NUMHOSTS = 292,
+    VAR_INFRA_CACHE_LAME_SIZE = 293,
+    VAR_NAME = 294,
+    VAR_STUB_ZONE = 295,
+    VAR_STUB_HOST = 296,
+    VAR_STUB_ADDR = 297,
+    VAR_TARGET_FETCH_POLICY = 298,
+    VAR_HARDEN_SHORT_BUFSIZE = 299,
+    VAR_HARDEN_LARGE_QUERIES = 300,
+    VAR_FORWARD_ZONE = 301,
+    VAR_FORWARD_HOST = 302,
+    VAR_FORWARD_ADDR = 303,
+    VAR_DO_NOT_QUERY_ADDRESS = 304,
+    VAR_HIDE_IDENTITY = 305,
+    VAR_HIDE_VERSION = 306,
+    VAR_IDENTITY = 307,
+    VAR_VERSION = 308,
+    VAR_HARDEN_GLUE = 309,
+    VAR_MODULE_CONF = 310,
+    VAR_TRUST_ANCHOR_FILE = 311,
+    VAR_TRUST_ANCHOR = 312,
+    VAR_VAL_OVERRIDE_DATE = 313,
+    VAR_BOGUS_TTL = 314,
+    VAR_VAL_CLEAN_ADDITIONAL = 315,
+    VAR_VAL_PERMISSIVE_MODE = 316,
+    VAR_INCOMING_NUM_TCP = 317,
+    VAR_MSG_BUFFER_SIZE = 318,
+    VAR_KEY_CACHE_SIZE = 319,
+    VAR_KEY_CACHE_SLABS = 320,
+    VAR_TRUSTED_KEYS_FILE = 321,
+    VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 322,
+    VAR_USE_SYSLOG = 323,
+    VAR_OUTGOING_INTERFACE = 324,
+    VAR_ROOT_HINTS = 325,
+    VAR_DO_NOT_QUERY_LOCALHOST = 326,
+    VAR_CACHE_MAX_TTL = 327,
+    VAR_HARDEN_DNSSEC_STRIPPED = 328,
+    VAR_ACCESS_CONTROL = 329,
+    VAR_LOCAL_ZONE = 330,
+    VAR_LOCAL_DATA = 331,
+    VAR_INTERFACE_AUTOMATIC = 332,
+    VAR_STATISTICS_INTERVAL = 333,
+    VAR_DO_DAEMONIZE = 334,
+    VAR_USE_CAPS_FOR_ID = 335,
+    VAR_STATISTICS_CUMULATIVE = 336,
+    VAR_OUTGOING_PORT_PERMIT = 337,
+    VAR_OUTGOING_PORT_AVOID = 338,
+    VAR_DLV_ANCHOR_FILE = 339,
+    VAR_DLV_ANCHOR = 340,
+    VAR_NEG_CACHE_SIZE = 341,
+    VAR_HARDEN_REFERRAL_PATH = 342,
+    VAR_PRIVATE_ADDRESS = 343,
+    VAR_PRIVATE_DOMAIN = 344,
+    VAR_REMOTE_CONTROL = 345,
+    VAR_CONTROL_ENABLE = 346,
+    VAR_CONTROL_INTERFACE = 347,
+    VAR_CONTROL_PORT = 348,
+    VAR_SERVER_KEY_FILE = 349,
+    VAR_SERVER_CERT_FILE = 350,
+    VAR_CONTROL_KEY_FILE = 351,
+    VAR_CONTROL_CERT_FILE = 352,
+    VAR_CONTROL_USE_CERT = 353,
+    VAR_EXTENDED_STATISTICS = 354,
+    VAR_LOCAL_DATA_PTR = 355,
+    VAR_JOSTLE_TIMEOUT = 356,
+    VAR_STUB_PRIME = 357,
+    VAR_UNWANTED_REPLY_THRESHOLD = 358,
+    VAR_LOG_TIME_ASCII = 359,
+    VAR_DOMAIN_INSECURE = 360,
+    VAR_PYTHON = 361,
+    VAR_PYTHON_SCRIPT = 362,
+    VAR_VAL_SIG_SKEW_MIN = 363,
+    VAR_VAL_SIG_SKEW_MAX = 364,
+    VAR_CACHE_MIN_TTL = 365,
+    VAR_VAL_LOG_LEVEL = 366,
+    VAR_AUTO_TRUST_ANCHOR_FILE = 367,
+    VAR_KEEP_MISSING = 368,
+    VAR_ADD_HOLDDOWN = 369,
+    VAR_DEL_HOLDDOWN = 370,
+    VAR_SO_RCVBUF = 371,
+    VAR_EDNS_BUFFER_SIZE = 372,
+    VAR_PREFETCH = 373,
+    VAR_PREFETCH_KEY = 374,
+    VAR_SO_SNDBUF = 375,
+    VAR_SO_REUSEPORT = 376,
+    VAR_HARDEN_BELOW_NXDOMAIN = 377,
+    VAR_IGNORE_CD_FLAG = 378,
+    VAR_LOG_QUERIES = 379,
+    VAR_TCP_UPSTREAM = 380,
+    VAR_SSL_UPSTREAM = 381,
+    VAR_SSL_SERVICE_KEY = 382,
+    VAR_SSL_SERVICE_PEM = 383,
+    VAR_SSL_PORT = 384,
+    VAR_FORWARD_FIRST = 385,
+    VAR_STUB_FIRST = 386,
+    VAR_MINIMAL_RESPONSES = 387,
+    VAR_RRSET_ROUNDROBIN = 388,
+    VAR_MAX_UDP_SIZE = 389,
+    VAR_DELAY_CLOSE = 390,
+    VAR_UNBLOCK_LAN_ZONES = 391,
+    VAR_INFRA_CACHE_MIN_RTT = 392,
+    VAR_DNS64_PREFIX = 393,
+    VAR_DNS64_SYNTHALL = 394,
+    VAR_DNSTAP = 395,
+    VAR_DNSTAP_ENABLE = 396,
+    VAR_DNSTAP_SOCKET_PATH = 397,
+    VAR_DNSTAP_SEND_IDENTITY = 398,
+    VAR_DNSTAP_SEND_VERSION = 399,
+    VAR_DNSTAP_IDENTITY = 400,
+    VAR_DNSTAP_VERSION = 401,
+    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 402,
+    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 403,
+    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 404,
+    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 405,
+    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 406,
+    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 407,
+    VAR_HARDEN_ALGO_DOWNGRADE = 408,
+    VAR_IP_TRANSPARENT = 409,
+    VAR_RATELIMIT = 410,
+    VAR_RATELIMIT_SLABS = 411,
+    VAR_RATELIMIT_SIZE = 412,
+    VAR_RATELIMIT_FOR_DOMAIN = 413,
+    VAR_RATELIMIT_BELOW_DOMAIN = 414,
+    VAR_RATELIMIT_FACTOR = 415,
+    VAR_CAPS_WHITELIST = 416,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 417,
+    VAR_PERMIT_SMALL_HOLDDOWN = 418,
+    VAR_QNAME_MINIMISATION = 419
+  };
 #endif
 /* Tokens.  */
 #define SPACE 258
@@ -374,39 +373,26 @@ extern int yydebug;
 #define VAR_PERMIT_SMALL_HOLDDOWN 418
 #define VAR_QNAME_MINIMISATION 419
 
-
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+
+union YYSTYPE
 {
-/* Line 2058 of yacc.c  */
-#line 64 "./util/configparser.y"
+#line 64 "./util/configparser.y" /* yacc.c:1909  */
 
        char*   str;
 
+#line 386 "util/configparser.h" /* yacc.c:1909  */
+};
 
-/* Line 2058 of yacc.c  */
-#line 390 "util/configparser.h"
-} YYSTYPE;
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
+
 extern YYSTYPE yylval;
 
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
 
 #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
index bcaeead561d7859c764430db0f3a8088cf49a35b..5bc81e86b420040d359227fe4c03e79618d627cc 100644 (file)
@@ -998,7 +998,7 @@ server_module_conf: VAR_MODULE_CONF STRING_ARG
 server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG
        {
                OUTYY(("P(server_val_override_date:%s)\n", $2));
-               if(strlen($2) == 0 || strcmp($2, "0") == 0) {
+               if(*$2 == '\0' || strcmp($2, "0") == 0) {
                        cfg_parser->cfg->val_date_override = 0;
                } else if(strlen($2) == 14) {
                        cfg_parser->cfg->val_date_override = 
@@ -1016,7 +1016,7 @@ server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG
 server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG
        {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", $2));
-               if(strlen($2) == 0 || strcmp($2, "0") == 0) {
+               if(*$2 == '\0' || strcmp($2, "0") == 0) {
                        cfg_parser->cfg->val_sig_skew_min = 0;
                } else {
                        cfg_parser->cfg->val_sig_skew_min = atoi($2);
@@ -1029,7 +1029,7 @@ server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG
 server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG
        {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", $2));
-               if(strlen($2) == 0 || strcmp($2, "0") == 0) {
+               if(*$2 == '\0' || strcmp($2, "0") == 0) {
                        cfg_parser->cfg->val_sig_skew_max = 0;
                } else {
                        cfg_parser->cfg->val_sig_skew_max = atoi($2);