]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Various fixes for #632: variable initialisation, convert the qinfo
authorGeorge Thessalonikefs <george@nlnetlabs.nl>
Wed, 2 Mar 2022 13:29:56 +0000 (14:29 +0100)
committerGeorge Thessalonikefs <george@nlnetlabs.nl>
Wed, 2 Mar 2022 13:29:56 +0000 (14:29 +0100)
  to str once, accept trailing dot in the local-zone ipset option.

doc/Changelog
ipset/ipset.c
testdata/ipset.tdir/ipset.conf
util/configparser.c
util/configparser.h
util/configparser.y

index b8dfa6f339daab1303f86d354c578bf5fbeff646..b3311201be10891661719d18239d1a8d3e77e730 100644 (file)
@@ -1,5 +1,7 @@
 2 March 2022: George
        - Merge PR #632 from scottrw93: Match cnames in ipset.
+       - Various fixes for #632: variable initialisation, convert the qinfo
+         to str once, accept trailing dot in the local-zone ipset option.
 
 1 March 2022: Wouter
        - Fix pythonmod for change in iter_dp_is_useless function prototype.
index 065cde5ba7624bf0e55a28b35623d61e59222d96..c61ebc205ee871e47efffdb846312ff5477772eb 100644 (file)
@@ -138,12 +138,11 @@ ipset_add_rrset_data(struct ipset_env *ie, struct mnl_socket *mnl,
 static int
 ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie,
        struct mnl_socket *mnl, struct ub_packed_rrset_key *rrset,
-       struct query_info qinfo, const char *setname, int af)
+       const char *qname, const int qlen, const char *setname, int af)
 {
        static char dname[BUFF_LEN];
-       static char qname[BUFF_LEN];
        const char *ds, *qs;
-       int dlen, plen, qlen;
+       int dlen, plen;
 
        struct config_strlist *p;
        struct packed_rrset_data *d;
@@ -153,16 +152,10 @@ ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie,
                log_err("bad domain name");
                return -1;
        }
-       if (dname[dlen - 1] == '.') {
-               dlen--;
-       }
-
-       qlen = sldns_wire2str_dname_buf(qinfo.qname, qinfo.qname_len, qname, BUFF_LEN);
-       if (qname[qlen - 1] == '.') {
-               qlen--;
-       }
 
        for (p = env->cfg->local_zones_ipset; p; p = p->next) {
+               ds = NULL;
+               qs = NULL;
                plen = strlen(p->str);
 
                if (dlen >= plen) {
@@ -186,47 +179,46 @@ static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
        struct query_info qinfo, struct ipset_env *ie)
 {
        struct mnl_socket *mnl;
-
        size_t i;
-
        const char *setname;
-
        struct ub_packed_rrset_key *rrset;
-
        int af;
-
+       static char qname[BUFF_LEN];
+       int qlen;
 
        mnl = (struct mnl_socket *)ie->mnl;
        if (!mnl) {
-               // retry to create mnl socket
+               /* retry to create mnl socket */
                mnl = open_mnl_socket();
                if (!mnl) {
                        return -1;
                }
-
                ie->mnl = mnl;
        }
 
-       for (i = 0; i < return_msg->rep->rrset_count; ++i) {
-               setname = NULL;
+       qlen = sldns_wire2str_dname_buf(qinfo.qname, qinfo.qname_len,
+               qname, BUFF_LEN);
+       if(qlen == 0) {
+               log_err("bad domain name");
+               return -1;
+       }
 
+       for(i = 0; i < return_msg->rep->rrset_count; i++) {
+               setname = NULL;
                rrset = return_msg->rep->rrsets[i];
-
-               if (rrset->rk.type == htons(LDNS_RR_TYPE_A)) {
+               if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A &&
+                       ie->v4_enabled == 1) {
                        af = AF_INET;
-                       if ((ie->v4_enabled == 1)) {
-                               setname = ie->name_v4;
-                       }
-               } else {
+                       setname = ie->name_v4;
+               } else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA &&
+                       ie->v6_enabled == 1) {
                        af = AF_INET6;
-                       if ((ie->v6_enabled == 1)) {
-                               setname = ie->name_v6;
-                       }
+                       setname = ie->name_v6;
                }
 
                if (setname) {
                        if(ipset_check_zones_for_rrset(env, ie, mnl, rrset,
-                               qinfo, setname, af) == -1)
+                               qname, qlen, setname, af) == -1)
                                return -1;
                }
        }
index a53db66f2fb658efa342d6f0767d1a48fbfabed0..7cc34912dd2f02e9012dc50b0832095e6f5095a8 100644 (file)
@@ -11,7 +11,7 @@ server:
        chroot: ""
        username: ""
        do-not-query-localhost: no
-       local-zone: "example.net" ipset
+       local-zone: "example.net." ipset
 stub-zone:
        name: "example.net."
        stub-addr: "127.0.0.1@@TOPORT@"
index 3a5ee57fc3223b965fe6cea18f9d4675c9cbbd7c..13b83a593100077757709ac3bd583fc7ebb1a061 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.6.4.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    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/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-/* Identify Bison output.  */
-#define YYBISON 1
+/* Identify Bison output, and Bison version.  */
+#define YYBISON 30706
 
-/* Bison version.  */
-#define YYBISON_VERSION "3.6.4"
+/* Bison version string.  */
+#define YYBISON_VERSION "3.7.6"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -119,701 +119,7 @@ extern struct config_parser_state* cfg_parser;
 #  endif
 # endif
 
-/* Use api.header.include to #include this header
-   instead of duplicating it here.  */
-#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
-# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token kinds.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    YYEMPTY = -2,
-    YYEOF = 0,                     /* "end of file"  */
-    YYerror = 256,                 /* error  */
-    YYUNDEF = 257,                 /* "invalid token"  */
-    SPACE = 258,                   /* SPACE  */
-    LETTER = 259,                  /* LETTER  */
-    NEWLINE = 260,                 /* NEWLINE  */
-    COMMENT = 261,                 /* COMMENT  */
-    COLON = 262,                   /* COLON  */
-    ANY = 263,                     /* ANY  */
-    ZONESTR = 264,                 /* ZONESTR  */
-    STRING_ARG = 265,              /* STRING_ARG  */
-    VAR_FORCE_TOPLEVEL = 266,      /* VAR_FORCE_TOPLEVEL  */
-    VAR_SERVER = 267,              /* VAR_SERVER  */
-    VAR_VERBOSITY = 268,           /* VAR_VERBOSITY  */
-    VAR_NUM_THREADS = 269,         /* VAR_NUM_THREADS  */
-    VAR_PORT = 270,                /* VAR_PORT  */
-    VAR_OUTGOING_RANGE = 271,      /* VAR_OUTGOING_RANGE  */
-    VAR_INTERFACE = 272,           /* VAR_INTERFACE  */
-    VAR_PREFER_IP4 = 273,          /* VAR_PREFER_IP4  */
-    VAR_DO_IP4 = 274,              /* VAR_DO_IP4  */
-    VAR_DO_IP6 = 275,              /* VAR_DO_IP6  */
-    VAR_PREFER_IP6 = 276,          /* VAR_PREFER_IP6  */
-    VAR_DO_UDP = 277,              /* VAR_DO_UDP  */
-    VAR_DO_TCP = 278,              /* VAR_DO_TCP  */
-    VAR_TCP_MSS = 279,             /* VAR_TCP_MSS  */
-    VAR_OUTGOING_TCP_MSS = 280,    /* VAR_OUTGOING_TCP_MSS  */
-    VAR_TCP_IDLE_TIMEOUT = 281,    /* VAR_TCP_IDLE_TIMEOUT  */
-    VAR_EDNS_TCP_KEEPALIVE = 282,  /* VAR_EDNS_TCP_KEEPALIVE  */
-    VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT  */
-    VAR_CHROOT = 284,              /* VAR_CHROOT  */
-    VAR_USERNAME = 285,            /* VAR_USERNAME  */
-    VAR_DIRECTORY = 286,           /* VAR_DIRECTORY  */
-    VAR_LOGFILE = 287,             /* VAR_LOGFILE  */
-    VAR_PIDFILE = 288,             /* VAR_PIDFILE  */
-    VAR_MSG_CACHE_SIZE = 289,      /* VAR_MSG_CACHE_SIZE  */
-    VAR_MSG_CACHE_SLABS = 290,     /* VAR_MSG_CACHE_SLABS  */
-    VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD  */
-    VAR_RRSET_CACHE_SIZE = 292,    /* VAR_RRSET_CACHE_SIZE  */
-    VAR_RRSET_CACHE_SLABS = 293,   /* VAR_RRSET_CACHE_SLABS  */
-    VAR_OUTGOING_NUM_TCP = 294,    /* VAR_OUTGOING_NUM_TCP  */
-    VAR_INFRA_HOST_TTL = 295,      /* VAR_INFRA_HOST_TTL  */
-    VAR_INFRA_LAME_TTL = 296,      /* VAR_INFRA_LAME_TTL  */
-    VAR_INFRA_CACHE_SLABS = 297,   /* VAR_INFRA_CACHE_SLABS  */
-    VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS  */
-    VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE  */
-    VAR_NAME = 300,                /* VAR_NAME  */
-    VAR_STUB_ZONE = 301,           /* VAR_STUB_ZONE  */
-    VAR_STUB_HOST = 302,           /* VAR_STUB_HOST  */
-    VAR_STUB_ADDR = 303,           /* VAR_STUB_ADDR  */
-    VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY  */
-    VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE  */
-    VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES  */
-    VAR_FORWARD_ZONE = 307,        /* VAR_FORWARD_ZONE  */
-    VAR_FORWARD_HOST = 308,        /* VAR_FORWARD_HOST  */
-    VAR_FORWARD_ADDR = 309,        /* VAR_FORWARD_ADDR  */
-    VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS  */
-    VAR_HIDE_IDENTITY = 311,       /* VAR_HIDE_IDENTITY  */
-    VAR_HIDE_VERSION = 312,        /* VAR_HIDE_VERSION  */
-    VAR_IDENTITY = 313,            /* VAR_IDENTITY  */
-    VAR_VERSION = 314,             /* VAR_VERSION  */
-    VAR_HARDEN_GLUE = 315,         /* VAR_HARDEN_GLUE  */
-    VAR_MODULE_CONF = 316,         /* VAR_MODULE_CONF  */
-    VAR_TRUST_ANCHOR_FILE = 317,   /* VAR_TRUST_ANCHOR_FILE  */
-    VAR_TRUST_ANCHOR = 318,        /* VAR_TRUST_ANCHOR  */
-    VAR_VAL_OVERRIDE_DATE = 319,   /* VAR_VAL_OVERRIDE_DATE  */
-    VAR_BOGUS_TTL = 320,           /* VAR_BOGUS_TTL  */
-    VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL  */
-    VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE  */
-    VAR_INCOMING_NUM_TCP = 323,    /* VAR_INCOMING_NUM_TCP  */
-    VAR_MSG_BUFFER_SIZE = 324,     /* VAR_MSG_BUFFER_SIZE  */
-    VAR_KEY_CACHE_SIZE = 325,      /* VAR_KEY_CACHE_SIZE  */
-    VAR_KEY_CACHE_SLABS = 326,     /* VAR_KEY_CACHE_SLABS  */
-    VAR_TRUSTED_KEYS_FILE = 327,   /* VAR_TRUSTED_KEYS_FILE  */
-    VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS  */
-    VAR_USE_SYSLOG = 329,          /* VAR_USE_SYSLOG  */
-    VAR_OUTGOING_INTERFACE = 330,  /* VAR_OUTGOING_INTERFACE  */
-    VAR_ROOT_HINTS = 331,          /* VAR_ROOT_HINTS  */
-    VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST  */
-    VAR_CACHE_MAX_TTL = 333,       /* VAR_CACHE_MAX_TTL  */
-    VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED  */
-    VAR_ACCESS_CONTROL = 335,      /* VAR_ACCESS_CONTROL  */
-    VAR_LOCAL_ZONE = 336,          /* VAR_LOCAL_ZONE  */
-    VAR_LOCAL_DATA = 337,          /* VAR_LOCAL_DATA  */
-    VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC  */
-    VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL  */
-    VAR_DO_DAEMONIZE = 340,        /* VAR_DO_DAEMONIZE  */
-    VAR_USE_CAPS_FOR_ID = 341,     /* VAR_USE_CAPS_FOR_ID  */
-    VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE  */
-    VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT  */
-    VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID  */
-    VAR_DLV_ANCHOR_FILE = 345,     /* VAR_DLV_ANCHOR_FILE  */
-    VAR_DLV_ANCHOR = 346,          /* VAR_DLV_ANCHOR  */
-    VAR_NEG_CACHE_SIZE = 347,      /* VAR_NEG_CACHE_SIZE  */
-    VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH  */
-    VAR_PRIVATE_ADDRESS = 349,     /* VAR_PRIVATE_ADDRESS  */
-    VAR_PRIVATE_DOMAIN = 350,      /* VAR_PRIVATE_DOMAIN  */
-    VAR_REMOTE_CONTROL = 351,      /* VAR_REMOTE_CONTROL  */
-    VAR_CONTROL_ENABLE = 352,      /* VAR_CONTROL_ENABLE  */
-    VAR_CONTROL_INTERFACE = 353,   /* VAR_CONTROL_INTERFACE  */
-    VAR_CONTROL_PORT = 354,        /* VAR_CONTROL_PORT  */
-    VAR_SERVER_KEY_FILE = 355,     /* VAR_SERVER_KEY_FILE  */
-    VAR_SERVER_CERT_FILE = 356,    /* VAR_SERVER_CERT_FILE  */
-    VAR_CONTROL_KEY_FILE = 357,    /* VAR_CONTROL_KEY_FILE  */
-    VAR_CONTROL_CERT_FILE = 358,   /* VAR_CONTROL_CERT_FILE  */
-    VAR_CONTROL_USE_CERT = 359,    /* VAR_CONTROL_USE_CERT  */
-    VAR_TCP_REUSE_TIMEOUT = 360,   /* VAR_TCP_REUSE_TIMEOUT  */
-    VAR_MAX_REUSE_TCP_QUERIES = 361, /* VAR_MAX_REUSE_TCP_QUERIES  */
-    VAR_EXTENDED_STATISTICS = 362, /* VAR_EXTENDED_STATISTICS  */
-    VAR_LOCAL_DATA_PTR = 363,      /* VAR_LOCAL_DATA_PTR  */
-    VAR_JOSTLE_TIMEOUT = 364,      /* VAR_JOSTLE_TIMEOUT  */
-    VAR_STUB_PRIME = 365,          /* VAR_STUB_PRIME  */
-    VAR_UNWANTED_REPLY_THRESHOLD = 366, /* VAR_UNWANTED_REPLY_THRESHOLD  */
-    VAR_LOG_TIME_ASCII = 367,      /* VAR_LOG_TIME_ASCII  */
-    VAR_DOMAIN_INSECURE = 368,     /* VAR_DOMAIN_INSECURE  */
-    VAR_PYTHON = 369,              /* VAR_PYTHON  */
-    VAR_PYTHON_SCRIPT = 370,       /* VAR_PYTHON_SCRIPT  */
-    VAR_VAL_SIG_SKEW_MIN = 371,    /* VAR_VAL_SIG_SKEW_MIN  */
-    VAR_VAL_SIG_SKEW_MAX = 372,    /* VAR_VAL_SIG_SKEW_MAX  */
-    VAR_VAL_MAX_RESTART = 373,     /* VAR_VAL_MAX_RESTART  */
-    VAR_CACHE_MIN_TTL = 374,       /* VAR_CACHE_MIN_TTL  */
-    VAR_VAL_LOG_LEVEL = 375,       /* VAR_VAL_LOG_LEVEL  */
-    VAR_AUTO_TRUST_ANCHOR_FILE = 376, /* VAR_AUTO_TRUST_ANCHOR_FILE  */
-    VAR_KEEP_MISSING = 377,        /* VAR_KEEP_MISSING  */
-    VAR_ADD_HOLDDOWN = 378,        /* VAR_ADD_HOLDDOWN  */
-    VAR_DEL_HOLDDOWN = 379,        /* VAR_DEL_HOLDDOWN  */
-    VAR_SO_RCVBUF = 380,           /* VAR_SO_RCVBUF  */
-    VAR_EDNS_BUFFER_SIZE = 381,    /* VAR_EDNS_BUFFER_SIZE  */
-    VAR_PREFETCH = 382,            /* VAR_PREFETCH  */
-    VAR_PREFETCH_KEY = 383,        /* VAR_PREFETCH_KEY  */
-    VAR_SO_SNDBUF = 384,           /* VAR_SO_SNDBUF  */
-    VAR_SO_REUSEPORT = 385,        /* VAR_SO_REUSEPORT  */
-    VAR_HARDEN_BELOW_NXDOMAIN = 386, /* VAR_HARDEN_BELOW_NXDOMAIN  */
-    VAR_IGNORE_CD_FLAG = 387,      /* VAR_IGNORE_CD_FLAG  */
-    VAR_LOG_QUERIES = 388,         /* VAR_LOG_QUERIES  */
-    VAR_LOG_REPLIES = 389,         /* VAR_LOG_REPLIES  */
-    VAR_LOG_LOCAL_ACTIONS = 390,   /* VAR_LOG_LOCAL_ACTIONS  */
-    VAR_TCP_UPSTREAM = 391,        /* VAR_TCP_UPSTREAM  */
-    VAR_SSL_UPSTREAM = 392,        /* VAR_SSL_UPSTREAM  */
-    VAR_TCP_AUTH_QUERY_TIMEOUT = 393, /* VAR_TCP_AUTH_QUERY_TIMEOUT  */
-    VAR_SSL_SERVICE_KEY = 394,     /* VAR_SSL_SERVICE_KEY  */
-    VAR_SSL_SERVICE_PEM = 395,     /* VAR_SSL_SERVICE_PEM  */
-    VAR_SSL_PORT = 396,            /* VAR_SSL_PORT  */
-    VAR_FORWARD_FIRST = 397,       /* VAR_FORWARD_FIRST  */
-    VAR_STUB_SSL_UPSTREAM = 398,   /* VAR_STUB_SSL_UPSTREAM  */
-    VAR_FORWARD_SSL_UPSTREAM = 399, /* VAR_FORWARD_SSL_UPSTREAM  */
-    VAR_TLS_CERT_BUNDLE = 400,     /* VAR_TLS_CERT_BUNDLE  */
-    VAR_STUB_TCP_UPSTREAM = 401,   /* VAR_STUB_TCP_UPSTREAM  */
-    VAR_FORWARD_TCP_UPSTREAM = 402, /* VAR_FORWARD_TCP_UPSTREAM  */
-    VAR_HTTPS_PORT = 403,          /* VAR_HTTPS_PORT  */
-    VAR_HTTP_ENDPOINT = 404,       /* VAR_HTTP_ENDPOINT  */
-    VAR_HTTP_MAX_STREAMS = 405,    /* VAR_HTTP_MAX_STREAMS  */
-    VAR_HTTP_QUERY_BUFFER_SIZE = 406, /* VAR_HTTP_QUERY_BUFFER_SIZE  */
-    VAR_HTTP_RESPONSE_BUFFER_SIZE = 407, /* VAR_HTTP_RESPONSE_BUFFER_SIZE  */
-    VAR_HTTP_NODELAY = 408,        /* VAR_HTTP_NODELAY  */
-    VAR_HTTP_NOTLS_DOWNSTREAM = 409, /* VAR_HTTP_NOTLS_DOWNSTREAM  */
-    VAR_STUB_FIRST = 410,          /* VAR_STUB_FIRST  */
-    VAR_MINIMAL_RESPONSES = 411,   /* VAR_MINIMAL_RESPONSES  */
-    VAR_RRSET_ROUNDROBIN = 412,    /* VAR_RRSET_ROUNDROBIN  */
-    VAR_MAX_UDP_SIZE = 413,        /* VAR_MAX_UDP_SIZE  */
-    VAR_DELAY_CLOSE = 414,         /* VAR_DELAY_CLOSE  */
-    VAR_UDP_CONNECT = 415,         /* VAR_UDP_CONNECT  */
-    VAR_UNBLOCK_LAN_ZONES = 416,   /* VAR_UNBLOCK_LAN_ZONES  */
-    VAR_INSECURE_LAN_ZONES = 417,  /* VAR_INSECURE_LAN_ZONES  */
-    VAR_INFRA_CACHE_MIN_RTT = 418, /* VAR_INFRA_CACHE_MIN_RTT  */
-    VAR_INFRA_KEEP_PROBING = 419,  /* VAR_INFRA_KEEP_PROBING  */
-    VAR_DNS64_PREFIX = 420,        /* VAR_DNS64_PREFIX  */
-    VAR_DNS64_SYNTHALL = 421,      /* VAR_DNS64_SYNTHALL  */
-    VAR_DNS64_IGNORE_AAAA = 422,   /* VAR_DNS64_IGNORE_AAAA  */
-    VAR_DNSTAP = 423,              /* VAR_DNSTAP  */
-    VAR_DNSTAP_ENABLE = 424,       /* VAR_DNSTAP_ENABLE  */
-    VAR_DNSTAP_SOCKET_PATH = 425,  /* VAR_DNSTAP_SOCKET_PATH  */
-    VAR_DNSTAP_IP = 426,           /* VAR_DNSTAP_IP  */
-    VAR_DNSTAP_TLS = 427,          /* VAR_DNSTAP_TLS  */
-    VAR_DNSTAP_TLS_SERVER_NAME = 428, /* VAR_DNSTAP_TLS_SERVER_NAME  */
-    VAR_DNSTAP_TLS_CERT_BUNDLE = 429, /* VAR_DNSTAP_TLS_CERT_BUNDLE  */
-    VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 430, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE  */
-    VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 431, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE  */
-    VAR_DNSTAP_SEND_IDENTITY = 432, /* VAR_DNSTAP_SEND_IDENTITY  */
-    VAR_DNSTAP_SEND_VERSION = 433, /* VAR_DNSTAP_SEND_VERSION  */
-    VAR_DNSTAP_BIDIRECTIONAL = 434, /* VAR_DNSTAP_BIDIRECTIONAL  */
-    VAR_DNSTAP_IDENTITY = 435,     /* VAR_DNSTAP_IDENTITY  */
-    VAR_DNSTAP_VERSION = 436,      /* VAR_DNSTAP_VERSION  */
-    VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 437, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES  */
-    VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 438, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES  */
-    VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 439, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES  */
-    VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 440, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES  */
-    VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 441, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES  */
-    VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 442, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES  */
-    VAR_RESPONSE_IP_TAG = 443,     /* VAR_RESPONSE_IP_TAG  */
-    VAR_RESPONSE_IP = 444,         /* VAR_RESPONSE_IP  */
-    VAR_RESPONSE_IP_DATA = 445,    /* VAR_RESPONSE_IP_DATA  */
-    VAR_HARDEN_ALGO_DOWNGRADE = 446, /* VAR_HARDEN_ALGO_DOWNGRADE  */
-    VAR_IP_TRANSPARENT = 447,      /* VAR_IP_TRANSPARENT  */
-    VAR_IP_DSCP = 448,             /* VAR_IP_DSCP  */
-    VAR_DISABLE_DNSSEC_LAME_CHECK = 449, /* VAR_DISABLE_DNSSEC_LAME_CHECK  */
-    VAR_IP_RATELIMIT = 450,        /* VAR_IP_RATELIMIT  */
-    VAR_IP_RATELIMIT_SLABS = 451,  /* VAR_IP_RATELIMIT_SLABS  */
-    VAR_IP_RATELIMIT_SIZE = 452,   /* VAR_IP_RATELIMIT_SIZE  */
-    VAR_RATELIMIT = 453,           /* VAR_RATELIMIT  */
-    VAR_RATELIMIT_SLABS = 454,     /* VAR_RATELIMIT_SLABS  */
-    VAR_RATELIMIT_SIZE = 455,      /* VAR_RATELIMIT_SIZE  */
-    VAR_OUTBOUND_MSG_RETRY = 456,  /* VAR_OUTBOUND_MSG_RETRY  */
-    VAR_RATELIMIT_FOR_DOMAIN = 457, /* VAR_RATELIMIT_FOR_DOMAIN  */
-    VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN  */
-    VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR  */
-    VAR_RATELIMIT_FACTOR = 460,    /* VAR_RATELIMIT_FACTOR  */
-    VAR_IP_RATELIMIT_BACKOFF = 461, /* VAR_IP_RATELIMIT_BACKOFF  */
-    VAR_RATELIMIT_BACKOFF = 462,   /* VAR_RATELIMIT_BACKOFF  */
-    VAR_SEND_CLIENT_SUBNET = 463,  /* VAR_SEND_CLIENT_SUBNET  */
-    VAR_CLIENT_SUBNET_ZONE = 464,  /* VAR_CLIENT_SUBNET_ZONE  */
-    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 465, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD  */
-    VAR_CLIENT_SUBNET_OPCODE = 466, /* VAR_CLIENT_SUBNET_OPCODE  */
-    VAR_MAX_CLIENT_SUBNET_IPV4 = 467, /* VAR_MAX_CLIENT_SUBNET_IPV4  */
-    VAR_MAX_CLIENT_SUBNET_IPV6 = 468, /* VAR_MAX_CLIENT_SUBNET_IPV6  */
-    VAR_MIN_CLIENT_SUBNET_IPV4 = 469, /* VAR_MIN_CLIENT_SUBNET_IPV4  */
-    VAR_MIN_CLIENT_SUBNET_IPV6 = 470, /* VAR_MIN_CLIENT_SUBNET_IPV6  */
-    VAR_MAX_ECS_TREE_SIZE_IPV4 = 471, /* VAR_MAX_ECS_TREE_SIZE_IPV4  */
-    VAR_MAX_ECS_TREE_SIZE_IPV6 = 472, /* VAR_MAX_ECS_TREE_SIZE_IPV6  */
-    VAR_CAPS_WHITELIST = 473,      /* VAR_CAPS_WHITELIST  */
-    VAR_CACHE_MAX_NEGATIVE_TTL = 474, /* VAR_CACHE_MAX_NEGATIVE_TTL  */
-    VAR_PERMIT_SMALL_HOLDDOWN = 475, /* VAR_PERMIT_SMALL_HOLDDOWN  */
-    VAR_QNAME_MINIMISATION = 476,  /* VAR_QNAME_MINIMISATION  */
-    VAR_QNAME_MINIMISATION_STRICT = 477, /* VAR_QNAME_MINIMISATION_STRICT  */
-    VAR_IP_FREEBIND = 478,         /* VAR_IP_FREEBIND  */
-    VAR_DEFINE_TAG = 479,          /* VAR_DEFINE_TAG  */
-    VAR_LOCAL_ZONE_TAG = 480,      /* VAR_LOCAL_ZONE_TAG  */
-    VAR_ACCESS_CONTROL_TAG = 481,  /* VAR_ACCESS_CONTROL_TAG  */
-    VAR_LOCAL_ZONE_OVERRIDE = 482, /* VAR_LOCAL_ZONE_OVERRIDE  */
-    VAR_ACCESS_CONTROL_TAG_ACTION = 483, /* VAR_ACCESS_CONTROL_TAG_ACTION  */
-    VAR_ACCESS_CONTROL_TAG_DATA = 484, /* VAR_ACCESS_CONTROL_TAG_DATA  */
-    VAR_VIEW = 485,                /* VAR_VIEW  */
-    VAR_ACCESS_CONTROL_VIEW = 486, /* VAR_ACCESS_CONTROL_VIEW  */
-    VAR_VIEW_FIRST = 487,          /* VAR_VIEW_FIRST  */
-    VAR_SERVE_EXPIRED = 488,       /* VAR_SERVE_EXPIRED  */
-    VAR_SERVE_EXPIRED_TTL = 489,   /* VAR_SERVE_EXPIRED_TTL  */
-    VAR_SERVE_EXPIRED_TTL_RESET = 490, /* VAR_SERVE_EXPIRED_TTL_RESET  */
-    VAR_SERVE_EXPIRED_REPLY_TTL = 491, /* VAR_SERVE_EXPIRED_REPLY_TTL  */
-    VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT  */
-    VAR_SERVE_ORIGINAL_TTL = 493,  /* VAR_SERVE_ORIGINAL_TTL  */
-    VAR_FAKE_DSA = 494,            /* VAR_FAKE_DSA  */
-    VAR_FAKE_SHA1 = 495,           /* VAR_FAKE_SHA1  */
-    VAR_LOG_IDENTITY = 496,        /* VAR_LOG_IDENTITY  */
-    VAR_HIDE_TRUSTANCHOR = 497,    /* VAR_HIDE_TRUSTANCHOR  */
-    VAR_HIDE_HTTP_USER_AGENT = 498, /* VAR_HIDE_HTTP_USER_AGENT  */
-    VAR_HTTP_USER_AGENT = 499,     /* VAR_HTTP_USER_AGENT  */
-    VAR_TRUST_ANCHOR_SIGNALING = 500, /* VAR_TRUST_ANCHOR_SIGNALING  */
-    VAR_AGGRESSIVE_NSEC = 501,     /* VAR_AGGRESSIVE_NSEC  */
-    VAR_USE_SYSTEMD = 502,         /* VAR_USE_SYSTEMD  */
-    VAR_SHM_ENABLE = 503,          /* VAR_SHM_ENABLE  */
-    VAR_SHM_KEY = 504,             /* VAR_SHM_KEY  */
-    VAR_ROOT_KEY_SENTINEL = 505,   /* VAR_ROOT_KEY_SENTINEL  */
-    VAR_DNSCRYPT = 506,            /* VAR_DNSCRYPT  */
-    VAR_DNSCRYPT_ENABLE = 507,     /* VAR_DNSCRYPT_ENABLE  */
-    VAR_DNSCRYPT_PORT = 508,       /* VAR_DNSCRYPT_PORT  */
-    VAR_DNSCRYPT_PROVIDER = 509,   /* VAR_DNSCRYPT_PROVIDER  */
-    VAR_DNSCRYPT_SECRET_KEY = 510, /* VAR_DNSCRYPT_SECRET_KEY  */
-    VAR_DNSCRYPT_PROVIDER_CERT = 511, /* VAR_DNSCRYPT_PROVIDER_CERT  */
-    VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 512, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED  */
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 513, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE  */
-    VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 514, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS  */
-    VAR_DNSCRYPT_NONCE_CACHE_SIZE = 515, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE  */
-    VAR_DNSCRYPT_NONCE_CACHE_SLABS = 516, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS  */
-    VAR_PAD_RESPONSES = 517,       /* VAR_PAD_RESPONSES  */
-    VAR_PAD_RESPONSES_BLOCK_SIZE = 518, /* VAR_PAD_RESPONSES_BLOCK_SIZE  */
-    VAR_PAD_QUERIES = 519,         /* VAR_PAD_QUERIES  */
-    VAR_PAD_QUERIES_BLOCK_SIZE = 520, /* VAR_PAD_QUERIES_BLOCK_SIZE  */
-    VAR_IPSECMOD_ENABLED = 521,    /* VAR_IPSECMOD_ENABLED  */
-    VAR_IPSECMOD_HOOK = 522,       /* VAR_IPSECMOD_HOOK  */
-    VAR_IPSECMOD_IGNORE_BOGUS = 523, /* VAR_IPSECMOD_IGNORE_BOGUS  */
-    VAR_IPSECMOD_MAX_TTL = 524,    /* VAR_IPSECMOD_MAX_TTL  */
-    VAR_IPSECMOD_WHITELIST = 525,  /* VAR_IPSECMOD_WHITELIST  */
-    VAR_IPSECMOD_STRICT = 526,     /* VAR_IPSECMOD_STRICT  */
-    VAR_CACHEDB = 527,             /* VAR_CACHEDB  */
-    VAR_CACHEDB_BACKEND = 528,     /* VAR_CACHEDB_BACKEND  */
-    VAR_CACHEDB_SECRETSEED = 529,  /* VAR_CACHEDB_SECRETSEED  */
-    VAR_CACHEDB_REDISHOST = 530,   /* VAR_CACHEDB_REDISHOST  */
-    VAR_CACHEDB_REDISPORT = 531,   /* VAR_CACHEDB_REDISPORT  */
-    VAR_CACHEDB_REDISTIMEOUT = 532, /* VAR_CACHEDB_REDISTIMEOUT  */
-    VAR_CACHEDB_REDISEXPIRERECORDS = 533, /* VAR_CACHEDB_REDISEXPIRERECORDS  */
-    VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 534, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM  */
-    VAR_FOR_UPSTREAM = 535,        /* VAR_FOR_UPSTREAM  */
-    VAR_AUTH_ZONE = 536,           /* VAR_AUTH_ZONE  */
-    VAR_ZONEFILE = 537,            /* VAR_ZONEFILE  */
-    VAR_MASTER = 538,              /* VAR_MASTER  */
-    VAR_URL = 539,                 /* VAR_URL  */
-    VAR_FOR_DOWNSTREAM = 540,      /* VAR_FOR_DOWNSTREAM  */
-    VAR_FALLBACK_ENABLED = 541,    /* VAR_FALLBACK_ENABLED  */
-    VAR_TLS_ADDITIONAL_PORT = 542, /* VAR_TLS_ADDITIONAL_PORT  */
-    VAR_LOW_RTT = 543,             /* VAR_LOW_RTT  */
-    VAR_LOW_RTT_PERMIL = 544,      /* VAR_LOW_RTT_PERMIL  */
-    VAR_FAST_SERVER_PERMIL = 545,  /* VAR_FAST_SERVER_PERMIL  */
-    VAR_FAST_SERVER_NUM = 546,     /* VAR_FAST_SERVER_NUM  */
-    VAR_ALLOW_NOTIFY = 547,        /* VAR_ALLOW_NOTIFY  */
-    VAR_TLS_WIN_CERT = 548,        /* VAR_TLS_WIN_CERT  */
-    VAR_TCP_CONNECTION_LIMIT = 549, /* VAR_TCP_CONNECTION_LIMIT  */
-    VAR_FORWARD_NO_CACHE = 550,    /* VAR_FORWARD_NO_CACHE  */
-    VAR_STUB_NO_CACHE = 551,       /* VAR_STUB_NO_CACHE  */
-    VAR_LOG_SERVFAIL = 552,        /* VAR_LOG_SERVFAIL  */
-    VAR_DENY_ANY = 553,            /* VAR_DENY_ANY  */
-    VAR_UNKNOWN_SERVER_TIME_LIMIT = 554, /* VAR_UNKNOWN_SERVER_TIME_LIMIT  */
-    VAR_LOG_TAG_QUERYREPLY = 555,  /* VAR_LOG_TAG_QUERYREPLY  */
-    VAR_STREAM_WAIT_SIZE = 556,    /* VAR_STREAM_WAIT_SIZE  */
-    VAR_TLS_CIPHERS = 557,         /* VAR_TLS_CIPHERS  */
-    VAR_TLS_CIPHERSUITES = 558,    /* VAR_TLS_CIPHERSUITES  */
-    VAR_TLS_USE_SNI = 559,         /* VAR_TLS_USE_SNI  */
-    VAR_IPSET = 560,               /* VAR_IPSET  */
-    VAR_IPSET_NAME_V4 = 561,       /* VAR_IPSET_NAME_V4  */
-    VAR_IPSET_NAME_V6 = 562,       /* VAR_IPSET_NAME_V6  */
-    VAR_TLS_SESSION_TICKET_KEYS = 563, /* VAR_TLS_SESSION_TICKET_KEYS  */
-    VAR_RPZ = 564,                 /* VAR_RPZ  */
-    VAR_TAGS = 565,                /* VAR_TAGS  */
-    VAR_RPZ_ACTION_OVERRIDE = 566, /* VAR_RPZ_ACTION_OVERRIDE  */
-    VAR_RPZ_CNAME_OVERRIDE = 567,  /* VAR_RPZ_CNAME_OVERRIDE  */
-    VAR_RPZ_LOG = 568,             /* VAR_RPZ_LOG  */
-    VAR_RPZ_LOG_NAME = 569,        /* VAR_RPZ_LOG_NAME  */
-    VAR_DYNLIB = 570,              /* VAR_DYNLIB  */
-    VAR_DYNLIB_FILE = 571,         /* VAR_DYNLIB_FILE  */
-    VAR_EDNS_CLIENT_STRING = 572,  /* VAR_EDNS_CLIENT_STRING  */
-    VAR_EDNS_CLIENT_STRING_OPCODE = 573, /* VAR_EDNS_CLIENT_STRING_OPCODE  */
-    VAR_NSID = 574,                /* VAR_NSID  */
-    VAR_ZONEMD_PERMISSIVE_MODE = 575, /* VAR_ZONEMD_PERMISSIVE_MODE  */
-    VAR_ZONEMD_CHECK = 576,        /* VAR_ZONEMD_CHECK  */
-    VAR_ZONEMD_REJECT_ABSENCE = 577, /* VAR_ZONEMD_REJECT_ABSENCE  */
-    VAR_RPZ_SIGNAL_NXDOMAIN_RA = 578, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA  */
-    VAR_INTERFACE_AUTOMATIC_PORTS = 579 /* VAR_INTERFACE_AUTOMATIC_PORTS  */
-  };
-  typedef enum yytokentype yytoken_kind_t;
-#endif
-/* Token kinds.  */
-#define YYEOF 0
-#define YYerror 256
-#define YYUNDEF 257
-#define SPACE 258
-#define LETTER 259
-#define NEWLINE 260
-#define COMMENT 261
-#define COLON 262
-#define ANY 263
-#define ZONESTR 264
-#define STRING_ARG 265
-#define VAR_FORCE_TOPLEVEL 266
-#define VAR_SERVER 267
-#define VAR_VERBOSITY 268
-#define VAR_NUM_THREADS 269
-#define VAR_PORT 270
-#define VAR_OUTGOING_RANGE 271
-#define VAR_INTERFACE 272
-#define VAR_PREFER_IP4 273
-#define VAR_DO_IP4 274
-#define VAR_DO_IP6 275
-#define VAR_PREFER_IP6 276
-#define VAR_DO_UDP 277
-#define VAR_DO_TCP 278
-#define VAR_TCP_MSS 279
-#define VAR_OUTGOING_TCP_MSS 280
-#define VAR_TCP_IDLE_TIMEOUT 281
-#define VAR_EDNS_TCP_KEEPALIVE 282
-#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283
-#define VAR_CHROOT 284
-#define VAR_USERNAME 285
-#define VAR_DIRECTORY 286
-#define VAR_LOGFILE 287
-#define VAR_PIDFILE 288
-#define VAR_MSG_CACHE_SIZE 289
-#define VAR_MSG_CACHE_SLABS 290
-#define VAR_NUM_QUERIES_PER_THREAD 291
-#define VAR_RRSET_CACHE_SIZE 292
-#define VAR_RRSET_CACHE_SLABS 293
-#define VAR_OUTGOING_NUM_TCP 294
-#define VAR_INFRA_HOST_TTL 295
-#define VAR_INFRA_LAME_TTL 296
-#define VAR_INFRA_CACHE_SLABS 297
-#define VAR_INFRA_CACHE_NUMHOSTS 298
-#define VAR_INFRA_CACHE_LAME_SIZE 299
-#define VAR_NAME 300
-#define VAR_STUB_ZONE 301
-#define VAR_STUB_HOST 302
-#define VAR_STUB_ADDR 303
-#define VAR_TARGET_FETCH_POLICY 304
-#define VAR_HARDEN_SHORT_BUFSIZE 305
-#define VAR_HARDEN_LARGE_QUERIES 306
-#define VAR_FORWARD_ZONE 307
-#define VAR_FORWARD_HOST 308
-#define VAR_FORWARD_ADDR 309
-#define VAR_DO_NOT_QUERY_ADDRESS 310
-#define VAR_HIDE_IDENTITY 311
-#define VAR_HIDE_VERSION 312
-#define VAR_IDENTITY 313
-#define VAR_VERSION 314
-#define VAR_HARDEN_GLUE 315
-#define VAR_MODULE_CONF 316
-#define VAR_TRUST_ANCHOR_FILE 317
-#define VAR_TRUST_ANCHOR 318
-#define VAR_VAL_OVERRIDE_DATE 319
-#define VAR_BOGUS_TTL 320
-#define VAR_VAL_CLEAN_ADDITIONAL 321
-#define VAR_VAL_PERMISSIVE_MODE 322
-#define VAR_INCOMING_NUM_TCP 323
-#define VAR_MSG_BUFFER_SIZE 324
-#define VAR_KEY_CACHE_SIZE 325
-#define VAR_KEY_CACHE_SLABS 326
-#define VAR_TRUSTED_KEYS_FILE 327
-#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328
-#define VAR_USE_SYSLOG 329
-#define VAR_OUTGOING_INTERFACE 330
-#define VAR_ROOT_HINTS 331
-#define VAR_DO_NOT_QUERY_LOCALHOST 332
-#define VAR_CACHE_MAX_TTL 333
-#define VAR_HARDEN_DNSSEC_STRIPPED 334
-#define VAR_ACCESS_CONTROL 335
-#define VAR_LOCAL_ZONE 336
-#define VAR_LOCAL_DATA 337
-#define VAR_INTERFACE_AUTOMATIC 338
-#define VAR_STATISTICS_INTERVAL 339
-#define VAR_DO_DAEMONIZE 340
-#define VAR_USE_CAPS_FOR_ID 341
-#define VAR_STATISTICS_CUMULATIVE 342
-#define VAR_OUTGOING_PORT_PERMIT 343
-#define VAR_OUTGOING_PORT_AVOID 344
-#define VAR_DLV_ANCHOR_FILE 345
-#define VAR_DLV_ANCHOR 346
-#define VAR_NEG_CACHE_SIZE 347
-#define VAR_HARDEN_REFERRAL_PATH 348
-#define VAR_PRIVATE_ADDRESS 349
-#define VAR_PRIVATE_DOMAIN 350
-#define VAR_REMOTE_CONTROL 351
-#define VAR_CONTROL_ENABLE 352
-#define VAR_CONTROL_INTERFACE 353
-#define VAR_CONTROL_PORT 354
-#define VAR_SERVER_KEY_FILE 355
-#define VAR_SERVER_CERT_FILE 356
-#define VAR_CONTROL_KEY_FILE 357
-#define VAR_CONTROL_CERT_FILE 358
-#define VAR_CONTROL_USE_CERT 359
-#define VAR_TCP_REUSE_TIMEOUT 360
-#define VAR_MAX_REUSE_TCP_QUERIES 361
-#define VAR_EXTENDED_STATISTICS 362
-#define VAR_LOCAL_DATA_PTR 363
-#define VAR_JOSTLE_TIMEOUT 364
-#define VAR_STUB_PRIME 365
-#define VAR_UNWANTED_REPLY_THRESHOLD 366
-#define VAR_LOG_TIME_ASCII 367
-#define VAR_DOMAIN_INSECURE 368
-#define VAR_PYTHON 369
-#define VAR_PYTHON_SCRIPT 370
-#define VAR_VAL_SIG_SKEW_MIN 371
-#define VAR_VAL_SIG_SKEW_MAX 372
-#define VAR_VAL_MAX_RESTART 373
-#define VAR_CACHE_MIN_TTL 374
-#define VAR_VAL_LOG_LEVEL 375
-#define VAR_AUTO_TRUST_ANCHOR_FILE 376
-#define VAR_KEEP_MISSING 377
-#define VAR_ADD_HOLDDOWN 378
-#define VAR_DEL_HOLDDOWN 379
-#define VAR_SO_RCVBUF 380
-#define VAR_EDNS_BUFFER_SIZE 381
-#define VAR_PREFETCH 382
-#define VAR_PREFETCH_KEY 383
-#define VAR_SO_SNDBUF 384
-#define VAR_SO_REUSEPORT 385
-#define VAR_HARDEN_BELOW_NXDOMAIN 386
-#define VAR_IGNORE_CD_FLAG 387
-#define VAR_LOG_QUERIES 388
-#define VAR_LOG_REPLIES 389
-#define VAR_LOG_LOCAL_ACTIONS 390
-#define VAR_TCP_UPSTREAM 391
-#define VAR_SSL_UPSTREAM 392
-#define VAR_TCP_AUTH_QUERY_TIMEOUT 393
-#define VAR_SSL_SERVICE_KEY 394
-#define VAR_SSL_SERVICE_PEM 395
-#define VAR_SSL_PORT 396
-#define VAR_FORWARD_FIRST 397
-#define VAR_STUB_SSL_UPSTREAM 398
-#define VAR_FORWARD_SSL_UPSTREAM 399
-#define VAR_TLS_CERT_BUNDLE 400
-#define VAR_STUB_TCP_UPSTREAM 401
-#define VAR_FORWARD_TCP_UPSTREAM 402
-#define VAR_HTTPS_PORT 403
-#define VAR_HTTP_ENDPOINT 404
-#define VAR_HTTP_MAX_STREAMS 405
-#define VAR_HTTP_QUERY_BUFFER_SIZE 406
-#define VAR_HTTP_RESPONSE_BUFFER_SIZE 407
-#define VAR_HTTP_NODELAY 408
-#define VAR_HTTP_NOTLS_DOWNSTREAM 409
-#define VAR_STUB_FIRST 410
-#define VAR_MINIMAL_RESPONSES 411
-#define VAR_RRSET_ROUNDROBIN 412
-#define VAR_MAX_UDP_SIZE 413
-#define VAR_DELAY_CLOSE 414
-#define VAR_UDP_CONNECT 415
-#define VAR_UNBLOCK_LAN_ZONES 416
-#define VAR_INSECURE_LAN_ZONES 417
-#define VAR_INFRA_CACHE_MIN_RTT 418
-#define VAR_INFRA_KEEP_PROBING 419
-#define VAR_DNS64_PREFIX 420
-#define VAR_DNS64_SYNTHALL 421
-#define VAR_DNS64_IGNORE_AAAA 422
-#define VAR_DNSTAP 423
-#define VAR_DNSTAP_ENABLE 424
-#define VAR_DNSTAP_SOCKET_PATH 425
-#define VAR_DNSTAP_IP 426
-#define VAR_DNSTAP_TLS 427
-#define VAR_DNSTAP_TLS_SERVER_NAME 428
-#define VAR_DNSTAP_TLS_CERT_BUNDLE 429
-#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 430
-#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 431
-#define VAR_DNSTAP_SEND_IDENTITY 432
-#define VAR_DNSTAP_SEND_VERSION 433
-#define VAR_DNSTAP_BIDIRECTIONAL 434
-#define VAR_DNSTAP_IDENTITY 435
-#define VAR_DNSTAP_VERSION 436
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 437
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 438
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 439
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 440
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 441
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 442
-#define VAR_RESPONSE_IP_TAG 443
-#define VAR_RESPONSE_IP 444
-#define VAR_RESPONSE_IP_DATA 445
-#define VAR_HARDEN_ALGO_DOWNGRADE 446
-#define VAR_IP_TRANSPARENT 447
-#define VAR_IP_DSCP 448
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 449
-#define VAR_IP_RATELIMIT 450
-#define VAR_IP_RATELIMIT_SLABS 451
-#define VAR_IP_RATELIMIT_SIZE 452
-#define VAR_RATELIMIT 453
-#define VAR_RATELIMIT_SLABS 454
-#define VAR_RATELIMIT_SIZE 455
-#define VAR_OUTBOUND_MSG_RETRY 456
-#define VAR_RATELIMIT_FOR_DOMAIN 457
-#define VAR_RATELIMIT_BELOW_DOMAIN 458
-#define VAR_IP_RATELIMIT_FACTOR 459
-#define VAR_RATELIMIT_FACTOR 460
-#define VAR_IP_RATELIMIT_BACKOFF 461
-#define VAR_RATELIMIT_BACKOFF 462
-#define VAR_SEND_CLIENT_SUBNET 463
-#define VAR_CLIENT_SUBNET_ZONE 464
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 465
-#define VAR_CLIENT_SUBNET_OPCODE 466
-#define VAR_MAX_CLIENT_SUBNET_IPV4 467
-#define VAR_MAX_CLIENT_SUBNET_IPV6 468
-#define VAR_MIN_CLIENT_SUBNET_IPV4 469
-#define VAR_MIN_CLIENT_SUBNET_IPV6 470
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 471
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 472
-#define VAR_CAPS_WHITELIST 473
-#define VAR_CACHE_MAX_NEGATIVE_TTL 474
-#define VAR_PERMIT_SMALL_HOLDDOWN 475
-#define VAR_QNAME_MINIMISATION 476
-#define VAR_QNAME_MINIMISATION_STRICT 477
-#define VAR_IP_FREEBIND 478
-#define VAR_DEFINE_TAG 479
-#define VAR_LOCAL_ZONE_TAG 480
-#define VAR_ACCESS_CONTROL_TAG 481
-#define VAR_LOCAL_ZONE_OVERRIDE 482
-#define VAR_ACCESS_CONTROL_TAG_ACTION 483
-#define VAR_ACCESS_CONTROL_TAG_DATA 484
-#define VAR_VIEW 485
-#define VAR_ACCESS_CONTROL_VIEW 486
-#define VAR_VIEW_FIRST 487
-#define VAR_SERVE_EXPIRED 488
-#define VAR_SERVE_EXPIRED_TTL 489
-#define VAR_SERVE_EXPIRED_TTL_RESET 490
-#define VAR_SERVE_EXPIRED_REPLY_TTL 491
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 492
-#define VAR_SERVE_ORIGINAL_TTL 493
-#define VAR_FAKE_DSA 494
-#define VAR_FAKE_SHA1 495
-#define VAR_LOG_IDENTITY 496
-#define VAR_HIDE_TRUSTANCHOR 497
-#define VAR_HIDE_HTTP_USER_AGENT 498
-#define VAR_HTTP_USER_AGENT 499
-#define VAR_TRUST_ANCHOR_SIGNALING 500
-#define VAR_AGGRESSIVE_NSEC 501
-#define VAR_USE_SYSTEMD 502
-#define VAR_SHM_ENABLE 503
-#define VAR_SHM_KEY 504
-#define VAR_ROOT_KEY_SENTINEL 505
-#define VAR_DNSCRYPT 506
-#define VAR_DNSCRYPT_ENABLE 507
-#define VAR_DNSCRYPT_PORT 508
-#define VAR_DNSCRYPT_PROVIDER 509
-#define VAR_DNSCRYPT_SECRET_KEY 510
-#define VAR_DNSCRYPT_PROVIDER_CERT 511
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 512
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 513
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 514
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 515
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 516
-#define VAR_PAD_RESPONSES 517
-#define VAR_PAD_RESPONSES_BLOCK_SIZE 518
-#define VAR_PAD_QUERIES 519
-#define VAR_PAD_QUERIES_BLOCK_SIZE 520
-#define VAR_IPSECMOD_ENABLED 521
-#define VAR_IPSECMOD_HOOK 522
-#define VAR_IPSECMOD_IGNORE_BOGUS 523
-#define VAR_IPSECMOD_MAX_TTL 524
-#define VAR_IPSECMOD_WHITELIST 525
-#define VAR_IPSECMOD_STRICT 526
-#define VAR_CACHEDB 527
-#define VAR_CACHEDB_BACKEND 528
-#define VAR_CACHEDB_SECRETSEED 529
-#define VAR_CACHEDB_REDISHOST 530
-#define VAR_CACHEDB_REDISPORT 531
-#define VAR_CACHEDB_REDISTIMEOUT 532
-#define VAR_CACHEDB_REDISEXPIRERECORDS 533
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 534
-#define VAR_FOR_UPSTREAM 535
-#define VAR_AUTH_ZONE 536
-#define VAR_ZONEFILE 537
-#define VAR_MASTER 538
-#define VAR_URL 539
-#define VAR_FOR_DOWNSTREAM 540
-#define VAR_FALLBACK_ENABLED 541
-#define VAR_TLS_ADDITIONAL_PORT 542
-#define VAR_LOW_RTT 543
-#define VAR_LOW_RTT_PERMIL 544
-#define VAR_FAST_SERVER_PERMIL 545
-#define VAR_FAST_SERVER_NUM 546
-#define VAR_ALLOW_NOTIFY 547
-#define VAR_TLS_WIN_CERT 548
-#define VAR_TCP_CONNECTION_LIMIT 549
-#define VAR_FORWARD_NO_CACHE 550
-#define VAR_STUB_NO_CACHE 551
-#define VAR_LOG_SERVFAIL 552
-#define VAR_DENY_ANY 553
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 554
-#define VAR_LOG_TAG_QUERYREPLY 555
-#define VAR_STREAM_WAIT_SIZE 556
-#define VAR_TLS_CIPHERS 557
-#define VAR_TLS_CIPHERSUITES 558
-#define VAR_TLS_USE_SNI 559
-#define VAR_IPSET 560
-#define VAR_IPSET_NAME_V4 561
-#define VAR_IPSET_NAME_V6 562
-#define VAR_TLS_SESSION_TICKET_KEYS 563
-#define VAR_RPZ 564
-#define VAR_TAGS 565
-#define VAR_RPZ_ACTION_OVERRIDE 566
-#define VAR_RPZ_CNAME_OVERRIDE 567
-#define VAR_RPZ_LOG 568
-#define VAR_RPZ_LOG_NAME 569
-#define VAR_DYNLIB 570
-#define VAR_DYNLIB_FILE 571
-#define VAR_EDNS_CLIENT_STRING 572
-#define VAR_EDNS_CLIENT_STRING_OPCODE 573
-#define VAR_NSID 574
-#define VAR_ZONEMD_PERMISSIVE_MODE 575
-#define VAR_ZONEMD_CHECK 576
-#define VAR_ZONEMD_REJECT_ABSENCE 577
-#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 578
-#define VAR_INTERFACE_AUTOMATIC_PORTS 579
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 66 "./util/configparser.y"
-
-       char*   str;
-
-#line 804 "util/configparser.c"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED  */
+#include "configparser.h"
 /* Symbol kind.  */
 enum yysymbol_kind_t
 {
@@ -1536,6 +842,18 @@ typedef int_least16_t yytype_int16;
 typedef short yytype_int16;
 #endif
 
+/* Work around bug in HP-UX 11.23, which defines these macros
+   incorrectly for preprocessor constants.  This workaround can likely
+   be removed in 2023, as HPE has promised support for HP-UX 11.23
+   (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+   <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
@@ -1633,9 +951,9 @@ typedef int yy_state_fast_t;
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
 #else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
 #endif
 
 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
@@ -1813,6 +1131,7 @@ union yyalloc
 /* YYNSTATES -- Number of states.  */
 #define YYNSTATES  1006
 
+/* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   579
 
 
@@ -1938,27 +1257,27 @@ static const yytype_int16 yyrline[] =
     1779,  1788,  1797,  1806,  1815,  1822,  1832,  1852,  1859,  1877,
     1890,  1903,  1916,  1925,  1934,  1943,  1952,  1962,  1972,  1983,
     1992,  2001,  2010,  2019,  2028,  2037,  2046,  2059,  2072,  2081,
-    2088,  2097,  2106,  2115,  2124,  2133,  2141,  2154,  2162,  2207,
-    2214,  2229,  2239,  2249,  2256,  2263,  2270,  2279,  2287,  2301,
-    2322,  2343,  2355,  2367,  2379,  2388,  2409,  2418,  2427,  2435,
-    2443,  2456,  2469,  2484,  2499,  2508,  2517,  2527,  2537,  2546,
-    2552,  2561,  2570,  2580,  2590,  2600,  2609,  2619,  2628,  2641,
-    2654,  2666,  2680,  2692,  2706,  2715,  2727,  2737,  2744,  2751,
-    2760,  2769,  2779,  2789,  2799,  2809,  2816,  2823,  2832,  2841,
-    2851,  2861,  2871,  2878,  2885,  2892,  2900,  2910,  2920,  2930,
-    2940,  2950,  2960,  3006,  3016,  3024,  3032,  3047,  3056,  3061,
-    3062,  3063,  3063,  3063,  3064,  3064,  3064,  3065,  3065,  3067,
-    3077,  3086,  3093,  3100,  3107,  3114,  3121,  3128,  3133,  3134,
-    3135,  3135,  3135,  3136,  3136,  3136,  3137,  3138,  3138,  3139,
-    3139,  3140,  3140,  3141,  3142,  3143,  3144,  3145,  3146,  3148,
-    3157,  3167,  3174,  3181,  3190,  3197,  3204,  3211,  3218,  3227,
-    3236,  3243,  3250,  3260,  3270,  3280,  3290,  3300,  3310,  3315,
-    3316,  3317,  3319,  3325,  3330,  3331,  3332,  3334,  3340,  3350,
-    3357,  3366,  3374,  3379,  3380,  3382,  3382,  3382,  3383,  3383,
-    3384,  3385,  3386,  3387,  3388,  3390,  3400,  3409,  3416,  3425,
-    3432,  3441,  3449,  3462,  3470,  3483,  3488,  3489,  3490,  3490,
-    3491,  3491,  3491,  3492,  3494,  3506,  3518,  3530,  3545,  3558,
-    3571,  3582,  3587,  3588,  3589,  3589,  3591,  3606
+    2088,  2097,  2106,  2115,  2124,  2133,  2141,  2154,  2162,  2217,
+    2224,  2239,  2249,  2259,  2266,  2273,  2280,  2289,  2297,  2311,
+    2332,  2353,  2365,  2377,  2389,  2398,  2419,  2428,  2437,  2445,
+    2453,  2466,  2479,  2494,  2509,  2518,  2527,  2537,  2547,  2556,
+    2562,  2571,  2580,  2590,  2600,  2610,  2619,  2629,  2638,  2651,
+    2664,  2676,  2690,  2702,  2716,  2725,  2737,  2747,  2754,  2761,
+    2770,  2779,  2789,  2799,  2809,  2819,  2826,  2833,  2842,  2851,
+    2861,  2871,  2881,  2888,  2895,  2902,  2910,  2920,  2930,  2940,
+    2950,  2960,  2970,  3026,  3036,  3044,  3052,  3067,  3076,  3081,
+    3082,  3083,  3083,  3083,  3084,  3084,  3084,  3085,  3085,  3087,
+    3097,  3106,  3113,  3120,  3127,  3134,  3141,  3148,  3153,  3154,
+    3155,  3155,  3155,  3156,  3156,  3156,  3157,  3158,  3158,  3159,
+    3159,  3160,  3160,  3161,  3162,  3163,  3164,  3165,  3166,  3168,
+    3177,  3187,  3194,  3201,  3210,  3217,  3224,  3231,  3238,  3247,
+    3256,  3263,  3270,  3280,  3290,  3300,  3310,  3320,  3330,  3335,
+    3336,  3337,  3339,  3345,  3350,  3351,  3352,  3354,  3360,  3370,
+    3377,  3386,  3394,  3399,  3400,  3402,  3402,  3402,  3403,  3403,
+    3404,  3405,  3406,  3407,  3408,  3410,  3420,  3429,  3436,  3445,
+    3452,  3461,  3469,  3482,  3490,  3503,  3508,  3509,  3510,  3510,
+    3511,  3511,  3511,  3512,  3514,  3526,  3538,  3550,  3565,  3578,
+    3591,  3602,  3607,  3608,  3609,  3609,  3611,  3626
 };
 #endif
 
@@ -2556,7 +1875,7 @@ static const yytype_int16 yypgoto[] =
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    17,    18,    19,    32,   267,    20,    33,   498,
+       0,     1,    17,    18,    19,    32,   267,    20,    33,   498,
       21,    34,   514,    22,    35,   529,    23,    36,   547,   564,
      565,   566,   567,   568,   569,    24,    37,   570,   268,   269,
      270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
@@ -3071,7 +2390,7 @@ yy_symbol_value_print (FILE *yyo,
                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
   FILE *yyoutput = yyo;
-  YYUSE (yyoutput);
+  YY_USE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
@@ -3079,7 +2398,7 @@ yy_symbol_value_print (FILE *yyo,
     YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
 # endif
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yykind);
+  YY_USE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
@@ -3193,18 +2512,18 @@ static void
 yydestruct (const char *yymsg,
             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
-  YYUSE (yyvaluep);
+  YY_USE (yyvaluep);
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yykind);
+  YY_USE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/* The lookahead symbol.  */
+/* Lookahead token kind.  */
 int yychar;
 
 /* The semantic value of the lookahead symbol.  */
@@ -3222,34 +2541,30 @@ int yynerrs;
 int
 yyparse (void)
 {
-    yy_state_fast_t yystate;
+    yy_state_fast_t yystate = 0;
     /* 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.
+    int yyerrstatus = 0;
 
-       Refer to the stacks through separate pointers, to allow yyoverflow
+    /* Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
     /* Their size.  */
-    YYPTRDIFF_T yystacksize;
+    YYPTRDIFF_T yystacksize = YYINITDEPTH;
 
-    /* The state stack.  */
+    /* The state stack: array, bottom, top.  */
     yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss;
-    yy_state_t *yyssp;
+    yy_state_t *yyss = yyssa;
+    yy_state_t *yyssp = yyss;
 
-    /* The semantic value stack.  */
+    /* The semantic value stack: array, bottom, top.  */
     YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    YYSTYPE *yyvs = yyvsa;
+    YYSTYPE *yyvsp = yyvs;
 
   int yyn;
   /* The return value of yyparse.  */
   int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
+  /* Lookahead symbol kind.  */
   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
@@ -3263,15 +2578,6 @@ yyparse (void)
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yynerrs = 0;
-  yystate = 0;
-  yyerrstatus = 0;
-
-  yystacksize = YYINITDEPTH;
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-
-
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yychar = YYEMPTY; /* Cause a token to be read.  */
@@ -3472,23 +2778,23 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-  case 18:
+  case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL  */
 #line 204 "./util/configparser.y"
         {
                OUTYY(("\nP(force-toplevel)\n"));
        }
-#line 3481 "util/configparser.c"
+#line 2787 "util/configparser.c"
     break;
 
-  case 19:
+  case 19: /* serverstart: VAR_SERVER  */
 #line 210 "./util/configparser.y"
         {
                OUTYY(("\nP(server:)\n"));
        }
-#line 3489 "util/configparser.c"
+#line 2795 "util/configparser.c"
     break;
 
-  case 244:
+  case 244: /* stubstart: VAR_STUB_ZONE  */
 #line 319 "./util/configparser.y"
         {
                struct config_stub* s;
@@ -3501,10 +2807,10 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 3505 "util/configparser.c"
+#line 2811 "util/configparser.c"
     break;
 
-  case 255:
+  case 255: /* forwardstart: VAR_FORWARD_ZONE  */
 #line 337 "./util/configparser.y"
         {
                struct config_stub* s;
@@ -3517,10 +2823,10 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 3521 "util/configparser.c"
+#line 2827 "util/configparser.c"
     break;
 
-  case 265:
+  case 265: /* viewstart: VAR_VIEW  */
 #line 355 "./util/configparser.y"
         {
                struct config_view* s;
@@ -3535,10 +2841,10 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 3539 "util/configparser.c"
+#line 2845 "util/configparser.c"
     break;
 
-  case 275:
+  case 275: /* authstart: VAR_AUTH_ZONE  */
 #line 375 "./util/configparser.y"
         {
                struct config_auth* s;
@@ -3558,10 +2864,10 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 3562 "util/configparser.c"
+#line 2868 "util/configparser.c"
     break;
 
-  case 288:
+  case 288: /* rpz_tag: VAR_TAGS STRING_ARG  */
 #line 402 "./util/configparser.y"
         {
                uint8_t* bitlist;
@@ -3579,10 +2885,10 @@ yyreduce:
 
                }
        }
-#line 3583 "util/configparser.c"
+#line 2889 "util/configparser.c"
     break;
 
-  case 289:
+  case 289: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG  */
 #line 421 "./util/configparser.y"
         {
                OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
@@ -3598,20 +2904,20 @@ yyreduce:
                        cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
                }
        }
-#line 3602 "util/configparser.c"
+#line 2908 "util/configparser.c"
     break;
 
-  case 290:
+  case 290: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG  */
 #line 438 "./util/configparser.y"
         {
                OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->auths->rpz_cname);
                cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
        }
-#line 3612 "util/configparser.c"
+#line 2918 "util/configparser.c"
     break;
 
-  case 291:
+  case 291: /* rpz_log: VAR_RPZ_LOG STRING_ARG  */
 #line 446 "./util/configparser.y"
         {
                OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
@@ -3620,20 +2926,20 @@ yyreduce:
                else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3624 "util/configparser.c"
+#line 2930 "util/configparser.c"
     break;
 
-  case 292:
+  case 292: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG  */
 #line 456 "./util/configparser.y"
         {
                OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->auths->rpz_log_name);
                cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
        }
-#line 3634 "util/configparser.c"
+#line 2940 "util/configparser.c"
     break;
 
-  case 293:
+  case 293: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG  */
 #line 463 "./util/configparser.y"
         {
                OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str)));
@@ -3642,10 +2948,10 @@ yyreduce:
                else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3646 "util/configparser.c"
+#line 2952 "util/configparser.c"
     break;
 
-  case 294:
+  case 294: /* rpzstart: VAR_RPZ  */
 #line 473 "./util/configparser.y"
         {
                struct config_auth* s;
@@ -3663,10 +2969,10 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 3667 "util/configparser.c"
+#line 2973 "util/configparser.c"
     break;
 
-  case 309:
+  case 309: /* server_num_threads: VAR_NUM_THREADS STRING_ARG  */
 #line 497 "./util/configparser.y"
         {
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
@@ -3675,10 +2981,10 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3679 "util/configparser.c"
+#line 2985 "util/configparser.c"
     break;
 
-  case 310:
+  case 310: /* server_verbosity: VAR_VERBOSITY STRING_ARG  */
 #line 506 "./util/configparser.y"
         {
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
@@ -3687,10 +2993,10 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3691 "util/configparser.c"
+#line 2997 "util/configparser.c"
     break;
 
-  case 311:
+  case 311: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG  */
 #line 515 "./util/configparser.y"
         {
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
@@ -3701,10 +3007,10 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3705 "util/configparser.c"
+#line 3011 "util/configparser.c"
     break;
 
-  case 312:
+  case 312: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG  */
 #line 526 "./util/configparser.y"
         {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
@@ -3713,10 +3019,10 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3717 "util/configparser.c"
+#line 3023 "util/configparser.c"
     break;
 
-  case 313:
+  case 313: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG  */
 #line 535 "./util/configparser.y"
         {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
@@ -3725,10 +3031,10 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3729 "util/configparser.c"
+#line 3035 "util/configparser.c"
     break;
 
-  case 314:
+  case 314: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG  */
 #line 544 "./util/configparser.y"
         {
                OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
@@ -3737,10 +3043,10 @@ yyreduce:
                else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3741 "util/configparser.c"
+#line 3047 "util/configparser.c"
     break;
 
-  case 315:
+  case 315: /* server_shm_key: VAR_SHM_KEY STRING_ARG  */
 #line 553 "./util/configparser.y"
         {
                OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
@@ -3751,10 +3057,10 @@ yyreduce:
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3755 "util/configparser.c"
+#line 3061 "util/configparser.c"
     break;
 
-  case 316:
+  case 316: /* server_port: VAR_PORT STRING_ARG  */
 #line 564 "./util/configparser.y"
         {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
@@ -3763,10 +3069,10 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3767 "util/configparser.c"
+#line 3073 "util/configparser.c"
     break;
 
-  case 317:
+  case 317: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG  */
 #line 573 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3778,10 +3084,10 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 3782 "util/configparser.c"
+#line 3088 "util/configparser.c"
     break;
 
-  case 318:
+  case 318: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG  */
 #line 585 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3794,10 +3100,10 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 3798 "util/configparser.c"
+#line 3104 "util/configparser.c"
     break;
 
-  case 319:
+  case 319: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG  */
 #line 599 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3812,10 +3118,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3816 "util/configparser.c"
+#line 3122 "util/configparser.c"
     break;
 
-  case 320:
+  case 320: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG  */
 #line 614 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3826,10 +3132,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3830 "util/configparser.c"
+#line 3136 "util/configparser.c"
     break;
 
-  case 321:
+  case 321: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG  */
 #line 625 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3846,10 +3152,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3850 "util/configparser.c"
+#line 3156 "util/configparser.c"
     break;
 
-  case 322:
+  case 322: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG  */
 #line 642 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3866,10 +3172,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3870 "util/configparser.c"
+#line 3176 "util/configparser.c"
     break;
 
-  case 323:
+  case 323: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG  */
 #line 659 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3886,10 +3192,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3890 "util/configparser.c"
+#line 3196 "util/configparser.c"
     break;
 
-  case 324:
+  case 324: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG  */
 #line 676 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3906,10 +3212,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3910 "util/configparser.c"
+#line 3216 "util/configparser.c"
     break;
 
-  case 325:
+  case 325: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG  */
 #line 693 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3924,10 +3230,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3928 "util/configparser.c"
+#line 3234 "util/configparser.c"
     break;
 
-  case 326:
+  case 326: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG  */
 #line 708 "./util/configparser.y"
         {
        #ifdef CLIENT_SUBNET
@@ -3942,10 +3248,10 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3946 "util/configparser.c"
+#line 3252 "util/configparser.c"
     break;
 
-  case 327:
+  case 327: /* server_interface: VAR_INTERFACE STRING_ARG  */
 #line 723 "./util/configparser.y"
         {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
@@ -3958,10 +3264,10 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 3962 "util/configparser.c"
+#line 3268 "util/configparser.c"
     break;
 
-  case 328:
+  case 328: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG  */
 #line 736 "./util/configparser.y"
         {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
@@ -3976,10 +3282,10 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 3980 "util/configparser.c"
+#line 3286 "util/configparser.c"
     break;
 
-  case 329:
+  case 329: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG  */
 #line 751 "./util/configparser.y"
         {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
@@ -3988,10 +3294,10 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3992 "util/configparser.c"
+#line 3298 "util/configparser.c"
     break;
 
-  case 330:
+  case 330: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG  */
 #line 760 "./util/configparser.y"
         {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
@@ -4000,10 +3306,10 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 4004 "util/configparser.c"
+#line 3310 "util/configparser.c"
     break;
 
-  case 331:
+  case 331: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG  */
 #line 769 "./util/configparser.y"
         {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
@@ -4012,10 +3318,10 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 4016 "util/configparser.c"
+#line 3322 "util/configparser.c"
     break;
 
-  case 332:
+  case 332: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG  */
 #line 778 "./util/configparser.y"
         {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
@@ -4024,10 +3330,10 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4028 "util/configparser.c"
+#line 3334 "util/configparser.c"
     break;
 
-  case 333:
+  case 333: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG  */
 #line 787 "./util/configparser.y"
         {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
@@ -4036,10 +3342,10 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4040 "util/configparser.c"
+#line 3346 "util/configparser.c"
     break;
 
-  case 334:
+  case 334: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG  */
 #line 796 "./util/configparser.y"
         {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
@@ -4048,20 +3354,20 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4052 "util/configparser.c"
+#line 3358 "util/configparser.c"
     break;
 
-  case 335:
+  case 335: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG  */
 #line 805 "./util/configparser.y"
         {
                OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->if_automatic_ports);
                cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str);
        }
-#line 4062 "util/configparser.c"
+#line 3368 "util/configparser.c"
     break;
 
-  case 336:
+  case 336: /* server_do_ip4: VAR_DO_IP4 STRING_ARG  */
 #line 812 "./util/configparser.y"
         {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
@@ -4070,10 +3376,10 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4074 "util/configparser.c"
+#line 3380 "util/configparser.c"
     break;
 
-  case 337:
+  case 337: /* server_do_ip6: VAR_DO_IP6 STRING_ARG  */
 #line 821 "./util/configparser.y"
         {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
@@ -4082,10 +3388,10 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4086 "util/configparser.c"
+#line 3392 "util/configparser.c"
     break;
 
-  case 338:
+  case 338: /* server_do_udp: VAR_DO_UDP STRING_ARG  */
 #line 830 "./util/configparser.y"
         {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
@@ -4094,10 +3400,10 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4098 "util/configparser.c"
+#line 3404 "util/configparser.c"
     break;
 
-  case 339:
+  case 339: /* server_do_tcp: VAR_DO_TCP STRING_ARG  */
 #line 839 "./util/configparser.y"
         {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
@@ -4106,10 +3412,10 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4110 "util/configparser.c"
+#line 3416 "util/configparser.c"
     break;
 
-  case 340:
+  case 340: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG  */
 #line 848 "./util/configparser.y"
         {
                OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
@@ -4118,10 +3424,10 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4122 "util/configparser.c"
+#line 3428 "util/configparser.c"
     break;
 
-  case 341:
+  case 341: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG  */
 #line 857 "./util/configparser.y"
         {
                OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
@@ -4130,10 +3436,10 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4134 "util/configparser.c"
+#line 3440 "util/configparser.c"
     break;
 
-  case 342:
+  case 342: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG  */
 #line 866 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
@@ -4142,10 +3448,10 @@ yyreduce:
                else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4146 "util/configparser.c"
+#line 3452 "util/configparser.c"
     break;
 
-  case 343:
+  case 343: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG  */
 #line 875 "./util/configparser.y"
         {
                OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
@@ -4154,10 +3460,10 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4158 "util/configparser.c"
+#line 3464 "util/configparser.c"
     break;
 
-  case 344:
+  case 344: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG  */
 #line 884 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
@@ -4170,10 +3476,10 @@ yyreduce:
                else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4174 "util/configparser.c"
+#line 3480 "util/configparser.c"
     break;
 
-  case 345:
+  case 345: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG  */
 #line 897 "./util/configparser.y"
         {
                OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str)));
@@ -4184,10 +3490,10 @@ yyreduce:
                else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4188 "util/configparser.c"
+#line 3494 "util/configparser.c"
     break;
 
-  case 346:
+  case 346: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG  */
 #line 908 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str)));
@@ -4198,10 +3504,10 @@ yyreduce:
                else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4202 "util/configparser.c"
+#line 3508 "util/configparser.c"
     break;
 
-  case 347:
+  case 347: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG  */
 #line 919 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str)));
@@ -4212,10 +3518,10 @@ yyreduce:
                else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4216 "util/configparser.c"
+#line 3522 "util/configparser.c"
     break;
 
-  case 348:
+  case 348: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG  */
 #line 930 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
@@ -4224,10 +3530,10 @@ yyreduce:
                else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4228 "util/configparser.c"
+#line 3534 "util/configparser.c"
     break;
 
-  case 349:
+  case 349: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG  */
 #line 939 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
@@ -4240,10 +3546,10 @@ yyreduce:
                else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4244 "util/configparser.c"
+#line 3550 "util/configparser.c"
     break;
 
-  case 350:
+  case 350: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG  */
 #line 952 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
@@ -4252,10 +3558,10 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4256 "util/configparser.c"
+#line 3562 "util/configparser.c"
     break;
 
-  case 351:
+  case 351: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG  */
 #line 961 "./util/configparser.y"
         {
                OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
@@ -4264,10 +3570,10 @@ yyreduce:
                else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4268 "util/configparser.c"
+#line 3574 "util/configparser.c"
     break;
 
-  case 352:
+  case 352: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG  */
 #line 970 "./util/configparser.y"
         {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
@@ -4276,30 +3582,30 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4280 "util/configparser.c"
+#line 3586 "util/configparser.c"
     break;
 
-  case 353:
+  case 353: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG  */
 #line 979 "./util/configparser.y"
         {
                OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_key);
                cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
        }
-#line 4290 "util/configparser.c"
+#line 3596 "util/configparser.c"
     break;
 
-  case 354:
+  case 354: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG  */
 #line 986 "./util/configparser.y"
         {
                OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_pem);
                cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
        }
-#line 4300 "util/configparser.c"
+#line 3606 "util/configparser.c"
     break;
 
-  case 355:
+  case 355: /* server_ssl_port: VAR_SSL_PORT STRING_ARG  */
 #line 993 "./util/configparser.y"
         {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
@@ -4308,20 +3614,20 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4312 "util/configparser.c"
+#line 3618 "util/configparser.c"
     break;
 
-  case 356:
+  case 356: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG  */
 #line 1002 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->tls_cert_bundle);
                cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
        }
-#line 4322 "util/configparser.c"
+#line 3628 "util/configparser.c"
     break;
 
-  case 357:
+  case 357: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG  */
 #line 1009 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
@@ -4330,10 +3636,10 @@ yyreduce:
                else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4334 "util/configparser.c"
+#line 3640 "util/configparser.c"
     break;
 
-  case 358:
+  case 358: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG  */
 #line 1018 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
@@ -4341,30 +3647,30 @@ yyreduce:
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4345 "util/configparser.c"
+#line 3651 "util/configparser.c"
     break;
 
-  case 359:
+  case 359: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG  */
 #line 1026 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->tls_ciphers);
                cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
        }
-#line 4355 "util/configparser.c"
+#line 3661 "util/configparser.c"
     break;
 
-  case 360:
+  case 360: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG  */
 #line 1033 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->tls_ciphersuites);
                cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
        }
-#line 4365 "util/configparser.c"
+#line 3671 "util/configparser.c"
     break;
 
-  case 361:
+  case 361: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG  */
 #line 1040 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
@@ -4372,10 +3678,10 @@ yyreduce:
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4376 "util/configparser.c"
+#line 3682 "util/configparser.c"
     break;
 
-  case 362:
+  case 362: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG  */
 #line 1048 "./util/configparser.y"
         {
                OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
@@ -4384,10 +3690,10 @@ yyreduce:
                else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4388 "util/configparser.c"
+#line 3694 "util/configparser.c"
     break;
 
-  case 363:
+  case 363: /* server_https_port: VAR_HTTPS_PORT STRING_ARG  */
 #line 1057 "./util/configparser.y"
         {
                OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
@@ -4396,10 +3702,10 @@ yyreduce:
                else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4400 "util/configparser.c"
+#line 3706 "util/configparser.c"
     break;
 
-  case 364:
+  case 364: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG  */
 #line 1065 "./util/configparser.y"
         {
                OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
@@ -4416,10 +3722,10 @@ yyreduce:
                        cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
                }
        }
-#line 4420 "util/configparser.c"
+#line 3726 "util/configparser.c"
     break;
 
-  case 365:
+  case 365: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG  */
 #line 1081 "./util/configparser.y"
         {
                OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
@@ -4428,10 +3734,10 @@ yyreduce:
                else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4432 "util/configparser.c"
+#line 3738 "util/configparser.c"
     break;
 
-  case 366:
+  case 366: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG  */
 #line 1089 "./util/configparser.y"
         {
                OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
@@ -4440,10 +3746,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4444 "util/configparser.c"
+#line 3750 "util/configparser.c"
     break;
 
-  case 367:
+  case 367: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG  */
 #line 1097 "./util/configparser.y"
         {
                OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
@@ -4452,10 +3758,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4456 "util/configparser.c"
+#line 3762 "util/configparser.c"
     break;
 
-  case 368:
+  case 368: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG  */
 #line 1105 "./util/configparser.y"
         {
                OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
@@ -4464,10 +3770,10 @@ yyreduce:
                else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4468 "util/configparser.c"
+#line 3774 "util/configparser.c"
     break;
 
-  case 369:
+  case 369: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG  */
 #line 1113 "./util/configparser.y"
         {
                OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
@@ -4476,10 +3782,10 @@ yyreduce:
                else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4480 "util/configparser.c"
+#line 3786 "util/configparser.c"
     break;
 
-  case 370:
+  case 370: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG  */
 #line 1121 "./util/configparser.y"
         {
                OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
@@ -4488,10 +3794,10 @@ yyreduce:
                else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4492 "util/configparser.c"
+#line 3798 "util/configparser.c"
     break;
 
-  case 371:
+  case 371: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG  */
 #line 1130 "./util/configparser.y"
         {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
@@ -4500,10 +3806,10 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4504 "util/configparser.c"
+#line 3810 "util/configparser.c"
     break;
 
-  case 372:
+  case 372: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG  */
 #line 1139 "./util/configparser.y"
         {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
@@ -4517,10 +3823,10 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 4521 "util/configparser.c"
+#line 3827 "util/configparser.c"
     break;
 
-  case 373:
+  case 373: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG  */
 #line 1153 "./util/configparser.y"
         {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
@@ -4529,10 +3835,10 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4533 "util/configparser.c"
+#line 3839 "util/configparser.c"
     break;
 
-  case 374:
+  case 374: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG  */
 #line 1162 "./util/configparser.y"
         {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
@@ -4541,10 +3847,10 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4545 "util/configparser.c"
+#line 3851 "util/configparser.c"
     break;
 
-  case 375:
+  case 375: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG  */
 #line 1171 "./util/configparser.y"
         {
                OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
@@ -4553,10 +3859,10 @@ yyreduce:
                else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4557 "util/configparser.c"
+#line 3863 "util/configparser.c"
     break;
 
-  case 376:
+  case 376: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG  */
 #line 1180 "./util/configparser.y"
         {
                OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
@@ -4565,10 +3871,10 @@ yyreduce:
                else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4569 "util/configparser.c"
+#line 3875 "util/configparser.c"
     break;
 
-  case 377:
+  case 377: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG  */
 #line 1189 "./util/configparser.y"
         {
                OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
@@ -4577,10 +3883,10 @@ yyreduce:
                else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4581 "util/configparser.c"
+#line 3887 "util/configparser.c"
     break;
 
-  case 378:
+  case 378: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG  */
 #line 1198 "./util/configparser.y"
         {
                OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
@@ -4589,30 +3895,30 @@ yyreduce:
                else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4593 "util/configparser.c"
+#line 3899 "util/configparser.c"
     break;
 
-  case 379:
+  case 379: /* server_chroot: VAR_CHROOT STRING_ARG  */
 #line 1207 "./util/configparser.y"
         {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->chrootdir);
                cfg_parser->cfg->chrootdir = (yyvsp[0].str);
        }
-#line 4603 "util/configparser.c"
+#line 3909 "util/configparser.c"
     break;
 
-  case 380:
+  case 380: /* server_username: VAR_USERNAME STRING_ARG  */
 #line 1214 "./util/configparser.y"
         {
                OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->username);
                cfg_parser->cfg->username = (yyvsp[0].str);
        }
-#line 4613 "util/configparser.c"
+#line 3919 "util/configparser.c"
     break;
 
-  case 381:
+  case 381: /* server_directory: VAR_DIRECTORY STRING_ARG  */
 #line 1221 "./util/configparser.y"
         {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
@@ -4638,10 +3944,10 @@ yyreduce:
                        }
                }
        }
-#line 4642 "util/configparser.c"
+#line 3948 "util/configparser.c"
     break;
 
-  case 382:
+  case 382: /* server_logfile: VAR_LOGFILE STRING_ARG  */
 #line 1247 "./util/configparser.y"
         {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
@@ -4649,50 +3955,50 @@ yyreduce:
                cfg_parser->cfg->logfile = (yyvsp[0].str);
                cfg_parser->cfg->use_syslog = 0;
        }
-#line 4653 "util/configparser.c"
+#line 3959 "util/configparser.c"
     break;
 
-  case 383:
+  case 383: /* server_pidfile: VAR_PIDFILE STRING_ARG  */
 #line 1255 "./util/configparser.y"
         {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->pidfile);
                cfg_parser->cfg->pidfile = (yyvsp[0].str);
        }
-#line 4663 "util/configparser.c"
+#line 3969 "util/configparser.c"
     break;
 
-  case 384:
+  case 384: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG  */
 #line 1262 "./util/configparser.y"
         {
                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 4673 "util/configparser.c"
+#line 3979 "util/configparser.c"
     break;
 
-  case 385:
+  case 385: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG  */
 #line 1269 "./util/configparser.y"
         {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
                log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
                free((yyvsp[0].str));
        }
-#line 4683 "util/configparser.c"
+#line 3989 "util/configparser.c"
     break;
 
-  case 386:
+  case 386: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG  */
 #line 1276 "./util/configparser.y"
         {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
                log_warn("option dlv-anchor ignored: DLV is decommissioned");
                free((yyvsp[0].str));
        }
-#line 4693 "util/configparser.c"
+#line 3999 "util/configparser.c"
     break;
 
-  case 387:
+  case 387: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG  */
 #line 1283 "./util/configparser.y"
         {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
@@ -4700,10 +4006,10 @@ yyreduce:
                        auto_trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4704 "util/configparser.c"
+#line 4010 "util/configparser.c"
     break;
 
-  case 388:
+  case 388: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG  */
 #line 1291 "./util/configparser.y"
         {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
@@ -4711,10 +4017,10 @@ yyreduce:
                        trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4715 "util/configparser.c"
+#line 4021 "util/configparser.c"
     break;
 
-  case 389:
+  case 389: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG  */
 #line 1299 "./util/configparser.y"
         {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
@@ -4722,20 +4028,20 @@ yyreduce:
                        trusted_keys_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4726 "util/configparser.c"
+#line 4032 "util/configparser.c"
     break;
 
-  case 390:
+  case 390: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG  */
 #line 1307 "./util/configparser.y"
         {
                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 4736 "util/configparser.c"
+#line 4042 "util/configparser.c"
     break;
 
-  case 391:
+  case 391: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG  */
 #line 1314 "./util/configparser.y"
         {
                OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
@@ -4746,10 +4052,10 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4750 "util/configparser.c"
+#line 4056 "util/configparser.c"
     break;
 
-  case 392:
+  case 392: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG  */
 #line 1325 "./util/configparser.y"
         {
                OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
@@ -4760,20 +4066,20 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4764 "util/configparser.c"
+#line 4070 "util/configparser.c"
     break;
 
-  case 393:
+  case 393: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG  */
 #line 1336 "./util/configparser.y"
         {
                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 4774 "util/configparser.c"
+#line 4080 "util/configparser.c"
     break;
 
-  case 394:
+  case 394: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG  */
 #line 1343 "./util/configparser.y"
         {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
@@ -4782,10 +4088,10 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4786 "util/configparser.c"
+#line 4092 "util/configparser.c"
     break;
 
-  case 395:
+  case 395: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG  */
 #line 1352 "./util/configparser.y"
         {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
@@ -4794,10 +4100,10 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4798 "util/configparser.c"
+#line 4104 "util/configparser.c"
     break;
 
-  case 396:
+  case 396: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG  */
 #line 1361 "./util/configparser.y"
         {
                OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
@@ -4806,10 +4112,10 @@ yyreduce:
                else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4810 "util/configparser.c"
+#line 4116 "util/configparser.c"
     break;
 
-  case 397:
+  case 397: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG  */
 #line 1370 "./util/configparser.y"
         {
                OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str)));
@@ -4818,40 +4124,40 @@ yyreduce:
                else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4822 "util/configparser.c"
+#line 4128 "util/configparser.c"
     break;
 
-  case 398:
+  case 398: /* server_identity: VAR_IDENTITY STRING_ARG  */
 #line 1379 "./util/configparser.y"
         {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->identity);
                cfg_parser->cfg->identity = (yyvsp[0].str);
        }
-#line 4832 "util/configparser.c"
+#line 4138 "util/configparser.c"
     break;
 
-  case 399:
+  case 399: /* server_version: VAR_VERSION STRING_ARG  */
 #line 1386 "./util/configparser.y"
         {
                OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->version);
                cfg_parser->cfg->version = (yyvsp[0].str);
        }
-#line 4842 "util/configparser.c"
+#line 4148 "util/configparser.c"
     break;
 
-  case 400:
+  case 400: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG  */
 #line 1393 "./util/configparser.y"
         {
                OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->http_user_agent);
                cfg_parser->cfg->http_user_agent = (yyvsp[0].str);
        }
-#line 4852 "util/configparser.c"
+#line 4158 "util/configparser.c"
     break;
 
-  case 401:
+  case 401: /* server_nsid: VAR_NSID STRING_ARG  */
 #line 1400 "./util/configparser.y"
         {
                OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
@@ -4867,10 +4173,10 @@ yyreduce:
                        yyerror("the NSID must be either a hex string or an "
                            "ascii character string prepended with ascii_.");
        }
-#line 4871 "util/configparser.c"
+#line 4177 "util/configparser.c"
     break;
 
-  case 402:
+  case 402: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG  */
 #line 1416 "./util/configparser.y"
         {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
@@ -4878,10 +4184,10 @@ yyreduce:
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 4882 "util/configparser.c"
+#line 4188 "util/configparser.c"
     break;
 
-  case 403:
+  case 403: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG  */
 #line 1424 "./util/configparser.y"
         {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
@@ -4889,10 +4195,10 @@ yyreduce:
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 4893 "util/configparser.c"
+#line 4199 "util/configparser.c"
     break;
 
-  case 404:
+  case 404: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG  */
 #line 1432 "./util/configparser.y"
         {
                OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
@@ -4902,10 +4208,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4906 "util/configparser.c"
+#line 4212 "util/configparser.c"
     break;
 
-  case 405:
+  case 405: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG  */
 #line 1442 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
@@ -4915,10 +4221,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4919 "util/configparser.c"
+#line 4225 "util/configparser.c"
     break;
 
-  case 406:
+  case 406: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG  */
 #line 1452 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
@@ -4928,10 +4234,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4932 "util/configparser.c"
+#line 4238 "util/configparser.c"
     break;
 
-  case 407:
+  case 407: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG  */
 #line 1462 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
@@ -4945,10 +4251,10 @@ yyreduce:
                        cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4949 "util/configparser.c"
+#line 4255 "util/configparser.c"
     break;
 
-  case 408:
+  case 408: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG  */
 #line 1476 "./util/configparser.y"
         {
                OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
@@ -4956,10 +4262,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4960 "util/configparser.c"
+#line 4266 "util/configparser.c"
     break;
 
-  case 409:
+  case 409: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG  */
 #line 1484 "./util/configparser.y"
         {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
@@ -4972,10 +4278,10 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4976 "util/configparser.c"
+#line 4282 "util/configparser.c"
     break;
 
-  case 410:
+  case 410: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG  */
 #line 1497 "./util/configparser.y"
         {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
@@ -4986,10 +4292,10 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4990 "util/configparser.c"
+#line 4296 "util/configparser.c"
     break;
 
-  case 411:
+  case 411: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG  */
 #line 1508 "./util/configparser.y"
         {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
@@ -4997,10 +4303,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5001 "util/configparser.c"
+#line 4307 "util/configparser.c"
     break;
 
-  case 412:
+  case 412: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG  */
 #line 1516 "./util/configparser.y"
         {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
@@ -5013,10 +4319,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5017 "util/configparser.c"
+#line 4323 "util/configparser.c"
     break;
 
-  case 413:
+  case 413: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG  */
 #line 1529 "./util/configparser.y"
         {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
@@ -5025,10 +4331,10 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5029 "util/configparser.c"
+#line 4335 "util/configparser.c"
     break;
 
-  case 414:
+  case 414: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG  */
 #line 1538 "./util/configparser.y"
         {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
@@ -5037,10 +4343,10 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5041 "util/configparser.c"
+#line 4347 "util/configparser.c"
     break;
 
-  case 415:
+  case 415: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG  */
 #line 1547 "./util/configparser.y"
         {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
@@ -5049,10 +4355,10 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5053 "util/configparser.c"
+#line 4359 "util/configparser.c"
     break;
 
-  case 416:
+  case 416: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG  */
 #line 1556 "./util/configparser.y"
         {
                OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
@@ -5061,10 +4367,10 @@ yyreduce:
                else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5065 "util/configparser.c"
+#line 4371 "util/configparser.c"
     break;
 
-  case 417:
+  case 417: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG  */
 #line 1565 "./util/configparser.y"
         {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
@@ -5074,10 +4380,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5078 "util/configparser.c"
+#line 4384 "util/configparser.c"
     break;
 
-  case 418:
+  case 418: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG  */
 #line 1575 "./util/configparser.y"
         {
                OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
@@ -5087,10 +4393,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5091 "util/configparser.c"
+#line 4397 "util/configparser.c"
     break;
 
-  case 419:
+  case 419: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG  */
 #line 1585 "./util/configparser.y"
         {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
@@ -5098,10 +4404,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5102 "util/configparser.c"
+#line 4408 "util/configparser.c"
     break;
 
-  case 420:
+  case 420: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG  */
 #line 1593 "./util/configparser.y"
         {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
@@ -5114,10 +4420,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5118 "util/configparser.c"
+#line 4424 "util/configparser.c"
     break;
 
-  case 421:
+  case 421: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG  */
 #line 1606 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
@@ -5126,10 +4432,10 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5130 "util/configparser.c"
+#line 4436 "util/configparser.c"
     break;
 
-  case 422:
+  case 422: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG  */
 #line 1615 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
@@ -5137,10 +4443,10 @@ yyreduce:
                        "removed, use infra-host-ttl)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5141 "util/configparser.c"
+#line 4447 "util/configparser.c"
     break;
 
-  case 423:
+  case 423: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG  */
 #line 1623 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
@@ -5149,10 +4455,10 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5153 "util/configparser.c"
+#line 4459 "util/configparser.c"
     break;
 
-  case 424:
+  case 424: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG  */
 #line 1632 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
@@ -5160,10 +4466,10 @@ yyreduce:
                        "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5164 "util/configparser.c"
+#line 4470 "util/configparser.c"
     break;
 
-  case 425:
+  case 425: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG  */
 #line 1640 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
@@ -5176,10 +4482,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5180 "util/configparser.c"
+#line 4486 "util/configparser.c"
     break;
 
-  case 426:
+  case 426: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG  */
 #line 1653 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
@@ -5188,10 +4494,10 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5192 "util/configparser.c"
+#line 4498 "util/configparser.c"
     break;
 
-  case 427:
+  case 427: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG  */
 #line 1662 "./util/configparser.y"
         {
                OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
@@ -5201,20 +4507,20 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5205 "util/configparser.c"
+#line 4511 "util/configparser.c"
     break;
 
-  case 428:
+  case 428: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG  */
 #line 1672 "./util/configparser.y"
         {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->target_fetch_policy);
                cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
        }
-#line 5215 "util/configparser.c"
+#line 4521 "util/configparser.c"
     break;
 
-  case 429:
+  case 429: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG  */
 #line 1679 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
@@ -5224,10 +4530,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5228 "util/configparser.c"
+#line 4534 "util/configparser.c"
     break;
 
-  case 430:
+  case 430: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG  */
 #line 1689 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
@@ -5237,10 +4543,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5241 "util/configparser.c"
+#line 4547 "util/configparser.c"
     break;
 
-  case 431:
+  case 431: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG  */
 #line 1699 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
@@ -5250,10 +4556,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5254 "util/configparser.c"
+#line 4560 "util/configparser.c"
     break;
 
-  case 432:
+  case 432: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG  */
 #line 1709 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
@@ -5263,10 +4569,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5267 "util/configparser.c"
+#line 4573 "util/configparser.c"
     break;
 
-  case 433:
+  case 433: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG  */
 #line 1719 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
@@ -5276,10 +4582,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5280 "util/configparser.c"
+#line 4586 "util/configparser.c"
     break;
 
-  case 434:
+  case 434: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG  */
 #line 1729 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
@@ -5289,10 +4595,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5293 "util/configparser.c"
+#line 4599 "util/configparser.c"
     break;
 
-  case 435:
+  case 435: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG  */
 #line 1739 "./util/configparser.y"
         {
                OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
@@ -5302,10 +4608,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5306 "util/configparser.c"
+#line 4612 "util/configparser.c"
     break;
 
-  case 436:
+  case 436: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG  */
 #line 1749 "./util/configparser.y"
         {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
@@ -5315,40 +4621,40 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5319 "util/configparser.c"
+#line 4625 "util/configparser.c"
     break;
 
-  case 437:
+  case 437: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG  */
 #line 1759 "./util/configparser.y"
         {
                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 5329 "util/configparser.c"
+#line 4635 "util/configparser.c"
     break;
 
-  case 438:
+  case 438: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG  */
 #line 1766 "./util/configparser.y"
         {
                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 5339 "util/configparser.c"
+#line 4645 "util/configparser.c"
     break;
 
-  case 439:
+  case 439: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG  */
 #line 1773 "./util/configparser.y"
         {
                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 5349 "util/configparser.c"
+#line 4655 "util/configparser.c"
     break;
 
-  case 440:
+  case 440: /* server_prefetch: VAR_PREFETCH STRING_ARG  */
 #line 1780 "./util/configparser.y"
         {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
@@ -5357,10 +4663,10 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5361 "util/configparser.c"
+#line 4667 "util/configparser.c"
     break;
 
-  case 441:
+  case 441: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG  */
 #line 1789 "./util/configparser.y"
         {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
@@ -5369,10 +4675,10 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5373 "util/configparser.c"
+#line 4679 "util/configparser.c"
     break;
 
-  case 442:
+  case 442: /* server_deny_any: VAR_DENY_ANY STRING_ARG  */
 #line 1798 "./util/configparser.y"
         {
                OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
@@ -5381,10 +4687,10 @@ yyreduce:
                else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5385 "util/configparser.c"
+#line 4691 "util/configparser.c"
     break;
 
-  case 443:
+  case 443: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG  */
 #line 1807 "./util/configparser.y"
         {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
@@ -5393,20 +4699,20 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5397 "util/configparser.c"
+#line 4703 "util/configparser.c"
     break;
 
-  case 444:
+  case 444: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG  */
 #line 1816 "./util/configparser.y"
         {
                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 5407 "util/configparser.c"
+#line 4713 "util/configparser.c"
     break;
 
-  case 445:
+  case 445: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG  */
 #line 1823 "./util/configparser.y"
         {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
@@ -5416,10 +4722,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5420 "util/configparser.c"
+#line 4726 "util/configparser.c"
     break;
 
-  case 446:
+  case 446: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG  */
 #line 1833 "./util/configparser.y"
         {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
@@ -5439,20 +4745,20 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 5443 "util/configparser.c"
+#line 4749 "util/configparser.c"
     break;
 
-  case 447:
+  case 447: /* server_module_conf: VAR_MODULE_CONF STRING_ARG  */
 #line 1853 "./util/configparser.y"
         {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->module_conf);
                cfg_parser->cfg->module_conf = (yyvsp[0].str);
        }
-#line 5453 "util/configparser.c"
+#line 4759 "util/configparser.c"
     break;
 
-  case 448:
+  case 448: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG  */
 #line 1860 "./util/configparser.y"
         {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
@@ -5470,10 +4776,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5474 "util/configparser.c"
+#line 4780 "util/configparser.c"
     break;
 
-  case 449:
+  case 449: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG  */
 #line 1878 "./util/configparser.y"
         {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
@@ -5486,10 +4792,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5490 "util/configparser.c"
+#line 4796 "util/configparser.c"
     break;
 
-  case 450:
+  case 450: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG  */
 #line 1891 "./util/configparser.y"
         {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
@@ -5502,10 +4808,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5506 "util/configparser.c"
+#line 4812 "util/configparser.c"
     break;
 
-  case 451:
+  case 451: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG  */
 #line 1904 "./util/configparser.y"
         {
                OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str)));
@@ -5518,10 +4824,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5522 "util/configparser.c"
+#line 4828 "util/configparser.c"
     break;
 
-  case 452:
+  case 452: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG  */
 #line 1917 "./util/configparser.y"
         {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -5530,10 +4836,10 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5534 "util/configparser.c"
+#line 4840 "util/configparser.c"
     break;
 
-  case 453:
+  case 453: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG  */
 #line 1926 "./util/configparser.y"
         {
                OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
@@ -5542,10 +4848,10 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5546 "util/configparser.c"
+#line 4852 "util/configparser.c"
     break;
 
-  case 454:
+  case 454: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG  */
 #line 1935 "./util/configparser.y"
         {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
@@ -5554,10 +4860,10 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5558 "util/configparser.c"
+#line 4864 "util/configparser.c"
     break;
 
-  case 455:
+  case 455: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG  */
 #line 1944 "./util/configparser.y"
         {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
@@ -5566,10 +4872,10 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5570 "util/configparser.c"
+#line 4876 "util/configparser.c"
     break;
 
-  case 456:
+  case 456: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG  */
 #line 1953 "./util/configparser.y"
         {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
@@ -5579,10 +4885,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5583 "util/configparser.c"
+#line 4889 "util/configparser.c"
     break;
 
-  case 457:
+  case 457: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG  */
 #line 1963 "./util/configparser.y"
         {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
@@ -5592,10 +4898,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5596 "util/configparser.c"
+#line 4902 "util/configparser.c"
     break;
 
-  case 458:
+  case 458: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG  */
 #line 1973 "./util/configparser.y"
         {
                OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
@@ -5606,10 +4912,10 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5610 "util/configparser.c"
+#line 4916 "util/configparser.c"
     break;
 
-  case 459:
+  case 459: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG  */
 #line 1984 "./util/configparser.y"
         {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
@@ -5618,10 +4924,10 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5622 "util/configparser.c"
+#line 4928 "util/configparser.c"
     break;
 
-  case 460:
+  case 460: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG  */
 #line 1993 "./util/configparser.y"
         {
                OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
@@ -5630,10 +4936,10 @@ yyreduce:
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5634 "util/configparser.c"
+#line 4940 "util/configparser.c"
     break;
 
-  case 461:
+  case 461: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG  */
 #line 2002 "./util/configparser.y"
         {
                OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
@@ -5642,10 +4948,10 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5646 "util/configparser.c"
+#line 4952 "util/configparser.c"
     break;
 
-  case 462:
+  case 462: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG  */
 #line 2011 "./util/configparser.y"
         {
                OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
@@ -5654,10 +4960,10 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5658 "util/configparser.c"
+#line 4964 "util/configparser.c"
     break;
 
-  case 463:
+  case 463: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG  */
 #line 2020 "./util/configparser.y"
         {
                OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
@@ -5666,10 +4972,10 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5670 "util/configparser.c"
+#line 4976 "util/configparser.c"
     break;
 
-  case 464:
+  case 464: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG  */
 #line 2029 "./util/configparser.y"
         {
                OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
@@ -5678,10 +4984,10 @@ yyreduce:
                else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5682 "util/configparser.c"
+#line 4988 "util/configparser.c"
     break;
 
-  case 465:
+  case 465: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG  */
 #line 2038 "./util/configparser.y"
         {
                OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str)));
@@ -5690,10 +4996,10 @@ yyreduce:
                else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5694 "util/configparser.c"
+#line 5000 "util/configparser.c"
     break;
 
-  case 466:
+  case 466: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG  */
 #line 2047 "./util/configparser.y"
         {
                OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
@@ -5706,10 +5012,10 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 5710 "util/configparser.c"
+#line 5016 "util/configparser.c"
     break;
 
-  case 467:
+  case 467: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG  */
 #line 2060 "./util/configparser.y"
         {
                OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
@@ -5722,10 +5028,10 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 5726 "util/configparser.c"
+#line 5032 "util/configparser.c"
     break;
 
-  case 468:
+  case 468: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG  */
 #line 2073 "./util/configparser.y"
         {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
@@ -5734,20 +5040,20 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5738 "util/configparser.c"
+#line 5044 "util/configparser.c"
     break;
 
-  case 469:
+  case 469: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG  */
 #line 2082 "./util/configparser.y"
         {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
                cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
        }
-#line 5748 "util/configparser.c"
+#line 5054 "util/configparser.c"
     break;
 
-  case 470:
+  case 470: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG  */
 #line 2089 "./util/configparser.y"
         {
                OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str)));
@@ -5756,10 +5062,10 @@ yyreduce:
                else    cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5760 "util/configparser.c"
+#line 5066 "util/configparser.c"
     break;
 
-  case 471:
+  case 471: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG  */
 #line 2098 "./util/configparser.y"
         {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
@@ -5768,10 +5074,10 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5772 "util/configparser.c"
+#line 5078 "util/configparser.c"
     break;
 
-  case 472:
+  case 472: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG  */
 #line 2107 "./util/configparser.y"
         {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
@@ -5780,10 +5086,10 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5784 "util/configparser.c"
+#line 5090 "util/configparser.c"
     break;
 
-  case 473:
+  case 473: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG  */
 #line 2116 "./util/configparser.y"
         {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
@@ -5792,10 +5098,10 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5796 "util/configparser.c"
+#line 5102 "util/configparser.c"
     break;
 
-  case 474:
+  case 474: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG  */
 #line 2125 "./util/configparser.y"
         {
                OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
@@ -5805,10 +5111,10 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5809 "util/configparser.c"
+#line 5115 "util/configparser.c"
     break;
 
-  case 475:
+  case 475: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG  */
 #line 2134 "./util/configparser.y"
         {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
@@ -5816,10 +5122,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5820 "util/configparser.c"
+#line 5126 "util/configparser.c"
     break;
 
-  case 476:
+  case 476: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG  */
 #line 2142 "./util/configparser.y"
         {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
@@ -5832,10 +5138,10 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5836 "util/configparser.c"
+#line 5142 "util/configparser.c"
     break;
 
-  case 477:
+  case 477: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG  */
 #line 2155 "./util/configparser.y"
         {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
@@ -5843,10 +5149,10 @@ yyreduce:
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5847 "util/configparser.c"
+#line 5153 "util/configparser.c"
     break;
 
-  case 478:
+  case 478: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG  */
 #line 2163 "./util/configparser.y"
         {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
@@ -5863,7 +5169,7 @@ yyreduce:
                   && strcmp((yyvsp[0].str), "noview")!=0
                   && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
                   && strcmp((yyvsp[0].str), "inform_redirect") != 0
-                        && strcmp((yyvsp[0].str), "ipset") != 0) {
+                  && strcmp((yyvsp[0].str), "ipset") != 0) {
                        yyerror("local-zone type: expected static, deny, "
                                "refuse, redirect, transparent, "
                                "typetransparent, inform, inform_deny, "
@@ -5880,6 +5186,16 @@ yyreduce:
                        free((yyvsp[0].str));
 #ifdef USE_IPSET
                } else if(strcmp((yyvsp[0].str), "ipset")==0) {
+                       size_t len = strlen((yyvsp[-1].str));
+                       /* Make sure to add the trailing dot.
+                        * These are str compared to domain names. */
+                       if((yyvsp[-1].str)[len-1] != '.') {
+                               if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
+                                       fatal_exit("out of memory adding local-zone");
+                               }
+                               (yyvsp[-1].str)[len] = '.';
+                               (yyvsp[-1].str)[len+1] = 0;
+                       }
                        if(!cfg_strlist_insert(&cfg_parser->cfg->
                                local_zones_ipset, (yyvsp[-1].str)))
                                fatal_exit("out of memory adding local-zone");
@@ -5891,21 +5207,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 5895 "util/configparser.c"
+#line 5211 "util/configparser.c"
     break;
 
-  case 479:
-#line 2208 "./util/configparser.y"
+  case 479: /* server_local_data: VAR_LOCAL_DATA STRING_ARG  */
+#line 2218 "./util/configparser.y"
         {
                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 5905 "util/configparser.c"
+#line 5221 "util/configparser.c"
     break;
 
-  case 480:
-#line 2215 "./util/configparser.y"
+  case 480: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG  */
+#line 2225 "./util/configparser.y"
         {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5919,11 +5235,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 5923 "util/configparser.c"
+#line 5239 "util/configparser.c"
     break;
 
-  case 481:
-#line 2230 "./util/configparser.y"
+  case 481: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG  */
+#line 2240 "./util/configparser.y"
         {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5932,11 +5248,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5936 "util/configparser.c"
+#line 5252 "util/configparser.c"
     break;
 
-  case 482:
-#line 2240 "./util/configparser.y"
+  case 482: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG  */
+#line 2250 "./util/configparser.y"
         {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5945,41 +5261,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5949 "util/configparser.c"
+#line 5265 "util/configparser.c"
     break;
 
-  case 483:
-#line 2250 "./util/configparser.y"
+  case 483: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG  */
+#line 2260 "./util/configparser.y"
         {
                OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5959 "util/configparser.c"
+#line 5275 "util/configparser.c"
     break;
 
-  case 484:
-#line 2257 "./util/configparser.y"
+  case 484: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG  */
+#line 2267 "./util/configparser.y"
         {
                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 5969 "util/configparser.c"
+#line 5285 "util/configparser.c"
     break;
 
-  case 485:
-#line 2264 "./util/configparser.y"
+  case 485: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG  */
+#line 2274 "./util/configparser.y"
         {
                OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dns64_prefix);
                cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
        }
-#line 5979 "util/configparser.c"
+#line 5295 "util/configparser.c"
     break;
 
-  case 486:
-#line 2271 "./util/configparser.y"
+  case 486: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG  */
+#line 2281 "./util/configparser.y"
         {
                OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5987,22 +5303,22 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5991 "util/configparser.c"
+#line 5307 "util/configparser.c"
     break;
 
-  case 487:
-#line 2280 "./util/configparser.y"
+  case 487: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG  */
+#line 2290 "./util/configparser.y"
         {
                OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
                        (yyvsp[0].str)))
                        fatal_exit("out of memory adding dns64-ignore-aaaa");
        }
-#line 6002 "util/configparser.c"
+#line 5318 "util/configparser.c"
     break;
 
-  case 488:
-#line 2288 "./util/configparser.y"
+  case 488: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG  */
+#line 2298 "./util/configparser.y"
         {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -6015,11 +5331,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 6019 "util/configparser.c"
+#line 5335 "util/configparser.c"
     break;
 
-  case 489:
-#line 2302 "./util/configparser.y"
+  case 489: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG  */
+#line 2312 "./util/configparser.y"
         {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6039,11 +5355,11 @@ yyreduce:
                        }
                }
        }
-#line 6043 "util/configparser.c"
+#line 5359 "util/configparser.c"
     break;
 
-  case 490:
-#line 2323 "./util/configparser.y"
+  case 490: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG  */
+#line 2333 "./util/configparser.y"
         {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6063,11 +5379,11 @@ yyreduce:
                        }
                }
        }
-#line 6067 "util/configparser.c"
+#line 5383 "util/configparser.c"
     break;
 
-  case 491:
-#line 2344 "./util/configparser.y"
+  case 491: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG  */
+#line 2354 "./util/configparser.y"
         {
                OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -6078,11 +5394,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 6082 "util/configparser.c"
+#line 5398 "util/configparser.c"
     break;
 
-  case 492:
-#line 2356 "./util/configparser.y"
+  case 492: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG  */
+#line 2366 "./util/configparser.y"
         {
                OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -6093,11 +5409,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 6097 "util/configparser.c"
+#line 5413 "util/configparser.c"
     break;
 
-  case 493:
-#line 2368 "./util/configparser.y"
+  case 493: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG  */
+#line 2378 "./util/configparser.y"
         {
                OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -6108,11 +5424,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 6112 "util/configparser.c"
+#line 5428 "util/configparser.c"
     break;
 
-  case 494:
-#line 2380 "./util/configparser.y"
+  case 494: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG  */
+#line 2390 "./util/configparser.y"
         {
                OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -6120,11 +5436,11 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 6124 "util/configparser.c"
+#line 5440 "util/configparser.c"
     break;
 
-  case 495:
-#line 2389 "./util/configparser.y"
+  case 495: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG  */
+#line 2399 "./util/configparser.y"
         {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6144,11 +5460,11 @@ yyreduce:
                        }
                }
        }
-#line 6148 "util/configparser.c"
+#line 5464 "util/configparser.c"
     break;
 
-  case 496:
-#line 2410 "./util/configparser.y"
+  case 496: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG  */
+#line 2420 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6156,11 +5472,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6160 "util/configparser.c"
+#line 5476 "util/configparser.c"
     break;
 
-  case 497:
-#line 2419 "./util/configparser.y"
+  case 497: /* server_ratelimit: VAR_RATELIMIT STRING_ARG  */
+#line 2429 "./util/configparser.y"
         {
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6168,33 +5484,33 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6172 "util/configparser.c"
+#line 5488 "util/configparser.c"
     break;
 
-  case 498:
-#line 2428 "./util/configparser.y"
+  case 498: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG  */
+#line 2438 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 6183 "util/configparser.c"
+#line 5499 "util/configparser.c"
     break;
 
-  case 499:
-#line 2436 "./util/configparser.y"
+  case 499: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG  */
+#line 2446 "./util/configparser.y"
         {
                OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 6194 "util/configparser.c"
+#line 5510 "util/configparser.c"
     break;
 
-  case 500:
-#line 2444 "./util/configparser.y"
+  case 500: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG  */
+#line 2454 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0) {
@@ -6206,11 +5522,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 6210 "util/configparser.c"
+#line 5526 "util/configparser.c"
     break;
 
-  case 501:
-#line 2457 "./util/configparser.y"
+  case 501: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG  */
+#line 2467 "./util/configparser.y"
         {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0) {
@@ -6222,11 +5538,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 6226 "util/configparser.c"
+#line 5542 "util/configparser.c"
     break;
 
-  case 502:
-#line 2470 "./util/configparser.y"
+  case 502: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG  */
+#line 2480 "./util/configparser.y"
         {
                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) {
@@ -6240,11 +5556,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 6244 "util/configparser.c"
+#line 5560 "util/configparser.c"
     break;
 
-  case 503:
-#line 2485 "./util/configparser.y"
+  case 503: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG  */
+#line 2495 "./util/configparser.y"
         {
                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) {
@@ -6258,11 +5574,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 6262 "util/configparser.c"
+#line 5578 "util/configparser.c"
     break;
 
-  case 504:
-#line 2500 "./util/configparser.y"
+  case 504: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG  */
+#line 2510 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6270,11 +5586,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6274 "util/configparser.c"
+#line 5590 "util/configparser.c"
     break;
 
-  case 505:
-#line 2509 "./util/configparser.y"
+  case 505: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG  */
+#line 2519 "./util/configparser.y"
         {
                OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6282,11 +5598,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6286 "util/configparser.c"
+#line 5602 "util/configparser.c"
     break;
 
-  case 506:
-#line 2518 "./util/configparser.y"
+  case 506: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG  */
+#line 2528 "./util/configparser.y"
         {
                OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6295,11 +5611,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6299 "util/configparser.c"
+#line 5615 "util/configparser.c"
     break;
 
-  case 507:
-#line 2528 "./util/configparser.y"
+  case 507: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG  */
+#line 2538 "./util/configparser.y"
         {
                OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6308,11 +5624,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6312 "util/configparser.c"
+#line 5628 "util/configparser.c"
     break;
 
-  case 508:
-#line 2538 "./util/configparser.y"
+  case 508: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG  */
+#line 2548 "./util/configparser.y"
         {
                OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6320,20 +5636,20 @@ yyreduce:
                else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6324 "util/configparser.c"
+#line 5640 "util/configparser.c"
     break;
 
-  case 509:
-#line 2547 "./util/configparser.y"
+  case 509: /* server_low_rtt: VAR_LOW_RTT STRING_ARG  */
+#line 2557 "./util/configparser.y"
         {
                OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
                free((yyvsp[0].str));
        }
-#line 6333 "util/configparser.c"
+#line 5649 "util/configparser.c"
     break;
 
-  case 510:
-#line 2553 "./util/configparser.y"
+  case 510: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG  */
+#line 2563 "./util/configparser.y"
         {
                OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) <= 0)
@@ -6341,11 +5657,11 @@ yyreduce:
                else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6345 "util/configparser.c"
+#line 5661 "util/configparser.c"
     break;
 
-  case 511:
-#line 2562 "./util/configparser.y"
+  case 511: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG  */
+#line 2572 "./util/configparser.y"
         {
                OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6353,11 +5669,11 @@ yyreduce:
                else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6357 "util/configparser.c"
+#line 5673 "util/configparser.c"
     break;
 
-  case 512:
-#line 2571 "./util/configparser.y"
+  case 512: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG  */
+#line 2581 "./util/configparser.y"
         {
                OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6366,11 +5682,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6370 "util/configparser.c"
+#line 5686 "util/configparser.c"
     break;
 
-  case 513:
-#line 2581 "./util/configparser.y"
+  case 513: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG  */
+#line 2591 "./util/configparser.y"
         {
                OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6379,11 +5695,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6383 "util/configparser.c"
+#line 5699 "util/configparser.c"
     break;
 
-  case 514:
-#line 2591 "./util/configparser.y"
+  case 514: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG  */
+#line 2601 "./util/configparser.y"
         {
                OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6392,11 +5708,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6396 "util/configparser.c"
+#line 5712 "util/configparser.c"
     break;
 
-  case 515:
-#line 2601 "./util/configparser.y"
+  case 515: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG  */
+#line 2611 "./util/configparser.y"
         {
                OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -6404,11 +5720,11 @@ yyreduce:
                else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6408 "util/configparser.c"
+#line 5724 "util/configparser.c"
     break;
 
-  case 516:
-#line 2610 "./util/configparser.y"
+  case 516: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG  */
+#line 2620 "./util/configparser.y"
         {
                OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6417,11 +5733,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6421 "util/configparser.c"
+#line 5737 "util/configparser.c"
     break;
 
-  case 517:
-#line 2620 "./util/configparser.y"
+  case 517: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG  */
+#line 2630 "./util/configparser.y"
         {
                OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -6429,11 +5745,11 @@ yyreduce:
                else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6433 "util/configparser.c"
+#line 5749 "util/configparser.c"
     break;
 
-  case 518:
-#line 2629 "./util/configparser.y"
+  case 518: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG  */
+#line 2639 "./util/configparser.y"
         {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -6445,11 +5761,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6449 "util/configparser.c"
+#line 5765 "util/configparser.c"
     break;
 
-  case 519:
-#line 2642 "./util/configparser.y"
+  case 519: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG  */
+#line 2652 "./util/configparser.y"
         {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -6461,11 +5777,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6465 "util/configparser.c"
+#line 5781 "util/configparser.c"
     break;
 
-  case 520:
-#line 2655 "./util/configparser.y"
+  case 520: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG  */
+#line 2665 "./util/configparser.y"
         {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -6476,11 +5792,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6480 "util/configparser.c"
+#line 5796 "util/configparser.c"
     break;
 
-  case 521:
-#line 2667 "./util/configparser.y"
+  case 521: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG  */
+#line 2677 "./util/configparser.y"
         {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -6493,11 +5809,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6497 "util/configparser.c"
+#line 5813 "util/configparser.c"
     break;
 
-  case 522:
-#line 2681 "./util/configparser.y"
+  case 522: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG  */
+#line 2691 "./util/configparser.y"
         {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -6508,11 +5824,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6512 "util/configparser.c"
+#line 5828 "util/configparser.c"
     break;
 
-  case 523:
-#line 2693 "./util/configparser.y"
+  case 523: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG  */
+#line 2703 "./util/configparser.y"
         {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -6525,11 +5841,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6529 "util/configparser.c"
+#line 5845 "util/configparser.c"
     break;
 
-  case 524:
-#line 2707 "./util/configparser.y"
+  case 524: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG  */
+#line 2717 "./util/configparser.y"
         {
                OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(
@@ -6537,11 +5853,11 @@ yyreduce:
                        fatal_exit("out of memory adding "
                                "edns-client-string");
        }
-#line 6541 "util/configparser.c"
+#line 5857 "util/configparser.c"
     break;
 
-  case 525:
-#line 2716 "./util/configparser.y"
+  case 525: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG  */
+#line 2726 "./util/configparser.y"
         {
                OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6552,11 +5868,11 @@ yyreduce:
                free((yyvsp[0].str));
 
        }
-#line 6556 "util/configparser.c"
+#line 5872 "util/configparser.c"
     break;
 
-  case 526:
-#line 2728 "./util/configparser.y"
+  case 526: /* stub_name: VAR_NAME STRING_ARG  */
+#line 2738 "./util/configparser.y"
         {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -6565,31 +5881,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 6569 "util/configparser.c"
+#line 5885 "util/configparser.c"
     break;
 
-  case 527:
-#line 2738 "./util/configparser.y"
+  case 527: /* stub_host: VAR_STUB_HOST STRING_ARG  */
+#line 2748 "./util/configparser.y"
         {
                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 6579 "util/configparser.c"
+#line 5895 "util/configparser.c"
     break;
 
-  case 528:
-#line 2745 "./util/configparser.y"
+  case 528: /* stub_addr: VAR_STUB_ADDR STRING_ARG  */
+#line 2755 "./util/configparser.y"
         {
                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 6589 "util/configparser.c"
+#line 5905 "util/configparser.c"
     break;
 
-  case 529:
-#line 2752 "./util/configparser.y"
+  case 529: /* stub_first: VAR_STUB_FIRST STRING_ARG  */
+#line 2762 "./util/configparser.y"
         {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6597,11 +5913,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6601 "util/configparser.c"
+#line 5917 "util/configparser.c"
     break;
 
-  case 530:
-#line 2761 "./util/configparser.y"
+  case 530: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG  */
+#line 2771 "./util/configparser.y"
         {
                OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6609,11 +5925,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6613 "util/configparser.c"
+#line 5929 "util/configparser.c"
     break;
 
-  case 531:
-#line 2770 "./util/configparser.y"
+  case 531: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG  */
+#line 2780 "./util/configparser.y"
         {
                OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6622,11 +5938,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6626 "util/configparser.c"
+#line 5942 "util/configparser.c"
     break;
 
-  case 532:
-#line 2780 "./util/configparser.y"
+  case 532: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG  */
+#line 2790 "./util/configparser.y"
         {
                 OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str)));
                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6635,11 +5951,11 @@ yyreduce:
                         (strcmp((yyvsp[0].str), "yes")==0);
                 free((yyvsp[0].str));
         }
-#line 6639 "util/configparser.c"
+#line 5955 "util/configparser.c"
     break;
 
-  case 533:
-#line 2790 "./util/configparser.y"
+  case 533: /* stub_prime: VAR_STUB_PRIME STRING_ARG  */
+#line 2800 "./util/configparser.y"
         {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6648,11 +5964,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6652 "util/configparser.c"
+#line 5968 "util/configparser.c"
     break;
 
-  case 534:
-#line 2800 "./util/configparser.y"
+  case 534: /* forward_name: VAR_NAME STRING_ARG  */
+#line 2810 "./util/configparser.y"
         {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -6661,31 +5977,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 6665 "util/configparser.c"
+#line 5981 "util/configparser.c"
     break;
 
-  case 535:
-#line 2810 "./util/configparser.y"
+  case 535: /* forward_host: VAR_FORWARD_HOST STRING_ARG  */
+#line 2820 "./util/configparser.y"
         {
                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 6675 "util/configparser.c"
+#line 5991 "util/configparser.c"
     break;
 
-  case 536:
-#line 2817 "./util/configparser.y"
+  case 536: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG  */
+#line 2827 "./util/configparser.y"
         {
                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 6685 "util/configparser.c"
+#line 6001 "util/configparser.c"
     break;
 
-  case 537:
-#line 2824 "./util/configparser.y"
+  case 537: /* forward_first: VAR_FORWARD_FIRST STRING_ARG  */
+#line 2834 "./util/configparser.y"
         {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6693,11 +6009,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6697 "util/configparser.c"
+#line 6013 "util/configparser.c"
     break;
 
-  case 538:
-#line 2833 "./util/configparser.y"
+  case 538: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG  */
+#line 2843 "./util/configparser.y"
         {
                OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6705,11 +6021,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6709 "util/configparser.c"
+#line 6025 "util/configparser.c"
     break;
 
-  case 539:
-#line 2842 "./util/configparser.y"
+  case 539: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG  */
+#line 2852 "./util/configparser.y"
         {
                OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6718,11 +6034,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6722 "util/configparser.c"
+#line 6038 "util/configparser.c"
     break;
 
-  case 540:
-#line 2852 "./util/configparser.y"
+  case 540: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG  */
+#line 2862 "./util/configparser.y"
         {
                 OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str)));
                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6731,11 +6047,11 @@ yyreduce:
                         (strcmp((yyvsp[0].str), "yes")==0);
                 free((yyvsp[0].str));
         }
-#line 6735 "util/configparser.c"
+#line 6051 "util/configparser.c"
     break;
 
-  case 541:
-#line 2862 "./util/configparser.y"
+  case 541: /* auth_name: VAR_NAME STRING_ARG  */
+#line 2872 "./util/configparser.y"
         {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->auths->name)
@@ -6744,52 +6060,52 @@ yyreduce:
                free(cfg_parser->cfg->auths->name);
                cfg_parser->cfg->auths->name = (yyvsp[0].str);
        }
-#line 6748 "util/configparser.c"
+#line 6064 "util/configparser.c"
     break;
 
-  case 542:
-#line 2872 "./util/configparser.y"
+  case 542: /* auth_zonefile: VAR_ZONEFILE STRING_ARG  */
+#line 2882 "./util/configparser.y"
         {
                OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->auths->zonefile);
                cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
        }
-#line 6758 "util/configparser.c"
+#line 6074 "util/configparser.c"
     break;
 
-  case 543:
-#line 2879 "./util/configparser.y"
+  case 543: /* auth_master: VAR_MASTER STRING_ARG  */
+#line 2889 "./util/configparser.y"
         {
                OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 6768 "util/configparser.c"
+#line 6084 "util/configparser.c"
     break;
 
-  case 544:
-#line 2886 "./util/configparser.y"
+  case 544: /* auth_url: VAR_URL STRING_ARG  */
+#line 2896 "./util/configparser.y"
         {
                OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 6778 "util/configparser.c"
+#line 6094 "util/configparser.c"
     break;
 
-  case 545:
-#line 2893 "./util/configparser.y"
+  case 545: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG  */
+#line 2903 "./util/configparser.y"
         {
                OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 6789 "util/configparser.c"
+#line 6105 "util/configparser.c"
     break;
 
-  case 546:
-#line 2901 "./util/configparser.y"
+  case 546: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG  */
+#line 2911 "./util/configparser.y"
         {
                OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6798,11 +6114,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6802 "util/configparser.c"
+#line 6118 "util/configparser.c"
     break;
 
-  case 547:
-#line 2911 "./util/configparser.y"
+  case 547: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG  */
+#line 2921 "./util/configparser.y"
         {
                OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6811,11 +6127,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6815 "util/configparser.c"
+#line 6131 "util/configparser.c"
     break;
 
-  case 548:
-#line 2921 "./util/configparser.y"
+  case 548: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG  */
+#line 2931 "./util/configparser.y"
         {
                OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6824,11 +6140,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6828 "util/configparser.c"
+#line 6144 "util/configparser.c"
     break;
 
-  case 549:
-#line 2931 "./util/configparser.y"
+  case 549: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG  */
+#line 2941 "./util/configparser.y"
         {
                OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6837,11 +6153,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6841 "util/configparser.c"
+#line 6157 "util/configparser.c"
     break;
 
-  case 550:
-#line 2941 "./util/configparser.y"
+  case 550: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG  */
+#line 2951 "./util/configparser.y"
         {
                OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6850,11 +6166,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6854 "util/configparser.c"
+#line 6170 "util/configparser.c"
     break;
 
-  case 551:
-#line 2951 "./util/configparser.y"
+  case 551: /* view_name: VAR_NAME STRING_ARG  */
+#line 2961 "./util/configparser.y"
         {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -6863,11 +6179,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 6867 "util/configparser.c"
+#line 6183 "util/configparser.c"
     break;
 
-  case 552:
-#line 2961 "./util/configparser.y"
+  case 552: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG  */
+#line 2971 "./util/configparser.y"
         {
                OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -6900,6 +6216,16 @@ yyreduce:
                        free((yyvsp[0].str));
 #ifdef USE_IPSET
                } else if(strcmp((yyvsp[0].str), "ipset")==0) {
+                       size_t len = strlen((yyvsp[-1].str));
+                       /* Make sure to add the trailing dot.
+                        * These are str compared to domain names. */
+                       if((yyvsp[-1].str)[len-1] != '.') {
+                               if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
+                                       fatal_exit("out of memory adding local-zone");
+                               }
+                               (yyvsp[-1].str)[len] = '.';
+                               (yyvsp[-1].str)[len+1] = 0;
+                       }
                        if(!cfg_strlist_insert(&cfg_parser->cfg->views->
                                local_zones_ipset, (yyvsp[-1].str)))
                                fatal_exit("out of memory adding local-zone");
@@ -6912,11 +6238,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 6916 "util/configparser.c"
+#line 6242 "util/configparser.c"
     break;
 
-  case 553:
-#line 3007 "./util/configparser.y"
+  case 553: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG  */
+#line 3027 "./util/configparser.y"
         {
                OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -6925,33 +6251,33 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 6929 "util/configparser.c"
+#line 6255 "util/configparser.c"
     break;
 
-  case 554:
-#line 3017 "./util/configparser.y"
+  case 554: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG  */
+#line 3037 "./util/configparser.y"
         {
                OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
                if(!cfg_str2list_insert(
                        &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip-data");
        }
-#line 6940 "util/configparser.c"
+#line 6266 "util/configparser.c"
     break;
 
-  case 555:
-#line 3025 "./util/configparser.y"
+  case 555: /* view_local_data: VAR_LOCAL_DATA STRING_ARG  */
+#line 3045 "./util/configparser.y"
         {
                OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
                        fatal_exit("out of memory adding local-data");
                }
        }
-#line 6951 "util/configparser.c"
+#line 6277 "util/configparser.c"
     break;
 
-  case 556:
-#line 3033 "./util/configparser.y"
+  case 556: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG  */
+#line 3053 "./util/configparser.y"
         {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -6965,11 +6291,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 6969 "util/configparser.c"
+#line 6295 "util/configparser.c"
     break;
 
-  case 557:
-#line 3048 "./util/configparser.y"
+  case 557: /* view_first: VAR_VIEW_FIRST STRING_ARG  */
+#line 3068 "./util/configparser.y"
         {
                OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6977,19 +6303,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6981 "util/configparser.c"
+#line 6307 "util/configparser.c"
     break;
 
-  case 558:
-#line 3057 "./util/configparser.y"
+  case 558: /* rcstart: VAR_REMOTE_CONTROL  */
+#line 3077 "./util/configparser.y"
         {
                OUTYY(("\nP(remote-control:)\n"));
        }
-#line 6989 "util/configparser.c"
+#line 6315 "util/configparser.c"
     break;
 
-  case 569:
-#line 3068 "./util/configparser.y"
+  case 569: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG  */
+#line 3088 "./util/configparser.y"
         {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6998,11 +6324,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7002 "util/configparser.c"
+#line 6328 "util/configparser.c"
     break;
 
-  case 570:
-#line 3078 "./util/configparser.y"
+  case 570: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG  */
+#line 3098 "./util/configparser.y"
         {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -7010,79 +6336,79 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 7014 "util/configparser.c"
+#line 6340 "util/configparser.c"
     break;
 
-  case 571:
-#line 3087 "./util/configparser.y"
+  case 571: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG  */
+#line 3107 "./util/configparser.y"
         {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 7024 "util/configparser.c"
+#line 6350 "util/configparser.c"
     break;
 
-  case 572:
-#line 3094 "./util/configparser.y"
+  case 572: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG  */
+#line 3114 "./util/configparser.y"
         {
                OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7034 "util/configparser.c"
+#line 6360 "util/configparser.c"
     break;
 
-  case 573:
-#line 3101 "./util/configparser.y"
+  case 573: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG  */
+#line 3121 "./util/configparser.y"
         {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_key_file);
                cfg_parser->cfg->server_key_file = (yyvsp[0].str);
        }
-#line 7044 "util/configparser.c"
+#line 6370 "util/configparser.c"
     break;
 
-  case 574:
-#line 3108 "./util/configparser.y"
+  case 574: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG  */
+#line 3128 "./util/configparser.y"
         {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_cert_file);
                cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
        }
-#line 7054 "util/configparser.c"
+#line 6380 "util/configparser.c"
     break;
 
-  case 575:
-#line 3115 "./util/configparser.y"
+  case 575: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG  */
+#line 3135 "./util/configparser.y"
         {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_key_file);
                cfg_parser->cfg->control_key_file = (yyvsp[0].str);
        }
-#line 7064 "util/configparser.c"
+#line 6390 "util/configparser.c"
     break;
 
-  case 576:
-#line 3122 "./util/configparser.y"
+  case 576: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG  */
+#line 3142 "./util/configparser.y"
         {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_cert_file);
                cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
        }
-#line 7074 "util/configparser.c"
+#line 6400 "util/configparser.c"
     break;
 
-  case 577:
-#line 3129 "./util/configparser.y"
+  case 577: /* dtstart: VAR_DNSTAP  */
+#line 3149 "./util/configparser.y"
         {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 7082 "util/configparser.c"
+#line 6408 "util/configparser.c"
     break;
 
-  case 599:
-#line 3149 "./util/configparser.y"
+  case 599: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG  */
+#line 3169 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7090,11 +6416,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7094 "util/configparser.c"
+#line 6420 "util/configparser.c"
     break;
 
-  case 600:
-#line 3158 "./util/configparser.y"
+  case 600: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG  */
+#line 3178 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7103,31 +6429,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7107 "util/configparser.c"
+#line 6433 "util/configparser.c"
     break;
 
-  case 601:
-#line 3168 "./util/configparser.y"
+  case 601: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG  */
+#line 3188 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_socket_path);
                cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
        }
-#line 7117 "util/configparser.c"
+#line 6443 "util/configparser.c"
     break;
 
-  case 602:
-#line 3175 "./util/configparser.y"
+  case 602: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG  */
+#line 3195 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_ip);
                cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
        }
-#line 7127 "util/configparser.c"
+#line 6453 "util/configparser.c"
     break;
 
-  case 603:
-#line 3182 "./util/configparser.y"
+  case 603: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG  */
+#line 3202 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7135,51 +6461,51 @@ yyreduce:
                else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7139 "util/configparser.c"
+#line 6465 "util/configparser.c"
     break;
 
-  case 604:
-#line 3191 "./util/configparser.y"
+  case 604: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG  */
+#line 3211 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_server_name);
                cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
        }
-#line 7149 "util/configparser.c"
+#line 6475 "util/configparser.c"
     break;
 
-  case 605:
-#line 3198 "./util/configparser.y"
+  case 605: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG  */
+#line 3218 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_cert_bundle);
                cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
        }
-#line 7159 "util/configparser.c"
+#line 6485 "util/configparser.c"
     break;
 
-  case 606:
-#line 3205 "./util/configparser.y"
+  case 606: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG  */
+#line 3225 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_client_key_file);
                cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
        }
-#line 7169 "util/configparser.c"
+#line 6495 "util/configparser.c"
     break;
 
-  case 607:
-#line 3212 "./util/configparser.y"
+  case 607: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG  */
+#line 3232 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_tls_client_cert_file);
                cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
        }
-#line 7179 "util/configparser.c"
+#line 6505 "util/configparser.c"
     break;
 
-  case 608:
-#line 3219 "./util/configparser.y"
+  case 608: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG  */
+#line 3239 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7187,11 +6513,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7191 "util/configparser.c"
+#line 6517 "util/configparser.c"
     break;
 
-  case 609:
-#line 3228 "./util/configparser.y"
+  case 609: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG  */
+#line 3248 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7199,31 +6525,31 @@ yyreduce:
                else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7203 "util/configparser.c"
+#line 6529 "util/configparser.c"
     break;
 
-  case 610:
-#line 3237 "./util/configparser.y"
+  case 610: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG  */
+#line 3257 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_identity);
                cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
        }
-#line 7213 "util/configparser.c"
+#line 6539 "util/configparser.c"
     break;
 
-  case 611:
-#line 3244 "./util/configparser.y"
+  case 611: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG  */
+#line 3264 "./util/configparser.y"
         {
                OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_version);
                cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
        }
-#line 7223 "util/configparser.c"
+#line 6549 "util/configparser.c"
     break;
 
-  case 612:
-#line 3251 "./util/configparser.y"
+  case 612: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG  */
+#line 3271 "./util/configparser.y"
         {
                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)
@@ -7232,11 +6558,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7236 "util/configparser.c"
+#line 6562 "util/configparser.c"
     break;
 
-  case 613:
-#line 3261 "./util/configparser.y"
+  case 613: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG  */
+#line 3281 "./util/configparser.y"
         {
                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)
@@ -7245,11 +6571,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7249 "util/configparser.c"
+#line 6575 "util/configparser.c"
     break;
 
-  case 614:
-#line 3271 "./util/configparser.y"
+  case 614: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG  */
+#line 3291 "./util/configparser.y"
         {
                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)
@@ -7258,11 +6584,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7262 "util/configparser.c"
+#line 6588 "util/configparser.c"
     break;
 
-  case 615:
-#line 3281 "./util/configparser.y"
+  case 615: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG  */
+#line 3301 "./util/configparser.y"
         {
                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)
@@ -7271,11 +6597,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7275 "util/configparser.c"
+#line 6601 "util/configparser.c"
     break;
 
-  case 616:
-#line 3291 "./util/configparser.y"
+  case 616: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG  */
+#line 3311 "./util/configparser.y"
         {
                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)
@@ -7284,11 +6610,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7288 "util/configparser.c"
+#line 6614 "util/configparser.c"
     break;
 
-  case 617:
-#line 3301 "./util/configparser.y"
+  case 617: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG  */
+#line 3321 "./util/configparser.y"
         {
                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)
@@ -7297,47 +6623,47 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7301 "util/configparser.c"
+#line 6627 "util/configparser.c"
     break;
 
-  case 618:
-#line 3311 "./util/configparser.y"
+  case 618: /* pythonstart: VAR_PYTHON  */
+#line 3331 "./util/configparser.y"
         {
                OUTYY(("\nP(python:)\n"));
        }
-#line 7309 "util/configparser.c"
+#line 6635 "util/configparser.c"
     break;
 
-  case 622:
-#line 3320 "./util/configparser.y"
+  case 622: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG  */
+#line 3340 "./util/configparser.y"
         {
                OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 7319 "util/configparser.c"
+#line 6645 "util/configparser.c"
     break;
 
-  case 623:
-#line 3326 "./util/configparser.y"
+  case 623: /* dynlibstart: VAR_DYNLIB  */
+#line 3346 "./util/configparser.y"
         { 
                OUTYY(("\nP(dynlib:)\n")); 
        }
-#line 7327 "util/configparser.c"
+#line 6653 "util/configparser.c"
     break;
 
-  case 627:
-#line 3335 "./util/configparser.y"
+  case 627: /* dl_file: VAR_DYNLIB_FILE STRING_ARG  */
+#line 3355 "./util/configparser.y"
         {
                OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 7337 "util/configparser.c"
+#line 6663 "util/configparser.c"
     break;
 
-  case 628:
-#line 3341 "./util/configparser.y"
+  case 628: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG  */
+#line 3361 "./util/configparser.y"
         {
                OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
                if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7346,21 +6672,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7350 "util/configparser.c"
+#line 6676 "util/configparser.c"
     break;
 
-  case 629:
-#line 3351 "./util/configparser.y"
+  case 629: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG  */
+#line 3371 "./util/configparser.y"
         {
                OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->log_identity);
                cfg_parser->cfg->log_identity = (yyvsp[0].str);
        }
-#line 7360 "util/configparser.c"
+#line 6686 "util/configparser.c"
     break;
 
-  case 630:
-#line 3358 "./util/configparser.y"
+  case 630: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG  */
+#line 3378 "./util/configparser.y"
         {
                OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -7368,30 +6694,30 @@ yyreduce:
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 7372 "util/configparser.c"
+#line 6698 "util/configparser.c"
     break;
 
-  case 631:
-#line 3367 "./util/configparser.y"
+  case 631: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG  */
+#line 3387 "./util/configparser.y"
         {
                OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
                if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip-data");
        }
-#line 7383 "util/configparser.c"
+#line 6709 "util/configparser.c"
     break;
 
-  case 632:
-#line 3375 "./util/configparser.y"
+  case 632: /* dnscstart: VAR_DNSCRYPT  */
+#line 3395 "./util/configparser.y"
         {
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 7391 "util/configparser.c"
+#line 6717 "util/configparser.c"
     break;
 
-  case 645:
-#line 3391 "./util/configparser.y"
+  case 645: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG  */
+#line 3411 "./util/configparser.y"
         {
                OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7399,11 +6725,11 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 7403 "util/configparser.c"
+#line 6729 "util/configparser.c"
     break;
 
-  case 646:
-#line 3401 "./util/configparser.y"
+  case 646: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG  */
+#line 3421 "./util/configparser.y"
         {
                OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -7411,21 +6737,21 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 7415 "util/configparser.c"
+#line 6741 "util/configparser.c"
     break;
 
-  case 647:
-#line 3410 "./util/configparser.y"
+  case 647: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG  */
+#line 3430 "./util/configparser.y"
         {
                OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnscrypt_provider);
                cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
        }
-#line 7425 "util/configparser.c"
+#line 6751 "util/configparser.c"
     break;
 
-  case 648:
-#line 3417 "./util/configparser.y"
+  case 648: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG  */
+#line 3437 "./util/configparser.y"
         {
                OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
                if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
@@ -7433,21 +6759,21 @@ yyreduce:
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
-#line 7437 "util/configparser.c"
+#line 6763 "util/configparser.c"
     break;
 
-  case 649:
-#line 3426 "./util/configparser.y"
+  case 649: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG  */
+#line 3446 "./util/configparser.y"
         {
                OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
        }
-#line 7447 "util/configparser.c"
+#line 6773 "util/configparser.c"
     break;
 
-  case 650:
-#line 3433 "./util/configparser.y"
+  case 650: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG  */
+#line 3453 "./util/configparser.y"
         {
                OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
                if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
@@ -7455,22 +6781,22 @@ yyreduce:
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }
-#line 7459 "util/configparser.c"
+#line 6785 "util/configparser.c"
     break;
 
-  case 651:
-#line 3442 "./util/configparser.y"
+  case 651: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG  */
+#line 3462 "./util/configparser.y"
   {
        OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 7470 "util/configparser.c"
+#line 6796 "util/configparser.c"
     break;
 
-  case 652:
-#line 3450 "./util/configparser.y"
+  case 652: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG  */
+#line 3470 "./util/configparser.y"
   {
        OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0) {
@@ -7482,22 +6808,22 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 7486 "util/configparser.c"
+#line 6812 "util/configparser.c"
     break;
 
-  case 653:
-#line 3463 "./util/configparser.y"
+  case 653: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG  */
+#line 3483 "./util/configparser.y"
   {
        OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 7497 "util/configparser.c"
+#line 6823 "util/configparser.c"
     break;
 
-  case 654:
-#line 3471 "./util/configparser.y"
+  case 654: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG  */
+#line 3491 "./util/configparser.y"
   {
        OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0) {
@@ -7509,19 +6835,19 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 7513 "util/configparser.c"
+#line 6839 "util/configparser.c"
     break;
 
-  case 655:
-#line 3484 "./util/configparser.y"
+  case 655: /* cachedbstart: VAR_CACHEDB  */
+#line 3504 "./util/configparser.y"
         {
                OUTYY(("\nP(cachedb:)\n"));
        }
-#line 7521 "util/configparser.c"
+#line 6847 "util/configparser.c"
     break;
 
-  case 664:
-#line 3495 "./util/configparser.y"
+  case 664: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG  */
+#line 3515 "./util/configparser.y"
         {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -7532,11 +6858,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 7536 "util/configparser.c"
+#line 6862 "util/configparser.c"
     break;
 
-  case 665:
-#line 3507 "./util/configparser.y"
+  case 665: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG  */
+#line 3527 "./util/configparser.y"
         {
        #ifdef USE_CACHEDB
                OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -7547,11 +6873,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 7551 "util/configparser.c"
+#line 6877 "util/configparser.c"
     break;
 
-  case 666:
-#line 3519 "./util/configparser.y"
+  case 666: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG  */
+#line 3539 "./util/configparser.y"
         {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -7562,11 +6888,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 7566 "util/configparser.c"
+#line 6892 "util/configparser.c"
     break;
 
-  case 667:
-#line 3531 "./util/configparser.y"
+  case 667: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG  */
+#line 3551 "./util/configparser.y"
         {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                int port;
@@ -7580,11 +6906,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 7584 "util/configparser.c"
+#line 6910 "util/configparser.c"
     break;
 
-  case 668:
-#line 3546 "./util/configparser.y"
+  case 668: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG  */
+#line 3566 "./util/configparser.y"
         {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -7596,11 +6922,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 7600 "util/configparser.c"
+#line 6926 "util/configparser.c"
     break;
 
-  case 669:
-#line 3559 "./util/configparser.y"
+  case 669: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG  */
+#line 3579 "./util/configparser.y"
         {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
@@ -7612,11 +6938,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 7616 "util/configparser.c"
+#line 6942 "util/configparser.c"
     break;
 
-  case 670:
-#line 3572 "./util/configparser.y"
+  case 670: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG  */
+#line 3592 "./util/configparser.y"
         {
                OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if (atoi((yyvsp[0].str)) < 0)
@@ -7626,19 +6952,19 @@ yyreduce:
                                fatal_exit("out of memory adding tcp connection limit");
                }
        }
-#line 7630 "util/configparser.c"
+#line 6956 "util/configparser.c"
     break;
 
-  case 671:
-#line 3583 "./util/configparser.y"
+  case 671: /* ipsetstart: VAR_IPSET  */
+#line 3603 "./util/configparser.y"
                 {
                        OUTYY(("\nP(ipset:)\n"));
                }
-#line 7638 "util/configparser.c"
+#line 6964 "util/configparser.c"
     break;
 
-  case 676:
-#line 3592 "./util/configparser.y"
+  case 676: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG  */
+#line 3612 "./util/configparser.y"
                 {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
@@ -7652,11 +6978,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 7656 "util/configparser.c"
+#line 6982 "util/configparser.c"
     break;
 
-  case 677:
-#line 3607 "./util/configparser.y"
+  case 677: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG  */
+#line 3627 "./util/configparser.y"
         {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
@@ -7670,11 +6996,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 7674 "util/configparser.c"
+#line 7000 "util/configparser.c"
     break;
 
 
-#line 7678 "util/configparser.c"
+#line 7004 "util/configparser.c"
 
       default: break;
     }
@@ -7834,13 +7160,13 @@ yyabortlab:
 yyexhaustedlab:
   yyerror (YY_("memory exhausted"));
   yyresult = 2;
-  /* Fall through.  */
+  goto yyreturn;
 #endif
 
 
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result.  |
-`-----------------------------------------------------*/
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return.  |
+`-------------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -7868,7 +7194,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 3621 "./util/configparser.y"
+#line 3641 "./util/configparser.y"
 
 
 /* parse helper routines could be here */
index 6dcbcb41ed8993917e89f5e5c98c57d2697ce38e..c299937c8d770a1c327fa3fa38f7567c3b76e445 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.6.4.  */
+/* A Bison parser, made by GNU Bison 3.7.6.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    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/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -380,6 +380,7 @@ extern int yydebug;
   typedef enum yytokentype yytoken_kind_t;
 #endif
 /* Token kinds.  */
+#define YYEMPTY -2
 #define YYEOF 0
 #define YYerror 256
 #define YYUNDEF 257
@@ -714,7 +715,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 718 "util/configparser.h"
+#line 719 "util/configparser.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
index 4ec9e6350037c2377971b3556ad4f00b9fd1415e..946bd432e4fbd8d80de725cb3a6226ec63d4ed8f 100644 (file)
@@ -2175,7 +2175,7 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
                   && strcmp($3, "noview")!=0
                   && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0
                   && strcmp($3, "inform_redirect") != 0
-                        && strcmp($3, "ipset") != 0) {
+                  && strcmp($3, "ipset") != 0) {
                        yyerror("local-zone type: expected static, deny, "
                                "refuse, redirect, transparent, "
                                "typetransparent, inform, inform_deny, "
@@ -2192,6 +2192,16 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
                        free($3);
 #ifdef USE_IPSET
                } else if(strcmp($3, "ipset")==0) {
+                       size_t len = strlen($2);
+                       /* Make sure to add the trailing dot.
+                        * These are str compared to domain names. */
+                       if($2[len-1] != '.') {
+                               if(!($2 = realloc($2, len+2))) {
+                                       fatal_exit("out of memory adding local-zone");
+                               }
+                               $2[len] = '.';
+                               $2[len+1] = 0;
+                       }
                        if(!cfg_strlist_insert(&cfg_parser->cfg->
                                local_zones_ipset, $2))
                                fatal_exit("out of memory adding local-zone");
@@ -2990,6 +3000,16 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
                        free($3);
 #ifdef USE_IPSET
                } else if(strcmp($3, "ipset")==0) {
+                       size_t len = strlen($2);
+                       /* Make sure to add the trailing dot.
+                        * These are str compared to domain names. */
+                       if($2[len-1] != '.') {
+                               if(!($2 = realloc($2, len+2))) {
+                                       fatal_exit("out of memory adding local-zone");
+                               }
+                               $2[len] = '.';
+                               $2[len+1] = 0;
+                       }
                        if(!cfg_strlist_insert(&cfg_parser->cfg->views->
                                local_zones_ipset, $2))
                                fatal_exit("out of memory adding local-zone");