From f4d0b2dca956fbdd59ad0a1ab7a186758ddce365 Mon Sep 17 00:00:00 2001 From: Tom Krizek Date: Wed, 7 Dec 2022 21:39:12 +0100 Subject: [PATCH] Revert "Merge branch '3678-serve-stale-servfailing-unexpectedly-v9_18' into 'v9_18'" This reverts commit 81b6f17e7c26e8c70e21969d971e0d6e7e9a6701, reversing changes made to ea47a9c100873c522d88e7054353834f4df8cac9. It also removes release note 6038, since the fix is reverted. --- CHANGES | 5 -- bin/tests/system/serve-stale/ans2/ans.pl | 24 -------- bin/tests/system/serve-stale/tests.sh | 74 ------------------------ lib/ns/query.c | 12 +--- 4 files changed, 1 insertion(+), 114 deletions(-) diff --git a/CHANGES b/CHANGES index 37e230830e..276060d935 100644 --- a/CHANGES +++ b/CHANGES @@ -9,11 +9,6 @@ also removing the referenced zone could leave a dangling pointer. [GL #3683] -6038. [bug] In some serve stale scenarios, like when following an - expired CNAME record, named could return SERVFAIL if the - previous request wasn't successful. Consider non-stale - data when in serve-stale mode. [GL #3678] - 6036. [bug] nslookup and host were not honoring the selected port in TCP mode. [GL #3721] diff --git a/bin/tests/system/serve-stale/ans2/ans.pl b/bin/tests/system/serve-stale/ans2/ans.pl index f14ae67fe8..0af055a4fb 100644 --- a/bin/tests/system/serve-stale/ans2/ans.pl +++ b/bin/tests/system/serve-stale/ans2/ans.pl @@ -58,8 +58,6 @@ my $CAA = "othertype.example 2 IN CAA 0 issue \"ca1.example.net\""; my $negSOA = "example 2 IN SOA . . 0 0 0 0 300"; my $CNAME = "cname.example 7 IN CNAME target.example"; my $TARGET = "target.example 9 IN A $localaddr"; -my $SHORTCNAME = "shortttl.cname.example 1 IN CNAME longttl.target.example"; -my $LONGTARGET = "longttl.target.example 600 IN A $localaddr"; sub reply_handler { my ($qname, $qclass, $qtype) = @_; @@ -168,28 +166,6 @@ sub reply_handler { push @auth, $rr; } $rcode = "NOERROR"; - } elsif ($qname eq "shortttl.cname.example") { - if ($qtype eq "A") { - my $rr = new Net::DNS::RR($SHORTCNAME); - push @ans, $rr; - } else { - my $rr = new Net::DNS::RR($negSOA); - push @auth, $rr; - } - $rcode = "NOERROR"; - } elsif ($qname eq "longttl.target.example") { - if ($slow_response) { - print " Sleeping 3 seconds\n"; - sleep(3); - } - if ($qtype eq "A") { - my $rr = new Net::DNS::RR($LONGTARGET); - push @ans, $rr; - } else { - my $rr = new Net::DNS::RR($negSOA); - push @auth, $rr; - } - $rcode = "NOERROR"; } elsif ($qname eq "longttl.example") { if ($qtype eq "TXT") { my $rr = new Net::DNS::RR($LONGTXT); diff --git a/bin/tests/system/serve-stale/tests.sh b/bin/tests/system/serve-stale/tests.sh index 067c1bdaa9..d64452bb93 100755 --- a/bin/tests/system/serve-stale/tests.sh +++ b/bin/tests/system/serve-stale/tests.sh @@ -1829,80 +1829,6 @@ grep "data\.example\..*[12].*IN.*TXT.*A text record with a 2 second ttl" dig.out if [ $ret != 0 ]; then echo_i "failed"; fi status=$((status+ret)) -############################################################## -# Test for stale-answer-client-timeout off and CNAME record. # -############################################################## -echo_i "test stale-answer-client-timeout (0) and CNAME record" - -n=$((n+1)) -echo_i "prime cache shortttl.cname.example (stale-answer-client-timeout off) ($n)" -ret=0 -$DIG -p ${PORT} @10.53.0.3 shortttl.cname.example A > dig.out.test$n -grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 -grep "ANSWER: 2," dig.out.test$n > /dev/null || ret=1 -grep "shortttl\.cname\.example\..*1.*IN.*CNAME.*longttl\.target\.example\." dig.out.test$n > /dev/null || ret=1 -grep "longttl\.target\.example\..*600.*IN.*A.*10\.53\.0\.2" dig.out.test$n > /dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status+ret)) - -# Allow RRset to become stale. -sleep 1 - -n=$((n+1)) -echo_i "disable responses from authoritative server ($n)" -ret=0 -$DIG -p ${PORT} @10.53.0.2 txt disable > dig.out.test$n -grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1 -grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status+ret)) - -n=$((n+1)) -ret=0 -echo_i "check stale shortttl.cname.example comes from cache (stale-answer-client-timeout off) ($n)" -nextpart ns3/named.run > /dev/null -$DIG -p ${PORT} @10.53.0.3 shortttl.cname.example A > dig.out.test$n -wait_for_log 5 "shortttl.cname.example resolver failure, stale answer used" ns3/named.run || ret=1 -grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 -grep "EDE: 3 (Stale Answer): (resolver failure)" dig.out.test$n > /dev/null || ret=1 -grep "ANSWER: 2," dig.out.test$n > /dev/null || ret=1 -grep "shortttl\.cname\.example\..*3.*IN.*CNAME.*longttl\.target\.example\." dig.out.test$n > /dev/null || ret=1 -# We can't reliably test the TTL of the longttl.target.example A record. -grep "longttl\.target\.example\..*IN.*A.*10\.53\.0\.2" dig.out.test$n > /dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status+ret)) - -n=$((n+1)) -echo_i "enable responses from authoritative server ($n)" -ret=0 -$DIG -p ${PORT} @10.53.0.2 txt enable > dig.out.test$n -grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1 -grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1 -if [ $ret != 0 ]; then echo_i "failed"; fi -status=$((status+ret)) - -n=$((n+1)) -echo_i "check server is alive or restart ($n)" -ret=0 -$RNDCCMD 10.53.0.3 status > rndc.out.test$n 2>&1 || ret=1 -if [ $ret != 0 ]; then - echo_i "failed" - echo_i "restart ns3" - start_server --noclean --restart --port ${PORT} serve-stale ns3 -fi -status=$((status+ret)) - -n=$((n+1)) -echo_i "check server is alive or restart ($n)" -ret=0 -$RNDCCMD 10.53.0.3 status > rndc.out.test$n 2>&1 || ret=1 -if [ $ret != 0 ]; then - echo_i "failed" - echo_i "restart ns3" - start_server --noclean --restart --port ${PORT} serve-stale ns3 -fi -status=$((status+ret)) - ############################################# # Test for stale-answer-client-timeout 0. # ############################################# diff --git a/lib/ns/query.c b/lib/ns/query.c index 679bc5ac54..d1fac6f383 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -5943,13 +5943,6 @@ query_lookup(query_ctx_t *qctx) { dns_cache_updatestats(qctx->view->cache, result); } - if (dns_rdataset_isassociated(qctx->rdataset) && - dns_rdataset_count(qctx->rdataset) > 0 && !STALE(qctx->rdataset)) - { - /* Found non-stale usable rdataset. */ - goto gotanswer; - } - /* * If DNS_DBFIND_STALEOK is set this means we are dealing with a * lookup following a failed lookup and it is okay to serve a stale @@ -6116,7 +6109,6 @@ query_lookup(query_ctx_t *qctx) { qctx->rdataset->attributes |= DNS_RDATASETATTR_STALE_ADDED; } -gotanswer: result = query_gotanswer(qctx, result); cleanup: @@ -9600,9 +9592,7 @@ query_nxdomain(query_ctx_t *qctx, isc_result_t res) { { ttl = 0; } - if (!qctx->nxrewrite || - (qctx->rpz_st != NULL && qctx->rpz_st->m.rpz->addsoa)) - { + if (!qctx->nxrewrite || qctx->rpz_st->m.rpz->addsoa) { result = query_addsoa(qctx, ttl, section); if (result != ISC_R_SUCCESS) { QUERY_ERROR(qctx, result);