*\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 */
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);
+}
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;
(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,