]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3849. [bug] Disabling forwarding could trigger a REQUIRE assertion.
authorMark Andrews <marka@isc.org>
Thu, 15 May 2014 06:54:32 +0000 (16:54 +1000)
committerMark Andrews <marka@isc.org>
Thu, 15 May 2014 06:55:55 +0000 (16:55 +1000)
                        [RT #35979]

(cherry picked from commit 01f881c1c5683054ee3366929eae6f811777ce46)

CHANGES
bin/named/server.c
bin/tests/system/forward/ns1/named.conf

diff --git a/CHANGES b/CHANGES
index 5b131b83560de99edb670c32b2555ffe061e8539..7973246bce07eb05a7bd2f4ef594dcd01df43a24 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3850.  [bug]           Disabling forwarding could trigger a REQUIRE assertion.
+                       [RT #35979]
+
 3849.  [doc]           Alphabetized dig's +options. [RT #35992]
 
 3848.  [bug]           Adjust 'statistics-channels specified but not effective'
index f830be49bfaa743ac3189467b077dd89cd27de8a..3c62b9b1aabbfcd57371a7907b587f333b6559a7 100644 (file)
@@ -3925,17 +3925,18 @@ configure_forward(const cfg_obj_t *config, dns_view_t *view, dns_name_t *origin,
        /*
         * DSCP value for forwarded requests.
         */
-       dscpobj = cfg_tuple_get(forwarders, "dscp");
-       if (!cfg_obj_isuint32(dscpobj))
-               dscp = ns_g_dscp;
-       else {
-               if (cfg_obj_asuint32(dscpobj) > 63) {
-                       cfg_obj_log(dscpobj, ns_g_lctx, ISC_LOG_ERROR,
-                                   "dscp value '%u' is out of range",
-                                   cfg_obj_asuint32(dscpobj));
-                       return (ISC_R_RANGE);
+       dscp = ns_g_dscp;
+       if (forwarders != NULL) {
+               dscpobj = cfg_tuple_get(forwarders, "dscp");
+               if (cfg_obj_isuint32(dscpobj)) {
+                       if (cfg_obj_asuint32(dscpobj) > 63) {
+                               cfg_obj_log(dscpobj, ns_g_lctx, ISC_LOG_ERROR,
+                                           "dscp value '%u' is out of range",
+                                           cfg_obj_asuint32(dscpobj));
+                               return (ISC_R_RANGE);
+                       }
+                       dscp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
                }
-               dscp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
        }
 
        faddresses = NULL;
index 8c3fcfa47f7aea477b53205c27163c6dd22b839f..b7b07066b392c8bcf47f98a3fb5ba9b417edbd1a 100644 (file)
@@ -59,3 +59,8 @@ zone "example5." {
        type master;
        file "example.db";
 };
+
+/* A forward zone without forwarders. */
+zone "example6" {
+       type forward;
+};