From: Evan Hunt Date: Sun, 2 Mar 2025 05:38:34 +0000 (-0800) Subject: reduce code duplication around findnoqname() X-Git-Tag: v9.21.11~6^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83980d76b27923781a3191a6e59b4c1c7afbe36a;p=thirdparty%2Fbind9.git reduce code duplication around findnoqname() every call to findnoqname() was followed by a call to dns_rdataset_addnoqname(). we can move that call into findnoqname() itself, and simplify the calling functions a bit. --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index c5658007235..e9e1199f844 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -673,9 +673,9 @@ maybe_cancel_validators(fetchctx_t *fctx); static void add_bad(fetchctx_t *fctx, dns_message_t *rmessage, dns_adbaddrinfo_t *addrinfo, isc_result_t reason, badnstype_t badtype); -static isc_result_t +static void findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name, - dns_rdatatype_t type, dns_name_t **noqname); + dns_rdataset_t *rdataset); #define fctx_done_detach(fctxp, result) \ if (fctx__done(*fctxp, result, __func__, __FILE__, __LINE__)) { \ @@ -5391,18 +5391,8 @@ validated(void *arg) { val->proofs[DNS_VALIDATOR_CLOSESTENCLOSER]); RUNTIME_CHECK(result == ISC_R_SUCCESS); } - } else if (val->rdataset->trust == dns_trust_answer && - val->rdataset->type != dns_rdatatype_rrsig) - { - isc_result_t tresult; - dns_name_t *noqname = NULL; - tresult = findnoqname(fctx, message, val->name, - val->rdataset->type, &noqname); - if (tresult == ISC_R_SUCCESS && noqname != NULL) { - tresult = dns_rdataset_addnoqname(val->rdataset, - noqname); - RUNTIME_CHECK(tresult == ISC_R_SUCCESS); - } + } else if (val->rdataset->trust == dns_trust_answer) { + findnoqname(fctx, message, val->name, val->rdataset); } /* @@ -5663,12 +5653,12 @@ fctx_log(void *arg, int level, const char *fmt, ...) { "fctx %p(%s): %s", fctx, fctx->info, msgbuf); } -static isc_result_t +static void findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name, - dns_rdatatype_t type, dns_name_t **noqnamep) { + dns_rdataset_t *rdataset) { + isc_result_t result; dns_rdataset_t *sigrdataset = NULL; dns_rdata_rrsig_t rrsig; - isc_result_t result; unsigned int labels; dns_name_t *zonename = NULL; dns_fixedname_t fzonename; @@ -5678,10 +5668,13 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name, dns_fixedname_t fnearest; dns_rdatatype_t found = dns_rdatatype_none; dns_name_t *noqname = NULL; + dns_rdatatype_t type = rdataset->type; FCTXTRACE("findnoqname"); - REQUIRE(noqnamep != NULL && *noqnamep == NULL); + if (dns_rdatatype_issig(rdataset->type)) { + return; + } /* * Find the SIG for this rdataset, if we have it. @@ -5694,7 +5687,7 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name, } if (sigrdataset == NULL) { - return ISC_R_NOTFOUND; + return; } labels = dns_name_countlabels(name); @@ -5714,7 +5707,7 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name, } if (result != ISC_R_SUCCESS) { - return result; + return; } zonename = dns_fixedname_initname(&fzonename); @@ -5765,13 +5758,20 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name, if (noqname != NULL) { ISC_LIST_FOREACH (noqname->list, sig, link) { if (dns_rdataset_issigtype(sig, found)) { - *noqnamep = noqname; + sigrdataset = sig; break; } } + if (sigrdataset == NULL) { + noqname = NULL; + } } - return result; + if (result == ISC_R_SUCCESS && noqname != NULL) { + (void)dns_rdataset_addnoqname(rdataset, noqname); + } + + return; } static isc_result_t @@ -6027,20 +6027,9 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_message_t *message, sigrdataset); } } else { - if (ANSWER(rdataset) && - rdataset->type != dns_rdatatype_rrsig) - { - isc_result_t tresult; - dns_name_t *noqname = NULL; - tresult = findnoqname( - fctx, message, name, - rdataset->type, &noqname); - if (tresult == ISC_R_SUCCESS && - noqname != NULL) - { - (void)dns_rdataset_addnoqname( - rdataset, noqname); - } + if (ANSWER(rdataset)) { + findnoqname(fctx, message, name, + rdataset); } if ((fctx->options & DNS_FETCHOPT_PREFETCH) != 0) @@ -6157,18 +6146,8 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_message_t *message, options = DNS_DBADD_PREFETCH; } - if (ANSWER(rdataset) && - rdataset->type != dns_rdatatype_rrsig) - { - isc_result_t tresult; - dns_name_t *noqname = NULL; - tresult = findnoqname(fctx, message, name, - rdataset->type, &noqname); - if (tresult == ISC_R_SUCCESS && noqname != NULL) - { - (void)dns_rdataset_addnoqname(rdataset, - noqname); - } + if (ANSWER(rdataset)) { + findnoqname(fctx, message, name, rdataset); } /*