]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Added dns_view_staleanswerenabled() function
authorDiego Fronza <diego@isc.org>
Sat, 28 Nov 2020 21:10:35 +0000 (18:10 -0300)
committerMatthijs Mekking <matthijs@isc.org>
Fri, 29 Jan 2021 09:35:26 +0000 (10:35 +0100)
Since it takes a couple lines of code to check whether stale answers
are enabled for a given view, code was extracted out to a proper
function.

(cherry picked from commit 74840ec50befe691261b46e4f919448587f993b7)

lib/dns/include/dns/view.h
lib/dns/view.c
lib/dns/win32/libdns.def.in
lib/ns/query.c

index a47e3af0e8edda0e2ee4f29378a8a4420d20f1d2..1d7eb9e6186e71902674e7cd7a894d0cb2c89683 100644 (file)
@@ -1329,6 +1329,15 @@ dns_view_setviewrevert(dns_view_t *view);
  *\li  'view' to be valid.
  */
 
+bool
+dns_view_staleanswerenabled(dns_view_t *view);
+/*%<
+ * Check if stale answers are enabled for this view.
+ *
+ * Requires:
+ *\li  'view' to be valid.
+ */
+
 ISC_LANG_ENDDECLS
 
 #endif /* DNS_VIEW_H */
index f82f927d4aa306aa05edf3bd9f10e62c81277b27..49f3eca261fb90df796dcb5231f0963885896ee2 100644 (file)
@@ -2518,3 +2518,25 @@ dns_view_setviewrevert(dns_view_t *view) {
                dns_zt_setviewrevert(zonetable);
        }
 }
+
+bool
+dns_view_staleanswerenabled(dns_view_t *view) {
+       uint32_t stale_ttl = 0;
+       bool result = false;
+
+       REQUIRE(DNS_VIEW_VALID(view));
+
+       if (dns_db_getservestalettl(view->cachedb, &stale_ttl) != ISC_R_SUCCESS)
+       {
+               return (false);
+       }
+       if (stale_ttl > 0) {
+               if (view->staleanswersok == dns_stale_answer_yes) {
+                       result = true;
+               } else if (view->staleanswersok == dns_stale_answer_conf) {
+                       result = view->staleanswersenable;
+               }
+       }
+
+       return (result);
+}
index 2aaea2ce2708f8f49626728f91d233bb1c62c81f..64016c0d01f8d8f5f4110f7dd64cd32a83ba6cac 100644 (file)
@@ -1167,6 +1167,7 @@ dns_view_setrootdelonly
 dns_view_setviewcommit
 dns_view_setviewrevert
 dns_view_simplefind
+dns_view_staleanswerenabled
 dns_view_thaw
 dns_view_untrust
 dns_view_weakattach
index 466323cfa38a2e8f2df4991e09a3f73175e092f4..9e296758cccd99a0e3ec896586dd2fcf9b2092ad 100644 (file)
@@ -5516,7 +5516,6 @@ query_lookup(query_ctx_t *qctx) {
        dns_clientinfo_t ci;
        dns_name_t *rpzqname = NULL;
        unsigned int dboptions;
-       dns_ttl_t stale_ttl = 0;
        dns_ttl_t stale_refresh = 0;
        bool dbfind_stale = false;
 
@@ -5579,18 +5578,9 @@ query_lookup(query_ctx_t *qctx) {
 
        (void)dns_db_getservestalerefresh(qctx->client->view->cachedb,
                                          &stale_refresh);
-       (void)dns_db_getservestalettl(qctx->client->view->cachedb, &stale_ttl);
-       if (stale_refresh > 0) {
-               if (qctx->client->view->staleanswersok == dns_stale_answer_yes)
-               {
-                       dboptions |= DNS_DBFIND_STALEENABLED;
-               } else if (qctx->client->view->staleanswersok ==
-                          dns_stale_answer_conf) {
-                       if (qctx->client->view->staleanswersenable &&
-                           stale_ttl > 0) {
-                               dboptions |= DNS_DBFIND_STALEENABLED;
-                       }
-               }
+       if (stale_refresh > 0 &&
+           dns_view_staleanswerenabled(qctx->client->view)) {
+               dboptions |= DNS_DBFIND_STALEENABLED;
        }
 
        result = dns_db_findext(qctx->db, rpzqname, qctx->version, qctx->type,