]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
named-checkconf -z could exit with an incorrect staatus
authorEvan Hunt <each@isc.org>
Thu, 30 Apr 2020 20:17:37 +0000 (13:17 -0700)
committerEvan Hunt <each@isc.org>
Sat, 2 May 2020 00:17:00 +0000 (17:17 -0700)
the CHECK() macro resets result, so an error code from an earlier
view could be erased if the last view loaded had no errors.

(cherry picked from commit 7e736602062a4f96b5ff5e89cd998db861362b03)

CHANGES
bin/check/named-checkconf.c
bin/tests/system/checkconf/check-missing-zone.conf [new file with mode: 0644]
bin/tests/system/checkconf/tests.sh

diff --git a/CHANGES b/CHANGES
index b325c6a8e542411979aaca6d0fa9645bb007a498..04d07632f1cdde34050c385d72c769eda08912b3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+5404.  [bug]           'named-checkconf -z' could incorrectly indicate
+                       success if errors were found in one view but not in a
+                       subsequent one. [GL #1807]
+
 5402.  [bug]           Enable SO_REUSEADDR on all platforms, and either
                        SO_REUSEPORT_LB on FreeBSD, or SO_REUSEPORT on Linux.
                        [GL !3365]
index a503c37086e72c741cbd5e0b468fb1f2c0a4f68c..a6ce74f1cf9f7ea6a644229d3c74d899f2462c29 100644 (file)
@@ -529,7 +529,12 @@ load_zones_fromconfig(const cfg_obj_t *config, isc_mem_t *mctx,
                }
 
                classobj = cfg_tuple_get(vconfig, "class");
-               CHECK(config_getclass(classobj, dns_rdataclass_in, &viewclass));
+               tresult = config_getclass(classobj, dns_rdataclass_in,
+                                         &viewclass);
+               if (tresult != ISC_R_SUCCESS) {
+                       CHECK(tresult);
+               }
+
                if (dns_rdataclass_ismeta(viewclass)) {
                        CHECK(ISC_R_FAILURE);
                }
diff --git a/bin/tests/system/checkconf/check-missing-zone.conf b/bin/tests/system/checkconf/check-missing-zone.conf
new file mode 100644 (file)
index 0000000..f43d3e2
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+view missing {
+       zone missing.example {
+               type master;
+               file "missing.example.db";
+       };
+};
+
+view good {
+       zone shared.example {
+               type master;
+               file "shared.example.db";
+       };
+};
index d85ade139efe1db7883dce8b3081625182ecf417..b9f9c08cc56d855df5b1e71ba08bd6b37c6137bd 100644 (file)
@@ -365,6 +365,13 @@ grep "zone shared.example/IN: loaded serial" < checkconf.out$n > /dev/null || re
 if [ $ret != 0 ]; then echo_i "failed"; ret=1; fi
 status=`expr $status + $ret`
 
+n=`expr $n + 1`
+echo_i "check that named-checkconf -z returns error when a later view is okay ($n)"
+ret=0
+$CHECKCONF -z check-missing-zone.conf > checkconf.out$n 2>&1 && ret=1
+if [ $ret != 0 ]; then echo_i "failed"; ret=1; fi
+status=`expr $status + $ret`
+
 n=`expr $n + 1`
 echo_i "check that named-checkconf prints max-cache-size <percentage> correctly ($n)"
 ret=0