diff --git a/CHANGES b/CHANGES index 4db4d2f5f52aaf2cb65fef6914c9bbeb3245d7e7..11f986c3d17326ef683a6a66846b93aeb03d4e26 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3385. [bug] named-checkconf didn't detect missing master lists + in also-notify clauses. [RT #30810] + 3384. [bug] Improved logging of crypto errors. [RT #30963] 3383. [security] A certain combination of records in the RBT could diff --git a/bin/tests/system/checkconf/bad-also-notify.conf b/bin/tests/system/checkconf/bad-also-notify.conf new file mode 100644 index 0000000000000000000000000000000000000000..794be9648d72f4057b368b24bc2edef273341021 --- /dev/null +++ b/bin/tests/system/checkconf/bad-also-notify.conf @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Missing master in also-notify clause. + */ + +zone dummy { + type master; + file "xxxx"; + also-notify { xxxx; }; +}; diff --git a/bin/tests/system/checkconf/bad.conf b/bin/tests/system/checkconf/bad-many.conf similarity index 100% rename from bin/tests/system/checkconf/bad.conf rename to bin/tests/system/checkconf/bad-many.conf diff --git a/bin/tests/system/checkconf/badtsig.conf b/bin/tests/system/checkconf/bad-tsig.conf similarity index 100% rename from bin/tests/system/checkconf/badtsig.conf rename to bin/tests/system/checkconf/bad-tsig.conf diff --git a/bin/tests/system/checkconf/tests.sh b/bin/tests/system/checkconf/tests.sh index 63052e3e215e3754bdcf581c79a7ec1d1d097793..e506da5595321aa2f72312269c0ac5d9a4086615 100644 --- a/bin/tests/system/checkconf/tests.sh +++ b/bin/tests/system/checkconf/tests.sh @@ -34,17 +34,14 @@ cmp good.conf.in good.conf.out || ret=1 if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` -echo "I: checking that named-checkconf handles a known bad config" -ret=0 -$CHECKCONF bad.conf > /dev/null 2>&1 && ret=1 -if [ $? != 1 ]; then echo "I:failed"; ret=1; fi -status=`expr $status + $ret` - -echo "I: checking that named-checkconf handles a known bad tsig secret" -ret=0 -$CHECKCONF badtsig.conf > /dev/null 2>&1 -if [ $? != 1 ]; then echo "I:failed"; ret=1; fi -status=`expr $status + $ret` +for bad in bad*.conf +do + ret=0 + echo "I: checking that named-checkconf detects error in $bad" + $CHECKCONF $bad > /dev/null 2>&1 + if [ $? != 1 ]; then echo "I:failed"; ret=1; fi + status=`expr $status + $ret` +done echo "I: checking named-checkconf dnssec warnings" ret=0 diff --git a/lib/bind9/check.c b/lib/bind9/check.c index 886c43015b68c9bb22c19d5a416a66a0913248d8..9a14bfe86db5f2ca0bdad54f36d734266025da69 100644 --- a/lib/bind9/check.c +++ b/lib/bind9/check.c @@ -1548,6 +1548,21 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, } + /* + * Master & slave zones must have a "also-notify" field. + */ + if (ztype == MASTERZONE || ztype == SLAVEZONE ) { + obj = NULL; + tresult = cfg_map_get(zoptions, "also-notify", &obj); + if (tresult == ISC_R_SUCCESS) { + isc_uint32_t count; + tresult = validate_masters(obj, config, &count, + logctx, mctx); + if (tresult != ISC_R_SUCCESS && result == ISC_R_SUCCESS) + result = tresult; + } + } + /* * Slave & stub zones must have a "masters" field. */ diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index e66b34dc227154c1f723743095ee4468cc8520e9..42ba1f5fa40bca9945035294dc4411e559250c2e 100644 --- a/lib/dns/masterdump.c +++ b/lib/dns/masterdump.c @@ -1492,7 +1492,7 @@ dumptostreaminc(dns_dumpctx_t *dctx) { } result = dns_dbiterator_first(dctx->dbiter); - if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE) + if (result != ISC_R_SUCCESS) goto cleanup; dctx->first = ISC_FALSE; diff --git a/util/copyrights b/util/copyrights index 9bffd608ffdd7de789d8638cebee55b9b3150543..d40b3d6b618d030877c35d01eeb4191bb01e743d 100644 --- a/util/copyrights +++ b/util/copyrights @@ -654,8 +654,9 @@ ./bin/tests/system/cacheclean/ns1/named.conf CONF-C 2001,2004,2005,2007,2011 ./bin/tests/system/cacheclean/ns2/named.conf CONF-C 2001,2004,2005,2007,2011 ./bin/tests/system/cacheclean/tests.sh SH 2001,2004,2007,2011,2012 -./bin/tests/system/checkconf/bad.conf CONF-C 2005,2007 -./bin/tests/system/checkconf/badtsig.conf CONF-C 2012 +./bin/tests/system/checkconf/bad-also-notify.conf CONF-C 2012 +./bin/tests/system/checkconf/bad-many.conf CONF-C 2005,2012 +./bin/tests/system/checkconf/bad-tsig.conf CONF-C 2012 ./bin/tests/system/checkconf/clean.sh SH 2011,2012 ./bin/tests/system/checkconf/dnssec.1 CONF-C 2011 ./bin/tests/system/checkconf/dnssec.2 CONF-C 2011