diff --git a/bin/tests/system/ixfr/tests.sh b/bin/tests/system/ixfr/tests.sh index 2b9e085cd5..97014200f2 100644 --- a/bin/tests/system/ixfr/tests.sh +++ b/bin/tests/system/ixfr/tests.sh @@ -65,6 +65,7 @@ zone "nil" { type secondary; file "myftp.db"; primaries { 10.53.0.2; }; + max-records-per-type 5; # use a small value for fallback test }; EOF @@ -144,6 +145,44 @@ $DIG $DIGOPTS @10.53.0.1 nil. TXT | grep 'fallback AXFR' >/dev/null || ret=1 if [ $ret != 0 ]; then echo_i "failed"; fi status=$((status + ret)) +n=$((n + 1)) +echo_i "testing AXFR fallback after IXFR failure (too many records) ($n)" +ret=0 + +# Provide an IXFR response that would cause a "too many records" condition + +sendcmd </dev/null || ret=1 +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + n=$((n + 1)) echo_i "testing AXFR fallback after IXFR failure (bad SOA owner) ($n)" ret=0 diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index b0cf39458b..723e15b4e6 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -1119,8 +1119,7 @@ xfrin_fail(dns_xfrin_t *xfr, isc_result_t result, const char *msg) { if (atomic_compare_exchange_strong(&xfr->shuttingdown, &(bool){ false }, true)) { - if (result != DNS_R_UPTODATE && result != DNS_R_TOOMANYRECORDS) - { + if (result != DNS_R_UPTODATE) { xfrin_log(xfr, ISC_LOG_ERROR, "%s: %s", msg, isc_result_totext(result)); if (atomic_load(&xfr->is_ixfr) &&