diff --git a/bin/tests/system/forward/clean.sh b/bin/tests/system/forward/clean.sh index c1b4ecd864..bf9cc7b577 100644 --- a/bin/tests/system/forward/clean.sh +++ b/bin/tests/system/forward/clean.sh @@ -19,6 +19,7 @@ rm -f ./*/named.memstats rm -f ./*/named.run ./*/named.run.prev ./*/ans.run rm -f ./*/named_dump.db rm -f ./ans*/query.log +rm -f ./statschannel.out.* rm -f ./dig.out.* rm -f ./ns*/managed-keys.bind* rm -f ./ns*/trusted.conf diff --git a/bin/tests/system/forward/ns4/named.conf.in b/bin/tests/system/forward/ns4/named.conf.in index e8d3bbb8a5..5777c0de51 100644 --- a/bin/tests/system/forward/ns4/named.conf.in +++ b/bin/tests/system/forward/ns4/named.conf.in @@ -29,6 +29,8 @@ options { trust-anchors { }; +statistics-channels { inet 10.53.0.4 port @EXTRAPORT1@ allow { localhost; }; }; + zone "." { type hint; file "root.db"; diff --git a/bin/tests/system/forward/tests.sh b/bin/tests/system/forward/tests.sh index 2705db9a70..7a31febb25 100644 --- a/bin/tests/system/forward/tests.sh +++ b/bin/tests/system/forward/tests.sh @@ -164,6 +164,15 @@ grep "SERVFAIL" dig.out.$n.f2 >/dev/null || ret=1 if [ $ret != 0 ]; then echo_i "failed"; fi status=$((status + ret)) +# GL#1793 +n=$((n + 1)) +echo_i "checking that the 'serverquota' counter isn't increased because of the SERVFAIL in the previous check ($n)" +ret=0 +"${CURL}" "http://10.53.0.4:${EXTRAPORT1}/json/v1" 2>/dev/null >statschannel.out.$n +grep -F "ServerQuota" statschannel.out.$n >/dev/null && ret=1 +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + n=$((n + 1)) echo_i "checking for negative caching of forwarder response ($n)" # prime the cache, shutdown the forwarder then check that we can diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 6643bdc233..f8d5cdc430 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -3417,7 +3417,7 @@ fctx_getaddresses(fetchctx_t *fctx, bool badcache) { bool all_bad; dns_rdata_ns_t ns; bool need_alternate = false; - bool all_spilled = true; + bool all_spilled = false; unsigned int no_addresses = 0; unsigned int ns_processed = 0; @@ -3586,6 +3586,7 @@ normal_nses: } now = isc_stdtime_now(); + all_spilled = true; /* resets to false below after the first success */ INSIST(ISC_LIST_EMPTY(fctx->finds)); INSIST(ISC_LIST_EMPTY(fctx->altfinds));