From 461b9a0442293b1ebf87269e36ae64e845683867 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 14 Aug 2023 14:28:53 -0700 Subject: [PATCH] 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. --- lib/dns/include/dns/view.h | 7 +++++-- lib/dns/view.c | 23 +---------------------- 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h index 7bfd7ce892..ea0addf0bd 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 bbf68a6502..d71892721a 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; }