diff --git a/bin/named/server.c b/bin/named/server.c index e39ad83b02..b2d4718622 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -6657,6 +6657,8 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig, if (zone_is_catz) { dns_zone_catz_enable(zone, view->catzs); + } else if (dns_zone_catz_is_enabled(zone)) { + dns_zone_catz_disable(zone); } /* diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h index e05b653d6c..d82d6eb0da 100644 --- a/lib/dns/include/dns/zone.h +++ b/lib/dns/include/dns/zone.h @@ -2635,6 +2635,26 @@ dns_zone_catz_enable(dns_zone_t *zone, dns_catz_zones_t *catzs); * \li prior to calling, zone->catzs is NULL or is equal to 'catzs' */ +void +dns_zone_catz_disable(dns_zone_t *zone); +/*%< + * Disable zone as catalog zone, if it is one. + * + * Requires: + * + * \li 'zone' is a valid zone object + */ + +bool +dns_zone_catz_is_enabled(dns_zone_t *zone); +/*%< + * Return a boolean indicating whether the zone is enabled as catalog zone. + * + * Requires: + * + * \li 'zone' is a valid zone object + */ + void dns_zone_catz_enable_db(dns_zone_t *zone, dns_db_t *db); /*%< diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 20d31386f0..92d23558c5 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -1967,6 +1967,24 @@ dns_zone_catz_enable(dns_zone_t *zone, dns_catz_zones_t *catzs) { UNLOCK_ZONE(zone); } +void +dns_zone_catz_disable(dns_zone_t *zone) { + REQUIRE(DNS_ZONE_VALID(zone)); + + LOCK_ZONE(zone); + if (zone->catzs != NULL) { + dns_catz_catzs_detach(&zone->catzs); + } + UNLOCK_ZONE(zone); +} + +bool +dns_zone_catz_is_enabled(dns_zone_t *zone) { + REQUIRE(DNS_ZONE_VALID(zone)); + + return (zone->catzs != NULL); +} + /* * If a zone is a catalog zone, attach it to update notification in database. */