From 410ee752dd2f6860bab52eec872920b7ebd2fad4 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Thu, 30 Apr 2020 13:17:37 -0700 Subject: [PATCH] named-checkconf -z could exit with an incorrect staatus 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 | 4 ++++ bin/check/named-checkconf.c | 11 ++++++--- .../system/checkconf/check-missing-zone.conf | 24 +++++++++++++++++++ bin/tests/system/checkconf/tests.sh | 7 ++++++ util/copyrights | 1 + 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 bin/tests/system/checkconf/check-missing-zone.conf diff --git a/CHANGES b/CHANGES index cb37ce13f7..ed5779da0d 100644 --- 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] + 5398. [bug] Named could fail to restart if a zone added with 'rndc addzone' contained a double quote (") in its name. [GL #1695] diff --git a/bin/check/named-checkconf.c b/bin/check/named-checkconf.c index ff1c0d260a..4c26c3ee51 100644 --- a/bin/check/named-checkconf.c +++ b/bin/check/named-checkconf.c @@ -490,10 +490,15 @@ load_zones_fromconfig(const cfg_obj_t *config, isc_mem_t *mctx) { continue; classobj = cfg_tuple_get(vconfig, "class"); - CHECK(config_getclass(classobj, dns_rdataclass_in, - &viewclass)); - if (dns_rdataclass_ismeta(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); + } dns_rdataclass_format(viewclass, buf, sizeof(buf)); vname = cfg_obj_asstring(cfg_tuple_get(vconfig, "name")); diff --git a/bin/tests/system/checkconf/check-missing-zone.conf b/bin/tests/system/checkconf/check-missing-zone.conf new file mode 100644 index 0000000000..f43d3e2575 --- /dev/null +++ b/bin/tests/system/checkconf/check-missing-zone.conf @@ -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"; + }; +}; diff --git a/bin/tests/system/checkconf/tests.sh b/bin/tests/system/checkconf/tests.sh index 3c6832574b..85fb4839e9 100644 --- a/bin/tests/system/checkconf/tests.sh +++ b/bin/tests/system/checkconf/tests.sh @@ -355,6 +355,13 @@ grep "zone shared.example/IN: loaded serial" < checkconf.out7 > /dev/null || ret 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 correctly ($n)" ret=0 diff --git a/util/copyrights b/util/copyrights index b193338729..aa8dae1289 100644 --- a/util/copyrights +++ b/util/copyrights @@ -762,6 +762,7 @@ ./bin/tests/system/checkconf/check-dlv-ksk-key.conf CONF-C 2018,2019,2020 ./bin/tests/system/checkconf/check-dup-records-fail.conf CONF-C 2014,2016,2018,2019,2020 ./bin/tests/system/checkconf/check-dup-records.db ZONE 2014,2016,2018,2019,2020 +./bin/tests/system/checkconf/check-missing-zone.conf CONF-C 2020 ./bin/tests/system/checkconf/check-mx-cname-fail.conf CONF-C 2014,2016,2018,2019,2020 ./bin/tests/system/checkconf/check-mx-cname.db ZONE 2014,2016,2018,2019,2020 ./bin/tests/system/checkconf/check-mx-fail.conf CONF-C 2014,2016,2018,2019,2020