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