]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Check if catz is active in dns__catz_update_cb()
authorAram Sargsyan <aram@isc.org>
Thu, 2 Mar 2023 13:32:21 +0000 (13:32 +0000)
committerAram Sargsyan <aram@isc.org>
Thu, 2 Mar 2023 17:40:10 +0000 (17:40 +0000)
A reconfiguration can deactivate the catalog zone, while the
offloaded update process was preparing to run.

lib/dns/catz.c

index c878c792877a1f0ae8ae2937a9f5186914a9b871..73d30b62a0d3a39a60c1d67f4043b7b0cd129c16 100644 (file)
@@ -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?!? */