diff --git a/CHANGES b/CHANGES index c241ce0129..1275563dc8 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3375. [bug] 'rndc dumpdb' failed on empty caches. [RT #30808] + 3374. [bug] isc_parse_uint32 failed to return a range error on systems with 64 bit longs [RT #30232] diff --git a/bin/tests/system/rndc/clean.sh b/bin/tests/system/rndc/clean.sh index 425f9946ea..2fcfcfb04d 100644 --- a/bin/tests/system/rndc/clean.sh +++ b/bin/tests/system/rndc/clean.sh @@ -18,4 +18,7 @@ rm -f ns2/*.db ns2/*.jnl rm -f ns2/session.key -rm -f ns2/named.memstats +rm -f ns2/named.stats +rm -f ns3/named_dump.db +rm -f ns*/named.memstats +rm -f ns*/named.run diff --git a/bin/tests/system/rndc/ns3/named.conf b/bin/tests/system/rndc/ns3/named.conf new file mode 100644 index 0000000000..d50a7f95e4 --- /dev/null +++ b/bin/tests/system/rndc/ns3/named.conf @@ -0,0 +1,45 @@ +/* + * 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. + */ + +controls { /* empty */ }; + +options { + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + recursion no; +}; + +key rndc_key { + secret "1234abcd8765"; + algorithm hmac-md5; +}; + +key secondkey { + secret "abcd1234abcd8765"; + algorithm hmac-md5; +}; + +controls { + inet 10.53.0.3 port 9953 allow { any; } keys { rndc_key; secondkey; }; +}; + + +zone "." { + type hint; + file "../../common/root.hint"; +}; diff --git a/bin/tests/system/rndc/tests.sh b/bin/tests/system/rndc/tests.sh index 4b1873b465..584dbb896e 100644 --- a/bin/tests/system/rndc/tests.sh +++ b/bin/tests/system/rndc/tests.sh @@ -239,5 +239,19 @@ $RNDC -s 10.53.0.2 -p 9953 -c ns2/secondkey.conf status > /dev/null || ret=1 if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` +echo "I:test 'rndc dumpdb' on a empty cache" +ret=0 +$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf dumpdb > /dev/null || ret=1 +for i in 1 2 3 4 5 6 7 8 9 +do + tmp=0 + grep "Dump complete" ns3/named_dump.db > /dev/null || tmp=1 + [ $tmp -eq 0 ] && break + sleep 1 +done +[ $tmp -eq 1 ] && ret=1 +if [ $ret != 0 ]; then echo "I:failed"; fi +status=`expr $status + $ret` + echo "I:exit status: $status" exit $status diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index 42ba1f5fa4..e66b34dc22 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) + if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE) goto cleanup; dctx->first = ISC_FALSE;