]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- In unbound.conf directory: dir immediately changes to that directory,
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 9 Jun 2016 22:59:07 +0000 (22:59 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 9 Jun 2016 22:59:07 +0000 (22:59 +0000)
  so that include: file below that is relative to that directory.
  With chroot, make the directory an absolute path inside chroot.

git-svn-id: file:///svn/unbound/trunk@3775 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
util/configlexer.c
util/configparser.c
util/configparser.y

index 5d3e911f335756286096fe513c8420353b01036b..2bc2c61ddfe2768cd1db7e95dccb46aa30023faf 100644 (file)
@@ -1,5 +1,8 @@
 10 June 2016: Wouter
        - And delete service.conf.shipped on uninstall.
+       - In unbound.conf directory: dir immediately changes to that directory,
+         so that include: file below that is relative to that directory.
+         With chroot, make the directory an absolute path inside chroot.
 
 9 June 2016: Wouter
        - Trunk is called 1.5.10 (with previous fixes already in there to 2
index bef6080707f61e115d4b357fdba1f830c84b9bc7..05cdcd1125a8265b9354b2ffca1d643493169502 100644 (file)
@@ -9,8 +9,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 39
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -143,15 +143,7 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -184,7 +176,7 @@ extern FILE *yyin, *yyout;
        do \
                { \
                /* Undo effects of setting up yytext. */ \
-        yy_size_t yyless_macro_arg = (n); \
+        int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
@@ -354,17 +346,11 @@ extern int yylineno;
 int yylineno = 1;
 
 extern char *yytext;
-#ifdef yytext_ptr
-#undef yytext_ptr
-#endif
 #define yytext_ptr yytext
 
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
 static void yy_fatal_error (yyconst char msg[]  );
 
 /* Done after the current pattern has been matched and before the
@@ -597,7 +583,7 @@ static yyconst flex_int16_t yy_accept[1874] =
       155,  159,    0
     } ;
 
-static yyconst YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
@@ -629,7 +615,7 @@ static yyconst YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst YY_CHAR yy_meta[40] =
+static yyconst flex_int32_t yy_meta[40] =
     {   0,
         1,    2,    3,    4,    5,    1,    6,    1,    1,    1,
         1,    7,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -637,7 +623,7 @@ static yyconst YY_CHAR yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[1888] =
+static yyconst flex_int16_t yy_base[1888] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
        87,  108, 2327, 2209,   50, 3703, 3703, 3703,  129,   94,
@@ -1059,7 +1045,7 @@ static yyconst flex_int16_t yy_def[1888] =
      1873, 1873, 1873, 1873, 1873, 1873, 1873
     } ;
 
-static yyconst flex_uint16_t yy_nxt[3743] =
+static yyconst flex_int16_t yy_nxt[3743] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   18,   20,   21,   14,   22,   23,   24,   25,   14,
@@ -2093,7 +2079,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2095 "<stdout>"
+#line 2081 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2131,11 +2117,11 @@ void yyset_extra (YY_EXTRA_TYPE user_defined  );
 
 FILE *yyget_in (void );
 
-void yyset_in  (FILE * _in_str  );
+void yyset_in  (FILE * in_str  );
 
 FILE *yyget_out (void );
 
-void yyset_out  (FILE * _out_str  );
+void yyset_out  (FILE * out_str  );
 
 yy_size_t yyget_leng (void );
 
@@ -2143,7 +2129,7 @@ char *yyget_text (void );
 
 int yyget_lineno (void );
 
-void yyset_lineno (int _line_number  );
+void yyset_lineno (int line_number  );
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -2157,10 +2143,6 @@ extern int yywrap (void );
 #endif
 #endif
 
-#ifndef YY_NO_UNPUT
-    
-#endif
-
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
@@ -2181,12 +2163,7 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -2273,7 +2250,7 @@ extern int yylex (void);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 #define YY_RULE_SETUP \
@@ -2283,9 +2260,9 @@ extern int yylex (void);
  */
 YY_DECL
 {
-       yy_state_type yy_current_state;
-       char *yy_cp, *yy_bp;
-       int yy_act;
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
     
        if ( !(yy_init) )
                {
@@ -2316,9 +2293,9 @@ YY_DECL
        {
 #line 201 "./util/configlexer.lex"
 
-#line 2318 "<stdout>"
+#line 2295 "<stdout>"
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
+       while ( 1 )             /* loops until end-of-file is reached */
                {
                (yy_more_len) = 0;
                if ( (yy_more_flag) )
@@ -2340,7 +2317,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -3413,7 +3390,7 @@ YY_RULE_SETUP
 #line 473 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3415 "<stdout>"
+#line 3392 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3554,9 +3531,9 @@ ECHO;
  */
 static int yy_get_next_buffer (void)
 {
-       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       char *source = (yytext_ptr);
-       yy_size_t number_to_move, i;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -3585,7 +3562,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -3688,14 +3665,14 @@ static int yy_get_next_buffer (void)
 
     static yy_state_type yy_get_previous_state (void)
 {
-       yy_state_type yy_current_state;
-       char *yy_cp;
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
     
        yy_current_state = (yy_start);
 
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
                {
-               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                if ( yy_accept[yy_current_state] )
                        {
                        (yy_last_accepting_state) = yy_current_state;
@@ -3720,10 +3697,10 @@ static int yy_get_next_buffer (void)
  */
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
 {
-       int yy_is_jam;
-       char *yy_cp = (yy_c_buf_p);
+       register int yy_is_jam;
+       register char *yy_cp = (yy_c_buf_p);
 
-       YY_CHAR yy_c = 1;
+       register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                (yy_last_accepting_state) = yy_current_state;
@@ -3741,10 +3718,6 @@ static int yy_get_next_buffer (void)
                return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
-
-#endif
-
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
     static int yyinput (void)
@@ -3894,7 +3867,7 @@ static void yy_load_buffer_state  (void)
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
-       b->yy_buf_size = (yy_size_t)size;
+       b->yy_buf_size = size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
@@ -4049,7 +4022,7 @@ static void yyensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-               num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
+               num_to_alloc = 1;
                (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
@@ -4066,7 +4039,7 @@ static void yyensure_buffer_stack (void)
        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
                /* Increase the buffer to prepare for a possible push. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
+               int grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
                (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
@@ -4174,7 +4147,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len
 
 static void yy_fatal_error (yyconst char* msg )
 {
-                       (void) fprintf( stderr, "%s\n", msg );
+       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 
@@ -4185,7 +4158,7 @@ static void yy_fatal_error (yyconst char* msg )
        do \
                { \
                /* Undo effects of setting up yytext. */ \
-        yy_size_t yyless_macro_arg = (n); \
+        int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                yytext[yyleng] = (yy_hold_char); \
                (yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -4240,29 +4213,29 @@ char *yyget_text  (void)
 }
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * 
  */
-void yyset_lineno (int  _line_number )
+void yyset_lineno (int  line_number )
 {
     
-    yylineno = _line_number;
+    yylineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * 
  * @see yy_switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void yyset_in (FILE *  in_str )
 {
-        yyin = _in_str ;
+        yyin = in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void yyset_out (FILE *  out_str )
 {
-        yyout = _out_str ;
+        yyout = out_str ;
 }
 
 int yyget_debug  (void)
@@ -4270,9 +4243,9 @@ int yyget_debug  (void)
         return yy_flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void yyset_debug (int  bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        yy_flex_debug = bdebug ;
 }
 
 static int yy_init_globals (void)
@@ -4332,8 +4305,7 @@ int yylex_destroy  (void)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-               
-       int i;
+       register int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
 }
@@ -4342,7 +4314,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s )
 {
-       int n;
+       register int n;
        for ( n = 0; s[n]; ++n )
                ;
 
@@ -4352,12 +4324,11 @@ static int yy_flex_strlen (yyconst char * s )
 
 void *yyalloc (yy_size_t  size )
 {
-                       return (void *) malloc( size );
+       return (void *) malloc( size );
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
 {
-               
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
@@ -4370,7 +4341,7 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
 
 void yyfree (void * ptr )
 {
-                       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
index fa61e930525b41be0510d1eac5eaf39d8d86eaea..29290d1b82af48a27a3cce656fd916dfeff687e1 100644 (file)
@@ -828,23 +828,23 @@ static const yytype_uint16 yyrline[] =
      231,   232,   233,   233,   233,   233,   235,   244,   253,   264,
      273,   282,   291,   304,   319,   328,   337,   346,   355,   364,
      373,   382,   391,   400,   409,   418,   427,   436,   445,   452,
-     459,   468,   477,   491,   500,   509,   516,   523,   530,   538,
-     545,   552,   559,   566,   574,   582,   590,   597,   604,   613,
-     622,   629,   636,   644,   652,   662,   672,   682,   695,   706,
-     714,   727,   736,   745,   754,   764,   774,   782,   795,   804,
-     812,   821,   829,   842,   851,   858,   868,   878,   888,   898,
-     908,   918,   928,   938,   945,   952,   959,   968,   977,   986,
-     993,  1003,  1020,  1027,  1045,  1058,  1071,  1080,  1089,  1098,
-    1107,  1117,  1127,  1136,  1145,  1152,  1161,  1170,  1179,  1188,
-    1196,  1209,  1217,  1241,  1248,  1263,  1273,  1283,  1290,  1297,
-    1306,  1320,  1339,  1358,  1370,  1382,  1394,  1403,  1411,  1424,
-    1437,  1450,  1459,  1469,  1479,  1486,  1493,  1502,  1512,  1522,
-    1529,  1536,  1545,  1550,  1551,  1552,  1552,  1552,  1553,  1553,
-    1553,  1554,  1554,  1556,  1566,  1575,  1582,  1592,  1599,  1606,
-    1613,  1620,  1625,  1626,  1627,  1627,  1628,  1628,  1629,  1629,
-    1630,  1631,  1632,  1633,  1634,  1635,  1637,  1645,  1652,  1660,
-    1668,  1675,  1682,  1691,  1700,  1709,  1718,  1727,  1736,  1741,
-    1742,  1743,  1745,  1751
+     459,   468,   477,   491,   500,   509,   516,   523,   536,   544,
+     551,   558,   565,   572,   580,   588,   596,   603,   610,   619,
+     628,   635,   642,   650,   658,   668,   678,   688,   701,   712,
+     720,   733,   742,   751,   760,   770,   780,   788,   801,   810,
+     818,   827,   835,   848,   857,   864,   874,   884,   894,   904,
+     914,   924,   934,   944,   951,   958,   965,   974,   983,   992,
+     999,  1009,  1026,  1033,  1051,  1064,  1077,  1086,  1095,  1104,
+    1113,  1123,  1133,  1142,  1151,  1158,  1167,  1176,  1185,  1194,
+    1202,  1215,  1223,  1247,  1254,  1269,  1279,  1289,  1296,  1303,
+    1312,  1326,  1345,  1364,  1376,  1388,  1400,  1409,  1417,  1430,
+    1443,  1456,  1465,  1475,  1485,  1492,  1499,  1508,  1518,  1528,
+    1535,  1542,  1551,  1556,  1557,  1558,  1558,  1558,  1559,  1559,
+    1559,  1560,  1560,  1562,  1572,  1581,  1588,  1598,  1605,  1612,
+    1619,  1626,  1631,  1632,  1633,  1633,  1634,  1634,  1635,  1635,
+    1636,  1637,  1638,  1639,  1640,  1641,  1643,  1651,  1658,  1666,
+    1674,  1681,  1688,  1697,  1706,  1715,  1724,  1733,  1742,  1747,
+    1748,  1749,  1751,  1757
 };
 #endif
 
@@ -2504,116 +2504,122 @@ yyreduce:
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = (yyvsp[0].str);
+               /* change there right away for includes relative to this */
+               if((yyvsp[0].str)[0]) {
+                       if(chdir((yyvsp[0].str)))
+                               log_err("cannot chdir to directory: %s (%s)",
+                                       (yyvsp[0].str), strerror(errno));
+               }
        }
-#line 2509 "util/configparser.c" /* yacc.c:1646  */
+#line 2515 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 531 "./util/configparser.y" /* yacc.c:1646  */
+#line 537 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2520 "util/configparser.c" /* yacc.c:1646  */
+#line 2526 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 539 "./util/configparser.y" /* yacc.c:1646  */
+#line 545 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->pidfile);
                cfg_parser->cfg->pidfile = (yyvsp[0].str);
        }
-#line 2530 "util/configparser.c" /* yacc.c:1646  */
+#line 2536 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 546 "./util/configparser.y" /* yacc.c:1646  */
+#line 552 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2540 "util/configparser.c" /* yacc.c:1646  */
+#line 2546 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 553 "./util/configparser.y" /* yacc.c:1646  */
+#line 559 "./util/configparser.y" /* yacc.c:1646  */
     {
                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);
        }
-#line 2550 "util/configparser.c" /* yacc.c:1646  */
+#line 2556 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 560 "./util/configparser.y" /* yacc.c:1646  */
+#line 566 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2560 "util/configparser.c" /* yacc.c:1646  */
+#line 2566 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 567 "./util/configparser.y" /* yacc.c:1646  */
+#line 573 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2571 "util/configparser.c" /* yacc.c:1646  */
+#line 2577 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 575 "./util/configparser.y" /* yacc.c:1646  */
+#line 581 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2582 "util/configparser.c" /* yacc.c:1646  */
+#line 2588 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 583 "./util/configparser.y" /* yacc.c:1646  */
+#line 589 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2593 "util/configparser.c" /* yacc.c:1646  */
+#line 2599 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 591 "./util/configparser.y" /* yacc.c:1646  */
+#line 597 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2603 "util/configparser.c" /* yacc.c:1646  */
+#line 2609 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 598 "./util/configparser.y" /* yacc.c:1646  */
+#line 604 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2613 "util/configparser.c" /* yacc.c:1646  */
+#line 2619 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 605 "./util/configparser.y" /* yacc.c:1646  */
+#line 611 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2621,11 +2627,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2625 "util/configparser.c" /* yacc.c:1646  */
+#line 2631 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 614 "./util/configparser.y" /* yacc.c:1646  */
+#line 620 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2633,53 +2639,53 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2637 "util/configparser.c" /* yacc.c:1646  */
+#line 2643 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 623 "./util/configparser.y" /* yacc.c:1646  */
+#line 629 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->identity);
                cfg_parser->cfg->identity = (yyvsp[0].str);
        }
-#line 2647 "util/configparser.c" /* yacc.c:1646  */
+#line 2653 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 630 "./util/configparser.y" /* yacc.c:1646  */
+#line 636 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->version);
                cfg_parser->cfg->version = (yyvsp[0].str);
        }
-#line 2657 "util/configparser.c" /* yacc.c:1646  */
+#line 2663 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 637 "./util/configparser.y" /* yacc.c:1646  */
+#line 643 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2668 "util/configparser.c" /* yacc.c:1646  */
+#line 2674 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 645 "./util/configparser.y" /* yacc.c:1646  */
+#line 651 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2679 "util/configparser.c" /* yacc.c:1646  */
+#line 2685 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 653 "./util/configparser.y" /* yacc.c:1646  */
+#line 659 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2688,11 +2694,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2692 "util/configparser.c" /* yacc.c:1646  */
+#line 2698 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 663 "./util/configparser.y" /* yacc.c:1646  */
+#line 669 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2701,11 +2707,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2705 "util/configparser.c" /* yacc.c:1646  */
+#line 2711 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 673 "./util/configparser.y" /* yacc.c:1646  */
+#line 679 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2714,11 +2720,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2718 "util/configparser.c" /* yacc.c:1646  */
+#line 2724 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 683 "./util/configparser.y" /* yacc.c:1646  */
+#line 689 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2730,11 +2736,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2734 "util/configparser.c" /* yacc.c:1646  */
+#line 2740 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 696 "./util/configparser.y" /* yacc.c:1646  */
+#line 702 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2744,22 +2750,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2748 "util/configparser.c" /* yacc.c:1646  */
+#line 2754 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 707 "./util/configparser.y" /* yacc.c:1646  */
+#line 713 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2759 "util/configparser.c" /* yacc.c:1646  */
+#line 2765 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 715 "./util/configparser.y" /* yacc.c:1646  */
+#line 721 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2771,11 +2777,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2775 "util/configparser.c" /* yacc.c:1646  */
+#line 2781 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 728 "./util/configparser.y" /* yacc.c:1646  */
+#line 734 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2783,11 +2789,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2787 "util/configparser.c" /* yacc.c:1646  */
+#line 2793 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 737 "./util/configparser.y" /* yacc.c:1646  */
+#line 743 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2795,11 +2801,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2799 "util/configparser.c" /* yacc.c:1646  */
+#line 2805 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 746 "./util/configparser.y" /* yacc.c:1646  */
+#line 752 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2807,11 +2813,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2811 "util/configparser.c" /* yacc.c:1646  */
+#line 2817 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 755 "./util/configparser.y" /* yacc.c:1646  */
+#line 761 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2820,11 +2826,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2824 "util/configparser.c" /* yacc.c:1646  */
+#line 2830 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 765 "./util/configparser.y" /* yacc.c:1646  */
+#line 771 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2833,22 +2839,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2837 "util/configparser.c" /* yacc.c:1646  */
+#line 2843 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 775 "./util/configparser.y" /* yacc.c:1646  */
+#line 781 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2848 "util/configparser.c" /* yacc.c:1646  */
+#line 2854 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 783 "./util/configparser.y" /* yacc.c:1646  */
+#line 789 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2860,11 +2866,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2864 "util/configparser.c" /* yacc.c:1646  */
+#line 2870 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 796 "./util/configparser.y" /* yacc.c:1646  */
+#line 802 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2872,22 +2878,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2876 "util/configparser.c" /* yacc.c:1646  */
+#line 2882 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 805 "./util/configparser.y" /* yacc.c:1646  */
+#line 811 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2887 "util/configparser.c" /* yacc.c:1646  */
+#line 2893 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 813 "./util/configparser.y" /* yacc.c:1646  */
+#line 819 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2895,22 +2901,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2899 "util/configparser.c" /* yacc.c:1646  */
+#line 2905 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 221:
-#line 822 "./util/configparser.y" /* yacc.c:1646  */
+#line 828 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2910 "util/configparser.c" /* yacc.c:1646  */
+#line 2916 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 222:
-#line 830 "./util/configparser.y" /* yacc.c:1646  */
+#line 836 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2922,11 +2928,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2926 "util/configparser.c" /* yacc.c:1646  */
+#line 2932 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 223:
-#line 843 "./util/configparser.y" /* yacc.c:1646  */
+#line 849 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2934,21 +2940,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2938 "util/configparser.c" /* yacc.c:1646  */
+#line 2944 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 852 "./util/configparser.y" /* yacc.c:1646  */
+#line 858 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 2948 "util/configparser.c" /* yacc.c:1646  */
+#line 2954 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 859 "./util/configparser.y" /* yacc.c:1646  */
+#line 865 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2957,11 +2963,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2961 "util/configparser.c" /* yacc.c:1646  */
+#line 2967 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 869 "./util/configparser.y" /* yacc.c:1646  */
+#line 875 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2970,11 +2976,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2974 "util/configparser.c" /* yacc.c:1646  */
+#line 2980 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 879 "./util/configparser.y" /* yacc.c:1646  */
+#line 885 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2983,11 +2989,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2987 "util/configparser.c" /* yacc.c:1646  */
+#line 2993 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 889 "./util/configparser.y" /* yacc.c:1646  */
+#line 895 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2996,11 +3002,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3000 "util/configparser.c" /* yacc.c:1646  */
+#line 3006 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 899 "./util/configparser.y" /* yacc.c:1646  */
+#line 905 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3009,11 +3015,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3013 "util/configparser.c" /* yacc.c:1646  */
+#line 3019 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 909 "./util/configparser.y" /* yacc.c:1646  */
+#line 915 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3022,11 +3028,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3026 "util/configparser.c" /* yacc.c:1646  */
+#line 3032 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 919 "./util/configparser.y" /* yacc.c:1646  */
+#line 925 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3035,11 +3041,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3039 "util/configparser.c" /* yacc.c:1646  */
+#line 3045 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 929 "./util/configparser.y" /* yacc.c:1646  */
+#line 935 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -3048,41 +3054,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3052 "util/configparser.c" /* yacc.c:1646  */
+#line 3058 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 939 "./util/configparser.y" /* yacc.c:1646  */
+#line 945 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3062 "util/configparser.c" /* yacc.c:1646  */
+#line 3068 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 946 "./util/configparser.y" /* yacc.c:1646  */
+#line 952 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3072 "util/configparser.c" /* yacc.c:1646  */
+#line 3078 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 953 "./util/configparser.y" /* yacc.c:1646  */
+#line 959 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3082 "util/configparser.c" /* yacc.c:1646  */
+#line 3088 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 960 "./util/configparser.y" /* yacc.c:1646  */
+#line 966 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3090,11 +3096,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3094 "util/configparser.c" /* yacc.c:1646  */
+#line 3100 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 969 "./util/configparser.y" /* yacc.c:1646  */
+#line 975 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3102,11 +3108,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3106 "util/configparser.c" /* yacc.c:1646  */
+#line 3112 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 978 "./util/configparser.y" /* yacc.c:1646  */
+#line 984 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3114,21 +3120,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3118 "util/configparser.c" /* yacc.c:1646  */
+#line 3124 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 987 "./util/configparser.y" /* yacc.c:1646  */
+#line 993 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3128 "util/configparser.c" /* yacc.c:1646  */
+#line 3134 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 994 "./util/configparser.y" /* yacc.c:1646  */
+#line 1000 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -3137,11 +3143,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3141 "util/configparser.c" /* yacc.c:1646  */
+#line 3147 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 1004 "./util/configparser.y" /* yacc.c:1646  */
+#line 1010 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
@@ -3157,21 +3163,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3161 "util/configparser.c" /* yacc.c:1646  */
+#line 3167 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 1021 "./util/configparser.y" /* yacc.c:1646  */
+#line 1027 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3171 "util/configparser.c" /* yacc.c:1646  */
+#line 3177 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 1028 "./util/configparser.y" /* yacc.c:1646  */
+#line 1034 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3188,11 +3194,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3192 "util/configparser.c" /* yacc.c:1646  */
+#line 3198 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 1046 "./util/configparser.y" /* yacc.c:1646  */
+#line 1052 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3204,11 +3210,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3208 "util/configparser.c" /* yacc.c:1646  */
+#line 3214 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 1059 "./util/configparser.y" /* yacc.c:1646  */
+#line 1065 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3220,11 +3226,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3224 "util/configparser.c" /* yacc.c:1646  */
+#line 3230 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1072 "./util/configparser.y" /* yacc.c:1646  */
+#line 1078 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3232,11 +3238,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3236 "util/configparser.c" /* yacc.c:1646  */
+#line 3242 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1081 "./util/configparser.y" /* yacc.c:1646  */
+#line 1087 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3244,11 +3250,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3248 "util/configparser.c" /* yacc.c:1646  */
+#line 3254 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1090 "./util/configparser.y" /* yacc.c:1646  */
+#line 1096 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3256,11 +3262,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3260 "util/configparser.c" /* yacc.c:1646  */
+#line 3266 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 1099 "./util/configparser.y" /* yacc.c:1646  */
+#line 1105 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3268,11 +3274,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3272 "util/configparser.c" /* yacc.c:1646  */
+#line 3278 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 1108 "./util/configparser.y" /* yacc.c:1646  */
+#line 1114 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3281,11 +3287,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3285 "util/configparser.c" /* yacc.c:1646  */
+#line 3291 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 1118 "./util/configparser.y" /* yacc.c:1646  */
+#line 1124 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3294,11 +3300,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3298 "util/configparser.c" /* yacc.c:1646  */
+#line 3304 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 1128 "./util/configparser.y" /* yacc.c:1646  */
+#line 1134 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3306,11 +3312,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3310 "util/configparser.c" /* yacc.c:1646  */
+#line 3316 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 1137 "./util/configparser.y" /* yacc.c:1646  */
+#line 1143 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3318,21 +3324,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3322 "util/configparser.c" /* yacc.c:1646  */
+#line 3328 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1146 "./util/configparser.y" /* yacc.c:1646  */
+#line 1152 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3332 "util/configparser.c" /* yacc.c:1646  */
+#line 3338 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 1153 "./util/configparser.y" /* yacc.c:1646  */
+#line 1159 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3340,11 +3346,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3344 "util/configparser.c" /* yacc.c:1646  */
+#line 3350 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1162 "./util/configparser.y" /* yacc.c:1646  */
+#line 1168 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3352,11 +3358,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3356 "util/configparser.c" /* yacc.c:1646  */
+#line 3362 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1171 "./util/configparser.y" /* yacc.c:1646  */
+#line 1177 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3364,11 +3370,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3368 "util/configparser.c" /* yacc.c:1646  */
+#line 3374 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 1180 "./util/configparser.y" /* yacc.c:1646  */
+#line 1186 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3377,22 +3383,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3381 "util/configparser.c" /* yacc.c:1646  */
+#line 3387 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 1189 "./util/configparser.y" /* yacc.c:1646  */
+#line 1195 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3392 "util/configparser.c" /* yacc.c:1646  */
+#line 3398 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 1197 "./util/configparser.y" /* yacc.c:1646  */
+#line 1203 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3404,22 +3410,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3408 "util/configparser.c" /* yacc.c:1646  */
+#line 3414 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 1210 "./util/configparser.y" /* yacc.c:1646  */
+#line 1216 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3419 "util/configparser.c" /* yacc.c:1646  */
+#line 3425 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 1218 "./util/configparser.y" /* yacc.c:1646  */
+#line 1224 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -3442,21 +3448,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 3446 "util/configparser.c" /* yacc.c:1646  */
+#line 3452 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 1242 "./util/configparser.y" /* yacc.c:1646  */
+#line 1248 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3456 "util/configparser.c" /* yacc.c:1646  */
+#line 3462 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 1249 "./util/configparser.y" /* yacc.c:1646  */
+#line 1255 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3470,11 +3476,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 3474 "util/configparser.c" /* yacc.c:1646  */
+#line 3480 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 1264 "./util/configparser.y" /* yacc.c:1646  */
+#line 1270 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3483,11 +3489,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3487 "util/configparser.c" /* yacc.c:1646  */
+#line 3493 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 1274 "./util/configparser.y" /* yacc.c:1646  */
+#line 1280 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3496,31 +3502,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3500 "util/configparser.c" /* yacc.c:1646  */
+#line 3506 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 1284 "./util/configparser.y" /* yacc.c:1646  */
+#line 1290 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3510 "util/configparser.c" /* yacc.c:1646  */
+#line 3516 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 1291 "./util/configparser.y" /* yacc.c:1646  */
+#line 1297 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dns64_prefix);
                cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
        }
-#line 3520 "util/configparser.c" /* yacc.c:1646  */
+#line 3526 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 1298 "./util/configparser.y" /* yacc.c:1646  */
+#line 1304 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3528,11 +3534,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3532 "util/configparser.c" /* yacc.c:1646  */
+#line 3538 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 1307 "./util/configparser.y" /* yacc.c:1646  */
+#line 1313 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -3545,11 +3551,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3549 "util/configparser.c" /* yacc.c:1646  */
+#line 3555 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 1321 "./util/configparser.y" /* yacc.c:1646  */
+#line 1327 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3567,11 +3573,11 @@ yyreduce:
                        }
                }
        }
-#line 3571 "util/configparser.c" /* yacc.c:1646  */
+#line 3577 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 1340 "./util/configparser.y" /* yacc.c:1646  */
+#line 1346 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3589,11 +3595,11 @@ yyreduce:
                        }
                }
        }
-#line 3593 "util/configparser.c" /* yacc.c:1646  */
+#line 3599 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 1359 "./util/configparser.y" /* yacc.c:1646  */
+#line 1365 "./util/configparser.y" /* yacc.c:1646  */
     {
                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,
@@ -3604,11 +3610,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3608 "util/configparser.c" /* yacc.c:1646  */
+#line 3614 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 1371 "./util/configparser.y" /* yacc.c:1646  */
+#line 1377 "./util/configparser.y" /* yacc.c:1646  */
     {
                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,
@@ -3619,11 +3625,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3623 "util/configparser.c" /* yacc.c:1646  */
+#line 3629 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 1383 "./util/configparser.y" /* yacc.c:1646  */
+#line 1389 "./util/configparser.y" /* yacc.c:1646  */
     {
                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,
@@ -3634,11 +3640,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 3638 "util/configparser.c" /* yacc.c:1646  */
+#line 3644 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 1395 "./util/configparser.y" /* yacc.c:1646  */
+#line 1401 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3646,22 +3652,22 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3650 "util/configparser.c" /* yacc.c:1646  */
+#line 3656 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 1404 "./util/configparser.y" /* yacc.c:1646  */
+#line 1410 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3661 "util/configparser.c" /* yacc.c:1646  */
+#line 3667 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 1412 "./util/configparser.y" /* yacc.c:1646  */
+#line 1418 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3673,11 +3679,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3677 "util/configparser.c" /* yacc.c:1646  */
+#line 3683 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 1425 "./util/configparser.y" /* yacc.c:1646  */
+#line 1431 "./util/configparser.y" /* yacc.c:1646  */
     {
                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) {
@@ -3689,11 +3695,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 3693 "util/configparser.c" /* yacc.c:1646  */
+#line 3699 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 1438 "./util/configparser.y" /* yacc.c:1646  */
+#line 1444 "./util/configparser.y" /* yacc.c:1646  */
     {
                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) {
@@ -3705,11 +3711,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 3709 "util/configparser.c" /* yacc.c:1646  */
+#line 3715 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1451 "./util/configparser.y" /* yacc.c:1646  */
+#line 1457 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3717,11 +3723,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3721 "util/configparser.c" /* yacc.c:1646  */
+#line 3727 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1460 "./util/configparser.y" /* yacc.c:1646  */
+#line 1466 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3730,11 +3736,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3734 "util/configparser.c" /* yacc.c:1646  */
+#line 3740 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1470 "./util/configparser.y" /* yacc.c:1646  */
+#line 1476 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3743,31 +3749,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 3747 "util/configparser.c" /* yacc.c:1646  */
+#line 3753 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 1480 "./util/configparser.y" /* yacc.c:1646  */
+#line 1486 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3757 "util/configparser.c" /* yacc.c:1646  */
+#line 3763 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 1487 "./util/configparser.y" /* yacc.c:1646  */
+#line 1493 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3767 "util/configparser.c" /* yacc.c:1646  */
+#line 3773 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 1494 "./util/configparser.y" /* yacc.c:1646  */
+#line 1500 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3775,11 +3781,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3779 "util/configparser.c" /* yacc.c:1646  */
+#line 3785 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 1503 "./util/configparser.y" /* yacc.c:1646  */
+#line 1509 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3788,11 +3794,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3792 "util/configparser.c" /* yacc.c:1646  */
+#line 3798 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 1513 "./util/configparser.y" /* yacc.c:1646  */
+#line 1519 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3801,31 +3807,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 3805 "util/configparser.c" /* yacc.c:1646  */
+#line 3811 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 1523 "./util/configparser.y" /* yacc.c:1646  */
+#line 1529 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3815 "util/configparser.c" /* yacc.c:1646  */
+#line 3821 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 1530 "./util/configparser.y" /* yacc.c:1646  */
+#line 1536 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3825 "util/configparser.c" /* yacc.c:1646  */
+#line 3831 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 1537 "./util/configparser.y" /* yacc.c:1646  */
+#line 1543 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3833,19 +3839,19 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3837 "util/configparser.c" /* yacc.c:1646  */
+#line 3843 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 1546 "./util/configparser.y" /* yacc.c:1646  */
+#line 1552 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 3845 "util/configparser.c" /* yacc.c:1646  */
+#line 3851 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 1557 "./util/configparser.y" /* yacc.c:1646  */
+#line 1563 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3854,11 +3860,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3858 "util/configparser.c" /* yacc.c:1646  */
+#line 3864 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 1567 "./util/configparser.y" /* yacc.c:1646  */
+#line 1573 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3866,21 +3872,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3870 "util/configparser.c" /* yacc.c:1646  */
+#line 3876 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 1576 "./util/configparser.y" /* yacc.c:1646  */
+#line 1582 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3880 "util/configparser.c" /* yacc.c:1646  */
+#line 3886 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 1583 "./util/configparser.y" /* yacc.c:1646  */
+#line 1589 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3889,122 +3895,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3893 "util/configparser.c" /* yacc.c:1646  */
+#line 3899 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 1593 "./util/configparser.y" /* yacc.c:1646  */
+#line 1599 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3903 "util/configparser.c" /* yacc.c:1646  */
+#line 3909 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 1600 "./util/configparser.y" /* yacc.c:1646  */
+#line 1606 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3913 "util/configparser.c" /* yacc.c:1646  */
+#line 3919 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 1607 "./util/configparser.y" /* yacc.c:1646  */
+#line 1613 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3923 "util/configparser.c" /* yacc.c:1646  */
+#line 3929 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 1614 "./util/configparser.y" /* yacc.c:1646  */
+#line 1620 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3933 "util/configparser.c" /* yacc.c:1646  */
+#line 3939 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 1621 "./util/configparser.y" /* yacc.c:1646  */
+#line 1627 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 3941 "util/configparser.c" /* yacc.c:1646  */
+#line 3947 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 1638 "./util/configparser.y" /* yacc.c:1646  */
+#line 1644 "./util/configparser.y" /* yacc.c:1646  */
     {
                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);
        }
-#line 3952 "util/configparser.c" /* yacc.c:1646  */
+#line 3958 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 1646 "./util/configparser.y" /* yacc.c:1646  */
+#line 1652 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3962 "util/configparser.c" /* yacc.c:1646  */
+#line 3968 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 1653 "./util/configparser.y" /* yacc.c:1646  */
+#line 1659 "./util/configparser.y" /* yacc.c:1646  */
     {
                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);
        }
-#line 3973 "util/configparser.c" /* yacc.c:1646  */
+#line 3979 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 1661 "./util/configparser.y" /* yacc.c:1646  */
+#line 1667 "./util/configparser.y" /* yacc.c:1646  */
     {
                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);
        }
-#line 3984 "util/configparser.c" /* yacc.c:1646  */
+#line 3990 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 1669 "./util/configparser.y" /* yacc.c:1646  */
+#line 1675 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 3994 "util/configparser.c" /* yacc.c:1646  */
+#line 4000 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 1676 "./util/configparser.y" /* yacc.c:1646  */
+#line 1682 "./util/configparser.y" /* yacc.c:1646  */
     {
                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 4004 "util/configparser.c" /* yacc.c:1646  */
+#line 4010 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 1683 "./util/configparser.y" /* yacc.c:1646  */
+#line 1689 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -4012,11 +4018,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4016 "util/configparser.c" /* yacc.c:1646  */
+#line 4022 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 1692 "./util/configparser.y" /* yacc.c:1646  */
+#line 1698 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -4024,11 +4030,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4028 "util/configparser.c" /* yacc.c:1646  */
+#line 4034 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 1701 "./util/configparser.y" /* yacc.c:1646  */
+#line 1707 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -4036,11 +4042,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4040 "util/configparser.c" /* yacc.c:1646  */
+#line 4046 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 1710 "./util/configparser.y" /* yacc.c:1646  */
+#line 1716 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -4048,11 +4054,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4052 "util/configparser.c" /* yacc.c:1646  */
+#line 4058 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 1719 "./util/configparser.y" /* yacc.c:1646  */
+#line 1725 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -4060,11 +4066,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4064 "util/configparser.c" /* yacc.c:1646  */
+#line 4070 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 1728 "./util/configparser.y" /* yacc.c:1646  */
+#line 1734 "./util/configparser.y" /* yacc.c:1646  */
     {
                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)
@@ -4072,29 +4078,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4076 "util/configparser.c" /* yacc.c:1646  */
+#line 4082 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 1737 "./util/configparser.y" /* yacc.c:1646  */
+#line 1743 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 4084 "util/configparser.c" /* yacc.c:1646  */
+#line 4090 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 1746 "./util/configparser.y" /* yacc.c:1646  */
+#line 1752 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->python_script);
                cfg_parser->cfg->python_script = (yyvsp[0].str);
        }
-#line 4094 "util/configparser.c" /* yacc.c:1646  */
+#line 4100 "util/configparser.c" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 1752 "./util/configparser.y" /* yacc.c:1646  */
+#line 1758 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
                if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4103,11 +4109,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4107 "util/configparser.c" /* yacc.c:1646  */
+#line 4113 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 4111 "util/configparser.c" /* yacc.c:1646  */
+#line 4117 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4335,7 +4341,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1760 "./util/configparser.y" /* yacc.c:1906  */
+#line 1766 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 0283e38ff0f26828fb4b7f36fca34058e8a9748d..455cba696059605a9d7ec7e0e1423b7816162c88 100644 (file)
@@ -525,6 +525,12 @@ server_directory: VAR_DIRECTORY STRING_ARG
                OUTYY(("P(server_directory:%s)\n", $2));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = $2;
+               /* change there right away for includes relative to this */
+               if($2[0]) {
+                       if(chdir($2))
+                               log_err("cannot chdir to directory: %s (%s)",
+                                       $2, strerror(errno));
+               }
        }
        ;
 server_logfile: VAR_LOGFILE STRING_ARG