]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix so local zone types always_nodata and always_deny can be used
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 12 Jan 2021 12:39:07 +0000 (13:39 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 12 Jan 2021 12:39:07 +0000 (13:39 +0100)
  from the config file.

doc/Changelog
doc/example.conf.in
util/configparser.c
util/configparser.y

index 2cd7baf00b28858b52cd6a2cc0ba604e924eae47..b9d4493717ae179681143d9c52ae8a0dea01f134 100644 (file)
@@ -1,6 +1,8 @@
 12 January 2021: Wouter
        - Fix #397: [Feature request] add new type always_null to local-zone
          similar to always_nxdomain.
+       - Fix so local zone types always_nodata and always_deny can be used
+         from the config file.
 
 8 January 2021: Wouter
        - Merge PR #391 from fhriley: Add start_time to reply callbacks so
index c3c7c0f26d2b41f0b9320ac006a641463c21fc20..b51bcfca5b767c51ea9f3c2ffdf7be92f9571ff8 100644 (file)
@@ -704,8 +704,9 @@ server:
        # o inform acts like transparent, but logs client IP address
        # o inform_deny drops queries and logs client IP address
        # o inform_redirect redirects queries and logs client IP address
-       # o always_transparent, always_refuse, always_nxdomain, resolve in
-       #   that way but ignore local data for that name
+       # o always_transparent, always_refuse, always_nxdomain, always_nodata,
+       #   always_deny resolve in that way but ignore local data for
+       #   that name
        # o always_null returns 0.0.0.0 or ::0 for any name in the zone.
        # o noview breaks out of that view towards global local-zones.
        #
index cc5d9fb5e8af4677e3a76dcefc8166c1132dfd88..c8ea478ea06d3bb2a52a1cec5aa184b420a7a984 100644 (file)
@@ -1125,26 +1125,26 @@ static const yytype_uint16 yyrline[] =
     1680,  1689,  1698,  1707,  1714,  1724,  1744,  1751,  1769,  1782,
     1795,  1804,  1813,  1822,  1831,  1841,  1851,  1862,  1871,  1880,
     1889,  1898,  1907,  1916,  1929,  1942,  1951,  1958,  1967,  1976,
-    1985,  1994,  2002,  2015,  2023,  2065,  2072,  2087,  2097,  2107,
-    2114,  2121,  2128,  2137,  2145,  2159,  2180,  2201,  2213,  2225,
-    2237,  2246,  2267,  2277,  2286,  2294,  2302,  2315,  2328,  2343,
-    2358,  2367,  2376,  2382,  2391,  2400,  2410,  2420,  2433,  2446,
-    2458,  2472,  2484,  2498,  2507,  2519,  2529,  2536,  2543,  2552,
-    2561,  2571,  2581,  2591,  2598,  2605,  2614,  2623,  2633,  2643,
-    2650,  2657,  2664,  2672,  2682,  2692,  2702,  2712,  2751,  2761,
-    2769,  2777,  2792,  2801,  2806,  2807,  2808,  2808,  2808,  2809,
-    2809,  2809,  2810,  2810,  2812,  2822,  2831,  2838,  2845,  2852,
-    2859,  2866,  2873,  2878,  2879,  2880,  2880,  2880,  2881,  2881,
-    2881,  2882,  2883,  2883,  2884,  2884,  2885,  2885,  2886,  2887,
-    2888,  2889,  2890,  2891,  2893,  2902,  2912,  2919,  2926,  2935,
-    2942,  2949,  2956,  2963,  2972,  2981,  2988,  2995,  3005,  3015,
-    3025,  3035,  3045,  3055,  3060,  3061,  3062,  3064,  3070,  3075,
-    3076,  3077,  3079,  3085,  3095,  3102,  3111,  3119,  3124,  3125,
-    3127,  3127,  3127,  3128,  3128,  3129,  3130,  3131,  3132,  3133,
-    3135,  3145,  3154,  3161,  3170,  3177,  3186,  3194,  3207,  3215,
-    3228,  3233,  3234,  3235,  3235,  3236,  3236,  3236,  3237,  3239,
-    3251,  3263,  3275,  3290,  3303,  3316,  3327,  3332,  3333,  3334,
-    3334,  3336,  3351
+    1985,  1994,  2002,  2015,  2023,  2068,  2075,  2090,  2100,  2110,
+    2117,  2124,  2131,  2140,  2148,  2162,  2183,  2204,  2216,  2228,
+    2240,  2249,  2270,  2280,  2289,  2297,  2305,  2318,  2331,  2346,
+    2361,  2370,  2379,  2385,  2394,  2403,  2413,  2423,  2436,  2449,
+    2461,  2475,  2487,  2501,  2510,  2522,  2532,  2539,  2546,  2555,
+    2564,  2574,  2584,  2594,  2601,  2608,  2617,  2626,  2636,  2646,
+    2653,  2660,  2667,  2675,  2685,  2695,  2705,  2715,  2754,  2764,
+    2772,  2780,  2795,  2804,  2809,  2810,  2811,  2811,  2811,  2812,
+    2812,  2812,  2813,  2813,  2815,  2825,  2834,  2841,  2848,  2855,
+    2862,  2869,  2876,  2881,  2882,  2883,  2883,  2883,  2884,  2884,
+    2884,  2885,  2886,  2886,  2887,  2887,  2888,  2888,  2889,  2890,
+    2891,  2892,  2893,  2894,  2896,  2905,  2915,  2922,  2929,  2938,
+    2945,  2952,  2959,  2966,  2975,  2984,  2991,  2998,  3008,  3018,
+    3028,  3038,  3048,  3058,  3063,  3064,  3065,  3067,  3073,  3078,
+    3079,  3080,  3082,  3088,  3098,  3105,  3114,  3122,  3127,  3128,
+    3130,  3130,  3130,  3131,  3131,  3132,  3133,  3134,  3135,  3136,
+    3138,  3148,  3157,  3164,  3173,  3180,  3189,  3197,  3210,  3218,
+    3231,  3236,  3237,  3238,  3238,  3239,  3239,  3239,  3240,  3242,
+    3254,  3266,  3278,  3293,  3306,  3319,  3330,  3335,  3336,  3337,
+    3337,  3339,  3354
 };
 #endif
 
@@ -5019,6 +5019,8 @@ yyreduce:
                   && strcmp((yyvsp[0].str), "always_transparent")!=0
                   && strcmp((yyvsp[0].str), "always_refuse")!=0
                   && strcmp((yyvsp[0].str), "always_nxdomain")!=0
+                  && strcmp((yyvsp[0].str), "always_nodata")!=0
+                  && strcmp((yyvsp[0].str), "always_deny")!=0
                   && strcmp((yyvsp[0].str), "always_null")!=0
                   && strcmp((yyvsp[0].str), "noview")!=0
                   && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
@@ -5028,7 +5030,8 @@ yyreduce:
                                "refuse, redirect, transparent, "
                                "typetransparent, inform, inform_deny, "
                                "inform_redirect, always_transparent, "
-                               "always_refuse, always_nxdomain, always_null, "
+                               "always_refuse, always_nxdomain, "
+                               "always_nodata, always_deny, always_null, "
                                "noview, nodefault or ipset");
                        free((yyvsp[-1].str));
                        free((yyvsp[0].str));
@@ -5050,21 +5053,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 5054 "util/configparser.c"
+#line 5057 "util/configparser.c"
     break;
 
   case 445:
-#line 2066 "./util/configparser.y"
+#line 2069 "./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 5064 "util/configparser.c"
+#line 5067 "util/configparser.c"
     break;
 
   case 446:
-#line 2073 "./util/configparser.y"
+#line 2076 "./util/configparser.y"
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5078,11 +5081,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 5082 "util/configparser.c"
+#line 5085 "util/configparser.c"
     break;
 
   case 447:
-#line 2088 "./util/configparser.y"
+#line 2091 "./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)
@@ -5091,11 +5094,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5095 "util/configparser.c"
+#line 5098 "util/configparser.c"
     break;
 
   case 448:
-#line 2098 "./util/configparser.y"
+#line 2101 "./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)
@@ -5104,41 +5107,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5108 "util/configparser.c"
+#line 5111 "util/configparser.c"
     break;
 
   case 449:
-#line 2108 "./util/configparser.y"
+#line 2111 "./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 5118 "util/configparser.c"
+#line 5121 "util/configparser.c"
     break;
 
   case 450:
-#line 2115 "./util/configparser.y"
+#line 2118 "./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 5128 "util/configparser.c"
+#line 5131 "util/configparser.c"
     break;
 
   case 451:
-#line 2122 "./util/configparser.y"
+#line 2125 "./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 5138 "util/configparser.c"
+#line 5141 "util/configparser.c"
     break;
 
   case 452:
-#line 2129 "./util/configparser.y"
+#line 2132 "./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)
@@ -5146,22 +5149,22 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5150 "util/configparser.c"
+#line 5153 "util/configparser.c"
     break;
 
   case 453:
-#line 2138 "./util/configparser.y"
+#line 2141 "./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 5161 "util/configparser.c"
+#line 5164 "util/configparser.c"
     break;
 
   case 454:
-#line 2146 "./util/configparser.y"
+#line 2149 "./util/configparser.y"
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -5174,11 +5177,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5178 "util/configparser.c"
+#line 5181 "util/configparser.c"
     break;
 
   case 455:
-#line 2160 "./util/configparser.y"
+#line 2163 "./util/configparser.y"
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5198,11 +5201,11 @@ yyreduce:
                        }
                }
        }
-#line 5202 "util/configparser.c"
+#line 5205 "util/configparser.c"
     break;
 
   case 456:
-#line 2181 "./util/configparser.y"
+#line 2184 "./util/configparser.y"
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5222,11 +5225,11 @@ yyreduce:
                        }
                }
        }
-#line 5226 "util/configparser.c"
+#line 5229 "util/configparser.c"
     break;
 
   case 457:
-#line 2202 "./util/configparser.y"
+#line 2205 "./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,
@@ -5237,11 +5240,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5241 "util/configparser.c"
+#line 5244 "util/configparser.c"
     break;
 
   case 458:
-#line 2214 "./util/configparser.y"
+#line 2217 "./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,
@@ -5252,11 +5255,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5256 "util/configparser.c"
+#line 5259 "util/configparser.c"
     break;
 
   case 459:
-#line 2226 "./util/configparser.y"
+#line 2229 "./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,
@@ -5267,11 +5270,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 5271 "util/configparser.c"
+#line 5274 "util/configparser.c"
     break;
 
   case 460:
-#line 2238 "./util/configparser.y"
+#line 2241 "./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,
@@ -5279,11 +5282,11 @@ yyreduce:
                        yyerror("out of memory");
                }
        }
-#line 5283 "util/configparser.c"
+#line 5286 "util/configparser.c"
     break;
 
   case 461:
-#line 2247 "./util/configparser.y"
+#line 2250 "./util/configparser.y"
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5303,11 +5306,11 @@ yyreduce:
                        }
                }
        }
-#line 5307 "util/configparser.c"
+#line 5310 "util/configparser.c"
     break;
 
   case 462:
-#line 2268 "./util/configparser.y"
+#line 2271 "./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)
@@ -5315,11 +5318,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5319 "util/configparser.c"
+#line 5322 "util/configparser.c"
     break;
 
   case 463:
-#line 2278 "./util/configparser.y"
+#line 2281 "./util/configparser.y"
     { 
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5327,33 +5330,33 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5331 "util/configparser.c"
+#line 5334 "util/configparser.c"
     break;
 
   case 464:
-#line 2287 "./util/configparser.y"
+#line 2290 "./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 5342 "util/configparser.c"
+#line 5345 "util/configparser.c"
     break;
 
   case 465:
-#line 2295 "./util/configparser.y"
+#line 2298 "./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 5353 "util/configparser.c"
+#line 5356 "util/configparser.c"
     break;
 
   case 466:
-#line 2303 "./util/configparser.y"
+#line 2306 "./util/configparser.y"
     {
        OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -5365,11 +5368,11 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 5369 "util/configparser.c"
+#line 5372 "util/configparser.c"
     break;
 
   case 467:
-#line 2316 "./util/configparser.y"
+#line 2319 "./util/configparser.y"
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -5381,11 +5384,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 5385 "util/configparser.c"
+#line 5388 "util/configparser.c"
     break;
 
   case 468:
-#line 2329 "./util/configparser.y"
+#line 2332 "./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) {
@@ -5399,11 +5402,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 5403 "util/configparser.c"
+#line 5406 "util/configparser.c"
     break;
 
   case 469:
-#line 2344 "./util/configparser.y"
+#line 2347 "./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) {
@@ -5417,11 +5420,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 5421 "util/configparser.c"
+#line 5424 "util/configparser.c"
     break;
 
   case 470:
-#line 2359 "./util/configparser.y"
+#line 2362 "./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)
@@ -5429,11 +5432,11 @@ yyreduce:
        else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
        free((yyvsp[0].str));
        }
-#line 5433 "util/configparser.c"
+#line 5436 "util/configparser.c"
     break;
 
   case 471:
-#line 2368 "./util/configparser.y"
+#line 2371 "./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)
@@ -5441,20 +5444,20 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5445 "util/configparser.c"
+#line 5448 "util/configparser.c"
     break;
 
   case 472:
-#line 2377 "./util/configparser.y"
+#line 2380 "./util/configparser.y"
     { 
                OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
                free((yyvsp[0].str));
        }
-#line 5454 "util/configparser.c"
+#line 5457 "util/configparser.c"
     break;
 
   case 473:
-#line 2383 "./util/configparser.y"
+#line 2386 "./util/configparser.y"
     { 
                OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) <= 0)
@@ -5462,11 +5465,11 @@ yyreduce:
                else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5466 "util/configparser.c"
+#line 5469 "util/configparser.c"
     break;
 
   case 474:
-#line 2392 "./util/configparser.y"
+#line 2395 "./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)
@@ -5474,11 +5477,11 @@ yyreduce:
                else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 5478 "util/configparser.c"
+#line 5481 "util/configparser.c"
     break;
 
   case 475:
-#line 2401 "./util/configparser.y"
+#line 2404 "./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)
@@ -5487,11 +5490,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5491 "util/configparser.c"
+#line 5494 "util/configparser.c"
     break;
 
   case 476:
-#line 2411 "./util/configparser.y"
+#line 2414 "./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)
@@ -5500,11 +5503,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5504 "util/configparser.c"
+#line 5507 "util/configparser.c"
     break;
 
   case 477:
-#line 2421 "./util/configparser.y"
+#line 2424 "./util/configparser.y"
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -5516,11 +5519,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 5520 "util/configparser.c"
+#line 5523 "util/configparser.c"
     break;
 
   case 478:
-#line 2434 "./util/configparser.y"
+#line 2437 "./util/configparser.y"
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -5532,11 +5535,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 5536 "util/configparser.c"
+#line 5539 "util/configparser.c"
     break;
 
   case 479:
-#line 2447 "./util/configparser.y"
+#line 2450 "./util/configparser.y"
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -5547,11 +5550,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5551 "util/configparser.c"
+#line 5554 "util/configparser.c"
     break;
 
   case 480:
-#line 2459 "./util/configparser.y"
+#line 2462 "./util/configparser.y"
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -5564,11 +5567,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5568 "util/configparser.c"
+#line 5571 "util/configparser.c"
     break;
 
   case 481:
-#line 2473 "./util/configparser.y"
+#line 2476 "./util/configparser.y"
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -5579,11 +5582,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5583 "util/configparser.c"
+#line 5586 "util/configparser.c"
     break;
 
   case 482:
-#line 2485 "./util/configparser.y"
+#line 2488 "./util/configparser.y"
     {
        #ifdef USE_IPSECMOD
                OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -5596,11 +5599,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 5600 "util/configparser.c"
+#line 5603 "util/configparser.c"
     break;
 
   case 483:
-#line 2499 "./util/configparser.y"
+#line 2502 "./util/configparser.y"
     {
                OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(
@@ -5608,11 +5611,11 @@ yyreduce:
                        fatal_exit("out of memory adding "
                                "edns-client-string");
        }
-#line 5612 "util/configparser.c"
+#line 5615 "util/configparser.c"
     break;
 
   case 484:
-#line 2508 "./util/configparser.y"
+#line 2511 "./util/configparser.y"
     {
                OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5623,11 +5626,11 @@ yyreduce:
                free((yyvsp[0].str));
 
        }
-#line 5627 "util/configparser.c"
+#line 5630 "util/configparser.c"
     break;
 
   case 485:
-#line 2520 "./util/configparser.y"
+#line 2523 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -5636,31 +5639,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 5640 "util/configparser.c"
+#line 5643 "util/configparser.c"
     break;
 
   case 486:
-#line 2530 "./util/configparser.y"
+#line 2533 "./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 5650 "util/configparser.c"
+#line 5653 "util/configparser.c"
     break;
 
   case 487:
-#line 2537 "./util/configparser.y"
+#line 2540 "./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 5660 "util/configparser.c"
+#line 5663 "util/configparser.c"
     break;
 
   case 488:
-#line 2544 "./util/configparser.y"
+#line 2547 "./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)
@@ -5668,11 +5671,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5672 "util/configparser.c"
+#line 5675 "util/configparser.c"
     break;
 
   case 489:
-#line 2553 "./util/configparser.y"
+#line 2556 "./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)
@@ -5680,11 +5683,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5684 "util/configparser.c"
+#line 5687 "util/configparser.c"
     break;
 
   case 490:
-#line 2562 "./util/configparser.y"
+#line 2565 "./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)
@@ -5693,11 +5696,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5697 "util/configparser.c"
+#line 5700 "util/configparser.c"
     break;
 
   case 491:
-#line 2572 "./util/configparser.y"
+#line 2575 "./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)
@@ -5706,11 +5709,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5710 "util/configparser.c"
+#line 5713 "util/configparser.c"
     break;
 
   case 492:
-#line 2582 "./util/configparser.y"
+#line 2585 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -5719,31 +5722,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 5723 "util/configparser.c"
+#line 5726 "util/configparser.c"
     break;
 
   case 493:
-#line 2592 "./util/configparser.y"
+#line 2595 "./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 5733 "util/configparser.c"
+#line 5736 "util/configparser.c"
     break;
 
   case 494:
-#line 2599 "./util/configparser.y"
+#line 2602 "./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 5743 "util/configparser.c"
+#line 5746 "util/configparser.c"
     break;
 
   case 495:
-#line 2606 "./util/configparser.y"
+#line 2609 "./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)
@@ -5751,11 +5754,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5755 "util/configparser.c"
+#line 5758 "util/configparser.c"
     break;
 
   case 496:
-#line 2615 "./util/configparser.y"
+#line 2618 "./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)
@@ -5763,11 +5766,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5767 "util/configparser.c"
+#line 5770 "util/configparser.c"
     break;
 
   case 497:
-#line 2624 "./util/configparser.y"
+#line 2627 "./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)
@@ -5776,11 +5779,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5780 "util/configparser.c"
+#line 5783 "util/configparser.c"
     break;
 
   case 498:
-#line 2634 "./util/configparser.y"
+#line 2637 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->auths->name)
@@ -5789,52 +5792,52 @@ yyreduce:
                free(cfg_parser->cfg->auths->name);
                cfg_parser->cfg->auths->name = (yyvsp[0].str);
        }
-#line 5793 "util/configparser.c"
+#line 5796 "util/configparser.c"
     break;
 
   case 499:
-#line 2644 "./util/configparser.y"
+#line 2647 "./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 5803 "util/configparser.c"
+#line 5806 "util/configparser.c"
     break;
 
   case 500:
-#line 2651 "./util/configparser.y"
+#line 2654 "./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 5813 "util/configparser.c"
+#line 5816 "util/configparser.c"
     break;
 
   case 501:
-#line 2658 "./util/configparser.y"
+#line 2661 "./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 5823 "util/configparser.c"
+#line 5826 "util/configparser.c"
     break;
 
   case 502:
-#line 2665 "./util/configparser.y"
+#line 2668 "./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 5834 "util/configparser.c"
+#line 5837 "util/configparser.c"
     break;
 
   case 503:
-#line 2673 "./util/configparser.y"
+#line 2676 "./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)
@@ -5843,11 +5846,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5847 "util/configparser.c"
+#line 5850 "util/configparser.c"
     break;
 
   case 504:
-#line 2683 "./util/configparser.y"
+#line 2686 "./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)
@@ -5856,11 +5859,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5860 "util/configparser.c"
+#line 5863 "util/configparser.c"
     break;
 
   case 505:
-#line 2693 "./util/configparser.y"
+#line 2696 "./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)
@@ -5869,11 +5872,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5873 "util/configparser.c"
+#line 5876 "util/configparser.c"
     break;
 
   case 506:
-#line 2703 "./util/configparser.y"
+#line 2706 "./util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -5882,11 +5885,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 5886 "util/configparser.c"
+#line 5889 "util/configparser.c"
     break;
 
   case 507:
-#line 2713 "./util/configparser.y"
+#line 2716 "./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 &&
@@ -5924,11 +5927,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 5928 "util/configparser.c"
+#line 5931 "util/configparser.c"
     break;
 
   case 508:
-#line 2752 "./util/configparser.y"
+#line 2755 "./util/configparser.y"
     {
                OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -5937,33 +5940,33 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 5941 "util/configparser.c"
+#line 5944 "util/configparser.c"
     break;
 
   case 509:
-#line 2762 "./util/configparser.y"
+#line 2765 "./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 5952 "util/configparser.c"
+#line 5955 "util/configparser.c"
     break;
 
   case 510:
-#line 2770 "./util/configparser.y"
+#line 2773 "./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 5963 "util/configparser.c"
+#line 5966 "util/configparser.c"
     break;
 
   case 511:
-#line 2778 "./util/configparser.y"
+#line 2781 "./util/configparser.y"
     {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5977,11 +5980,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 5981 "util/configparser.c"
+#line 5984 "util/configparser.c"
     break;
 
   case 512:
-#line 2793 "./util/configparser.y"
+#line 2796 "./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)
@@ -5989,19 +5992,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 5993 "util/configparser.c"
+#line 5996 "util/configparser.c"
     break;
 
   case 513:
-#line 2802 "./util/configparser.y"
+#line 2805 "./util/configparser.y"
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 6001 "util/configparser.c"
+#line 6004 "util/configparser.c"
     break;
 
   case 524:
-#line 2813 "./util/configparser.y"
+#line 2816 "./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)
@@ -6010,11 +6013,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6014 "util/configparser.c"
+#line 6017 "util/configparser.c"
     break;
 
   case 525:
-#line 2823 "./util/configparser.y"
+#line 2826 "./util/configparser.y"
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -6022,79 +6025,79 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6026 "util/configparser.c"
+#line 6029 "util/configparser.c"
     break;
 
   case 526:
-#line 2832 "./util/configparser.y"
+#line 2835 "./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 6036 "util/configparser.c"
+#line 6039 "util/configparser.c"
     break;
 
   case 527:
-#line 2839 "./util/configparser.y"
+#line 2842 "./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 6046 "util/configparser.c"
+#line 6049 "util/configparser.c"
     break;
 
   case 528:
-#line 2846 "./util/configparser.y"
+#line 2849 "./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 6056 "util/configparser.c"
+#line 6059 "util/configparser.c"
     break;
 
   case 529:
-#line 2853 "./util/configparser.y"
+#line 2856 "./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 6066 "util/configparser.c"
+#line 6069 "util/configparser.c"
     break;
 
   case 530:
-#line 2860 "./util/configparser.y"
+#line 2863 "./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 6076 "util/configparser.c"
+#line 6079 "util/configparser.c"
     break;
 
   case 531:
-#line 2867 "./util/configparser.y"
+#line 2870 "./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 6086 "util/configparser.c"
+#line 6089 "util/configparser.c"
     break;
 
   case 532:
-#line 2874 "./util/configparser.y"
+#line 2877 "./util/configparser.y"
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 6094 "util/configparser.c"
+#line 6097 "util/configparser.c"
     break;
 
   case 554:
-#line 2894 "./util/configparser.y"
+#line 2897 "./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)
@@ -6102,11 +6105,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6106 "util/configparser.c"
+#line 6109 "util/configparser.c"
     break;
 
   case 555:
-#line 2903 "./util/configparser.y"
+#line 2906 "./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)
@@ -6115,31 +6118,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6119 "util/configparser.c"
+#line 6122 "util/configparser.c"
     break;
 
   case 556:
-#line 2913 "./util/configparser.y"
+#line 2916 "./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 6129 "util/configparser.c"
+#line 6132 "util/configparser.c"
     break;
 
   case 557:
-#line 2920 "./util/configparser.y"
+#line 2923 "./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 6139 "util/configparser.c"
+#line 6142 "util/configparser.c"
     break;
 
   case 558:
-#line 2927 "./util/configparser.y"
+#line 2930 "./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)
@@ -6147,51 +6150,51 @@ yyreduce:
                else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6151 "util/configparser.c"
+#line 6154 "util/configparser.c"
     break;
 
   case 559:
-#line 2936 "./util/configparser.y"
+#line 2939 "./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 6161 "util/configparser.c"
+#line 6164 "util/configparser.c"
     break;
 
   case 560:
-#line 2943 "./util/configparser.y"
+#line 2946 "./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 6171 "util/configparser.c"
+#line 6174 "util/configparser.c"
     break;
 
   case 561:
-#line 2950 "./util/configparser.y"
+#line 2953 "./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 6181 "util/configparser.c"
+#line 6184 "util/configparser.c"
     break;
 
   case 562:
-#line 2957 "./util/configparser.y"
+#line 2960 "./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 6191 "util/configparser.c"
+#line 6194 "util/configparser.c"
     break;
 
   case 563:
-#line 2964 "./util/configparser.y"
+#line 2967 "./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)
@@ -6199,11 +6202,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6203 "util/configparser.c"
+#line 6206 "util/configparser.c"
     break;
 
   case 564:
-#line 2973 "./util/configparser.y"
+#line 2976 "./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)
@@ -6211,31 +6214,31 @@ yyreduce:
                else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6215 "util/configparser.c"
+#line 6218 "util/configparser.c"
     break;
 
   case 565:
-#line 2982 "./util/configparser.y"
+#line 2985 "./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 6225 "util/configparser.c"
+#line 6228 "util/configparser.c"
     break;
 
   case 566:
-#line 2989 "./util/configparser.y"
+#line 2992 "./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 6235 "util/configparser.c"
+#line 6238 "util/configparser.c"
     break;
 
   case 567:
-#line 2996 "./util/configparser.y"
+#line 2999 "./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)
@@ -6244,11 +6247,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6248 "util/configparser.c"
+#line 6251 "util/configparser.c"
     break;
 
   case 568:
-#line 3006 "./util/configparser.y"
+#line 3009 "./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)
@@ -6257,11 +6260,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6261 "util/configparser.c"
+#line 6264 "util/configparser.c"
     break;
 
   case 569:
-#line 3016 "./util/configparser.y"
+#line 3019 "./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)
@@ -6270,11 +6273,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6274 "util/configparser.c"
+#line 6277 "util/configparser.c"
     break;
 
   case 570:
-#line 3026 "./util/configparser.y"
+#line 3029 "./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)
@@ -6283,11 +6286,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6287 "util/configparser.c"
+#line 6290 "util/configparser.c"
     break;
 
   case 571:
-#line 3036 "./util/configparser.y"
+#line 3039 "./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)
@@ -6296,11 +6299,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6300 "util/configparser.c"
+#line 6303 "util/configparser.c"
     break;
 
   case 572:
-#line 3046 "./util/configparser.y"
+#line 3049 "./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)
@@ -6309,47 +6312,47 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6313 "util/configparser.c"
+#line 6316 "util/configparser.c"
     break;
 
   case 573:
-#line 3056 "./util/configparser.y"
+#line 3059 "./util/configparser.y"
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 6321 "util/configparser.c"
+#line 6324 "util/configparser.c"
     break;
 
   case 577:
-#line 3065 "./util/configparser.y"
+#line 3068 "./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 6331 "util/configparser.c"
+#line 6334 "util/configparser.c"
     break;
 
   case 578:
-#line 3071 "./util/configparser.y"
+#line 3074 "./util/configparser.y"
     { 
                OUTYY(("\nP(dynlib:)\n")); 
        }
-#line 6339 "util/configparser.c"
+#line 6342 "util/configparser.c"
     break;
 
   case 582:
-#line 3080 "./util/configparser.y"
+#line 3083 "./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 6349 "util/configparser.c"
+#line 6352 "util/configparser.c"
     break;
 
   case 583:
-#line 3086 "./util/configparser.y"
+#line 3089 "./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)
@@ -6358,21 +6361,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6362 "util/configparser.c"
+#line 6365 "util/configparser.c"
     break;
 
   case 584:
-#line 3096 "./util/configparser.y"
+#line 3099 "./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 6372 "util/configparser.c"
+#line 6375 "util/configparser.c"
     break;
 
   case 585:
-#line 3103 "./util/configparser.y"
+#line 3106 "./util/configparser.y"
     {
                OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -6380,30 +6383,30 @@ yyreduce:
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 6384 "util/configparser.c"
+#line 6387 "util/configparser.c"
     break;
 
   case 586:
-#line 3112 "./util/configparser.y"
+#line 3115 "./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 6395 "util/configparser.c"
+#line 6398 "util/configparser.c"
     break;
 
   case 587:
-#line 3120 "./util/configparser.y"
+#line 3123 "./util/configparser.y"
     {
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 6403 "util/configparser.c"
+#line 6406 "util/configparser.c"
     break;
 
   case 600:
-#line 3136 "./util/configparser.y"
+#line 3139 "./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)
@@ -6411,11 +6414,11 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 6415 "util/configparser.c"
+#line 6418 "util/configparser.c"
     break;
 
   case 601:
-#line 3146 "./util/configparser.y"
+#line 3149 "./util/configparser.y"
     {
                OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -6423,21 +6426,21 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 6427 "util/configparser.c"
+#line 6430 "util/configparser.c"
     break;
 
   case 602:
-#line 3155 "./util/configparser.y"
+#line 3158 "./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 6437 "util/configparser.c"
+#line 6440 "util/configparser.c"
     break;
 
   case 603:
-#line 3162 "./util/configparser.y"
+#line 3165 "./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)))
@@ -6445,21 +6448,21 @@ yyreduce:
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
-#line 6449 "util/configparser.c"
+#line 6452 "util/configparser.c"
     break;
 
   case 604:
-#line 3171 "./util/configparser.y"
+#line 3174 "./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 6459 "util/configparser.c"
+#line 6462 "util/configparser.c"
     break;
 
   case 605:
-#line 3178 "./util/configparser.y"
+#line 3181 "./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)))
@@ -6467,22 +6470,22 @@ yyreduce:
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }
-#line 6471 "util/configparser.c"
+#line 6474 "util/configparser.c"
     break;
 
   case 606:
-#line 3187 "./util/configparser.y"
+#line 3190 "./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 6482 "util/configparser.c"
+#line 6485 "util/configparser.c"
     break;
 
   case 607:
-#line 3195 "./util/configparser.y"
+#line 3198 "./util/configparser.y"
     {
        OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -6494,22 +6497,22 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 6498 "util/configparser.c"
+#line 6501 "util/configparser.c"
     break;
 
   case 608:
-#line 3208 "./util/configparser.y"
+#line 3211 "./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 6509 "util/configparser.c"
+#line 6512 "util/configparser.c"
     break;
 
   case 609:
-#line 3216 "./util/configparser.y"
+#line 3219 "./util/configparser.y"
     {
        OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -6521,19 +6524,19 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 6525 "util/configparser.c"
+#line 6528 "util/configparser.c"
     break;
 
   case 610:
-#line 3229 "./util/configparser.y"
+#line 3232 "./util/configparser.y"
     {
                OUTYY(("\nP(cachedb:)\n"));
        }
-#line 6533 "util/configparser.c"
+#line 6536 "util/configparser.c"
     break;
 
   case 619:
-#line 3240 "./util/configparser.y"
+#line 3243 "./util/configparser.y"
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -6544,11 +6547,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6548 "util/configparser.c"
+#line 6551 "util/configparser.c"
     break;
 
   case 620:
-#line 3252 "./util/configparser.y"
+#line 3255 "./util/configparser.y"
     {
        #ifdef USE_CACHEDB
                OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -6559,11 +6562,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6563 "util/configparser.c"
+#line 6566 "util/configparser.c"
     break;
 
   case 621:
-#line 3264 "./util/configparser.y"
+#line 3267 "./util/configparser.y"
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -6574,11 +6577,11 @@ yyreduce:
                free((yyvsp[0].str));
        #endif
        }
-#line 6578 "util/configparser.c"
+#line 6581 "util/configparser.c"
     break;
 
   case 622:
-#line 3276 "./util/configparser.y"
+#line 3279 "./util/configparser.y"
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                int port;
@@ -6592,11 +6595,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6596 "util/configparser.c"
+#line 6599 "util/configparser.c"
     break;
 
   case 623:
-#line 3291 "./util/configparser.y"
+#line 3294 "./util/configparser.y"
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -6608,11 +6611,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6612 "util/configparser.c"
+#line 6615 "util/configparser.c"
     break;
 
   case 624:
-#line 3304 "./util/configparser.y"
+#line 3307 "./util/configparser.y"
     {
        #if defined(USE_CACHEDB) && defined(USE_REDIS)
                OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
@@ -6624,11 +6627,11 @@ yyreduce:
        #endif
                free((yyvsp[0].str));
        }
-#line 6628 "util/configparser.c"
+#line 6631 "util/configparser.c"
     break;
 
   case 625:
-#line 3317 "./util/configparser.y"
+#line 3320 "./util/configparser.y"
     {
                OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if (atoi((yyvsp[0].str)) < 0)
@@ -6638,19 +6641,19 @@ yyreduce:
                                fatal_exit("out of memory adding tcp connection limit");
                }
        }
-#line 6642 "util/configparser.c"
+#line 6645 "util/configparser.c"
     break;
 
   case 626:
-#line 3328 "./util/configparser.y"
+#line 3331 "./util/configparser.y"
     {
                        OUTYY(("\nP(ipset:)\n"));
                }
-#line 6650 "util/configparser.c"
+#line 6653 "util/configparser.c"
     break;
 
   case 631:
-#line 3337 "./util/configparser.y"
+#line 3340 "./util/configparser.y"
     {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
@@ -6664,11 +6667,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 6668 "util/configparser.c"
+#line 6671 "util/configparser.c"
     break;
 
   case 632:
-#line 3352 "./util/configparser.y"
+#line 3355 "./util/configparser.y"
     {
                #ifdef USE_IPSET
                        OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
@@ -6682,11 +6685,11 @@ yyreduce:
                        free((yyvsp[0].str));
                #endif
                }
-#line 6686 "util/configparser.c"
+#line 6689 "util/configparser.c"
     break;
 
 
-#line 6690 "util/configparser.c"
+#line 6693 "util/configparser.c"
 
       default: break;
     }
@@ -6918,7 +6921,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 3366 "./util/configparser.y"
+#line 3369 "./util/configparser.y"
 
 
 /* parse helper routines could be here */
index cc965a4770f3eec31e746522b7370c5ce50ff270..32419593ae9068ffe4bc21f3be4880501c5507b2 100644 (file)
@@ -2030,6 +2030,8 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
                   && strcmp($3, "always_transparent")!=0
                   && strcmp($3, "always_refuse")!=0
                   && strcmp($3, "always_nxdomain")!=0
+                  && strcmp($3, "always_nodata")!=0
+                  && strcmp($3, "always_deny")!=0
                   && strcmp($3, "always_null")!=0
                   && strcmp($3, "noview")!=0
                   && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0
@@ -2039,7 +2041,8 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
                                "refuse, redirect, transparent, "
                                "typetransparent, inform, inform_deny, "
                                "inform_redirect, always_transparent, "
-                               "always_refuse, always_nxdomain, always_null, "
+                               "always_refuse, always_nxdomain, "
+                               "always_nodata, always_deny, always_null, "
                                "noview, nodefault or ipset");
                        free($2);
                        free($3);