]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Check if catz is active in dns__catz_timer_cb()
authorAram Sargsyan <aram@isc.org>
Thu, 2 Mar 2023 13:19:53 +0000 (13:19 +0000)
committerAram Sargsyan <aram@isc.org>
Thu, 2 Mar 2023 18:57:16 +0000 (18:57 +0000)
A reconfiguration can deactivate the catalog zone, while the
update process was deferred using a timer.

(cherry picked from commit 67c77aba380acd038bde11a5067189fed2ffb7d9)

lib/dns/catz.c

index 2a69d088c6daa2dd663c7bdb0ed24cf5b4100fe1..b45dbcb239b585ad69aece1ed8f687a5fb3514f3 100644 (file)
@@ -2086,6 +2086,7 @@ dns__catz_timer_cb(isc_task_t *task, isc_event_t *event) {
        LOCK(&catz->catzs->lock);
 
        INSIST(DNS_DB_VALID(catz->db));
+       INSIST(catz->dbversion != NULL);
        INSIST(catz->updb == NULL);
        INSIST(catz->updbversion == NULL);
 
@@ -2093,12 +2094,22 @@ dns__catz_timer_cb(isc_task_t *task, isc_event_t *event) {
        catz->updaterunning = true;
        catz->updateresult = ISC_R_UNSET;
 
+       dns_name_format(&catz->name, domain, DNS_NAME_FORMATSIZE);
+
+       if (!catz->active) {
+               isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
+                             DNS_LOGMODULE_MASTER, ISC_LOG_INFO,
+                             "catz: %s: no longer active, reload is canceled",
+                             domain);
+               catz->updaterunning = false;
+               catz->updateresult = ISC_R_CANCELED;
+               goto exit;
+       }
+
        dns_db_attach(catz->db, &catz->updb);
-       INSIST(catz->dbversion != NULL);
        catz->updbversion = catz->dbversion;
        catz->dbversion = NULL;
 
-       dns_name_format(&catz->name, domain, DNS_NAME_FORMATSIZE);
        isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_MASTER,
                      ISC_LOG_INFO, "catz: %s: reload start", domain);
 
@@ -2106,6 +2117,7 @@ dns__catz_timer_cb(isc_task_t *task, isc_event_t *event) {
        isc_nm_work_offload(isc_task_getnetmgr(catz->catzs->updater),
                            dns__catz_update_cb, dns__catz_done_cb, catz);
 
+exit:
        result = isc_time_now(&catz->lastupdated);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);