]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix memory leak of https port string when reading config.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Mon, 19 Oct 2020 08:14:40 +0000 (10:14 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Mon, 19 Oct 2020 08:14:40 +0000 (10:14 +0200)
doc/Changelog
util/configparser.c
util/configparser.h
util/configparser.y

index 8a8e7ffe17dffa57f06dcd18db07e2500b8fc56b..49dab107ce17f383cb898e248dabd9bd77464ee3 100644 (file)
@@ -2,6 +2,7 @@
        - Fix that http settings have colon in set_option, for
          http-endpoint, http-max-streams, http-query-buffer-size,
          http-response-buffer-size, and http-nodelay.
+       - Fix memory leak of https port string when reading config.
 
 16 October 2020: Wouter
        - Fix that the out of order TCP processing does not limit the
index ba5054eb459d143cf69a46d182ba320d25f9441b..50788a0c596fa82803138938e66cb5d8e61fb070 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.5.1.  */
+/* A Bison parser, made by GNU Bison 3.4.1.  */
 
 /* 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-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -48,7 +48,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.5.1"
+#define YYBISON_VERSION "3.4.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -97,15 +97,6 @@ extern struct config_parser_state* cfg_parser;
 
 #line 99 "util/configparser.c"
 
-# ifndef YY_CAST
-#  ifdef __cplusplus
-#   define YY_CAST(Type, Val) static_cast<Type> (Val)
-#   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
-#  else
-#   define YY_CAST(Type, Val) ((Type) (Val))
-#   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
-#  endif
-# endif
 # ifndef YY_NULLPTR
 #  if defined __cplusplus
 #   if 201103L <= __cplusplus
@@ -749,7 +740,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 753 "util/configparser.c"
+#line 744 "util/configparser.c"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -770,75 +761,28 @@ int yyparse (void);
 # undef short
 #endif
 
-/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
-   <limits.h> and (if available) <stdint.h> are included
-   so that the code can choose integer types of a good width.  */
-
-#ifndef __PTRDIFF_MAX__
-# include <limits.h> /* INFRINGES ON USER NAME SPACE */
-# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
-#  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
-#  define YY_STDINT_H
-# endif
-#endif
-
-/* Narrow types that promote to a signed type and that can represent a
-   signed or unsigned integer of at least N bits.  In tables they can
-   save space and decrease cache pressure.  Promoting to a signed type
-   helps avoid bugs in integer arithmetic.  */
-
-#ifdef __INT_LEAST8_MAX__
-typedef __INT_LEAST8_TYPE__ yytype_int8;
-#elif defined YY_STDINT_H
-typedef int_least8_t yytype_int8;
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
 #else
-typedef signed char yytype_int8;
+typedef unsigned char yytype_uint8;
 #endif
 
-#ifdef __INT_LEAST16_MAX__
-typedef __INT_LEAST16_TYPE__ yytype_int16;
-#elif defined YY_STDINT_H
-typedef int_least16_t yytype_int16;
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
 #else
-typedef short yytype_int16;
+typedef signed char yytype_int8;
 #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 \
-       && UINT_LEAST8_MAX <= INT_MAX)
-typedef uint_least8_t yytype_uint8;
-#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
-typedef unsigned char yytype_uint8;
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
 #else
-typedef short yytype_uint8;
-#endif
-
-#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
-typedef __UINT_LEAST16_TYPE__ yytype_uint16;
-#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
-       && UINT_LEAST16_MAX <= INT_MAX)
-typedef uint_least16_t yytype_uint16;
-#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
 typedef unsigned short yytype_uint16;
-#else
-typedef int yytype_uint16;
 #endif
 
-#ifndef YYPTRDIFF_T
-# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
-#  define YYPTRDIFF_T __PTRDIFF_TYPE__
-#  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
-# elif defined PTRDIFF_MAX
-#  ifndef ptrdiff_t
-#   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  endif
-#  define YYPTRDIFF_T ptrdiff_t
-#  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
-# else
-#  define YYPTRDIFF_T long
-#  define YYPTRDIFF_MAXIMUM LONG_MAX
-# endif
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short yytype_int16;
 #endif
 
 #ifndef YYSIZE_T
@@ -846,7 +790,7 @@ typedef int yytype_uint16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -854,19 +798,7 @@ typedef int yytype_uint16;
 # endif
 #endif
 
-#define YYSIZE_MAXIMUM                                  \
-  YY_CAST (YYPTRDIFF_T,                                 \
-           (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
-            ? YYPTRDIFF_MAXIMUM                         \
-            : YY_CAST (YYSIZE_T, -1)))
-
-#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
-
-/* Stored state numbers (used for stacks). */
-typedef yytype_int16 yy_state_t;
-
-/* State numbers in computations.  */
-typedef int yy_state_fast_t;
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
 # if defined YYENABLE_NLS && YYENABLE_NLS
@@ -880,20 +812,22 @@ typedef int yy_state_fast_t;
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE_PURE
-# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
 # else
-#  define YY_ATTRIBUTE_PURE
+#  define YY_ATTRIBUTE(Spec) /* empty */
 # endif
 #endif
 
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
 #ifndef YY_ATTRIBUTE_UNUSED
-# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
-#  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-# else
-#  define YY_ATTRIBUTE_UNUSED
-# endif
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
 #endif
 
 /* Suppress unused-variable warnings by "using" E.  */
@@ -905,11 +839,11 @@ typedef int yy_state_fast_t;
 
 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
-    _Pragma ("GCC diagnostic push")                                     \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
     _Pragma ("GCC diagnostic pop")
 #else
 # define YY_INITIAL_VALUE(Value) Value
@@ -922,18 +856,6 @@ typedef int yy_state_fast_t;
 # define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
-#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
-# define YY_IGNORE_USELESS_CAST_BEGIN                          \
-    _Pragma ("GCC diagnostic push")                            \
-    _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
-# define YY_IGNORE_USELESS_CAST_END            \
-    _Pragma ("GCC diagnostic pop")
-#endif
-#ifndef YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_END
-#endif
-
 
 #define YY_ASSERT(E) ((void) (0 && (E)))
 
@@ -1012,17 +934,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  yy_state_t yyss_alloc;
+  yytype_int16 yyss_alloc;
   YYSTYPE yyvs_alloc;
 };
 
 /* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
 
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 # define YYCOPY_NEEDED 1
@@ -1035,11 +957,11 @@ union yyalloc
 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     do                                                                  \
       {                                                                 \
-        YYPTRDIFF_T yynewbytes;                                         \
+        YYSIZE_T yynewbytes;                                            \
         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
         Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
       }                                                                 \
     while (0)
 
@@ -1051,12 +973,12 @@ union yyalloc
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
 #  else
 #   define YYCOPY(Dst, Src, Count)              \
       do                                        \
         {                                       \
-          YYPTRDIFF_T yyi;                      \
+          YYSIZE_T yyi;                         \
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
@@ -1082,15 +1004,14 @@ union yyalloc
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   554
 
-
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex, with out-of-bounds checking.  */
 #define YYTRANSLATE(YYX)                                                \
-  (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex.  */
-static const yytype_int16 yytranslate[] =
+static const yytype_uint16 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1152,7 +1073,7 @@ static const yytype_int16 yytranslate[] =
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_int16 yyrline[] =
+static const yytype_uint16 yyrline[] =
 {
        0,   184,   184,   184,   185,   185,   186,   186,   187,   187,
      187,   188,   188,   189,   189,   190,   190,   191,   193,   199,
@@ -1187,36 +1108,36 @@ static const yytype_int16 yyrline[] =
      685,   698,   713,   722,   731,   740,   749,   758,   767,   776,
      785,   794,   803,   812,   821,   830,   839,   852,   861,   874,
      883,   892,   901,   908,   915,   924,   931,   940,   948,   955,
-     962,   970,   979,   986,  1002,  1010,  1018,  1026,  1034,  1043,
-    1052,  1066,  1075,  1084,  1093,  1102,  1111,  1120,  1127,  1134,
-    1160,  1168,  1175,  1182,  1189,  1196,  1204,  1212,  1220,  1227,
-    1238,  1249,  1256,  1265,  1274,  1283,  1290,  1297,  1305,  1313,
-    1323,  1333,  1343,  1357,  1365,  1378,  1389,  1397,  1410,  1419,
-    1428,  1437,  1447,  1457,  1465,  1478,  1487,  1495,  1504,  1512,
-    1525,  1534,  1541,  1551,  1561,  1571,  1581,  1591,  1601,  1611,
-    1621,  1628,  1635,  1642,  1651,  1660,  1669,  1678,  1685,  1695,
-    1715,  1722,  1740,  1753,  1766,  1775,  1784,  1793,  1802,  1812,
-    1822,  1833,  1842,  1851,  1860,  1869,  1878,  1887,  1900,  1913,
-    1922,  1929,  1938,  1947,  1956,  1965,  1973,  1986,  1994,  2035,
-    2042,  2057,  2067,  2077,  2084,  2091,  2098,  2107,  2115,  2129,
-    2150,  2171,  2183,  2195,  2207,  2216,  2237,  2247,  2256,  2264,
-    2272,  2285,  2298,  2313,  2328,  2337,  2346,  2352,  2361,  2370,
-    2380,  2390,  2403,  2416,  2428,  2442,  2454,  2468,  2483,  2494,
-    2504,  2511,  2518,  2527,  2536,  2546,  2556,  2566,  2573,  2580,
-    2589,  2598,  2608,  2618,  2625,  2632,  2639,  2647,  2657,  2667,
-    2677,  2687,  2726,  2736,  2744,  2752,  2767,  2776,  2781,  2782,
-    2783,  2783,  2783,  2784,  2784,  2784,  2785,  2785,  2787,  2797,
-    2806,  2813,  2820,  2827,  2834,  2841,  2848,  2853,  2854,  2855,
-    2855,  2855,  2856,  2856,  2856,  2857,  2858,  2858,  2859,  2859,
-    2860,  2860,  2861,  2862,  2863,  2864,  2865,  2866,  2868,  2877,
-    2887,  2894,  2901,  2910,  2917,  2924,  2931,  2938,  2947,  2956,
-    2963,  2970,  2980,  2990,  3000,  3010,  3020,  3030,  3035,  3036,
-    3037,  3039,  3045,  3050,  3051,  3052,  3054,  3060,  3070,  3077,
-    3086,  3094,  3099,  3100,  3102,  3102,  3102,  3103,  3103,  3104,
-    3105,  3106,  3107,  3108,  3110,  3120,  3129,  3136,  3145,  3152,
-    3161,  3169,  3182,  3190,  3203,  3208,  3209,  3210,  3210,  3211,
-    3211,  3211,  3212,  3214,  3226,  3238,  3250,  3265,  3278,  3291,
-    3302,  3307,  3308,  3309,  3309,  3311,  3326
+     962,   970,   979,   987,  1003,  1011,  1019,  1027,  1035,  1044,
+    1053,  1067,  1076,  1085,  1094,  1103,  1112,  1121,  1128,  1135,
+    1161,  1169,  1176,  1183,  1190,  1197,  1205,  1213,  1221,  1228,
+    1239,  1250,  1257,  1266,  1275,  1284,  1291,  1298,  1306,  1314,
+    1324,  1334,  1344,  1358,  1366,  1379,  1390,  1398,  1411,  1420,
+    1429,  1438,  1448,  1458,  1466,  1479,  1488,  1496,  1505,  1513,
+    1526,  1535,  1542,  1552,  1562,  1572,  1582,  1592,  1602,  1612,
+    1622,  1629,  1636,  1643,  1652,  1661,  1670,  1679,  1686,  1696,
+    1716,  1723,  1741,  1754,  1767,  1776,  1785,  1794,  1803,  1813,
+    1823,  1834,  1843,  1852,  1861,  1870,  1879,  1888,  1901,  1914,
+    1923,  1930,  1939,  1948,  1957,  1966,  1974,  1987,  1995,  2036,
+    2043,  2058,  2068,  2078,  2085,  2092,  2099,  2108,  2116,  2130,
+    2151,  2172,  2184,  2196,  2208,  2217,  2238,  2248,  2257,  2265,
+    2273,  2286,  2299,  2314,  2329,  2338,  2347,  2353,  2362,  2371,
+    2381,  2391,  2404,  2417,  2429,  2443,  2455,  2469,  2484,  2495,
+    2505,  2512,  2519,  2528,  2537,  2547,  2557,  2567,  2574,  2581,
+    2590,  2599,  2609,  2619,  2626,  2633,  2640,  2648,  2658,  2668,
+    2678,  2688,  2727,  2737,  2745,  2753,  2768,  2777,  2782,  2783,
+    2784,  2784,  2784,  2785,  2785,  2785,  2786,  2786,  2788,  2798,
+    2807,  2814,  2821,  2828,  2835,  2842,  2849,  2854,  2855,  2856,
+    2856,  2856,  2857,  2857,  2857,  2858,  2859,  2859,  2860,  2860,
+    2861,  2861,  2862,  2863,  2864,  2865,  2866,  2867,  2869,  2878,
+    2888,  2895,  2902,  2911,  2918,  2925,  2932,  2939,  2948,  2957,
+    2964,  2971,  2981,  2991,  3001,  3011,  3021,  3031,  3036,  3037,
+    3038,  3040,  3046,  3051,  3052,  3053,  3055,  3061,  3071,  3078,
+    3087,  3095,  3100,  3101,  3103,  3103,  3103,  3104,  3104,  3105,
+    3106,  3107,  3108,  3109,  3111,  3121,  3130,  3137,  3146,  3153,
+    3162,  3170,  3183,  3191,  3204,  3209,  3210,  3211,  3211,  3212,
+    3212,  3212,  3213,  3215,  3227,  3239,  3251,  3266,  3279,  3292,
+    3303,  3308,  3309,  3310,  3310,  3312,  3327
 };
 #endif
 
@@ -1472,7 +1393,7 @@ static const char *const yytname[] =
 # ifdef YYPRINT
 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_int16 yytoknum[] =
+static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
@@ -1507,14 +1428,14 @@ static const yytype_int16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF (-288)
+#define YYPACT_NINF -288
 
-#define yypact_value_is_default(Yyn) \
-  ((Yyn) == YYPACT_NINF)
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-288)))
 
-#define YYTABLE_NINF (-1)
+#define YYTABLE_NINF -1
 
-#define yytable_value_is_error(Yyn) \
+#define yytable_value_is_error(Yytable_value) \
   0
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -1619,7 +1540,7 @@ static const yytype_int16 yypact[] =
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
-static const yytype_int16 yydefact[] =
+static const yytype_uint16 yydefact[] =
 {
        2,     0,     1,    18,    19,   224,   234,   507,   567,   526,
      243,   581,   604,   253,   620,   269,   572,     3,    17,    21,
@@ -1795,7 +1716,7 @@ static const yytype_int16 yydefgoto[] =
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int16 yytable[] =
+static const yytype_uint16 yytable[] =
 {
        2,   493,   478,   450,   582,   451,   452,   465,   622,   623,
      585,     3,     4,   627,   628,   466,   467,   609,   610,   611,
@@ -1933,7 +1854,7 @@ static const yytype_int16 yycheck[] =
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
-static const yytype_int16 yystos[] =
+static const yytype_uint16 yystos[] =
 {
        0,   301,     0,    11,    12,    46,    52,    96,   112,   159,
      218,   236,   253,   262,   286,   290,   296,   302,   303,   304,
@@ -2031,7 +1952,7 @@ static const yytype_int16 yystos[] =
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_int16 yyr1[] =
+static const yytype_uint16 yyr1[] =
 {
        0,   300,   301,   301,   302,   302,   302,   302,   302,   302,
      302,   302,   302,   302,   302,   302,   302,   302,   303,   304,
@@ -2099,7 +2020,7 @@ static const yytype_int16 yyr1[] =
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_int8 yyr2[] =
+static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     1,     1,     1,
@@ -2249,9 +2170,7 @@ yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
   if (yytype < YYNTOKENS)
     YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
@@ -2275,7 +2194,7 @@ yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 `------------------------------------------------------------------*/
 
 static void
-yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -2298,19 +2217,19 @@ do {                                                            \
 `------------------------------------------------*/
 
 static void
-yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  int yylno = yyrline[yyrule];
+  unsigned long yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
              yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
-                       yystos[+yyssp[yyi + 1 - yynrhs]],
+                       yystos[yyssp[yyi + 1 - yynrhs]],
                        &yyvsp[(yyi + 1) - (yynrhs)]
                                               );
       YYFPRINTF (stderr, "\n");
@@ -2355,13 +2274,13 @@ int yydebug;
 
 # ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
+#   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-static YYPTRDIFF_T
+static YYSIZE_T
 yystrlen (const char *yystr)
 {
-  YYPTRDIFF_T yylen;
+  YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
     continue;
   return yylen;
@@ -2397,12 +2316,12 @@ yystpcpy (char *yydest, const char *yysrc)
    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
    null, do not copy; instead, return the length of what the result
    would have been.  */
-static YYPTRDIFF_T
+static YYSIZE_T
 yytnamerr (char *yyres, const char *yystr)
 {
   if (*yystr == '"')
     {
-      YYPTRDIFF_T yyn = 0;
+      YYSIZE_T yyn = 0;
       char const *yyp = yystr;
 
       for (;;)
@@ -2433,10 +2352,10 @@ yytnamerr (char *yyres, const char *yystr)
     do_not_strip_quotes: ;
     }
 
-  if (yyres)
-    return yystpcpy (yyres, yystr) - yyres;
-  else
+  if (! yyres)
     return yystrlen (yystr);
+
+  return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
 }
 # endif
 
@@ -2449,19 +2368,19 @@ yytnamerr (char *yyres, const char *yystr)
    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
    required number of bytes is too large to store.  */
 static int
-yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
-                yy_state_t *yyssp, int yytoken)
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
 {
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
   const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat: reported tokens (one for the "unexpected",
-     one per "expected"). */
+  /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Actual size of YYARG. */
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
   int yycount = 0;
-  /* Cumulated lengths of YYARG.  */
-  YYPTRDIFF_T yysize = 0;
 
   /* There are many possibilities here to consider:
      - If this state is a consistent state with a default action, then
@@ -2488,9 +2407,7 @@ yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
   */
   if (yytoken != YYEMPTY)
     {
-      int yyn = yypact[+*yyssp];
-      YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-      yysize = yysize0;
+      int yyn = yypact[*yyssp];
       yyarg[yycount++] = yytname[yytoken];
       if (!yypact_value_is_default (yyn))
         {
@@ -2515,8 +2432,7 @@ yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYPTRDIFF_T yysize1
-                    = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
                   if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
                     yysize = yysize1;
                   else
@@ -2543,9 +2459,7 @@ yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
     }
 
   {
-    /* Don't count the "%s"s in the final size, but reserve room for
-       the terminator.  */
-    YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
+    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
     if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
       yysize = yysize1;
     else
@@ -2575,8 +2489,8 @@ yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
         }
       else
         {
-          ++yyp;
-          ++yyformat;
+          yyp++;
+          yyformat++;
         }
   }
   return 0;
@@ -2619,7 +2533,7 @@ int yynerrs;
 int
 yyparse (void)
 {
-    yy_state_fast_t yystate;
+    int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
@@ -2631,16 +2545,16 @@ yyparse (void)
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
-    yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss;
-    yy_state_t *yyssp;
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
 
     /* The semantic value stack.  */
     YYSTYPE yyvsa[YYINITDEPTH];
     YYSTYPE *yyvs;
     YYSTYPE *yyvsp;
 
-    YYPTRDIFF_T yystacksize;
+    YYSIZE_T yystacksize;
 
   int yyn;
   int yyresult;
@@ -2654,7 +2568,7 @@ yyparse (void)
   /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
@@ -2686,14 +2600,12 @@ yynewstate:
 
 
 /*--------------------------------------------------------------------.
-| yysetstate -- set current state (the top of the stack) to yystate.  |
+| yynewstate -- set current state (the top of the stack) to yystate.  |
 `--------------------------------------------------------------------*/
 yysetstate:
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
-  YY_IGNORE_USELESS_CAST_BEGIN
-  *yyssp = YY_CAST (yy_state_t, yystate);
-  YY_IGNORE_USELESS_CAST_END
+  *yyssp = (yytype_int16) yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
@@ -2701,23 +2613,23 @@ yysetstate:
 #else
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYPTRDIFF_T yysize = yyssp - yyss + 1;
+      YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
 
 # if defined yyoverflow
       {
         /* Give user a chance to reallocate the stack.  Use copies of
            these so that the &'s don't force the real ones into
            memory.  */
-        yy_state_t *yyss1 = yyss;
         YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
 
         /* Each stack pointer address is followed by the size of the
            data in use in that stack, in bytes.  This used to be a
            conditional around just the two extra args, but that might
            be undefined if yyoverflow is a macro.  */
         yyoverflow (YY_("memory exhausted"),
-                    &yyss1, yysize * YYSIZEOF (*yyssp),
-                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
                     &yystacksize);
         yyss = yyss1;
         yyvs = yyvs1;
@@ -2731,10 +2643,9 @@ yysetstate:
         yystacksize = YYMAXDEPTH;
 
       {
-        yy_state_t *yyss1 = yyss;
+        yytype_int16 *yyss1 = yyss;
         union yyalloc *yyptr =
-          YY_CAST (union yyalloc *,
-                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
         if (! yyptr)
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
@@ -2748,10 +2659,8 @@ yysetstate:
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
 
-      YY_IGNORE_USELESS_CAST_BEGIN
-      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
-                  YY_CAST (long, yystacksize)));
-      YY_IGNORE_USELESS_CAST_END
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                  (unsigned long) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
@@ -2817,13 +2726,14 @@ yybackup:
 
   /* Shift the lookahead token.  */
   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
   yystate = yyn;
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
   goto yynewstate;
 
 
@@ -2860,23 +2770,23 @@ yyreduce:
     {
   case 18:
 #line 194 "./util/configparser.y"
-        {
+    {
                OUTYY(("\nP(force-toplevel)\n"));
        }
-#line 2867 "util/configparser.c"
+#line 2777 "util/configparser.c"
     break;
 
   case 19:
 #line 200 "./util/configparser.y"
-        
+    { 
                OUTYY(("\nP(server:)\n"));
        }
-#line 2875 "util/configparser.c"
+#line 2785 "util/configparser.c"
     break;
 
   case 224:
 #line 298 "./util/configparser.y"
-        {
+    {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
                s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
@@ -2886,12 +2796,12 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2890 "util/configparser.c"
+#line 2800 "util/configparser.c"
     break;
 
   case 234:
 #line 315 "./util/configparser.y"
-        {
+    {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
                s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
@@ -2901,12 +2811,12 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2905 "util/configparser.c"
+#line 2815 "util/configparser.c"
     break;
 
   case 243:
 #line 332 "./util/configparser.y"
-        {
+    {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
                s = (struct config_view*)calloc(1, sizeof(struct config_view));
@@ -2918,12 +2828,12 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2922 "util/configparser.c"
+#line 2832 "util/configparser.c"
     break;
 
   case 253:
 #line 351 "./util/configparser.y"
-        {
+    {
                struct config_auth* s;
                OUTYY(("\nP(auth_zone:)\n")); 
                s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
@@ -2938,12 +2848,12 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2942 "util/configparser.c"
+#line 2852 "util/configparser.c"
     break;
 
   case 264:
 #line 375 "./util/configparser.y"
-        {
+    {
                uint8_t* bitlist;
                size_t len = 0;
                OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
@@ -2959,12 +2869,12 @@ yyreduce:
 
                }
        }
-#line 2963 "util/configparser.c"
+#line 2873 "util/configparser.c"
     break;
 
   case 265:
 #line 394 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
                   strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 &&
@@ -2978,44 +2888,44 @@ yyreduce:
                        cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
                }
        }
-#line 2982 "util/configparser.c"
+#line 2892 "util/configparser.c"
     break;
 
   case 266:
 #line 411 "./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 2992 "util/configparser.c"
+#line 2902 "util/configparser.c"
     break;
 
   case 267:
 #line 419 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3004 "util/configparser.c"
+#line 2914 "util/configparser.c"
     break;
 
   case 268:
 #line 429 "./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 3014 "util/configparser.c"
+#line 2924 "util/configparser.c"
     break;
 
   case 269:
 #line 437 "./util/configparser.y"
-        {
+    {
                struct config_auth* s;
                OUTYY(("\nP(rpz:)\n")); 
                s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
@@ -3030,36 +2940,36 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 3034 "util/configparser.c"
+#line 2944 "util/configparser.c"
     break;
 
   case 282:
 #line 460 "./util/configparser.y"
-        
+    { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3046 "util/configparser.c"
+#line 2956 "util/configparser.c"
     break;
 
   case 283:
 #line 469 "./util/configparser.y"
-        
+    { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3058 "util/configparser.c"
+#line 2968 "util/configparser.c"
     break;
 
   case 284:
 #line 478 "./util/configparser.y"
-        
+    { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
                        cfg_parser->cfg->stat_interval = 0;
@@ -3068,48 +2978,48 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3072 "util/configparser.c"
+#line 2982 "util/configparser.c"
     break;
 
   case 285:
 #line 489 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3084 "util/configparser.c"
+#line 2994 "util/configparser.c"
     break;
 
   case 286:
 #line 498 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3096 "util/configparser.c"
+#line 3006 "util/configparser.c"
     break;
 
   case 287:
 #line 507 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3108 "util/configparser.c"
+#line 3018 "util/configparser.c"
     break;
 
   case 288:
 #line 516 "./util/configparser.y"
-        
+    { 
                OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
                        cfg_parser->cfg->shm_key = 0;
@@ -3118,24 +3028,24 @@ yyreduce:
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3122 "util/configparser.c"
+#line 3032 "util/configparser.c"
     break;
 
   case 289:
 #line 527 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("port number expected");
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3134 "util/configparser.c"
+#line 3044 "util/configparser.c"
     break;
 
   case 290:
 #line 536 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
@@ -3145,12 +3055,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 3149 "util/configparser.c"
+#line 3059 "util/configparser.c"
     break;
 
   case 291:
 #line 548 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
@@ -3161,12 +3071,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 3165 "util/configparser.c"
+#line 3075 "util/configparser.c"
     break;
 
   case 292:
 #line 562 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3179,12 +3089,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3183 "util/configparser.c"
+#line 3093 "util/configparser.c"
     break;
 
   case 293:
 #line 577 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
                OUTYY(("P(Deprecated option, ignoring)\n"));
@@ -3193,12 +3103,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3197 "util/configparser.c"
+#line 3107 "util/configparser.c"
     break;
 
   case 294:
 #line 588 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3213,12 +3123,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3217 "util/configparser.c"
+#line 3127 "util/configparser.c"
     break;
 
   case 295:
 #line 605 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3233,12 +3143,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3237 "util/configparser.c"
+#line 3147 "util/configparser.c"
     break;
 
   case 296:
 #line 622 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3253,12 +3163,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3257 "util/configparser.c"
+#line 3167 "util/configparser.c"
     break;
 
   case 297:
 #line 639 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3273,12 +3183,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3277 "util/configparser.c"
+#line 3187 "util/configparser.c"
     break;
 
   case 298:
 #line 656 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3291,12 +3201,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3295 "util/configparser.c"
+#line 3205 "util/configparser.c"
     break;
 
   case 299:
 #line 671 "./util/configparser.y"
-        {
+    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3309,12 +3219,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 3313 "util/configparser.c"
+#line 3223 "util/configparser.c"
     break;
 
   case 300:
 #line 686 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
                        cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
@@ -3325,12 +3235,12 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 3329 "util/configparser.c"
+#line 3239 "util/configparser.c"
     break;
 
   case 301:
 #line 699 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
                        cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
@@ -3343,180 +3253,180 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 3347 "util/configparser.c"
+#line 3257 "util/configparser.c"
     break;
 
   case 302:
 #line 714 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3359 "util/configparser.c"
+#line 3269 "util/configparser.c"
     break;
 
   case 303:
 #line 723 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 1, 
                        cfg_parser->cfg->outgoing_avail_ports, 65536))
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 3371 "util/configparser.c"
+#line 3281 "util/configparser.c"
     break;
 
   case 304:
 #line 732 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 0, 
                        cfg_parser->cfg->outgoing_avail_ports, 65536))
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 3383 "util/configparser.c"
+#line 3293 "util/configparser.c"
     break;
 
   case 305:
 #line 741 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3395 "util/configparser.c"
+#line 3305 "util/configparser.c"
     break;
 
   case 306:
 #line 750 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3407 "util/configparser.c"
+#line 3317 "util/configparser.c"
     break;
 
   case 307:
 #line 759 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3419 "util/configparser.c"
+#line 3329 "util/configparser.c"
     break;
 
   case 308:
 #line 768 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3431 "util/configparser.c"
+#line 3341 "util/configparser.c"
     break;
 
   case 309:
 #line 777 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3443 "util/configparser.c"
+#line 3353 "util/configparser.c"
     break;
 
   case 310:
 #line 786 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3455 "util/configparser.c"
+#line 3365 "util/configparser.c"
     break;
 
   case 311:
 #line 795 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3467 "util/configparser.c"
+#line 3377 "util/configparser.c"
     break;
 
   case 312:
 #line 804 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3479 "util/configparser.c"
+#line 3389 "util/configparser.c"
     break;
 
   case 313:
 #line 813 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3491 "util/configparser.c"
+#line 3401 "util/configparser.c"
     break;
 
   case 314:
 #line 822 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                         yyerror("number expected");
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 3503 "util/configparser.c"
+#line 3413 "util/configparser.c"
     break;
 
   case 315:
 #line 831 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3515 "util/configparser.c"
+#line 3425 "util/configparser.c"
     break;
 
   case 316:
 #line 840 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
@@ -3527,24 +3437,24 @@ yyreduce:
                else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3531 "util/configparser.c"
+#line 3441 "util/configparser.c"
     break;
 
   case 317:
 #line 853 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3543 "util/configparser.c"
+#line 3453 "util/configparser.c"
     break;
 
   case 318:
 #line 862 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
@@ -3555,167 +3465,168 @@ yyreduce:
                else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3559 "util/configparser.c"
+#line 3469 "util/configparser.c"
     break;
 
   case 319:
 #line 875 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3571 "util/configparser.c"
+#line 3481 "util/configparser.c"
     break;
 
   case 320:
 #line 884 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3583 "util/configparser.c"
+#line 3493 "util/configparser.c"
     break;
 
   case 321:
 #line 893 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3595 "util/configparser.c"
+#line 3505 "util/configparser.c"
     break;
 
   case 322:
 #line 902 "./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 3605 "util/configparser.c"
+#line 3515 "util/configparser.c"
     break;
 
   case 323:
 #line 909 "./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 3615 "util/configparser.c"
+#line 3525 "util/configparser.c"
     break;
 
   case 324:
 #line 916 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("port number expected");
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3627 "util/configparser.c"
+#line 3537 "util/configparser.c"
     break;
 
   case 325:
 #line 925 "./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 3637 "util/configparser.c"
+#line 3547 "util/configparser.c"
     break;
 
   case 326:
 #line 932 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3649 "util/configparser.c"
+#line 3559 "util/configparser.c"
     break;
 
   case 327:
 #line 941 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3660 "util/configparser.c"
+#line 3570 "util/configparser.c"
     break;
 
   case 328:
 #line 949 "./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 3670 "util/configparser.c"
+#line 3580 "util/configparser.c"
     break;
 
   case 329:
 #line 956 "./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 3680 "util/configparser.c"
+#line 3590 "util/configparser.c"
     break;
 
   case 330:
 #line 963 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
                        (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3691 "util/configparser.c"
+#line 3601 "util/configparser.c"
     break;
 
   case 331:
 #line 971 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3703 "util/configparser.c"
+#line 3613 "util/configparser.c"
     break;
 
   case 332:
 #line 980 "./util/configparser.y"
-        {
+    {
                OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("port number expected");
                else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
+               free((yyvsp[0].str));
        }
-#line 3714 "util/configparser.c"
+#line 3625 "util/configparser.c"
     break;
 
   case 333:
-#line 987 "./util/configparser.y"
-        {
+#line 988 "./util/configparser.y"
+    {
                OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->http_endpoint);
                if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') {
@@ -3730,84 +3641,84 @@ yyreduce:
                        cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
                }
        }
-#line 3734 "util/configparser.c"
+#line 3645 "util/configparser.c"
     break;
 
   case 334:
-#line 1003 "./util/configparser.y"
-        {
+#line 1004 "./util/configparser.y"
+    {
                OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3746 "util/configparser.c"
+#line 3657 "util/configparser.c"
     break;
 
   case 335:
-#line 1011 "./util/configparser.y"
-        {
+#line 1012 "./util/configparser.y"
+    {
                OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str),
                        &cfg_parser->cfg->http_query_buffer_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3758 "util/configparser.c"
+#line 3669 "util/configparser.c"
     break;
 
   case 336:
-#line 1019 "./util/configparser.y"
-        {
+#line 1020 "./util/configparser.y"
+    {
                OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str),
                        &cfg_parser->cfg->http_response_buffer_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3770 "util/configparser.c"
+#line 3681 "util/configparser.c"
     break;
 
   case 337:
-#line 1027 "./util/configparser.y"
-        {
+#line 1028 "./util/configparser.y"
+    {
                OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3782 "util/configparser.c"
+#line 3693 "util/configparser.c"
     break;
 
   case 338:
-#line 1035 "./util/configparser.y"
-        {
+#line 1036 "./util/configparser.y"
+    {
                OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3794 "util/configparser.c"
+#line 3705 "util/configparser.c"
     break;
 
   case 339:
-#line 1044 "./util/configparser.y"
-        {
+#line 1045 "./util/configparser.y"
+    {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3806 "util/configparser.c"
+#line 3717 "util/configparser.c"
     break;
 
   case 340:
-#line 1053 "./util/configparser.y"
-        {
+#line 1054 "./util/configparser.y"
+    {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -3819,104 +3730,104 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3823 "util/configparser.c"
+#line 3734 "util/configparser.c"
     break;
 
   case 341:
-#line 1067 "./util/configparser.y"
-        {
+#line 1068 "./util/configparser.y"
+    {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3835 "util/configparser.c"
+#line 3746 "util/configparser.c"
     break;
 
   case 342:
-#line 1076 "./util/configparser.y"
-        {
+#line 1077 "./util/configparser.y"
+    {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3847 "util/configparser.c"
+#line 3758 "util/configparser.c"
     break;
 
   case 343:
-#line 1085 "./util/configparser.y"
-  {
+#line 1086 "./util/configparser.y"
+    {
        OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                yyerror("expected yes or no.");
        else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 3859 "util/configparser.c"
+#line 3770 "util/configparser.c"
     break;
 
   case 344:
-#line 1094 "./util/configparser.y"
-  {
+#line 1095 "./util/configparser.y"
+    {
        OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                yyerror("expected yes or no.");
        else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 3871 "util/configparser.c"
+#line 3782 "util/configparser.c"
     break;
 
   case 345:
-#line 1103 "./util/configparser.y"
-        {
+#line 1104 "./util/configparser.y"
+    {
                OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3883 "util/configparser.c"
+#line 3794 "util/configparser.c"
     break;
 
   case 346:
-#line 1112 "./util/configparser.y"
-  {
+#line 1113 "./util/configparser.y"
+    {
        OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                yyerror("expected yes or no.");
        else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 3895 "util/configparser.c"
+#line 3806 "util/configparser.c"
     break;
 
   case 347:
-#line 1121 "./util/configparser.y"
-        {
+#line 1122 "./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 3905 "util/configparser.c"
+#line 3816 "util/configparser.c"
     break;
 
   case 348:
-#line 1128 "./util/configparser.y"
-        {
+#line 1129 "./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 3915 "util/configparser.c"
+#line 3826 "util/configparser.c"
     break;
 
   case 349:
-#line 1135 "./util/configparser.y"
-        {
+#line 1136 "./util/configparser.y"
+    {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = (yyvsp[0].str);
@@ -3940,106 +3851,106 @@ yyreduce:
                        }
                }
        }
-#line 3944 "util/configparser.c"
+#line 3855 "util/configparser.c"
     break;
 
   case 350:
-#line 1161 "./util/configparser.y"
-        {
+#line 1162 "./util/configparser.y"
+    {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->logfile);
                cfg_parser->cfg->logfile = (yyvsp[0].str);
                cfg_parser->cfg->use_syslog = 0;
        }
-#line 3955 "util/configparser.c"
+#line 3866 "util/configparser.c"
     break;
 
   case 351:
-#line 1169 "./util/configparser.y"
-        {
+#line 1170 "./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 3965 "util/configparser.c"
+#line 3876 "util/configparser.c"
     break;
 
   case 352:
-#line 1176 "./util/configparser.y"
-        {
+#line 1177 "./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 3975 "util/configparser.c"
+#line 3886 "util/configparser.c"
     break;
 
   case 353:
-#line 1183 "./util/configparser.y"
-        {
+#line 1184 "./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 3985 "util/configparser.c"
+#line 3896 "util/configparser.c"
     break;
 
   case 354:
-#line 1190 "./util/configparser.y"
-        {
+#line 1191 "./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 3995 "util/configparser.c"
+#line 3906 "util/configparser.c"
     break;
 
   case 355:
-#line 1197 "./util/configparser.y"
-        {
+#line 1198 "./util/configparser.y"
+    {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        auto_trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4006 "util/configparser.c"
+#line 3917 "util/configparser.c"
     break;
 
   case 356:
-#line 1205 "./util/configparser.y"
-        {
+#line 1206 "./util/configparser.y"
+    {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4017 "util/configparser.c"
+#line 3928 "util/configparser.c"
     break;
 
   case 357:
-#line 1213 "./util/configparser.y"
-        {
+#line 1214 "./util/configparser.y"
+    {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trusted_keys_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 4028 "util/configparser.c"
+#line 3939 "util/configparser.c"
     break;
 
   case 358:
-#line 1221 "./util/configparser.y"
-        {
+#line 1222 "./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 4038 "util/configparser.c"
+#line 3949 "util/configparser.c"
     break;
 
   case 359:
-#line 1228 "./util/configparser.y"
-        {
+#line 1229 "./util/configparser.y"
+    {
                OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4048,12 +3959,12 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4052 "util/configparser.c"
+#line 3963 "util/configparser.c"
     break;
 
   case 360:
-#line 1239 "./util/configparser.y"
-        {
+#line 1240 "./util/configparser.y"
+    {
                OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4062,99 +3973,99 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4066 "util/configparser.c"
+#line 3977 "util/configparser.c"
     break;
 
   case 361:
-#line 1250 "./util/configparser.y"
-        {
+#line 1251 "./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 4076 "util/configparser.c"
+#line 3987 "util/configparser.c"
     break;
 
   case 362:
-#line 1257 "./util/configparser.y"
-        {
+#line 1258 "./util/configparser.y"
+    {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4088 "util/configparser.c"
+#line 3999 "util/configparser.c"
     break;
 
   case 363:
-#line 1266 "./util/configparser.y"
-        {
+#line 1267 "./util/configparser.y"
+    {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4100 "util/configparser.c"
+#line 4011 "util/configparser.c"
     break;
 
   case 364:
-#line 1275 "./util/configparser.y"
-        {
+#line 1276 "./util/configparser.y"
+    {
                OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4112 "util/configparser.c"
+#line 4023 "util/configparser.c"
     break;
 
   case 365:
-#line 1284 "./util/configparser.y"
-        {
+#line 1285 "./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 4122 "util/configparser.c"
+#line 4033 "util/configparser.c"
     break;
 
   case 366:
-#line 1291 "./util/configparser.y"
-        {
+#line 1292 "./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 4132 "util/configparser.c"
+#line 4043 "util/configparser.c"
     break;
 
   case 367:
-#line 1298 "./util/configparser.y"
-        {
+#line 1299 "./util/configparser.y"
+    {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 4143 "util/configparser.c"
+#line 4054 "util/configparser.c"
     break;
 
   case 368:
-#line 1306 "./util/configparser.y"
-        {
+#line 1307 "./util/configparser.y"
+    {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 4154 "util/configparser.c"
+#line 4065 "util/configparser.c"
     break;
 
   case 369:
-#line 1314 "./util/configparser.y"
+#line 1315 "./util/configparser.y"
     {
         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4163,11 +4074,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 4167 "util/configparser.c"
+#line 4078 "util/configparser.c"
     break;
 
   case 370:
-#line 1324 "./util/configparser.y"
+#line 1325 "./util/configparser.y"
     {
         OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4176,11 +4087,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 4180 "util/configparser.c"
+#line 4091 "util/configparser.c"
     break;
 
   case 371:
-#line 1334 "./util/configparser.y"
+#line 1335 "./util/configparser.y"
     {
         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4189,12 +4100,12 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 4193 "util/configparser.c"
+#line 4104 "util/configparser.c"
     break;
 
   case 372:
-#line 1344 "./util/configparser.y"
-        {
+#line 1345 "./util/configparser.y"
+    {
                OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
@@ -4206,23 +4117,23 @@ yyreduce:
                        cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4210 "util/configparser.c"
+#line 4121 "util/configparser.c"
     break;
 
   case 373:
-#line 1358 "./util/configparser.y"
-        {
+#line 1359 "./util/configparser.y"
+    {
                OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4221 "util/configparser.c"
+#line 4132 "util/configparser.c"
     break;
 
   case 374:
-#line 1366 "./util/configparser.y"
-        {
+#line 1367 "./util/configparser.y"
+    {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -4233,12 +4144,12 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4237 "util/configparser.c"
+#line 4148 "util/configparser.c"
     break;
 
   case 375:
-#line 1379 "./util/configparser.y"
-        {
+#line 1380 "./util/configparser.y"
+    {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -4247,23 +4158,23 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4251 "util/configparser.c"
+#line 4162 "util/configparser.c"
     break;
 
   case 376:
-#line 1390 "./util/configparser.y"
-        {
+#line 1391 "./util/configparser.y"
+    {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4262 "util/configparser.c"
+#line 4173 "util/configparser.c"
     break;
 
   case 377:
-#line 1398 "./util/configparser.y"
-        {
+#line 1399 "./util/configparser.y"
+    {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -4274,48 +4185,48 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4278 "util/configparser.c"
+#line 4189 "util/configparser.c"
     break;
 
   case 378:
-#line 1411 "./util/configparser.y"
-        {
+#line 1412 "./util/configparser.y"
+    {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4290 "util/configparser.c"
+#line 4201 "util/configparser.c"
     break;
 
   case 379:
-#line 1420 "./util/configparser.y"
-        {
+#line 1421 "./util/configparser.y"
+    {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4302 "util/configparser.c"
+#line 4213 "util/configparser.c"
     break;
 
   case 380:
-#line 1429 "./util/configparser.y"
-        {
+#line 1430 "./util/configparser.y"
+    {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4314 "util/configparser.c"
+#line 4225 "util/configparser.c"
     break;
 
   case 381:
-#line 1438 "./util/configparser.y"
-        {
+#line 1439 "./util/configparser.y"
+    {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4323,12 +4234,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4327 "util/configparser.c"
+#line 4238 "util/configparser.c"
     break;
 
   case 382:
-#line 1448 "./util/configparser.y"
-        {
+#line 1449 "./util/configparser.y"
+    {
                OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4336,23 +4247,23 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4340 "util/configparser.c"
+#line 4251 "util/configparser.c"
     break;
 
   case 383:
-#line 1458 "./util/configparser.y"
-        {
+#line 1459 "./util/configparser.y"
+    {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 4351 "util/configparser.c"
+#line 4262 "util/configparser.c"
     break;
 
   case 384:
-#line 1466 "./util/configparser.y"
-        {
+#line 1467 "./util/configparser.y"
+    {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -4363,58 +4274,58 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4367 "util/configparser.c"
+#line 4278 "util/configparser.c"
     break;
 
   case 385:
-#line 1479 "./util/configparser.y"
-        {
+#line 1480 "./util/configparser.y"
+    {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4379 "util/configparser.c"
+#line 4290 "util/configparser.c"
     break;
 
   case 386:
-#line 1488 "./util/configparser.y"
-        {
+#line 1489 "./util/configparser.y"
+    {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
                        "removed, use infra-host-ttl)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4390 "util/configparser.c"
+#line 4301 "util/configparser.c"
     break;
 
   case 387:
-#line 1496 "./util/configparser.y"
-        {
+#line 1497 "./util/configparser.y"
+    {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4402 "util/configparser.c"
+#line 4313 "util/configparser.c"
     break;
 
   case 388:
-#line 1505 "./util/configparser.y"
-        {
+#line 1506 "./util/configparser.y"
+    {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
                        "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4413 "util/configparser.c"
+#line 4324 "util/configparser.c"
     break;
 
   case 389:
-#line 1513 "./util/configparser.y"
-        {
+#line 1514 "./util/configparser.y"
+    {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -4425,34 +4336,34 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4429 "util/configparser.c"
+#line 4340 "util/configparser.c"
     break;
 
   case 390:
-#line 1526 "./util/configparser.y"
-        {
+#line 1527 "./util/configparser.y"
+    {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4441 "util/configparser.c"
+#line 4352 "util/configparser.c"
     break;
 
   case 391:
-#line 1535 "./util/configparser.y"
-        {
+#line 1536 "./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 4451 "util/configparser.c"
+#line 4362 "util/configparser.c"
     break;
 
   case 392:
-#line 1542 "./util/configparser.y"
-        {
+#line 1543 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4460,12 +4371,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4464 "util/configparser.c"
+#line 4375 "util/configparser.c"
     break;
 
   case 393:
-#line 1552 "./util/configparser.y"
-        {
+#line 1553 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4473,12 +4384,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4477 "util/configparser.c"
+#line 4388 "util/configparser.c"
     break;
 
   case 394:
-#line 1562 "./util/configparser.y"
-        {
+#line 1563 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4486,12 +4397,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4490 "util/configparser.c"
+#line 4401 "util/configparser.c"
     break;
 
   case 395:
-#line 1572 "./util/configparser.y"
-        {
+#line 1573 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4499,12 +4410,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4503 "util/configparser.c"
+#line 4414 "util/configparser.c"
     break;
 
   case 396:
-#line 1582 "./util/configparser.y"
-        {
+#line 1583 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4512,12 +4423,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4516 "util/configparser.c"
+#line 4427 "util/configparser.c"
     break;
 
   case 397:
-#line 1592 "./util/configparser.y"
-        {
+#line 1593 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4525,12 +4436,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4529 "util/configparser.c"
+#line 4440 "util/configparser.c"
     break;
 
   case 398:
-#line 1602 "./util/configparser.y"
-        {
+#line 1603 "./util/configparser.y"
+    {
                OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4538,12 +4449,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4542 "util/configparser.c"
+#line 4453 "util/configparser.c"
     break;
 
   case 399:
-#line 1612 "./util/configparser.y"
-        {
+#line 1613 "./util/configparser.y"
+    {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4551,100 +4462,100 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4555 "util/configparser.c"
+#line 4466 "util/configparser.c"
     break;
 
   case 400:
-#line 1622 "./util/configparser.y"
-        {
+#line 1623 "./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 4565 "util/configparser.c"
+#line 4476 "util/configparser.c"
     break;
 
   case 401:
-#line 1629 "./util/configparser.y"
-        {
+#line 1630 "./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 4575 "util/configparser.c"
+#line 4486 "util/configparser.c"
     break;
 
   case 402:
-#line 1636 "./util/configparser.y"
-        {
+#line 1637 "./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 4585 "util/configparser.c"
+#line 4496 "util/configparser.c"
     break;
 
   case 403:
-#line 1643 "./util/configparser.y"
-        {
+#line 1644 "./util/configparser.y"
+    {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4597 "util/configparser.c"
+#line 4508 "util/configparser.c"
     break;
 
   case 404:
-#line 1652 "./util/configparser.y"
-        {
+#line 1653 "./util/configparser.y"
+    {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4609 "util/configparser.c"
+#line 4520 "util/configparser.c"
     break;
 
   case 405:
-#line 1661 "./util/configparser.y"
-        {
+#line 1662 "./util/configparser.y"
+    {
                OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4621 "util/configparser.c"
+#line 4532 "util/configparser.c"
     break;
 
   case 406:
-#line 1670 "./util/configparser.y"
-        {
+#line 1671 "./util/configparser.y"
+    {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4633 "util/configparser.c"
+#line 4544 "util/configparser.c"
     break;
 
   case 407:
-#line 1679 "./util/configparser.y"
-        {
+#line 1680 "./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 4643 "util/configparser.c"
+#line 4554 "util/configparser.c"
     break;
 
   case 408:
-#line 1686 "./util/configparser.y"
-        {
+#line 1687 "./util/configparser.y"
+    {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4652,12 +4563,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4656 "util/configparser.c"
+#line 4567 "util/configparser.c"
     break;
 
   case 409:
-#line 1696 "./util/configparser.y"
-        {
+#line 1697 "./util/configparser.y"
+    {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
                        strcmp((yyvsp[0].str), "deny_non_local")!=0 &&
@@ -4675,22 +4586,22 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 4679 "util/configparser.c"
+#line 4590 "util/configparser.c"
     break;
 
   case 410:
-#line 1716 "./util/configparser.y"
-        {
+#line 1717 "./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 4689 "util/configparser.c"
+#line 4600 "util/configparser.c"
     break;
 
   case 411:
-#line 1723 "./util/configparser.y"
-        {
+#line 1724 "./util/configparser.y"
+    {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
                        cfg_parser->cfg->val_date_override = 0;
@@ -4706,12 +4617,12 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4710 "util/configparser.c"
+#line 4621 "util/configparser.c"
     break;
 
   case 412:
-#line 1741 "./util/configparser.y"
-        {
+#line 1742 "./util/configparser.y"
+    {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
                        cfg_parser->cfg->val_sig_skew_min = 0;
@@ -4722,12 +4633,12 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4726 "util/configparser.c"
+#line 4637 "util/configparser.c"
     break;
 
   case 413:
-#line 1754 "./util/configparser.y"
-        {
+#line 1755 "./util/configparser.y"
+    {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
                        cfg_parser->cfg->val_sig_skew_max = 0;
@@ -4738,60 +4649,60 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4742 "util/configparser.c"
+#line 4653 "util/configparser.c"
     break;
 
   case 414:
-#line 1767 "./util/configparser.y"
-        {
+#line 1768 "./util/configparser.y"
+    {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4754 "util/configparser.c"
+#line 4665 "util/configparser.c"
     break;
 
   case 415:
-#line 1776 "./util/configparser.y"
-        {
+#line 1777 "./util/configparser.y"
+    {
                OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4766 "util/configparser.c"
+#line 4677 "util/configparser.c"
     break;
 
   case 416:
-#line 1785 "./util/configparser.y"
-        {
+#line 1786 "./util/configparser.y"
+    {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4778 "util/configparser.c"
+#line 4689 "util/configparser.c"
     break;
 
   case 417:
-#line 1794 "./util/configparser.y"
-        {
+#line 1795 "./util/configparser.y"
+    {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4790 "util/configparser.c"
+#line 4701 "util/configparser.c"
     break;
 
   case 418:
-#line 1803 "./util/configparser.y"
-        {
+#line 1804 "./util/configparser.y"
+    {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4799,12 +4710,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4803 "util/configparser.c"
+#line 4714 "util/configparser.c"
     break;
 
   case 419:
-#line 1813 "./util/configparser.y"
-        {
+#line 1814 "./util/configparser.y"
+    {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4812,12 +4723,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4816 "util/configparser.c"
+#line 4727 "util/configparser.c"
     break;
 
   case 420:
-#line 1823 "./util/configparser.y"
-        {
+#line 1824 "./util/configparser.y"
+    {
                OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4826,84 +4737,84 @@ yyreduce:
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4830 "util/configparser.c"
+#line 4741 "util/configparser.c"
     break;
 
   case 421:
-#line 1834 "./util/configparser.y"
-        {
+#line 1835 "./util/configparser.y"
+    {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4842 "util/configparser.c"
+#line 4753 "util/configparser.c"
     break;
 
   case 422:
-#line 1843 "./util/configparser.y"
-        {
+#line 1844 "./util/configparser.y"
+    {
                OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4854 "util/configparser.c"
+#line 4765 "util/configparser.c"
     break;
 
   case 423:
-#line 1852 "./util/configparser.y"
-        {
+#line 1853 "./util/configparser.y"
+    {
                OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4866 "util/configparser.c"
+#line 4777 "util/configparser.c"
     break;
 
   case 424:
-#line 1861 "./util/configparser.y"
-        {
+#line 1862 "./util/configparser.y"
+    {
                OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4878 "util/configparser.c"
+#line 4789 "util/configparser.c"
     break;
 
   case 425:
-#line 1870 "./util/configparser.y"
-        {
+#line 1871 "./util/configparser.y"
+    {
                OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4890 "util/configparser.c"
+#line 4801 "util/configparser.c"
     break;
 
   case 426:
-#line 1879 "./util/configparser.y"
-        {
+#line 1880 "./util/configparser.y"
+    {
                OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4902 "util/configparser.c"
+#line 4813 "util/configparser.c"
     break;
 
   case 427:
-#line 1888 "./util/configparser.y"
-        {
+#line 1889 "./util/configparser.y"
+    {
                OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4914,12 +4825,12 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 4918 "util/configparser.c"
+#line 4829 "util/configparser.c"
     break;
 
   case 428:
-#line 1901 "./util/configparser.y"
-        {
+#line 1902 "./util/configparser.y"
+    {
                OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -4930,70 +4841,70 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 4934 "util/configparser.c"
+#line 4845 "util/configparser.c"
     break;
 
   case 429:
-#line 1914 "./util/configparser.y"
-        {
+#line 1915 "./util/configparser.y"
+    {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4946 "util/configparser.c"
+#line 4857 "util/configparser.c"
     break;
 
   case 430:
-#line 1923 "./util/configparser.y"
-        {
+#line 1924 "./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 4956 "util/configparser.c"
+#line 4867 "util/configparser.c"
     break;
 
   case 431:
-#line 1930 "./util/configparser.y"
-        {
+#line 1931 "./util/configparser.y"
+    {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4968 "util/configparser.c"
+#line 4879 "util/configparser.c"
     break;
 
   case 432:
-#line 1939 "./util/configparser.y"
-        {
+#line 1940 "./util/configparser.y"
+    {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4980 "util/configparser.c"
+#line 4891 "util/configparser.c"
     break;
 
   case 433:
-#line 1948 "./util/configparser.y"
-        {
+#line 1949 "./util/configparser.y"
+    {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4992 "util/configparser.c"
+#line 4903 "util/configparser.c"
     break;
 
   case 434:
-#line 1957 "./util/configparser.y"
-        {
+#line 1958 "./util/configparser.y"
+    {
                OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
@@ -5001,23 +4912,23 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5005 "util/configparser.c"
+#line 4916 "util/configparser.c"
     break;
 
   case 435:
-#line 1966 "./util/configparser.y"
-        {
+#line 1967 "./util/configparser.y"
+    {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5016 "util/configparser.c"
+#line 4927 "util/configparser.c"
     break;
 
   case 436:
-#line 1974 "./util/configparser.y"
-        {
+#line 1975 "./util/configparser.y"
+    {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -5028,23 +4939,23 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5032 "util/configparser.c"
+#line 4943 "util/configparser.c"
     break;
 
   case 437:
-#line 1987 "./util/configparser.y"
-        {
+#line 1988 "./util/configparser.y"
+    {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 5043 "util/configparser.c"
+#line 4954 "util/configparser.c"
     break;
 
   case 438:
-#line 1995 "./util/configparser.y"
-        {
+#line 1996 "./util/configparser.y"
+    {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
                   strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
@@ -5083,22 +4994,22 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 5087 "util/configparser.c"
+#line 4998 "util/configparser.c"
     break;
 
   case 439:
-#line 2036 "./util/configparser.y"
-        {
+#line 2037 "./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 5097 "util/configparser.c"
+#line 5008 "util/configparser.c"
     break;
 
   case 440:
-#line 2043 "./util/configparser.y"
-        {
+#line 2044 "./util/configparser.y"
+    {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
                ptr = cfg_ptr_reverse((yyvsp[0].str));
@@ -5111,12 +5022,12 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 5115 "util/configparser.c"
+#line 5026 "util/configparser.c"
     break;
 
   case 441:
-#line 2058 "./util/configparser.y"
-        {
+#line 2059 "./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)
                        yyerror("expected yes or no.");
@@ -5124,12 +5035,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5128 "util/configparser.c"
+#line 5039 "util/configparser.c"
     break;
 
   case 442:
-#line 2068 "./util/configparser.y"
-        {
+#line 2069 "./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)
                        yyerror("expected yes or no.");
@@ -5137,65 +5048,65 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5141 "util/configparser.c"
+#line 5052 "util/configparser.c"
     break;
 
   case 443:
-#line 2078 "./util/configparser.y"
-        {
+#line 2079 "./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 5151 "util/configparser.c"
+#line 5062 "util/configparser.c"
     break;
 
   case 444:
-#line 2085 "./util/configparser.y"
-        {
+#line 2086 "./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 5161 "util/configparser.c"
+#line 5072 "util/configparser.c"
     break;
 
   case 445:
-#line 2092 "./util/configparser.y"
-        {
+#line 2093 "./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 5171 "util/configparser.c"
+#line 5082 "util/configparser.c"
     break;
 
   case 446:
-#line 2099 "./util/configparser.y"
-        {
+#line 2100 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5183 "util/configparser.c"
+#line 5094 "util/configparser.c"
     break;
 
   case 447:
-#line 2108 "./util/configparser.y"
-        {
+#line 2109 "./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 5194 "util/configparser.c"
+#line 5105 "util/configparser.c"
     break;
 
   case 448:
-#line 2116 "./util/configparser.y"
-        {
+#line 2117 "./util/configparser.y"
+    {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
                while((p=strsep(&s, " \t\n")) != NULL) {
@@ -5207,12 +5118,12 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5211 "util/configparser.c"
+#line 5122 "util/configparser.c"
     break;
 
   case 449:
-#line 2130 "./util/configparser.y"
-        {
+#line 2131 "./util/configparser.y"
+    {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
                        &len);
@@ -5231,12 +5142,12 @@ yyreduce:
                        }
                }
        }
-#line 5235 "util/configparser.c"
+#line 5146 "util/configparser.c"
     break;
 
   case 450:
-#line 2151 "./util/configparser.y"
-        {
+#line 2152 "./util/configparser.y"
+    {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
                        &len);
@@ -5255,12 +5166,12 @@ yyreduce:
                        }
                }
        }
-#line 5259 "util/configparser.c"
+#line 5170 "util/configparser.c"
     break;
 
   case 451:
-#line 2172 "./util/configparser.y"
-        {
+#line 2173 "./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,
                        (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
@@ -5270,12 +5181,12 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5274 "util/configparser.c"
+#line 5185 "util/configparser.c"
     break;
 
   case 452:
-#line 2184 "./util/configparser.y"
-        {
+#line 2185 "./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,
                        (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
@@ -5285,12 +5196,12 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5289 "util/configparser.c"
+#line 5200 "util/configparser.c"
     break;
 
   case 453:
-#line 2196 "./util/configparser.y"
-        {
+#line 2197 "./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,
                        (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
@@ -5300,24 +5211,24 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5304 "util/configparser.c"
+#line 5215 "util/configparser.c"
     break;
 
   case 454:
-#line 2208 "./util/configparser.y"
-        {
+#line 2209 "./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,
                        (yyvsp[-1].str), (yyvsp[0].str))) {
                        yyerror("out of memory");
                }
        }
-#line 5316 "util/configparser.c"
+#line 5227 "util/configparser.c"
     break;
 
   case 455:
-#line 2217 "./util/configparser.y"
-        {
+#line 2218 "./util/configparser.y"
+    {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
                        &len);
@@ -5336,58 +5247,58 @@ yyreduce:
                        }
                }
        }
-#line 5340 "util/configparser.c"
+#line 5251 "util/configparser.c"
     break;
 
   case 456:
-#line 2238 "./util/configparser.y"
-        
+#line 2239 "./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)
                        yyerror("number expected");
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5352 "util/configparser.c"
+#line 5263 "util/configparser.c"
     break;
 
   case 457:
-#line 2248 "./util/configparser.y"
-        
+#line 2249 "./util/configparser.y"
+    { 
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("number expected");
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5364 "util/configparser.c"
+#line 5275 "util/configparser.c"
     break;
 
   case 458:
-#line 2257 "./util/configparser.y"
-  {
+#line 2258 "./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 5375 "util/configparser.c"
+#line 5286 "util/configparser.c"
     break;
 
   case 459:
-#line 2265 "./util/configparser.y"
-        {
+#line 2266 "./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 5386 "util/configparser.c"
+#line 5297 "util/configparser.c"
     break;
 
   case 460:
-#line 2273 "./util/configparser.y"
-  {
+#line 2274 "./util/configparser.y"
+    {
        OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
                yyerror("number expected");
@@ -5398,12 +5309,12 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 5402 "util/configparser.c"
+#line 5313 "util/configparser.c"
     break;
 
   case 461:
-#line 2286 "./util/configparser.y"
-        {
+#line 2287 "./util/configparser.y"
+    {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
@@ -5414,12 +5325,12 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5418 "util/configparser.c"
+#line 5329 "util/configparser.c"
     break;
 
   case 462:
-#line 2299 "./util/configparser.y"
-        {
+#line 2300 "./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) {
                        yyerror("number expected");
@@ -5432,12 +5343,12 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 5436 "util/configparser.c"
+#line 5347 "util/configparser.c"
     break;
 
   case 463:
-#line 2314 "./util/configparser.y"
-        {
+#line 2315 "./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) {
                        yyerror("number expected");
@@ -5450,69 +5361,69 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 5454 "util/configparser.c"
+#line 5365 "util/configparser.c"
     break;
 
   case 464:
-#line 2329 "./util/configparser.y"
-  { 
+#line 2330 "./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)
                yyerror("number expected");
        else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
        free((yyvsp[0].str));
        }
-#line 5466 "util/configparser.c"
+#line 5377 "util/configparser.c"
     break;
 
   case 465:
-#line 2338 "./util/configparser.y"
-        
+#line 2339 "./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)
                        yyerror("number expected");
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5478 "util/configparser.c"
+#line 5389 "util/configparser.c"
     break;
 
   case 466:
-#line 2347 "./util/configparser.y"
-        
+#line 2348 "./util/configparser.y"
+    { 
                OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
                free((yyvsp[0].str));
        }
-#line 5487 "util/configparser.c"
+#line 5398 "util/configparser.c"
     break;
 
   case 467:
-#line 2353 "./util/configparser.y"
-        
+#line 2354 "./util/configparser.y"
+    { 
                OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) <= 0)
                        yyerror("number expected");
                else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5499 "util/configparser.c"
+#line 5410 "util/configparser.c"
     break;
 
   case 468:
-#line 2362 "./util/configparser.y"
-        
+#line 2363 "./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)
                        yyerror("number expected");
                else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5511 "util/configparser.c"
+#line 5422 "util/configparser.c"
     break;
 
   case 469:
-#line 2371 "./util/configparser.y"
-        {
+#line 2372 "./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)
                        yyerror("expected yes or no.");
@@ -5520,12 +5431,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5524 "util/configparser.c"
+#line 5435 "util/configparser.c"
     break;
 
   case 470:
-#line 2381 "./util/configparser.y"
-        {
+#line 2382 "./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)
                        yyerror("expected yes or no.");
@@ -5533,12 +5444,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5537 "util/configparser.c"
+#line 5448 "util/configparser.c"
     break;
 
   case 471:
-#line 2391 "./util/configparser.y"
-        {
+#line 2392 "./util/configparser.y"
+    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5549,12 +5460,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 5553 "util/configparser.c"
+#line 5464 "util/configparser.c"
     break;
 
   case 472:
-#line 2404 "./util/configparser.y"
-        {
+#line 2405 "./util/configparser.y"
+    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5565,12 +5476,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 5569 "util/configparser.c"
+#line 5480 "util/configparser.c"
     break;
 
   case 473:
-#line 2417 "./util/configparser.y"
-        {
+#line 2418 "./util/configparser.y"
+    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ipsecmod_hook);
@@ -5580,12 +5491,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5584 "util/configparser.c"
+#line 5495 "util/configparser.c"
     break;
 
   case 474:
-#line 2429 "./util/configparser.y"
-        {
+#line 2430 "./util/configparser.y"
+    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5597,12 +5508,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5601 "util/configparser.c"
+#line 5512 "util/configparser.c"
     break;
 
   case 475:
-#line 2443 "./util/configparser.y"
-        {
+#line 2444 "./util/configparser.y"
+    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str)))
@@ -5612,12 +5523,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5616 "util/configparser.c"
+#line 5527 "util/configparser.c"
     break;
 
   case 476:
-#line 2455 "./util/configparser.y"
-        {
+#line 2456 "./util/configparser.y"
+    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5629,12 +5540,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5633 "util/configparser.c"
+#line 5544 "util/configparser.c"
     break;
 
   case 477:
-#line 2469 "./util/configparser.y"
-        {
+#line 2470 "./util/configparser.y"
+    {
                int tag_data;
                OUTYY(("P(server_edns_client_tag:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                tag_data = atoi((yyvsp[0].str));
@@ -5647,12 +5558,12 @@ yyreduce:
                        fatal_exit("out of memory adding "
                                "edns-client-tag");
        }
-#line 5651 "util/configparser.c"
+#line 5562 "util/configparser.c"
     break;
 
   case 478:
-#line 2484 "./util/configparser.y"
-        {
+#line 2485 "./util/configparser.y"
+    {
                OUTYY(("P(edns_client_tag_opcode:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
                        yyerror("option code expected");
@@ -5661,12 +5572,12 @@ yyreduce:
                else cfg_parser->cfg->edns_client_tag_opcode = atoi((yyvsp[0].str));
 
        }
-#line 5665 "util/configparser.c"
+#line 5576 "util/configparser.c"
     break;
 
   case 479:
-#line 2495 "./util/configparser.y"
-        {
+#line 2496 "./util/configparser.y"
+    {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
                        yyerror("stub name override, there must be one name "
@@ -5674,56 +5585,56 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 5678 "util/configparser.c"
+#line 5589 "util/configparser.c"
     break;
 
   case 480:
-#line 2505 "./util/configparser.y"
-        {
+#line 2506 "./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 5688 "util/configparser.c"
+#line 5599 "util/configparser.c"
     break;
 
   case 481:
-#line 2512 "./util/configparser.y"
-        {
+#line 2513 "./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 5698 "util/configparser.c"
+#line 5609 "util/configparser.c"
     break;
 
   case 482:
-#line 2519 "./util/configparser.y"
-        {
+#line 2520 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5710 "util/configparser.c"
+#line 5621 "util/configparser.c"
     break;
 
   case 483:
-#line 2528 "./util/configparser.y"
-        {
+#line 2529 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5722 "util/configparser.c"
+#line 5633 "util/configparser.c"
     break;
 
   case 484:
-#line 2537 "./util/configparser.y"
-        {
+#line 2538 "./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)
                        yyerror("expected yes or no.");
@@ -5731,12 +5642,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5735 "util/configparser.c"
+#line 5646 "util/configparser.c"
     break;
 
   case 485:
-#line 2547 "./util/configparser.y"
-        {
+#line 2548 "./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)
                        yyerror("expected yes or no.");
@@ -5744,12 +5655,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5748 "util/configparser.c"
+#line 5659 "util/configparser.c"
     break;
 
   case 486:
-#line 2557 "./util/configparser.y"
-        {
+#line 2558 "./util/configparser.y"
+    {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
                        yyerror("forward name override, there must be one "
@@ -5757,56 +5668,56 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 5761 "util/configparser.c"
+#line 5672 "util/configparser.c"
     break;
 
   case 487:
-#line 2567 "./util/configparser.y"
-        {
+#line 2568 "./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 5771 "util/configparser.c"
+#line 5682 "util/configparser.c"
     break;
 
   case 488:
-#line 2574 "./util/configparser.y"
-        {
+#line 2575 "./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 5781 "util/configparser.c"
+#line 5692 "util/configparser.c"
     break;
 
   case 489:
-#line 2581 "./util/configparser.y"
-        {
+#line 2582 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5793 "util/configparser.c"
+#line 5704 "util/configparser.c"
     break;
 
   case 490:
-#line 2590 "./util/configparser.y"
-        {
+#line 2591 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5805 "util/configparser.c"
+#line 5716 "util/configparser.c"
     break;
 
   case 491:
-#line 2599 "./util/configparser.y"
-        {
+#line 2600 "./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)
                        yyerror("expected yes or no.");
@@ -5814,12 +5725,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5818 "util/configparser.c"
+#line 5729 "util/configparser.c"
     break;
 
   case 492:
-#line 2609 "./util/configparser.y"
-        {
+#line 2610 "./util/configparser.y"
+    {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->auths->name)
                        yyerror("auth name override, there must be one name "
@@ -5827,53 +5738,53 @@ yyreduce:
                free(cfg_parser->cfg->auths->name);
                cfg_parser->cfg->auths->name = (yyvsp[0].str);
        }
-#line 5831 "util/configparser.c"
+#line 5742 "util/configparser.c"
     break;
 
   case 493:
-#line 2619 "./util/configparser.y"
-        {
+#line 2620 "./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 5841 "util/configparser.c"
+#line 5752 "util/configparser.c"
     break;
 
   case 494:
-#line 2626 "./util/configparser.y"
-        {
+#line 2627 "./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 5851 "util/configparser.c"
+#line 5762 "util/configparser.c"
     break;
 
   case 495:
-#line 2633 "./util/configparser.y"
-        {
+#line 2634 "./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 5861 "util/configparser.c"
+#line 5772 "util/configparser.c"
     break;
 
   case 496:
-#line 2640 "./util/configparser.y"
-        {
+#line 2641 "./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 5872 "util/configparser.c"
+#line 5783 "util/configparser.c"
     break;
 
   case 497:
-#line 2648 "./util/configparser.y"
-        {
+#line 2649 "./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)
                        yyerror("expected yes or no.");
@@ -5881,12 +5792,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5885 "util/configparser.c"
+#line 5796 "util/configparser.c"
     break;
 
   case 498:
-#line 2658 "./util/configparser.y"
-        {
+#line 2659 "./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)
                        yyerror("expected yes or no.");
@@ -5894,12 +5805,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5898 "util/configparser.c"
+#line 5809 "util/configparser.c"
     break;
 
   case 499:
-#line 2668 "./util/configparser.y"
-        {
+#line 2669 "./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)
                        yyerror("expected yes or no.");
@@ -5907,12 +5818,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5911 "util/configparser.c"
+#line 5822 "util/configparser.c"
     break;
 
   case 500:
-#line 2678 "./util/configparser.y"
-        {
+#line 2679 "./util/configparser.y"
+    {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
                        yyerror("view name override, there must be one "
@@ -5920,12 +5831,12 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 5924 "util/configparser.c"
+#line 5835 "util/configparser.c"
     break;
 
   case 501:
-#line 2688 "./util/configparser.y"
-        {
+#line 2689 "./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 &&
                   strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
@@ -5962,12 +5873,12 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 5966 "util/configparser.c"
+#line 5877 "util/configparser.c"
     break;
 
   case 502:
-#line 2727 "./util/configparser.y"
-        {
+#line 2728 "./util/configparser.y"
+    {
                OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
                if(!cfg_str2list_insert(
@@ -5975,34 +5886,34 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 5979 "util/configparser.c"
+#line 5890 "util/configparser.c"
     break;
 
   case 503:
-#line 2737 "./util/configparser.y"
-        {
+#line 2738 "./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 5990 "util/configparser.c"
+#line 5901 "util/configparser.c"
     break;
 
   case 504:
-#line 2745 "./util/configparser.y"
-        {
+#line 2746 "./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 6001 "util/configparser.c"
+#line 5912 "util/configparser.c"
     break;
 
   case 505:
-#line 2753 "./util/configparser.y"
-        {
+#line 2754 "./util/configparser.y"
+    {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
                ptr = cfg_ptr_reverse((yyvsp[0].str));
@@ -6015,32 +5926,32 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 6019 "util/configparser.c"
+#line 5930 "util/configparser.c"
     break;
 
   case 506:
-#line 2768 "./util/configparser.y"
-        {
+#line 2769 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6031 "util/configparser.c"
+#line 5942 "util/configparser.c"
     break;
 
   case 507:
-#line 2777 "./util/configparser.y"
-        
+#line 2778 "./util/configparser.y"
+    { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 6039 "util/configparser.c"
+#line 5950 "util/configparser.c"
     break;
 
   case 518:
-#line 2788 "./util/configparser.y"
-        {
+#line 2789 "./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)
                        yyerror("expected yes or no.");
@@ -6048,104 +5959,104 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6052 "util/configparser.c"
+#line 5963 "util/configparser.c"
     break;
 
   case 519:
-#line 2798 "./util/configparser.y"
-        {
+#line 2799 "./util/configparser.y"
+    {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("control port number expected");
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6064 "util/configparser.c"
+#line 5975 "util/configparser.c"
     break;
 
   case 520:
-#line 2807 "./util/configparser.y"
-        {
+#line 2808 "./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 6074 "util/configparser.c"
+#line 5985 "util/configparser.c"
     break;
 
   case 521:
-#line 2814 "./util/configparser.y"
-        {
+#line 2815 "./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 6084 "util/configparser.c"
+#line 5995 "util/configparser.c"
     break;
 
   case 522:
-#line 2821 "./util/configparser.y"
-        {
+#line 2822 "./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 6094 "util/configparser.c"
+#line 6005 "util/configparser.c"
     break;
 
   case 523:
-#line 2828 "./util/configparser.y"
-        {
+#line 2829 "./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 6104 "util/configparser.c"
+#line 6015 "util/configparser.c"
     break;
 
   case 524:
-#line 2835 "./util/configparser.y"
-        {
+#line 2836 "./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 6114 "util/configparser.c"
+#line 6025 "util/configparser.c"
     break;
 
   case 525:
-#line 2842 "./util/configparser.y"
-        {
+#line 2843 "./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 6124 "util/configparser.c"
+#line 6035 "util/configparser.c"
     break;
 
   case 526:
-#line 2849 "./util/configparser.y"
-        {
+#line 2850 "./util/configparser.y"
+    {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 6132 "util/configparser.c"
+#line 6043 "util/configparser.c"
     break;
 
   case 548:
-#line 2869 "./util/configparser.y"
-        {
+#line 2870 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6144 "util/configparser.c"
+#line 6055 "util/configparser.c"
     break;
 
   case 549:
-#line 2878 "./util/configparser.y"
-        {
+#line 2879 "./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)
                        yyerror("expected yes or no.");
@@ -6153,128 +6064,128 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6157 "util/configparser.c"
+#line 6068 "util/configparser.c"
     break;
 
   case 550:
-#line 2888 "./util/configparser.y"
-        {
+#line 2889 "./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 6167 "util/configparser.c"
+#line 6078 "util/configparser.c"
     break;
 
   case 551:
-#line 2895 "./util/configparser.y"
-        {
+#line 2896 "./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 6177 "util/configparser.c"
+#line 6088 "util/configparser.c"
     break;
 
   case 552:
-#line 2902 "./util/configparser.y"
-        {
+#line 2903 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6189 "util/configparser.c"
+#line 6100 "util/configparser.c"
     break;
 
   case 553:
-#line 2911 "./util/configparser.y"
-        {
+#line 2912 "./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 6199 "util/configparser.c"
+#line 6110 "util/configparser.c"
     break;
 
   case 554:
-#line 2918 "./util/configparser.y"
-        {
+#line 2919 "./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 6209 "util/configparser.c"
+#line 6120 "util/configparser.c"
     break;
 
   case 555:
-#line 2925 "./util/configparser.y"
-        {
+#line 2926 "./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 6219 "util/configparser.c"
+#line 6130 "util/configparser.c"
     break;
 
   case 556:
-#line 2932 "./util/configparser.y"
-        {
+#line 2933 "./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 6229 "util/configparser.c"
+#line 6140 "util/configparser.c"
     break;
 
   case 557:
-#line 2939 "./util/configparser.y"
-        {
+#line 2940 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6241 "util/configparser.c"
+#line 6152 "util/configparser.c"
     break;
 
   case 558:
-#line 2948 "./util/configparser.y"
-        {
+#line 2949 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6253 "util/configparser.c"
+#line 6164 "util/configparser.c"
     break;
 
   case 559:
-#line 2957 "./util/configparser.y"
-        {
+#line 2958 "./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 6263 "util/configparser.c"
+#line 6174 "util/configparser.c"
     break;
 
   case 560:
-#line 2964 "./util/configparser.y"
-        {
+#line 2965 "./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 6273 "util/configparser.c"
+#line 6184 "util/configparser.c"
     break;
 
   case 561:
-#line 2971 "./util/configparser.y"
-        {
+#line 2972 "./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)
                        yyerror("expected yes or no.");
@@ -6282,12 +6193,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6286 "util/configparser.c"
+#line 6197 "util/configparser.c"
     break;
 
   case 562:
-#line 2981 "./util/configparser.y"
-        {
+#line 2982 "./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)
                        yyerror("expected yes or no.");
@@ -6295,12 +6206,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6299 "util/configparser.c"
+#line 6210 "util/configparser.c"
     break;
 
   case 563:
-#line 2991 "./util/configparser.y"
-        {
+#line 2992 "./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)
                        yyerror("expected yes or no.");
@@ -6308,12 +6219,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6312 "util/configparser.c"
+#line 6223 "util/configparser.c"
     break;
 
   case 564:
-#line 3001 "./util/configparser.y"
-        {
+#line 3002 "./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)
                        yyerror("expected yes or no.");
@@ -6321,12 +6232,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6325 "util/configparser.c"
+#line 6236 "util/configparser.c"
     break;
 
   case 565:
-#line 3011 "./util/configparser.y"
-        {
+#line 3012 "./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)
                        yyerror("expected yes or no.");
@@ -6334,12 +6245,12 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6338 "util/configparser.c"
+#line 6249 "util/configparser.c"
     break;
 
   case 566:
-#line 3021 "./util/configparser.y"
-        {
+#line 3022 "./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)
                        yyerror("expected yes or no.");
@@ -6347,48 +6258,48 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6351 "util/configparser.c"
+#line 6262 "util/configparser.c"
     break;
 
   case 567:
-#line 3031 "./util/configparser.y"
-        
+#line 3032 "./util/configparser.y"
+    { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 6359 "util/configparser.c"
+#line 6270 "util/configparser.c"
     break;
 
   case 571:
-#line 3040 "./util/configparser.y"
-        {
+#line 3041 "./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 6369 "util/configparser.c"
+#line 6280 "util/configparser.c"
     break;
 
   case 572:
-#line 3046 "./util/configparser.y"
-        
+#line 3047 "./util/configparser.y"
+    { 
                OUTYY(("\nP(dynlib:)\n")); 
        }
-#line 6377 "util/configparser.c"
+#line 6288 "util/configparser.c"
     break;
 
   case 576:
-#line 3055 "./util/configparser.y"
-        {
+#line 3056 "./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 6387 "util/configparser.c"
+#line 6298 "util/configparser.c"
     break;
 
   case 577:
-#line 3061 "./util/configparser.y"
-        {
+#line 3062 "./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)
                        yyerror("expected yes or no.");
@@ -6396,132 +6307,132 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6400 "util/configparser.c"
+#line 6311 "util/configparser.c"
     break;
 
   case 578:
-#line 3071 "./util/configparser.y"
-        {
+#line 3072 "./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 6410 "util/configparser.c"
+#line 6321 "util/configparser.c"
     break;
 
   case 579:
-#line 3078 "./util/configparser.y"
-        {
+#line 3079 "./util/configparser.y"
+    {
                OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
                if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 6422 "util/configparser.c"
+#line 6333 "util/configparser.c"
     break;
 
   case 580:
-#line 3087 "./util/configparser.y"
-        {
+#line 3088 "./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 6433 "util/configparser.c"
+#line 6344 "util/configparser.c"
     break;
 
   case 581:
-#line 3095 "./util/configparser.y"
-        {
+#line 3096 "./util/configparser.y"
+    {
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 6441 "util/configparser.c"
+#line 6352 "util/configparser.c"
     break;
 
   case 594:
-#line 3111 "./util/configparser.y"
-        {
+#line 3112 "./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)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6453 "util/configparser.c"
+#line 6364 "util/configparser.c"
     break;
 
   case 595:
-#line 3121 "./util/configparser.y"
-        {
+#line 3122 "./util/configparser.y"
+    {
                OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("port number expected");
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6465 "util/configparser.c"
+#line 6376 "util/configparser.c"
     break;
 
   case 596:
-#line 3130 "./util/configparser.y"
-        {
+#line 3131 "./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 6475 "util/configparser.c"
+#line 6386 "util/configparser.c"
     break;
 
   case 597:
-#line 3137 "./util/configparser.y"
-        {
+#line 3138 "./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)))
                        log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
-#line 6487 "util/configparser.c"
+#line 6398 "util/configparser.c"
     break;
 
   case 598:
-#line 3146 "./util/configparser.y"
-        {
+#line 3147 "./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 6497 "util/configparser.c"
+#line 6408 "util/configparser.c"
     break;
 
   case 599:
-#line 3153 "./util/configparser.y"
-        {
+#line 3154 "./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)))
                        log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }
-#line 6509 "util/configparser.c"
+#line 6420 "util/configparser.c"
     break;
 
   case 600:
-#line 3162 "./util/configparser.y"
-  {
+#line 3163 "./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 6520 "util/configparser.c"
+#line 6431 "util/configparser.c"
     break;
 
   case 601:
-#line 3170 "./util/configparser.y"
-  {
+#line 3171 "./util/configparser.y"
+    {
        OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
                yyerror("number expected");
@@ -6532,23 +6443,23 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 6536 "util/configparser.c"
+#line 6447 "util/configparser.c"
     break;
 
   case 602:
-#line 3183 "./util/configparser.y"
-  {
+#line 3184 "./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 6547 "util/configparser.c"
+#line 6458 "util/configparser.c"
     break;
 
   case 603:
-#line 3191 "./util/configparser.y"
-  {
+#line 3192 "./util/configparser.y"
+    {
        OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
                yyerror("number expected");
@@ -6559,20 +6470,20 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 6563 "util/configparser.c"
+#line 6474 "util/configparser.c"
     break;
 
   case 604:
-#line 3204 "./util/configparser.y"
-        {
+#line 3205 "./util/configparser.y"
+    {
                OUTYY(("\nP(cachedb:)\n"));
        }
-#line 6571 "util/configparser.c"
+#line 6482 "util/configparser.c"
     break;
 
   case 613:
-#line 3215 "./util/configparser.y"
-        {
+#line 3216 "./util/configparser.y"
+    {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->cachedb_backend);
@@ -6582,12 +6493,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6586 "util/configparser.c"
+#line 6497 "util/configparser.c"
     break;
 
   case 614:
-#line 3227 "./util/configparser.y"
-        {
+#line 3228 "./util/configparser.y"
+    {
        #ifdef USE_CACHEDB
                OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->cachedb_secret);
@@ -6597,12 +6508,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6601 "util/configparser.c"
+#line 6512 "util/configparser.c"
     break;
 
   case 615:
-#line 3239 "./util/configparser.y"
-        {
+#line 3240 "./util/configparser.y"
+    {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->redis_server_host);
@@ -6612,12 +6523,12 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6616 "util/configparser.c"
+#line 6527 "util/configparser.c"
     break;
 
   case 616:
-#line 3251 "./util/configparser.y"
-        {
+#line 3252 "./util/configparser.y"
+    {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                int port;
                OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
@@ -6630,12 +6541,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6634 "util/configparser.c"
+#line 6545 "util/configparser.c"
     break;
 
   case 617:
-#line 3266 "./util/configparser.y"
-        {
+#line 3267 "./util/configparser.y"
+    {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -6646,12 +6557,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6650 "util/configparser.c"
+#line 6561 "util/configparser.c"
     break;
 
   case 618:
-#line 3279 "./util/configparser.y"
-        {
+#line 3280 "./util/configparser.y"
+    {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6662,12 +6573,12 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6666 "util/configparser.c"
+#line 6577 "util/configparser.c"
     break;
 
   case 619:
-#line 3292 "./util/configparser.y"
-        {
+#line 3293 "./util/configparser.y"
+    {
                OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if (atoi((yyvsp[0].str)) < 0)
                        yyerror("positive number expected");
@@ -6676,20 +6587,20 @@ yyreduce:
                                fatal_exit("out of memory adding tcp connection limit");
                }
        }
-#line 6680 "util/configparser.c"
+#line 6591 "util/configparser.c"
     break;
 
   case 620:
-#line 3303 "./util/configparser.y"
-                {
+#line 3304 "./util/configparser.y"
+    {
                        OUTYY(("\nP(ipset:)\n"));
                }
-#line 6688 "util/configparser.c"
+#line 6599 "util/configparser.c"
     break;
 
   case 625:
-#line 3312 "./util/configparser.y"
-                {
+#line 3313 "./util/configparser.y"
+    {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
                        if(cfg_parser->cfg->ipset_name_v4)
@@ -6702,12 +6613,12 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 6706 "util/configparser.c"
+#line 6617 "util/configparser.c"
     break;
 
   case 626:
-#line 3327 "./util/configparser.y"
-        {
+#line 3328 "./util/configparser.y"
+    {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
                        if(cfg_parser->cfg->ipset_name_v6)
@@ -6720,11 +6631,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 6724 "util/configparser.c"
+#line 6635 "util/configparser.c"
     break;
 
 
-#line 6728 "util/configparser.c"
+#line 6639 "util/configparser.c"
 
       default: break;
     }
@@ -6788,7 +6699,7 @@ yyerrlab:
           {
             if (yymsg != yymsgbuf)
               YYSTACK_FREE (yymsg);
-            yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
             if (!yymsg)
               {
                 yymsg = yymsgbuf;
@@ -6943,7 +6854,7 @@ yyreturn:
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-                  yystos[+*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -6956,7 +6867,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 3341 "./util/configparser.y"
+#line 3342 "./util/configparser.y"
 
 
 /* parse helper routines could be here */
index 3a5ea579d03f74a05508f2256004a83d17465967..627d4cbf914556da87fc383f6e8e9f43269da37d 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.5.1.  */
+/* A Bison parser, made by GNU Bison 3.4.1.  */
 
 /* 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-2019 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
index 43a886f2403ad43dd4e8dcc3a4de737399f383e2..675645fbdd42d4b749ed8c6a3efa2f677005b1f8 100644 (file)
@@ -982,6 +982,7 @@ server_https_port: VAR_HTTPS_PORT STRING_ARG
                if(atoi($2) == 0)
                        yyerror("port number expected");
                else cfg_parser->cfg->https_port = atoi($2);
+               free($2);
        };
 server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG
        {