From: Evan Hunt Date: Mon, 14 Aug 2023 21:28:53 +0000 (-0700) Subject: if GLUEOK is set, and glue is found in a zone DB, don't check the cache X-Git-Tag: v9.19.18~8^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=461b9a0442293b1ebf87269e36ae64e845683867;p=thirdparty%2Fbind9.git if GLUEOK is set, and glue is found in a zone DB, don't check the cache EXPERIMENT: when DNS_DB_GLUEOK is set, dns_view_find() will now return glue if it is found it a local zone database, without checking to see if a better answer has been cached previously. --- diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h index 7bfd7ce8928..ea0addf0bd2 100644 --- a/lib/dns/include/dns/view.h +++ b/lib/dns/include/dns/view.h @@ -548,8 +548,11 @@ dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type, * Notes: * *\li See the description of dns_db_find() for information about 'options'. - * If the caller sets #DNS_DBFIND_GLUEOK, it must ensure that 'name' - * and 'type' are appropriate for glue retrieval. + + *\li If the caller sets #DNS_DBFIND_GLUEOK, it must ensure that 'name' + * and 'type' are appropriate for glue retrieval. Glue found in a + * zone database will be returned without checking the cache for a + * better answer. * *\li If 'now' is zero, then the current time will be used. * diff --git a/lib/dns/view.c b/lib/dns/view.c index bbf68a6502f..d71892721af 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -929,29 +929,8 @@ db_find: */ result = ISC_R_NOTFOUND; } else if (result == DNS_R_GLUE) { - if (view->cachedb != NULL && !is_staticstub_zone) { - /* - * We found an answer, but the cache may be better. - * Remember what we've got and go look in the cache. - */ - is_cache = true; - dns_rdataset_clone(rdataset, &zrdataset); - dns_rdataset_disassociate(rdataset); - if (sigrdataset != NULL && - dns_rdataset_isassociated(sigrdataset)) - { - dns_rdataset_clone(sigrdataset, &zsigrdataset); - dns_rdataset_disassociate(sigrdataset); - } - dns_db_attach(db, &zdb); - dns_db_attachnode(zdb, node, &znode); - dns_db_detachnode(db, &node); - dns_db_detach(&db); - dns_db_attach(view->cachedb, &db); - goto db_find; - } /* - * Otherwise, the glue is the best answer. + * Glue is the answer wanted. */ result = ISC_R_SUCCESS; }