From 83ffabbfe130d7294589bc7719ec8c4239796608 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Wed, 3 Nov 1999 20:20:38 +0000 Subject: [PATCH] Deal with negative cache responses when using dns_db_findrdataset(). --- bin/named/query.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/bin/named/query.c b/bin/named/query.c index 931240363f..ef1c2a978a 100644 --- a/bin/named/query.c +++ b/bin/named/query.c @@ -800,6 +800,15 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) { dns_rdatatype_a, 0, client->now, rdataset, sigrdataset); + if (result == DNS_R_NCACHENXDOMAIN) + goto addname; + if (result == DNS_R_NCACHENXRRSET) { + dns_rdataset_disassociate(rdataset); + /* + * Negative cache entries don't have sigrdatasets. + */ + INSIST(sigrdataset->methods == NULL); + } if (zdb != NULL && result == ISC_R_NOTFOUND) { /* * The cache doesn't have an A, but we may have @@ -838,6 +847,12 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) { dns_rdatatype_a6, 0, client->now, rdataset, sigrdataset); + if (result == DNS_R_NCACHENXDOMAIN) + goto addname; + if (result == DNS_R_NCACHENXRRSET) { + dns_rdataset_disassociate(rdataset); + INSIST(sigrdataset->methods == NULL); + } if (zdb != NULL && result == ISC_R_NOTFOUND) { /* * The cache doesn't have an A6, but we may have @@ -877,6 +892,12 @@ query_addadditional(void *arg, dns_name_t *name, dns_rdatatype_t qtype) { dns_rdatatype_aaaa, 0, client->now, rdataset, sigrdataset); + if (result == DNS_R_NCACHENXDOMAIN) + goto addname; + if (result == DNS_R_NCACHENXRRSET) { + dns_rdataset_disassociate(rdataset); + INSIST(sigrdataset->methods == NULL); + } if (zdb != NULL && result == ISC_R_NOTFOUND) { /* * The cache doesn't have an AAAA, but we may have