]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Merge branch 'master' into dlv-removal 284/head
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 6 Aug 2020 12:20:42 +0000 (14:20 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 6 Aug 2020 12:20:42 +0000 (14:20 +0200)
1  2 
doc/unbound.conf.5.in
util/config_file.c
util/config_file.h
util/configlexer.c
util/configparser.c
util/configparser.h
util/configparser.y

Simple merge
Simple merge
Simple merge
index cd505dfda01a9ccae4e95da10767db633bb1000f,46022f65619d8b1a5d57b1aa863f47e36ef6f166..dfecfdd238b4263294040024989d9364cff76cb3
@@@ -3023,7 -3032,7 +3032,7 @@@ static void config_end_include(void
          }
  #endif
  
- #line 3024 "<stdout>"
 -#line 3034 "<stdout>"
++#line 3033 "<stdout>"
  #define YY_NO_INPUT 1
  #line 191 "./util/configlexer.lex"
  #ifndef YY_NO_UNPUT
  #ifndef YY_NO_INPUT
  #define YY_NO_INPUT 1
  #endif
- #line 3033 "<stdout>"
 -#line 3043 "<stdout>"
++#line 3042 "<stdout>"
  
- #line 3035 "<stdout>"
 -#line 3045 "<stdout>"
++#line 3044 "<stdout>"
  
  #define INITIAL 0
  #define quotedstring 1
@@@ -3258,7 -3267,7 +3267,7 @@@ YY_DEC
        {
  #line 211 "./util/configlexer.lex"
  
- #line 3259 "<stdout>"
 -#line 3269 "<stdout>"
++#line 3268 "<stdout>"
  
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@@ -5069,12 -5083,12 +5083,12 @@@ YY_RULE_SETU
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
- case 323:
+ case 324:
  YY_RULE_SETUP
- #line 651 "./util/configlexer.lex"
+ #line 652 "./util/configlexer.lex"
  ECHO;
        YY_BREAK
- #line 5075 "<stdout>"
 -#line 5090 "<stdout>"
++#line 5089 "<stdout>"
  
        case YY_END_OF_BUFFER:
                {
index 63badad613a2a13edd36c8a04f50f9f35d4896db,1d5be9fa091c5133236cb30ed5a89777258cb820..eacfc518ec2238b7604503dc95218434e40557ed
@@@ -724,7 -735,7 +726,7 @@@ union YYSTYP
  
        char*   str;
  
- #line 728 "util/configparser.c"
 -#line 739 "util/configparser.c"
++#line 730 "util/configparser.c"
  
  };
  typedef union YYSTYPE YYSTYPE;
@@@ -974,20 -1054,21 +976,20 @@@ union yyallo
  /* YYFINAL -- State number of the termination state.  */
  #define YYFINAL  2
  /* YYLAST -- Last index in YYTABLE.  */
- #define YYLAST   620
+ #define YYLAST   622
  
  /* YYNTOKENS -- Number of terminals.  */
- #define YYNTOKENS  292
+ #define YYNTOKENS  293
  /* YYNNTS -- Number of nonterminals.  */
- #define YYNNTS  317
+ #define YYNNTS  318
  /* YYNRULES -- Number of rules.  */
- #define YYNRULES  610
+ #define YYNRULES  612
  /* YYNSTATES -- Number of states.  */
- #define YYNSTATES  905
+ #define YYNSTATES  909
  
  #define YYUNDEFTOK  2
- #define YYMAXUTOK   546
+ #define YYMAXUTOK   547
  
 -
  /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
     as returned by yylex, with out-of-bounds checking.  */
  #define YYTRANSLATE(YYX)                                                \
@@@ -1512,12 -1594,12 +1515,12 @@@ 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,   216,   226,   491,   551,   510,
-      235,   565,   588,   245,   604,   261,   556,     3,    17,    21,
-      218,   228,   237,   247,   263,   493,   512,   553,   558,   567,
-      590,   606,     4,     5,     6,    10,    14,    15,     8,     9,
+        2,     0,     1,    18,    19,   217,   227,   493,   553,   512,
+      236,   567,   590,   246,   606,   262,   558,     3,    17,    21,
+      219,   229,   238,   248,   264,   495,   514,   555,   560,   569,
+      592,   608,     4,     5,     6,    10,    14,    15,     8,     9,
         7,    16,    11,    12,    13,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@@ -1684,37 -1766,37 +1687,37 @@@ 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,   477,   462,   434,   566,   435,   436,   569,   449,   606,
-      607,     3,     4,   611,   612,   613,   450,   451,   593,   594,
-      595,   596,   597,   598,   477,   572,   573,   574,   575,   576,
-      577,   578,   579,   580,   581,   614,   615,   616,   463,   464,
-      617,   618,   619,   620,   621,   622,     5,   623,   624,   625,
-      626,   627,     6,   628,   629,   630,   631,   632,   633,   634,
-      635,   636,   637,   465,   638,   639,   437,   527,   528,   529,
-      530,   531,   532,   533,   534,   535,   536,   537,   538,   539,
-      540,   541,   542,   543,   544,   545,   510,   511,   512,   513,
-      514,   515,   516,   517,   640,   641,     7,   438,   642,   643,
-      439,   452,   644,   453,   645,   646,   647,   648,   649,   650,
-      651,   652,     8,   653,   654,   655,   656,   657,   658,   659,
-      660,   661,   662,   663,   664,   665,   666,   667,   668,   669,
-      670,   466,   467,   671,   672,   673,   674,   675,   676,   677,
-      678,   679,   680,   681,   682,   683,   684,   685,   686,   687,
-      688,   689,   690,     9,   691,   692,   693,   694,   695,   696,
-      697,   698,   699,   700,   701,   702,   703,   704,   705,   706,
-      707,   468,   708,   709,   710,   711,   712,   713,   714,   715,
-      716,   717,   718,   719,   720,   721,   722,   723,   724,   725,
-      726,   727,   728,   729,   730,   731,   732,   733,   734,   735,
-      736,   737,   738,   739,   740,   741,   742,   743,   744,   745,
-      746,   747,    10,   479,   480,   481,   748,   749,   750,   751,
-      752,   753,   754,   484,   755,   756,   757,   758,   759,   440,
-       11,   760,   761,   454,   478,   762,   479,   480,   481,   482,
-      483,   494,   495,   496,   497,   498,   484,    12,   763,   764,
-      765,   766,   767,   768,   769,   770,    13,   771,   772,   773,
-      774,   775,   776,   777,   778,   779,   780,   781,   782,   783,
-      784,   785,   786,   787,   788,   789,   790,   791,   792,   793,
-       14,   794,   795,   796,    15,   797,   798,   799,     0,   800,
+        2,   479,   464,   436,   568,   437,   438,   571,   451,   608,
+      609,     3,     4,   613,   614,   615,   452,   453,   595,   596,
+      597,   598,   599,   600,   479,   574,   575,   576,   577,   578,
+      579,   580,   581,   582,   583,   616,   617,   618,   465,   466,
+      619,   620,   621,   622,   623,   624,     5,   625,   626,   627,
+      628,   629,     6,   630,   631,   632,   633,   634,   635,   636,
+      637,   638,   639,   467,   640,   641,   439,   529,   530,   531,
+      532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
+      542,   543,   544,   545,   546,   547,   512,   513,   514,   515,
+      516,   517,   518,   519,   642,   643,     7,   440,   644,   645,
+      441,   454,   646,   455,   647,   648,   649,   650,   651,   652,
+      653,   654,     8,   655,   656,   657,   658,   659,   660,   661,
+      662,   663,   664,   665,   666,   667,   668,   669,   670,   671,
+      672,   468,   469,   673,   674,   675,   676,   677,   678,   679,
+      680,   681,   682,   683,   684,   685,   686,   687,   688,   689,
+      690,   691,   692,     9,   693,   694,   695,   696,   697,   698,
+      699,   700,   701,   702,   703,   704,   705,   706,   707,   708,
+      709,   470,   710,   711,   712,   713,   714,   715,   716,   717,
+      718,   719,   720,   721,   722,   723,   724,   725,   726,   727,
+      728,   729,   730,   731,   732,   733,   734,   735,   736,   737,
+      738,   739,   740,   741,   742,   743,   744,   745,   746,   747,
+      748,   749,    10,   481,   482,   483,   750,   751,   752,   753,
+      754,   755,   756,   486,   757,   758,   759,   760,   761,   442,
+       11,   762,   763,   456,   480,   764,   481,   482,   483,   484,
+      485,   496,   497,   498,   499,   500,   486,    12,   765,   766,
+      767,   768,   769,   770,   771,   772,    13,   773,   774,   775,
+      776,   777,   778,   779,   780,   781,   782,   783,   784,   785,
+      786,   787,   788,   789,   790,   791,   792,   793,   794,   795,
+       14,   796,   797,   798,    15,   799,   800,   801,     0,   802,
        16,    45,    46,    47,    48,    49,    50,    51,    52,    53,
        54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
        64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
@@@ -1820,13 -1902,13 +1823,13 @@@ 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,   293,     0,    11,    12,    46,    52,    96,   112,   153,
-      212,   230,   247,   256,   280,   284,   290,   294,   295,   296,
-      299,   302,   305,   308,   316,   536,   547,   569,   573,   581,
-      594,   604,   297,   300,   303,   306,   309,   317,   537,   548,
-      570,   574,   582,   595,   605,    13,    14,    15,    16,    17,
+        0,   294,     0,    11,    12,    46,    52,    96,   112,   153,
+      212,   230,   247,   256,   280,   284,   290,   295,   296,   297,
+      300,   303,   306,   309,   317,   538,   549,   571,   575,   583,
+      596,   606,   298,   301,   304,   307,   310,   318,   539,   550,
+      572,   576,   584,   597,   607,    13,    14,    15,    16,    17,
        18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
        28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
        38,    39,    40,    41,    42,    43,    44,    49,    50,    51,
  };
  
    /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 -static const yytype_int16 yyr1[] =
 +static const yytype_uint16 yyr1[] =
  {
-        0,   292,   293,   293,   294,   294,   294,   294,   294,   294,
-      294,   294,   294,   294,   294,   294,   294,   294,   295,   296,
-      297,   297,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   298,   298,   298,   298,
-      298,   298,   298,   298,   298,   298,   299,   300,   300,   301,
-      301,   301,   301,   301,   301,   301,   302,   303,   303,   304,
-      304,   304,   304,   304,   304,   305,   306,   306,   307,   307,
-      307,   307,   307,   307,   307,   308,   309,   309,   310,   310,
-      310,   310,   310,   310,   310,   310,   311,   312,   313,   314,
-      315,   316,   317,   317,   318,   318,   318,   318,   318,   318,
-      318,   318,   318,   318,   319,   320,   321,   322,   323,   324,
+        0,   293,   294,   294,   295,   295,   295,   295,   295,   295,
+      295,   295,   295,   295,   295,   295,   295,   295,   296,   297,
+      298,   298,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
+      299,   299,   299,   299,   299,   299,   299,   300,   301,   301,
+      302,   302,   302,   302,   302,   302,   302,   303,   304,   304,
+      305,   305,   305,   305,   305,   305,   306,   307,   307,   308,
+      308,   308,   308,   308,   308,   308,   309,   310,   310,   311,
+      311,   311,   311,   311,   311,   311,   311,   312,   313,   314,
+      315,   316,   317,   318,   318,   319,   319,   319,   319,   319,
+      319,   319,   319,   319,   319,   320,   321,   322,   323,   324,
       325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
       335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
       345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
@@@ -2732,23 -2825,23 +2735,23 @@@ yyreduce
      {
    case 18:
  #line 191 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("\nP(force-toplevel)\n"));
        }
- #line 2739 "util/configparser.c"
 -#line 2832 "util/configparser.c"
++#line 2742 "util/configparser.c"
      break;
  
    case 19:
  #line 197 "./util/configparser.y"
 -        
 +    { 
                OUTYY(("\nP(server:)\n"));
        }
- #line 2747 "util/configparser.c"
 -#line 2840 "util/configparser.c"
++#line 2750 "util/configparser.c"
      break;
  
-   case 216:
+   case 217:
  #line 291 "./util/configparser.y"
 -        {
 +    {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
                s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
                } else 
                        yyerror("out of memory");
        }
- #line 2762 "util/configparser.c"
 -#line 2855 "util/configparser.c"
++#line 2765 "util/configparser.c"
      break;
  
-   case 226:
+   case 227:
  #line 308 "./util/configparser.y"
 -        {
 +    {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
                s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
                } else 
                        yyerror("out of memory");
        }
- #line 2777 "util/configparser.c"
 -#line 2870 "util/configparser.c"
++#line 2780 "util/configparser.c"
      break;
  
-   case 235:
+   case 236:
  #line 325 "./util/configparser.y"
 -        {
 +    {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
                s = (struct config_view*)calloc(1, sizeof(struct config_view));
                } else 
                        yyerror("out of memory");
        }
- #line 2794 "util/configparser.c"
 -#line 2887 "util/configparser.c"
++#line 2797 "util/configparser.c"
      break;
  
-   case 245:
+   case 246:
  #line 344 "./util/configparser.y"
 -        {
 +    {
                struct config_auth* s;
                OUTYY(("\nP(auth_zone:)\n")); 
                s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
                } else 
                        yyerror("out of memory");
        }
- #line 2814 "util/configparser.c"
 -#line 2907 "util/configparser.c"
++#line 2817 "util/configparser.c"
      break;
  
-   case 256:
+   case 257:
  #line 368 "./util/configparser.y"
 -        {
 +    {
                uint8_t* bitlist;
                size_t len = 0;
                OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
  
                }
        }
- #line 2835 "util/configparser.c"
 -#line 2928 "util/configparser.c"
++#line 2838 "util/configparser.c"
      break;
  
-   case 257:
+   case 258:
  #line 387 "./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 &&
                        cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
                }
        }
- #line 2854 "util/configparser.c"
 -#line 2947 "util/configparser.c"
++#line 2857 "util/configparser.c"
      break;
  
-   case 258:
+   case 259:
  #line 404 "./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 2864 "util/configparser.c"
 -#line 2957 "util/configparser.c"
++#line 2867 "util/configparser.c"
      break;
  
-   case 259:
+   case 260:
  #line 412 "./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 2876 "util/configparser.c"
 -#line 2969 "util/configparser.c"
++#line 2879 "util/configparser.c"
      break;
  
-   case 260:
+   case 261:
  #line 422 "./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 2886 "util/configparser.c"
 -#line 2979 "util/configparser.c"
++#line 2889 "util/configparser.c"
      break;
  
-   case 261:
+   case 262:
  #line 430 "./util/configparser.y"
 -        {
 +    {
                struct config_auth* s;
                OUTYY(("\nP(rpz:)\n")); 
                s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
                } else 
                        yyerror("out of memory");
        }
- #line 2906 "util/configparser.c"
 -#line 2999 "util/configparser.c"
++#line 2909 "util/configparser.c"
      break;
  
-   case 274:
+   case 275:
  #line 453 "./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 2918 "util/configparser.c"
 -#line 3011 "util/configparser.c"
++#line 2921 "util/configparser.c"
      break;
  
-   case 275:
+   case 276:
  #line 462 "./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 2930 "util/configparser.c"
 -#line 3023 "util/configparser.c"
++#line 2933 "util/configparser.c"
      break;
  
-   case 276:
+   case 277:
  #line 471 "./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;
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 2944 "util/configparser.c"
 -#line 3037 "util/configparser.c"
++#line 2947 "util/configparser.c"
      break;
  
-   case 277:
+   case 278:
  #line 482 "./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 2956 "util/configparser.c"
 -#line 3049 "util/configparser.c"
++#line 2959 "util/configparser.c"
      break;
  
-   case 278:
+   case 279:
  #line 491 "./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 2968 "util/configparser.c"
 -#line 3061 "util/configparser.c"
++#line 2971 "util/configparser.c"
      break;
  
-   case 279:
+   case 280:
  #line 500 "./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 2980 "util/configparser.c"
 -#line 3073 "util/configparser.c"
++#line 2983 "util/configparser.c"
      break;
  
-   case 280:
+   case 281:
  #line 509 "./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;
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 2994 "util/configparser.c"
 -#line 3087 "util/configparser.c"
++#line 2997 "util/configparser.c"
      break;
  
-   case 281:
+   case 282:
  #line 520 "./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 3006 "util/configparser.c"
 -#line 3099 "util/configparser.c"
++#line 3009 "util/configparser.c"
      break;
  
-   case 282:
+   case 283:
  #line 529 "./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)))
                free((yyvsp[0].str));
        #endif
        }
- #line 3021 "util/configparser.c"
 -#line 3114 "util/configparser.c"
++#line 3024 "util/configparser.c"
      break;
  
-   case 283:
+   case 284:
  #line 541 "./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,
                free((yyvsp[0].str));
        #endif
        }
- #line 3037 "util/configparser.c"
 -#line 3130 "util/configparser.c"
++#line 3040 "util/configparser.c"
      break;
  
-   case 284:
+   case 285:
  #line 555 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3055 "util/configparser.c"
 -#line 3148 "util/configparser.c"
++#line 3058 "util/configparser.c"
      break;
  
-   case 285:
+   case 286:
  #line 570 "./util/configparser.y"
 -        {
 +    {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
                OUTYY(("P(Deprecated option, ignoring)\n"));
        #endif
                free((yyvsp[0].str));
        }
- #line 3069 "util/configparser.c"
 -#line 3162 "util/configparser.c"
++#line 3072 "util/configparser.c"
      break;
  
-   case 286:
+   case 287:
  #line 581 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3089 "util/configparser.c"
 -#line 3182 "util/configparser.c"
++#line 3092 "util/configparser.c"
      break;
  
-   case 287:
+   case 288:
  #line 598 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3109 "util/configparser.c"
 -#line 3202 "util/configparser.c"
++#line 3112 "util/configparser.c"
      break;
  
-   case 288:
+   case 289:
  #line 615 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3129 "util/configparser.c"
 -#line 3222 "util/configparser.c"
++#line 3132 "util/configparser.c"
      break;
  
-   case 289:
+   case 290:
  #line 632 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3149 "util/configparser.c"
 -#line 3242 "util/configparser.c"
++#line 3152 "util/configparser.c"
      break;
  
-   case 290:
+   case 291:
  #line 649 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3167 "util/configparser.c"
 -#line 3260 "util/configparser.c"
++#line 3170 "util/configparser.c"
      break;
  
-   case 291:
+   case 292:
  #line 664 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 3185 "util/configparser.c"
 -#line 3278 "util/configparser.c"
++#line 3188 "util/configparser.c"
      break;
  
-   case 292:
+   case 293:
  #line 679 "./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*));
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
- #line 3201 "util/configparser.c"
 -#line 3294 "util/configparser.c"
++#line 3204 "util/configparser.c"
      break;
  
-   case 293:
+   case 294:
  #line 692 "./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*));
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
- #line 3219 "util/configparser.c"
 -#line 3312 "util/configparser.c"
++#line 3222 "util/configparser.c"
      break;
  
-   case 294:
+   case 295:
  #line 707 "./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 3231 "util/configparser.c"
 -#line 3324 "util/configparser.c"
++#line 3234 "util/configparser.c"
      break;
  
-   case 295:
+   case 296:
  #line 716 "./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 3243 "util/configparser.c"
 -#line 3336 "util/configparser.c"
++#line 3246 "util/configparser.c"
      break;
  
-   case 296:
+   case 297:
  #line 725 "./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 3255 "util/configparser.c"
 -#line 3348 "util/configparser.c"
++#line 3258 "util/configparser.c"
      break;
  
-   case 297:
+   case 298:
  #line 734 "./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 3267 "util/configparser.c"
 -#line 3360 "util/configparser.c"
++#line 3270 "util/configparser.c"
      break;
  
-   case 298:
+   case 299:
  #line 743 "./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 3279 "util/configparser.c"
 -#line 3372 "util/configparser.c"
++#line 3282 "util/configparser.c"
      break;
  
-   case 299:
+   case 300:
  #line 752 "./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 3291 "util/configparser.c"
 -#line 3384 "util/configparser.c"
++#line 3294 "util/configparser.c"
      break;
  
-   case 300:
+   case 301:
  #line 761 "./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 3303 "util/configparser.c"
 -#line 3396 "util/configparser.c"
++#line 3306 "util/configparser.c"
      break;
  
-   case 301:
+   case 302:
  #line 770 "./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 3315 "util/configparser.c"
 -#line 3408 "util/configparser.c"
++#line 3318 "util/configparser.c"
      break;
  
-   case 302:
+   case 303:
  #line 779 "./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 3327 "util/configparser.c"
 -#line 3420 "util/configparser.c"
++#line 3330 "util/configparser.c"
      break;
  
-   case 303:
+   case 304:
  #line 788 "./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 3339 "util/configparser.c"
 -#line 3432 "util/configparser.c"
++#line 3342 "util/configparser.c"
      break;
  
-   case 304:
+   case 305:
  #line 797 "./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 3351 "util/configparser.c"
 -#line 3444 "util/configparser.c"
++#line 3354 "util/configparser.c"
      break;
  
-   case 305:
+   case 306:
  #line 806 "./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 3363 "util/configparser.c"
 -#line 3456 "util/configparser.c"
++#line 3366 "util/configparser.c"
      break;
  
-   case 306:
+   case 307:
  #line 815 "./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 3375 "util/configparser.c"
 -#line 3468 "util/configparser.c"
++#line 3378 "util/configparser.c"
      break;
  
-   case 307:
+   case 308:
  #line 824 "./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 3387 "util/configparser.c"
 -#line 3480 "util/configparser.c"
++#line 3390 "util/configparser.c"
      break;
  
-   case 308:
+   case 309:
  #line 833 "./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");
                else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 3403 "util/configparser.c"
 -#line 3496 "util/configparser.c"
++#line 3406 "util/configparser.c"
      break;
  
-   case 309:
+   case 310:
  #line 846 "./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 3415 "util/configparser.c"
 -#line 3508 "util/configparser.c"
++#line 3418 "util/configparser.c"
      break;
  
-   case 310:
+   case 311:
  #line 855 "./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");
                else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 3431 "util/configparser.c"
 -#line 3524 "util/configparser.c"
++#line 3434 "util/configparser.c"
      break;
  
-   case 311:
+   case 312:
  #line 868 "./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 3443 "util/configparser.c"
 -#line 3536 "util/configparser.c"
++#line 3446 "util/configparser.c"
      break;
  
-   case 312:
+   case 313:
  #line 877 "./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 3455 "util/configparser.c"
 -#line 3548 "util/configparser.c"
++#line 3458 "util/configparser.c"
      break;
  
-   case 313:
+   case 314:
  #line 886 "./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 3467 "util/configparser.c"
 -#line 3560 "util/configparser.c"
++#line 3470 "util/configparser.c"
      break;
  
-   case 314:
+   case 315:
  #line 895 "./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 3477 "util/configparser.c"
 -#line 3570 "util/configparser.c"
++#line 3480 "util/configparser.c"
      break;
  
-   case 315:
+   case 316:
  #line 902 "./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 3487 "util/configparser.c"
 -#line 3580 "util/configparser.c"
++#line 3490 "util/configparser.c"
      break;
  
-   case 316:
+   case 317:
  #line 909 "./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 3499 "util/configparser.c"
 -#line 3592 "util/configparser.c"
++#line 3502 "util/configparser.c"
      break;
  
-   case 317:
+   case 318:
  #line 918 "./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 3509 "util/configparser.c"
 -#line 3602 "util/configparser.c"
++#line 3512 "util/configparser.c"
      break;
  
-   case 318:
+   case 319:
  #line 925 "./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 3521 "util/configparser.c"
 -#line 3614 "util/configparser.c"
++#line 3524 "util/configparser.c"
      break;
  
-   case 319:
+   case 320:
  #line 934 "./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 3532 "util/configparser.c"
 -#line 3625 "util/configparser.c"
++#line 3535 "util/configparser.c"
      break;
  
-   case 320:
+   case 321:
  #line 942 "./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 3542 "util/configparser.c"
 -#line 3635 "util/configparser.c"
++#line 3545 "util/configparser.c"
      break;
  
-   case 321:
+   case 322:
  #line 949 "./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 3552 "util/configparser.c"
 -#line 3645 "util/configparser.c"
++#line 3555 "util/configparser.c"
      break;
  
-   case 322:
+   case 323:
  #line 956 "./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 3563 "util/configparser.c"
 -#line 3656 "util/configparser.c"
++#line 3566 "util/configparser.c"
      break;
  
-   case 323:
+   case 324:
  #line 964 "./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 3575 "util/configparser.c"
 -#line 3668 "util/configparser.c"
++#line 3578 "util/configparser.c"
      break;
  
-   case 324:
+   case 325:
  #line 973 "./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 3587 "util/configparser.c"
 -#line 3680 "util/configparser.c"
++#line 3590 "util/configparser.c"
      break;
  
-   case 325:
+   case 326:
  #line 982 "./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 3599 "util/configparser.c"
 -#line 3692 "util/configparser.c"
++#line 3602 "util/configparser.c"
      break;
  
-   case 326:
+   case 327:
  #line 991 "./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.");
  #endif
                free((yyvsp[0].str));
        }
- #line 3616 "util/configparser.c"
 -#line 3709 "util/configparser.c"
++#line 3619 "util/configparser.c"
      break;
  
-   case 327:
+   case 328:
  #line 1005 "./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 3628 "util/configparser.c"
 -#line 3721 "util/configparser.c"
++#line 3631 "util/configparser.c"
      break;
  
-   case 328:
+   case 329:
  #line 1014 "./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 3640 "util/configparser.c"
 -#line 3733 "util/configparser.c"
++#line 3643 "util/configparser.c"
      break;
  
-   case 329:
+   case 330:
  #line 1023 "./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 3652 "util/configparser.c"
 -#line 3745 "util/configparser.c"
++#line 3655 "util/configparser.c"
      break;
  
-   case 330:
+   case 331:
  #line 1032 "./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 3664 "util/configparser.c"
 -#line 3757 "util/configparser.c"
++#line 3667 "util/configparser.c"
      break;
  
-   case 331:
+   case 332:
  #line 1041 "./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 3676 "util/configparser.c"
 -#line 3769 "util/configparser.c"
++#line 3679 "util/configparser.c"
      break;
  
-   case 332:
+   case 333:
  #line 1050 "./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 3688 "util/configparser.c"
 -#line 3781 "util/configparser.c"
++#line 3691 "util/configparser.c"
      break;
  
-   case 333:
+   case 334:
  #line 1059 "./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 3698 "util/configparser.c"
 -#line 3791 "util/configparser.c"
++#line 3701 "util/configparser.c"
      break;
  
-   case 334:
+   case 335:
  #line 1066 "./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 3708 "util/configparser.c"
 -#line 3801 "util/configparser.c"
++#line 3711 "util/configparser.c"
      break;
  
-   case 335:
+   case 336:
  #line 1073 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = (yyvsp[0].str);
                        }
                }
        }
- #line 3737 "util/configparser.c"
 -#line 3830 "util/configparser.c"
++#line 3740 "util/configparser.c"
      break;
  
-   case 336:
+   case 337:
  #line 1099 "./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 3748 "util/configparser.c"
 -#line 3841 "util/configparser.c"
++#line 3751 "util/configparser.c"
      break;
  
-   case 337:
+   case 338:
  #line 1107 "./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 3758 "util/configparser.c"
 -#line 3851 "util/configparser.c"
++#line 3761 "util/configparser.c"
      break;
  
-   case 338:
+   case 339:
  #line 1114 "./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 3768 "util/configparser.c"
 -#line 3861 "util/configparser.c"
++#line 3771 "util/configparser.c"
      break;
  
-   case 339:
+   case 340:
  #line 1121 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
 -              free(cfg_parser->cfg->dlv_anchor_file);
 -              cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
 +              log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
 +              free((yyvsp[0].str));
        }
- #line 3778 "util/configparser.c"
 -#line 3871 "util/configparser.c"
++#line 3781 "util/configparser.c"
      break;
  
-   case 340:
+   case 341:
  #line 1128 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
 -              if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
 -                      yyerror("out of memory");
 +              log_warn("option dlv-anchor ignored: DLV is decommissioned");
 +              free((yyvsp[0].str));
        }
- #line 3788 "util/configparser.c"
 -#line 3881 "util/configparser.c"
++#line 3791 "util/configparser.c"
      break;
  
-   case 341:
+   case 342:
  #line 1135 "./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 3799 "util/configparser.c"
 -#line 3892 "util/configparser.c"
++#line 3802 "util/configparser.c"
      break;
  
-   case 342:
+   case 343:
  #line 1143 "./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 3810 "util/configparser.c"
 -#line 3903 "util/configparser.c"
++#line 3813 "util/configparser.c"
      break;
  
-   case 343:
+   case 344:
  #line 1151 "./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 3821 "util/configparser.c"
 -#line 3914 "util/configparser.c"
++#line 3824 "util/configparser.c"
      break;
  
-   case 344:
+   case 345:
  #line 1159 "./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 3831 "util/configparser.c"
 -#line 3924 "util/configparser.c"
++#line 3834 "util/configparser.c"
      break;
  
-   case 345:
+   case 346:
  #line 1166 "./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.");
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 3845 "util/configparser.c"
 -#line 3938 "util/configparser.c"
++#line 3848 "util/configparser.c"
      break;
  
-   case 346:
+   case 347:
  #line 1177 "./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.");
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 3859 "util/configparser.c"
 -#line 3952 "util/configparser.c"
++#line 3862 "util/configparser.c"
      break;
  
-   case 347:
+   case 348:
  #line 1188 "./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 3869 "util/configparser.c"
 -#line 3962 "util/configparser.c"
++#line 3872 "util/configparser.c"
      break;
  
-   case 348:
+   case 349:
  #line 1195 "./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 3881 "util/configparser.c"
 -#line 3974 "util/configparser.c"
++#line 3884 "util/configparser.c"
      break;
  
-   case 349:
+   case 350:
  #line 1204 "./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 3893 "util/configparser.c"
 -#line 3986 "util/configparser.c"
++#line 3896 "util/configparser.c"
      break;
  
-   case 350:
+   case 351:
  #line 1213 "./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 3905 "util/configparser.c"
 -#line 3998 "util/configparser.c"
++#line 3908 "util/configparser.c"
      break;
  
-   case 351:
+   case 352:
  #line 1222 "./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 3915 "util/configparser.c"
 -#line 4008 "util/configparser.c"
++#line 3918 "util/configparser.c"
      break;
  
-   case 352:
+   case 353:
  #line 1229 "./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 3925 "util/configparser.c"
 -#line 4018 "util/configparser.c"
++#line 3928 "util/configparser.c"
      break;
  
-   case 353:
+   case 354:
  #line 1236 "./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 3936 "util/configparser.c"
 -#line 4029 "util/configparser.c"
++#line 3939 "util/configparser.c"
      break;
  
-   case 354:
+   case 355:
  #line 1244 "./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 3947 "util/configparser.c"
 -#line 4040 "util/configparser.c"
++#line 3950 "util/configparser.c"
      break;
  
-   case 355:
+   case 356:
  #line 1252 "./util/configparser.y"
      {
          OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
              (strcmp((yyvsp[0].str), "yes")==0);
          free((yyvsp[0].str));
      }
- #line 3960 "util/configparser.c"
 -#line 4053 "util/configparser.c"
++#line 3963 "util/configparser.c"
      break;
  
-   case 356:
+   case 357:
  #line 1262 "./util/configparser.y"
      {
          OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
              (strcmp((yyvsp[0].str), "yes")==0);
          free((yyvsp[0].str));
      }
- #line 3973 "util/configparser.c"
 -#line 4066 "util/configparser.c"
++#line 3976 "util/configparser.c"
      break;
  
-   case 357:
+   case 358:
  #line 1272 "./util/configparser.y"
      {
          OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
              (strcmp((yyvsp[0].str), "yes")==0);
          free((yyvsp[0].str));
      }
- #line 3986 "util/configparser.c"
 -#line 4079 "util/configparser.c"
++#line 3989 "util/configparser.c"
      break;
  
-   case 358:
+   case 359:
  #line 1282 "./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");
                        cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 4003 "util/configparser.c"
 -#line 4096 "util/configparser.c"
++#line 4006 "util/configparser.c"
      break;
  
-   case 359:
+   case 360:
  #line 1296 "./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 4014 "util/configparser.c"
 -#line 4107 "util/configparser.c"
++#line 4017 "util/configparser.c"
      break;
  
-   case 360:
+   case 361:
  #line 1304 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 4030 "util/configparser.c"
 -#line 4123 "util/configparser.c"
++#line 4033 "util/configparser.c"
      break;
  
-   case 361:
+   case 362:
  #line 1317 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
- #line 4044 "util/configparser.c"
 -#line 4137 "util/configparser.c"
++#line 4047 "util/configparser.c"
      break;
  
-   case 362:
+   case 363:
  #line 1328 "./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 4055 "util/configparser.c"
 -#line 4148 "util/configparser.c"
++#line 4058 "util/configparser.c"
      break;
  
-   case 363:
+   case 364:
  #line 1336 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                }
                free((yyvsp[0].str));
        }
- #line 4071 "util/configparser.c"
 -#line 4164 "util/configparser.c"
++#line 4074 "util/configparser.c"
      break;
  
-   case 364:
+   case 365:
  #line 1349 "./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 4083 "util/configparser.c"
 -#line 4176 "util/configparser.c"
++#line 4086 "util/configparser.c"
      break;
  
-   case 365:
+   case 366:
  #line 1358 "./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 4095 "util/configparser.c"
 -#line 4188 "util/configparser.c"
++#line 4098 "util/configparser.c"
      break;
  
-   case 366:
+   case 367:
  #line 1367 "./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 4107 "util/configparser.c"
 -#line 4200 "util/configparser.c"
++#line 4110 "util/configparser.c"
      break;
  
-   case 367:
+   case 368:
  #line 1376 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4120 "util/configparser.c"
 -#line 4213 "util/configparser.c"
++#line 4123 "util/configparser.c"
      break;
  
-   case 368:
+   case 369:
  #line 1386 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4133 "util/configparser.c"
 -#line 4226 "util/configparser.c"
++#line 4136 "util/configparser.c"
      break;
  
-   case 369:
+   case 370:
  #line 1396 "./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 4144 "util/configparser.c"
 -#line 4237 "util/configparser.c"
++#line 4147 "util/configparser.c"
      break;
  
-   case 370:
+   case 371:
  #line 1404 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                }
                free((yyvsp[0].str));
        }
- #line 4160 "util/configparser.c"
 -#line 4253 "util/configparser.c"
++#line 4163 "util/configparser.c"
      break;
  
-   case 371:
+   case 372:
  #line 1417 "./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 4172 "util/configparser.c"
 -#line 4265 "util/configparser.c"
++#line 4175 "util/configparser.c"
      break;
  
-   case 372:
+   case 373:
  #line 1426 "./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 4183 "util/configparser.c"
 -#line 4276 "util/configparser.c"
++#line 4186 "util/configparser.c"
      break;
  
-   case 373:
+   case 374:
  #line 1434 "./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 4195 "util/configparser.c"
 -#line 4288 "util/configparser.c"
++#line 4198 "util/configparser.c"
      break;
  
-   case 374:
+   case 375:
  #line 1443 "./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 4206 "util/configparser.c"
 -#line 4299 "util/configparser.c"
++#line 4209 "util/configparser.c"
      break;
  
-   case 375:
+   case 376:
  #line 1451 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                }
                free((yyvsp[0].str));
        }
- #line 4222 "util/configparser.c"
 -#line 4315 "util/configparser.c"
++#line 4225 "util/configparser.c"
      break;
  
-   case 376:
+   case 377:
  #line 1464 "./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 4234 "util/configparser.c"
 -#line 4327 "util/configparser.c"
++#line 4237 "util/configparser.c"
      break;
  
-   case 377:
+   case 378:
  #line 1473 "./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 4244 "util/configparser.c"
 -#line 4337 "util/configparser.c"
++#line 4247 "util/configparser.c"
      break;
  
-   case 378:
+   case 379:
  #line 1480 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4257 "util/configparser.c"
 -#line 4350 "util/configparser.c"
++#line 4260 "util/configparser.c"
      break;
  
-   case 379:
+   case 380:
  #line 1490 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4270 "util/configparser.c"
 -#line 4363 "util/configparser.c"
++#line 4273 "util/configparser.c"
      break;
  
-   case 380:
+   case 381:
  #line 1500 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4283 "util/configparser.c"
 -#line 4376 "util/configparser.c"
++#line 4286 "util/configparser.c"
      break;
  
-   case 381:
+   case 382:
  #line 1510 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4296 "util/configparser.c"
 -#line 4389 "util/configparser.c"
++#line 4299 "util/configparser.c"
      break;
  
-   case 382:
+   case 383:
  #line 1520 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4309 "util/configparser.c"
 -#line 4402 "util/configparser.c"
++#line 4312 "util/configparser.c"
      break;
  
-   case 383:
+   case 384:
  #line 1530 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4322 "util/configparser.c"
 -#line 4415 "util/configparser.c"
++#line 4325 "util/configparser.c"
      break;
  
-   case 384:
+   case 385:
  #line 1540 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4335 "util/configparser.c"
 -#line 4428 "util/configparser.c"
++#line 4338 "util/configparser.c"
      break;
  
-   case 385:
+   case 386:
  #line 1550 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4348 "util/configparser.c"
 -#line 4441 "util/configparser.c"
++#line 4351 "util/configparser.c"
      break;
  
-   case 386:
+   case 387:
  #line 1560 "./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 4358 "util/configparser.c"
 -#line 4451 "util/configparser.c"
++#line 4361 "util/configparser.c"
      break;
  
-   case 387:
+   case 388:
  #line 1567 "./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 4368 "util/configparser.c"
 -#line 4461 "util/configparser.c"
++#line 4371 "util/configparser.c"
      break;
  
-   case 388:
+   case 389:
  #line 1574 "./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 4378 "util/configparser.c"
 -#line 4471 "util/configparser.c"
++#line 4381 "util/configparser.c"
      break;
  
-   case 389:
+   case 390:
  #line 1581 "./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 4390 "util/configparser.c"
 -#line 4483 "util/configparser.c"
++#line 4393 "util/configparser.c"
      break;
  
-   case 390:
+   case 391:
  #line 1590 "./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 4402 "util/configparser.c"
 -#line 4495 "util/configparser.c"
++#line 4405 "util/configparser.c"
      break;
  
-   case 391:
+   case 392:
  #line 1599 "./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 4414 "util/configparser.c"
 -#line 4507 "util/configparser.c"
++#line 4417 "util/configparser.c"
      break;
  
-   case 392:
+   case 393:
  #line 1608 "./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 4426 "util/configparser.c"
 -#line 4519 "util/configparser.c"
++#line 4429 "util/configparser.c"
      break;
  
-   case 393:
+   case 394:
  #line 1617 "./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 4436 "util/configparser.c"
 -#line 4529 "util/configparser.c"
++#line 4439 "util/configparser.c"
      break;
  
-   case 394:
+   case 395:
  #line 1624 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4449 "util/configparser.c"
 -#line 4542 "util/configparser.c"
++#line 4452 "util/configparser.c"
      break;
  
-   case 395:
+   case 396:
  #line 1634 "./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 &&
                                fatal_exit("out of memory adding acl");
                }
        }
- #line 4472 "util/configparser.c"
 -#line 4565 "util/configparser.c"
++#line 4475 "util/configparser.c"
      break;
  
-   case 396:
+   case 397:
  #line 1654 "./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 4482 "util/configparser.c"
 -#line 4575 "util/configparser.c"
++#line 4485 "util/configparser.c"
      break;
  
-   case 397:
+   case 398:
  #line 1661 "./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;
                }
                free((yyvsp[0].str));
        }
- #line 4503 "util/configparser.c"
 -#line 4596 "util/configparser.c"
++#line 4506 "util/configparser.c"
      break;
  
-   case 398:
+   case 399:
  #line 1679 "./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;
                }
                free((yyvsp[0].str));
        }
- #line 4519 "util/configparser.c"
 -#line 4612 "util/configparser.c"
++#line 4522 "util/configparser.c"
      break;
  
-   case 399:
+   case 400:
  #line 1692 "./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;
                }
                free((yyvsp[0].str));
        }
- #line 4535 "util/configparser.c"
 -#line 4628 "util/configparser.c"
++#line 4538 "util/configparser.c"
      break;
  
-   case 400:
+   case 401:
  #line 1705 "./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 4547 "util/configparser.c"
 -#line 4640 "util/configparser.c"
++#line 4550 "util/configparser.c"
      break;
  
-   case 401:
+   case 402:
  #line 1714 "./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 4559 "util/configparser.c"
 -#line 4652 "util/configparser.c"
++#line 4562 "util/configparser.c"
      break;
  
-   case 402:
+   case 403:
  #line 1723 "./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 4571 "util/configparser.c"
 -#line 4664 "util/configparser.c"
++#line 4574 "util/configparser.c"
      break;
  
-   case 403:
+   case 404:
  #line 1732 "./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 4583 "util/configparser.c"
 -#line 4676 "util/configparser.c"
++#line 4586 "util/configparser.c"
      break;
  
-   case 404:
+   case 405:
  #line 1741 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4596 "util/configparser.c"
 -#line 4689 "util/configparser.c"
++#line 4599 "util/configparser.c"
      break;
  
-   case 405:
+   case 406:
  #line 1751 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4609 "util/configparser.c"
 -#line 4702 "util/configparser.c"
++#line 4612 "util/configparser.c"
      break;
  
-   case 406:
+   case 407:
  #line 1761 "./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.");
                                (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4623 "util/configparser.c"
 -#line 4716 "util/configparser.c"
++#line 4626 "util/configparser.c"
      break;
  
-   case 407:
+   case 408:
  #line 1772 "./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 4635 "util/configparser.c"
 -#line 4728 "util/configparser.c"
++#line 4638 "util/configparser.c"
      break;
  
-   case 408:
+   case 409:
  #line 1781 "./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 4647 "util/configparser.c"
 -#line 4740 "util/configparser.c"
++#line 4650 "util/configparser.c"
      break;
  
-   case 409:
+   case 410:
  #line 1790 "./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 4659 "util/configparser.c"
 -#line 4752 "util/configparser.c"
++#line 4662 "util/configparser.c"
      break;
  
-   case 410:
+   case 411:
  #line 1799 "./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 4671 "util/configparser.c"
 -#line 4764 "util/configparser.c"
++#line 4674 "util/configparser.c"
      break;
  
-   case 411:
+   case 412:
  #line 1808 "./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 4683 "util/configparser.c"
 -#line 4776 "util/configparser.c"
++#line 4686 "util/configparser.c"
      break;
  
-   case 412:
+   case 413:
  #line 1817 "./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 4695 "util/configparser.c"
 -#line 4788 "util/configparser.c"
++#line 4698 "util/configparser.c"
      break;
  
-   case 413:
+   case 414:
  #line 1826 "./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.");
  #endif
                free((yyvsp[0].str));
        }
- #line 4711 "util/configparser.c"
 -#line 4804 "util/configparser.c"
++#line 4714 "util/configparser.c"
      break;
  
-   case 414:
+   case 415:
  #line 1839 "./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.");
  #endif
                free((yyvsp[0].str));
        }
- #line 4727 "util/configparser.c"
 -#line 4820 "util/configparser.c"
++#line 4730 "util/configparser.c"
      break;
  
-   case 415:
+   case 416:
  #line 1852 "./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 4739 "util/configparser.c"
 -#line 4832 "util/configparser.c"
++#line 4742 "util/configparser.c"
      break;
  
-   case 416:
+   case 417:
  #line 1861 "./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 4749 "util/configparser.c"
 -#line 4842 "util/configparser.c"
++#line 4752 "util/configparser.c"
      break;
  
-   case 417:
+   case 418:
  #line 1868 "./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 4761 "util/configparser.c"
 -#line 4854 "util/configparser.c"
++#line 4764 "util/configparser.c"
      break;
  
-   case 418:
+   case 419:
  #line 1877 "./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 4773 "util/configparser.c"
 -#line 4866 "util/configparser.c"
++#line 4776 "util/configparser.c"
      break;
  
-   case 419:
+   case 420:
  #line 1886 "./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 4785 "util/configparser.c"
 -#line 4878 "util/configparser.c"
++#line 4788 "util/configparser.c"
      break;
  
-   case 420:
+   case 421:
  #line 1895 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4798 "util/configparser.c"
 -#line 4891 "util/configparser.c"
++#line 4801 "util/configparser.c"
      break;
  
-   case 421:
+   case 422:
  #line 1904 "./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 4809 "util/configparser.c"
 -#line 4902 "util/configparser.c"
++#line 4812 "util/configparser.c"
      break;
  
-   case 422:
+   case 423:
  #line 1912 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                }
                free((yyvsp[0].str));
        }
- #line 4825 "util/configparser.c"
 -#line 4918 "util/configparser.c"
++#line 4828 "util/configparser.c"
      break;
  
-   case 423:
+   case 424:
  #line 1925 "./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 4836 "util/configparser.c"
 -#line 4929 "util/configparser.c"
++#line 4839 "util/configparser.c"
      break;
  
-   case 424:
+   case 425:
  #line 1933 "./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 &&
                                fatal_exit("out of memory adding local-zone");
                }
        }
- #line 4880 "util/configparser.c"
 -#line 4973 "util/configparser.c"
++#line 4883 "util/configparser.c"
      break;
  
-   case 425:
+   case 426:
  #line 1974 "./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 4890 "util/configparser.c"
 -#line 4983 "util/configparser.c"
++#line 4893 "util/configparser.c"
      break;
  
-   case 426:
+   case 427:
  #line 1981 "./util/configparser.y"
 -        {
 +    {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
                ptr = cfg_ptr_reverse((yyvsp[0].str));
                        yyerror("local-data-ptr could not be reversed");
                }
        }
- #line 4908 "util/configparser.c"
 -#line 5001 "util/configparser.c"
++#line 4911 "util/configparser.c"
      break;
  
-   case 427:
+   case 428:
  #line 1996 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4921 "util/configparser.c"
 -#line 5014 "util/configparser.c"
++#line 4924 "util/configparser.c"
      break;
  
-   case 428:
+   case 429:
  #line 2006 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 4934 "util/configparser.c"
 -#line 5027 "util/configparser.c"
++#line 4937 "util/configparser.c"
      break;
  
-   case 429:
+   case 430:
  #line 2016 "./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 4944 "util/configparser.c"
 -#line 5037 "util/configparser.c"
++#line 4947 "util/configparser.c"
      break;
  
-   case 430:
+   case 431:
  #line 2023 "./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 4954 "util/configparser.c"
 -#line 5047 "util/configparser.c"
++#line 4957 "util/configparser.c"
      break;
  
-   case 431:
+   case 432:
  #line 2030 "./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 4964 "util/configparser.c"
 -#line 5057 "util/configparser.c"
++#line 4967 "util/configparser.c"
      break;
  
-   case 432:
+   case 433:
  #line 2037 "./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 4976 "util/configparser.c"
 -#line 5069 "util/configparser.c"
++#line 4979 "util/configparser.c"
      break;
  
-   case 433:
+   case 434:
  #line 2046 "./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 4987 "util/configparser.c"
 -#line 5080 "util/configparser.c"
++#line 4990 "util/configparser.c"
      break;
  
-   case 434:
+   case 435:
  #line 2054 "./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) {
                }
                free((yyvsp[0].str));
        }
- #line 5004 "util/configparser.c"
 -#line 5097 "util/configparser.c"
++#line 5007 "util/configparser.c"
      break;
  
-   case 435:
+   case 436:
  #line 2068 "./util/configparser.y"
 -        {
 +    {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
                        &len);
                        }
                }
        }
- #line 5028 "util/configparser.c"
 -#line 5121 "util/configparser.c"
++#line 5031 "util/configparser.c"
      break;
  
-   case 436:
+   case 437:
  #line 2089 "./util/configparser.y"
 -        {
 +    {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
                        &len);
                        }
                }
        }
- #line 5052 "util/configparser.c"
 -#line 5145 "util/configparser.c"
++#line 5055 "util/configparser.c"
      break;
  
-   case 437:
+   case 438:
  #line 2110 "./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))) {
                        free((yyvsp[0].str));
                }
        }
- #line 5067 "util/configparser.c"
 -#line 5160 "util/configparser.c"
++#line 5070 "util/configparser.c"
      break;
  
-   case 438:
+   case 439:
  #line 2122 "./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))) {
                        free((yyvsp[0].str));
                }
        }
- #line 5082 "util/configparser.c"
 -#line 5175 "util/configparser.c"
++#line 5085 "util/configparser.c"
      break;
  
-   case 439:
+   case 440:
  #line 2134 "./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))) {
                        free((yyvsp[0].str));
                }
        }
- #line 5097 "util/configparser.c"
 -#line 5190 "util/configparser.c"
++#line 5100 "util/configparser.c"
      break;
  
-   case 440:
+   case 441:
  #line 2146 "./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 5109 "util/configparser.c"
 -#line 5202 "util/configparser.c"
++#line 5112 "util/configparser.c"
      break;
  
-   case 441:
+   case 442:
  #line 2155 "./util/configparser.y"
 -        {
 +    {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
                        &len);
                        }
                }
        }
- #line 5133 "util/configparser.c"
 -#line 5226 "util/configparser.c"
++#line 5136 "util/configparser.c"
      break;
  
-   case 442:
+   case 443:
  #line 2176 "./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 5145 "util/configparser.c"
 -#line 5238 "util/configparser.c"
++#line 5148 "util/configparser.c"
      break;
  
-   case 443:
+   case 444:
  #line 2186 "./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 5157 "util/configparser.c"
 -#line 5250 "util/configparser.c"
++#line 5160 "util/configparser.c"
      break;
  
-   case 444:
+   case 445:
  #line 2195 "./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 5168 "util/configparser.c"
 -#line 5261 "util/configparser.c"
++#line 5171 "util/configparser.c"
      break;
  
-   case 445:
+   case 446:
  #line 2203 "./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 5179 "util/configparser.c"
 -#line 5272 "util/configparser.c"
++#line 5182 "util/configparser.c"
      break;
  
-   case 446:
+   case 447:
  #line 2211 "./util/configparser.y"
 -  {
 +    {
        OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
                yyerror("number expected");
        }
        free((yyvsp[0].str));
    }
- #line 5195 "util/configparser.c"
 -#line 5288 "util/configparser.c"
++#line 5198 "util/configparser.c"
      break;
  
-   case 447:
+   case 448:
  #line 2224 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
                        yyerror("number expected");
                }
                free((yyvsp[0].str));
        }
- #line 5211 "util/configparser.c"
 -#line 5304 "util/configparser.c"
++#line 5214 "util/configparser.c"
      break;
  
-   case 448:
+   case 449:
  #line 2237 "./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");
                                        "ratelimit-for-domain");
                }
        }
- #line 5229 "util/configparser.c"
 -#line 5322 "util/configparser.c"
++#line 5232 "util/configparser.c"
      break;
  
-   case 449:
+   case 450:
  #line 2252 "./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");
                                        "ratelimit-below-domain");
                }
        }
- #line 5247 "util/configparser.c"
 -#line 5340 "util/configparser.c"
++#line 5250 "util/configparser.c"
      break;
  
-   case 450:
+   case 451:
  #line 2267 "./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 5259 "util/configparser.c"
 -#line 5352 "util/configparser.c"
++#line 5262 "util/configparser.c"
      break;
  
-   case 451:
+   case 452:
  #line 2276 "./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 5271 "util/configparser.c"
 -#line 5364 "util/configparser.c"
++#line 5274 "util/configparser.c"
      break;
  
-   case 452:
+   case 453:
  #line 2285 "./util/configparser.y"
 -        
 +    { 
                OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
                free((yyvsp[0].str));
        }
- #line 5280 "util/configparser.c"
 -#line 5373 "util/configparser.c"
++#line 5283 "util/configparser.c"
      break;
  
-   case 453:
+   case 454:
  #line 2291 "./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 5292 "util/configparser.c"
 -#line 5385 "util/configparser.c"
++#line 5295 "util/configparser.c"
      break;
  
-   case 454:
+   case 455:
  #line 2300 "./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 5304 "util/configparser.c"
 -#line 5397 "util/configparser.c"
++#line 5307 "util/configparser.c"
      break;
  
-   case 455:
+   case 456:
  #line 2309 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5317 "util/configparser.c"
 -#line 5410 "util/configparser.c"
++#line 5320 "util/configparser.c"
      break;
  
-   case 456:
+   case 457:
  #line 2319 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5330 "util/configparser.c"
 -#line 5423 "util/configparser.c"
++#line 5333 "util/configparser.c"
      break;
  
-   case 457:
+   case 458:
  #line 2329 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 5346 "util/configparser.c"
 -#line 5439 "util/configparser.c"
++#line 5349 "util/configparser.c"
      break;
  
-   case 458:
+   case 459:
  #line 2342 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 5362 "util/configparser.c"
 -#line 5455 "util/configparser.c"
++#line 5365 "util/configparser.c"
      break;
  
-   case 459:
+   case 460:
  #line 2355 "./util/configparser.y"
 -        {
 +    {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ipsecmod_hook);
                free((yyvsp[0].str));
        #endif
        }
- #line 5377 "util/configparser.c"
 -#line 5470 "util/configparser.c"
++#line 5380 "util/configparser.c"
      break;
  
-   case 460:
+   case 461:
  #line 2367 "./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)
                free((yyvsp[0].str));
        #endif
        }
- #line 5394 "util/configparser.c"
 -#line 5487 "util/configparser.c"
++#line 5397 "util/configparser.c"
      break;
  
-   case 461:
+   case 462:
  #line 2381 "./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)))
                free((yyvsp[0].str));
        #endif
        }
- #line 5409 "util/configparser.c"
 -#line 5502 "util/configparser.c"
++#line 5412 "util/configparser.c"
      break;
  
-   case 462:
+   case 463:
  #line 2393 "./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)
                free((yyvsp[0].str));
        #endif
        }
- #line 5426 "util/configparser.c"
 -#line 5519 "util/configparser.c"
++#line 5429 "util/configparser.c"
      break;
  
-   case 463:
+   case 464:
  #line 2407 "./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));
+               if(tag_data > 65535 || tag_data < 0 ||
+                       (tag_data == 0 && (strlen((yyvsp[0].str)) != 1 || (yyvsp[0].str)[0] != '0')))
+                       yyerror("edns-client-tag data invalid, needs to be a "
+                               "number from 0 to 65535");
+               if(!cfg_str2list_insert(
+                       &cfg_parser->cfg->edns_client_tags, (yyvsp[-1].str), (yyvsp[0].str)))
+                       fatal_exit("out of memory adding "
+                               "edns-client-tag");
+       }
 -#line 5537 "util/configparser.c"
++#line 5447 "util/configparser.c"
+     break;
+   case 465:
+ #line 2422 "./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 "
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
- #line 5439 "util/configparser.c"
 -#line 5550 "util/configparser.c"
++#line 5460 "util/configparser.c"
      break;
  
-   case 464:
- #line 2417 "./util/configparser.y"
+   case 466:
+ #line 2432 "./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 5449 "util/configparser.c"
 -#line 5560 "util/configparser.c"
++#line 5470 "util/configparser.c"
      break;
  
-   case 465:
- #line 2424 "./util/configparser.y"
+   case 467:
+ #line 2439 "./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 5459 "util/configparser.c"
 -#line 5570 "util/configparser.c"
++#line 5480 "util/configparser.c"
      break;
  
-   case 466:
- #line 2431 "./util/configparser.y"
+   case 468:
+ #line 2446 "./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 5471 "util/configparser.c"
 -#line 5582 "util/configparser.c"
++#line 5492 "util/configparser.c"
      break;
  
-   case 467:
- #line 2440 "./util/configparser.y"
+   case 469:
+ #line 2455 "./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 5483 "util/configparser.c"
 -#line 5594 "util/configparser.c"
++#line 5504 "util/configparser.c"
      break;
  
-   case 468:
- #line 2449 "./util/configparser.y"
+   case 470:
+ #line 2464 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5496 "util/configparser.c"
 -#line 5607 "util/configparser.c"
++#line 5517 "util/configparser.c"
      break;
  
-   case 469:
- #line 2459 "./util/configparser.y"
+   case 471:
+ #line 2474 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5509 "util/configparser.c"
 -#line 5620 "util/configparser.c"
++#line 5530 "util/configparser.c"
      break;
  
-   case 470:
- #line 2469 "./util/configparser.y"
+   case 472:
+ #line 2484 "./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 "
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
- #line 5522 "util/configparser.c"
 -#line 5633 "util/configparser.c"
++#line 5543 "util/configparser.c"
      break;
  
-   case 471:
- #line 2479 "./util/configparser.y"
+   case 473:
+ #line 2494 "./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 5532 "util/configparser.c"
 -#line 5643 "util/configparser.c"
++#line 5553 "util/configparser.c"
      break;
  
-   case 472:
- #line 2486 "./util/configparser.y"
+   case 474:
+ #line 2501 "./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 5542 "util/configparser.c"
 -#line 5653 "util/configparser.c"
++#line 5563 "util/configparser.c"
      break;
  
-   case 473:
- #line 2493 "./util/configparser.y"
+   case 475:
+ #line 2508 "./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 5554 "util/configparser.c"
 -#line 5665 "util/configparser.c"
++#line 5575 "util/configparser.c"
      break;
  
-   case 474:
- #line 2502 "./util/configparser.y"
+   case 476:
+ #line 2517 "./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 5566 "util/configparser.c"
 -#line 5677 "util/configparser.c"
++#line 5587 "util/configparser.c"
      break;
  
-   case 475:
- #line 2511 "./util/configparser.y"
+   case 477:
+ #line 2526 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5579 "util/configparser.c"
 -#line 5690 "util/configparser.c"
++#line 5600 "util/configparser.c"
      break;
  
-   case 476:
- #line 2521 "./util/configparser.y"
+   case 478:
+ #line 2536 "./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 "
                free(cfg_parser->cfg->auths->name);
                cfg_parser->cfg->auths->name = (yyvsp[0].str);
        }
- #line 5592 "util/configparser.c"
 -#line 5703 "util/configparser.c"
++#line 5613 "util/configparser.c"
      break;
  
-   case 477:
- #line 2531 "./util/configparser.y"
+   case 479:
+ #line 2546 "./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 5602 "util/configparser.c"
 -#line 5713 "util/configparser.c"
++#line 5623 "util/configparser.c"
      break;
  
-   case 478:
- #line 2538 "./util/configparser.y"
+   case 480:
+ #line 2553 "./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 5612 "util/configparser.c"
 -#line 5723 "util/configparser.c"
++#line 5633 "util/configparser.c"
      break;
  
-   case 479:
- #line 2545 "./util/configparser.y"
+   case 481:
+ #line 2560 "./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 5622 "util/configparser.c"
 -#line 5733 "util/configparser.c"
++#line 5643 "util/configparser.c"
      break;
  
-   case 480:
- #line 2552 "./util/configparser.y"
+   case 482:
+ #line 2567 "./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 5633 "util/configparser.c"
 -#line 5744 "util/configparser.c"
++#line 5654 "util/configparser.c"
      break;
  
-   case 481:
- #line 2560 "./util/configparser.y"
+   case 483:
+ #line 2575 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5646 "util/configparser.c"
 -#line 5757 "util/configparser.c"
++#line 5667 "util/configparser.c"
      break;
  
-   case 482:
- #line 2570 "./util/configparser.y"
+   case 484:
+ #line 2585 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5659 "util/configparser.c"
 -#line 5770 "util/configparser.c"
++#line 5680 "util/configparser.c"
      break;
  
-   case 483:
- #line 2580 "./util/configparser.y"
+   case 485:
+ #line 2595 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5672 "util/configparser.c"
 -#line 5783 "util/configparser.c"
++#line 5693 "util/configparser.c"
      break;
  
-   case 484:
- #line 2590 "./util/configparser.y"
+   case 486:
+ #line 2605 "./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 "
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
- #line 5685 "util/configparser.c"
 -#line 5796 "util/configparser.c"
++#line 5706 "util/configparser.c"
      break;
  
-   case 485:
- #line 2600 "./util/configparser.y"
+   case 487:
+ #line 2615 "./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 &&
                                fatal_exit("out of memory adding local-zone");
                }
        }
- #line 5727 "util/configparser.c"
 -#line 5838 "util/configparser.c"
++#line 5748 "util/configparser.c"
      break;
  
-   case 486:
- #line 2639 "./util/configparser.y"
+   case 488:
+ #line 2654 "./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(
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
- #line 5740 "util/configparser.c"
 -#line 5851 "util/configparser.c"
++#line 5761 "util/configparser.c"
      break;
  
-   case 487:
- #line 2649 "./util/configparser.y"
+   case 489:
+ #line 2664 "./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 5751 "util/configparser.c"
 -#line 5862 "util/configparser.c"
++#line 5772 "util/configparser.c"
      break;
  
-   case 488:
- #line 2657 "./util/configparser.y"
+   case 490:
+ #line 2672 "./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 5762 "util/configparser.c"
 -#line 5873 "util/configparser.c"
++#line 5783 "util/configparser.c"
      break;
  
-   case 489:
- #line 2665 "./util/configparser.y"
+   case 491:
+ #line 2680 "./util/configparser.y"
 -        {
 +    {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
                ptr = cfg_ptr_reverse((yyvsp[0].str));
                        yyerror("local-data-ptr could not be reversed");
                }
        }
- #line 5780 "util/configparser.c"
 -#line 5891 "util/configparser.c"
++#line 5801 "util/configparser.c"
      break;
  
-   case 490:
- #line 2680 "./util/configparser.y"
+   case 492:
+ #line 2695 "./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 5792 "util/configparser.c"
 -#line 5903 "util/configparser.c"
++#line 5813 "util/configparser.c"
      break;
  
-   case 491:
- #line 2689 "./util/configparser.y"
+   case 493:
+ #line 2704 "./util/configparser.y"
 -        
 +    { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
- #line 5800 "util/configparser.c"
 -#line 5911 "util/configparser.c"
++#line 5821 "util/configparser.c"
      break;
  
-   case 502:
- #line 2700 "./util/configparser.y"
+   case 504:
+ #line 2715 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5813 "util/configparser.c"
 -#line 5924 "util/configparser.c"
++#line 5834 "util/configparser.c"
      break;
  
-   case 503:
- #line 2710 "./util/configparser.y"
+   case 505:
+ #line 2725 "./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 5825 "util/configparser.c"
 -#line 5936 "util/configparser.c"
++#line 5846 "util/configparser.c"
      break;
  
-   case 504:
- #line 2719 "./util/configparser.y"
+   case 506:
+ #line 2734 "./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 5835 "util/configparser.c"
 -#line 5946 "util/configparser.c"
++#line 5856 "util/configparser.c"
      break;
  
-   case 505:
- #line 2726 "./util/configparser.y"
+   case 507:
+ #line 2741 "./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 5845 "util/configparser.c"
 -#line 5956 "util/configparser.c"
++#line 5866 "util/configparser.c"
      break;
  
-   case 506:
- #line 2733 "./util/configparser.y"
+   case 508:
+ #line 2748 "./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 5855 "util/configparser.c"
 -#line 5966 "util/configparser.c"
++#line 5876 "util/configparser.c"
      break;
  
-   case 507:
- #line 2740 "./util/configparser.y"
+   case 509:
+ #line 2755 "./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 5865 "util/configparser.c"
 -#line 5976 "util/configparser.c"
++#line 5886 "util/configparser.c"
      break;
  
-   case 508:
- #line 2747 "./util/configparser.y"
+   case 510:
+ #line 2762 "./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 5875 "util/configparser.c"
 -#line 5986 "util/configparser.c"
++#line 5896 "util/configparser.c"
      break;
  
-   case 509:
- #line 2754 "./util/configparser.y"
+   case 511:
+ #line 2769 "./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 5885 "util/configparser.c"
 -#line 5996 "util/configparser.c"
++#line 5906 "util/configparser.c"
      break;
  
-   case 510:
- #line 2761 "./util/configparser.y"
+   case 512:
+ #line 2776 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("\nP(dnstap:)\n"));
        }
- #line 5893 "util/configparser.c"
 -#line 6004 "util/configparser.c"
++#line 5914 "util/configparser.c"
      break;
  
-   case 532:
- #line 2781 "./util/configparser.y"
+   case 534:
+ #line 2796 "./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 5905 "util/configparser.c"
 -#line 6016 "util/configparser.c"
++#line 5926 "util/configparser.c"
      break;
  
-   case 533:
- #line 2790 "./util/configparser.y"
+   case 535:
+ #line 2805 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 5918 "util/configparser.c"
 -#line 6029 "util/configparser.c"
++#line 5939 "util/configparser.c"
      break;
  
-   case 534:
- #line 2800 "./util/configparser.y"
+   case 536:
+ #line 2815 "./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 5928 "util/configparser.c"
 -#line 6039 "util/configparser.c"
++#line 5949 "util/configparser.c"
      break;
  
-   case 535:
- #line 2807 "./util/configparser.y"
+   case 537:
+ #line 2822 "./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 5938 "util/configparser.c"
 -#line 6049 "util/configparser.c"
++#line 5959 "util/configparser.c"
      break;
  
-   case 536:
- #line 2814 "./util/configparser.y"
+   case 538:
+ #line 2829 "./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 5950 "util/configparser.c"
 -#line 6061 "util/configparser.c"
++#line 5971 "util/configparser.c"
      break;
  
-   case 537:
- #line 2823 "./util/configparser.y"
+   case 539:
+ #line 2838 "./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 5960 "util/configparser.c"
 -#line 6071 "util/configparser.c"
++#line 5981 "util/configparser.c"
      break;
  
-   case 538:
- #line 2830 "./util/configparser.y"
+   case 540:
+ #line 2845 "./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 5970 "util/configparser.c"
 -#line 6081 "util/configparser.c"
++#line 5991 "util/configparser.c"
      break;
  
-   case 539:
- #line 2837 "./util/configparser.y"
+   case 541:
+ #line 2852 "./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 5980 "util/configparser.c"
 -#line 6091 "util/configparser.c"
++#line 6001 "util/configparser.c"
      break;
  
-   case 540:
- #line 2844 "./util/configparser.y"
+   case 542:
+ #line 2859 "./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 5990 "util/configparser.c"
 -#line 6101 "util/configparser.c"
++#line 6011 "util/configparser.c"
      break;
  
-   case 541:
- #line 2851 "./util/configparser.y"
+   case 543:
+ #line 2866 "./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 6002 "util/configparser.c"
 -#line 6113 "util/configparser.c"
++#line 6023 "util/configparser.c"
      break;
  
-   case 542:
- #line 2860 "./util/configparser.y"
+   case 544:
+ #line 2875 "./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 6014 "util/configparser.c"
 -#line 6125 "util/configparser.c"
++#line 6035 "util/configparser.c"
      break;
  
-   case 543:
- #line 2869 "./util/configparser.y"
+   case 545:
+ #line 2884 "./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 6024 "util/configparser.c"
 -#line 6135 "util/configparser.c"
++#line 6045 "util/configparser.c"
      break;
  
-   case 544:
- #line 2876 "./util/configparser.y"
+   case 546:
+ #line 2891 "./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 6034 "util/configparser.c"
 -#line 6145 "util/configparser.c"
++#line 6055 "util/configparser.c"
      break;
  
-   case 545:
- #line 2883 "./util/configparser.y"
+   case 547:
+ #line 2898 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6047 "util/configparser.c"
 -#line 6158 "util/configparser.c"
++#line 6068 "util/configparser.c"
      break;
  
-   case 546:
- #line 2893 "./util/configparser.y"
+   case 548:
+ #line 2908 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6060 "util/configparser.c"
 -#line 6171 "util/configparser.c"
++#line 6081 "util/configparser.c"
      break;
  
-   case 547:
- #line 2903 "./util/configparser.y"
+   case 549:
+ #line 2918 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6073 "util/configparser.c"
 -#line 6184 "util/configparser.c"
++#line 6094 "util/configparser.c"
      break;
  
-   case 548:
- #line 2913 "./util/configparser.y"
+   case 550:
+ #line 2928 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6086 "util/configparser.c"
 -#line 6197 "util/configparser.c"
++#line 6107 "util/configparser.c"
      break;
  
-   case 549:
- #line 2923 "./util/configparser.y"
+   case 551:
+ #line 2938 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6099 "util/configparser.c"
 -#line 6210 "util/configparser.c"
++#line 6120 "util/configparser.c"
      break;
  
-   case 550:
- #line 2933 "./util/configparser.y"
+   case 552:
+ #line 2948 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6112 "util/configparser.c"
 -#line 6223 "util/configparser.c"
++#line 6133 "util/configparser.c"
      break;
  
-   case 551:
- #line 2943 "./util/configparser.y"
+   case 553:
+ #line 2958 "./util/configparser.y"
 -        
 +    { 
                OUTYY(("\nP(python:)\n")); 
        }
- #line 6120 "util/configparser.c"
 -#line 6231 "util/configparser.c"
++#line 6141 "util/configparser.c"
      break;
  
-   case 555:
- #line 2952 "./util/configparser.y"
+   case 557:
+ #line 2967 "./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 6130 "util/configparser.c"
 -#line 6241 "util/configparser.c"
++#line 6151 "util/configparser.c"
      break;
  
-   case 556:
- #line 2958 "./util/configparser.y"
+   case 558:
+ #line 2973 "./util/configparser.y"
 -        
 +    { 
                OUTYY(("\nP(dynlib:)\n")); 
        }
- #line 6138 "util/configparser.c"
 -#line 6249 "util/configparser.c"
++#line 6159 "util/configparser.c"
      break;
  
-   case 560:
- #line 2967 "./util/configparser.y"
+   case 562:
+ #line 2982 "./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 6148 "util/configparser.c"
 -#line 6259 "util/configparser.c"
++#line 6169 "util/configparser.c"
      break;
  
-   case 561:
- #line 2973 "./util/configparser.y"
+   case 563:
+ #line 2988 "./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.");
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
- #line 6161 "util/configparser.c"
 -#line 6272 "util/configparser.c"
++#line 6182 "util/configparser.c"
      break;
  
-   case 562:
- #line 2983 "./util/configparser.y"
+   case 564:
+ #line 2998 "./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 6171 "util/configparser.c"
 -#line 6282 "util/configparser.c"
++#line 6192 "util/configparser.c"
      break;
  
-   case 563:
- #line 2990 "./util/configparser.y"
+   case 565:
+ #line 3005 "./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 6183 "util/configparser.c"
 -#line 6294 "util/configparser.c"
++#line 6204 "util/configparser.c"
      break;
  
-   case 564:
- #line 2999 "./util/configparser.y"
+   case 566:
+ #line 3014 "./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 6194 "util/configparser.c"
 -#line 6305 "util/configparser.c"
++#line 6215 "util/configparser.c"
      break;
  
-   case 565:
- #line 3007 "./util/configparser.y"
+   case 567:
+ #line 3022 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("\nP(dnscrypt:)\n"));
        }
- #line 6202 "util/configparser.c"
 -#line 6313 "util/configparser.c"
++#line 6223 "util/configparser.c"
      break;
  
-   case 578:
- #line 3023 "./util/configparser.y"
+   case 580:
+ #line 3038 "./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 6214 "util/configparser.c"
 -#line 6325 "util/configparser.c"
++#line 6235 "util/configparser.c"
      break;
  
-   case 579:
- #line 3033 "./util/configparser.y"
+   case 581:
+ #line 3048 "./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 6226 "util/configparser.c"
 -#line 6337 "util/configparser.c"
++#line 6247 "util/configparser.c"
      break;
  
-   case 580:
- #line 3042 "./util/configparser.y"
+   case 582:
+ #line 3057 "./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 6236 "util/configparser.c"
 -#line 6347 "util/configparser.c"
++#line 6257 "util/configparser.c"
      break;
  
-   case 581:
- #line 3049 "./util/configparser.y"
+   case 583:
+ #line 3064 "./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 6248 "util/configparser.c"
 -#line 6359 "util/configparser.c"
++#line 6269 "util/configparser.c"
      break;
  
-   case 582:
- #line 3058 "./util/configparser.y"
+   case 584:
+ #line 3073 "./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 6258 "util/configparser.c"
 -#line 6369 "util/configparser.c"
++#line 6279 "util/configparser.c"
      break;
  
-   case 583:
- #line 3065 "./util/configparser.y"
+   case 585:
+ #line 3080 "./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 6270 "util/configparser.c"
 -#line 6381 "util/configparser.c"
++#line 6291 "util/configparser.c"
      break;
  
-   case 584:
- #line 3074 "./util/configparser.y"
+   case 586:
+ #line 3089 "./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 6281 "util/configparser.c"
 -#line 6392 "util/configparser.c"
++#line 6302 "util/configparser.c"
      break;
  
-   case 585:
- #line 3082 "./util/configparser.y"
+   case 587:
+ #line 3097 "./util/configparser.y"
 -  {
 +    {
        OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
                yyerror("number expected");
        }
        free((yyvsp[0].str));
    }
- #line 6297 "util/configparser.c"
 -#line 6408 "util/configparser.c"
++#line 6318 "util/configparser.c"
      break;
  
-   case 586:
- #line 3095 "./util/configparser.y"
+   case 588:
+ #line 3110 "./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 6308 "util/configparser.c"
 -#line 6419 "util/configparser.c"
++#line 6329 "util/configparser.c"
      break;
  
-   case 587:
- #line 3103 "./util/configparser.y"
+   case 589:
+ #line 3118 "./util/configparser.y"
 -  {
 +    {
        OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
                yyerror("number expected");
        }
        free((yyvsp[0].str));
    }
- #line 6324 "util/configparser.c"
 -#line 6435 "util/configparser.c"
++#line 6345 "util/configparser.c"
      break;
  
-   case 588:
- #line 3116 "./util/configparser.y"
+   case 590:
+ #line 3131 "./util/configparser.y"
 -        {
 +    {
                OUTYY(("\nP(cachedb:)\n"));
        }
- #line 6332 "util/configparser.c"
 -#line 6443 "util/configparser.c"
++#line 6353 "util/configparser.c"
      break;
  
-   case 597:
- #line 3127 "./util/configparser.y"
+   case 599:
+ #line 3142 "./util/configparser.y"
 -        {
 +    {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->cachedb_backend);
                free((yyvsp[0].str));
        #endif
        }
- #line 6347 "util/configparser.c"
 -#line 6458 "util/configparser.c"
++#line 6368 "util/configparser.c"
      break;
  
-   case 598:
- #line 3139 "./util/configparser.y"
+   case 600:
+ #line 3154 "./util/configparser.y"
 -        {
 +    {
        #ifdef USE_CACHEDB
                OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->cachedb_secret);
                free((yyvsp[0].str));
        #endif
        }
- #line 6362 "util/configparser.c"
 -#line 6473 "util/configparser.c"
++#line 6383 "util/configparser.c"
      break;
  
-   case 599:
- #line 3151 "./util/configparser.y"
+   case 601:
+ #line 3166 "./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);
                free((yyvsp[0].str));
        #endif
        }
- #line 6377 "util/configparser.c"
 -#line 6488 "util/configparser.c"
++#line 6398 "util/configparser.c"
      break;
  
-   case 600:
- #line 3163 "./util/configparser.y"
+   case 602:
+ #line 3178 "./util/configparser.y"
 -        {
 +    {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                int port;
                OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
        #endif
                free((yyvsp[0].str));
        }
- #line 6395 "util/configparser.c"
 -#line 6506 "util/configparser.c"
++#line 6416 "util/configparser.c"
      break;
  
-   case 601:
- #line 3178 "./util/configparser.y"
+   case 603:
+ #line 3193 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 6411 "util/configparser.c"
 -#line 6522 "util/configparser.c"
++#line 6432 "util/configparser.c"
      break;
  
-   case 602:
- #line 3191 "./util/configparser.y"
+   case 604:
+ #line 3206 "./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)
        #endif
                free((yyvsp[0].str));
        }
- #line 6427 "util/configparser.c"
 -#line 6538 "util/configparser.c"
++#line 6448 "util/configparser.c"
      break;
  
-   case 603:
- #line 3204 "./util/configparser.y"
+   case 605:
+ #line 3219 "./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");
                                fatal_exit("out of memory adding tcp connection limit");
                }
        }
- #line 6441 "util/configparser.c"
 -#line 6552 "util/configparser.c"
++#line 6462 "util/configparser.c"
      break;
  
-   case 604:
- #line 3215 "./util/configparser.y"
+   case 606:
+ #line 3230 "./util/configparser.y"
 -                {
 +    {
                        OUTYY(("\nP(ipset:)\n"));
                }
- #line 6449 "util/configparser.c"
 -#line 6560 "util/configparser.c"
++#line 6470 "util/configparser.c"
      break;
  
-   case 609:
- #line 3224 "./util/configparser.y"
+   case 611:
+ #line 3239 "./util/configparser.y"
 -                {
 +    {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
                        if(cfg_parser->cfg->ipset_name_v4)
                        free((yyvsp[0].str));
                #endif
                }
- #line 6467 "util/configparser.c"
 -#line 6578 "util/configparser.c"
++#line 6488 "util/configparser.c"
      break;
  
-   case 610:
- #line 3239 "./util/configparser.y"
+   case 612:
+ #line 3254 "./util/configparser.y"
 -        {
 +    {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
                        if(cfg_parser->cfg->ipset_name_v6)
                        free((yyvsp[0].str));
                #endif
                }
- #line 6485 "util/configparser.c"
 -#line 6596 "util/configparser.c"
++#line 6506 "util/configparser.c"
      break;
  
  
- #line 6489 "util/configparser.c"
 -#line 6600 "util/configparser.c"
++#line 6510 "util/configparser.c"
  
        default: break;
      }
Simple merge
Simple merge