From: Aram Sargsyan Date: Thu, 2 Mar 2023 13:32:21 +0000 (+0000) Subject: Check if catz is active in dns__catz_update_cb() X-Git-Tag: v9.19.11~4^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=6980e3b354778e3ff628d8e72ddf357cb0d8b2a0;p=thirdparty%2Fbind9.git Check if catz is active in dns__catz_update_cb() A reconfiguration can deactivate the catalog zone, while the offloaded update process was preparing to run. --- diff --git a/lib/dns/catz.c b/lib/dns/catz.c index c878c792877..73d30b62a0d 100644 --- a/lib/dns/catz.c +++ b/lib/dns/catz.c @@ -2228,6 +2228,7 @@ dns__catz_update_cb(void *data) { char bname[DNS_NAME_FORMATSIZE]; char cname[DNS_NAME_FORMATSIZE]; bool is_vers_processed = false; + bool is_active; uint32_t vers; uint32_t catz_vers; @@ -2251,6 +2252,7 @@ dns__catz_update_cb(void *data) { dns_name_toregion(&updb->origin, &r); LOCK(&catzs->lock); result = isc_ht_find(catzs->zones, r.base, r.length, (void **)&oldcatz); + is_active = (result == ISC_R_SUCCESS && oldcatz->active); UNLOCK(&catzs->lock); if (result != ISC_R_SUCCESS) { /* This can happen if we remove the zone in the meantime. */ @@ -2260,6 +2262,15 @@ dns__catz_update_cb(void *data) { goto exit; } + if (!is_active) { + /* This can happen during a reconfiguration. */ + isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_MASTER, ISC_LOG_INFO, + "catz: zone '%s' is no longer active", bname); + result = ISC_R_CANCELED; + goto exit; + } + result = dns_db_getsoaserial(updb, oldcatz->updbversion, &vers); if (result != ISC_R_SUCCESS) { /* A zone without SOA record?!? */