]> 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)
committerDiego Fronza <diego@isc.org>
Mon, 25 Jan 2021 13:47:14 +0000 (10:47 -0300)
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.

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

index ff72c8b758f19f439ee9865d3cd2a66f561d363f..1da372a89a7047627351dba162b61b554cd2b74a 100644 (file)
@@ -1343,6 +1343,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 42c17dc6dae92e1c267364d52cfdff5b205a8f4c..3572cec04a7412eacf460af117da2fd9f285f501 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 c9b4e1fe800f60d686322bfeba84af71fe72981e..917484d1ec10e241662941417d48ffa952fbd881 100644 (file)
@@ -1147,6 +1147,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 ae0a7bef4b6d4d04203e9d5ce883c0926d69222f..a8712f3a993869d8acf591d8db3bef1a921ea23a 100644 (file)
@@ -5581,7 +5581,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;
 
@@ -5644,18 +5643,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,