The following scenario triggers a "named" crash:
1. Configure a catalog zone.
2. Start "named".
3. Comment out the "catalog-zone" clause.
4. Run `rndc reconfig`.
5. Uncomment the "catalog-zone" clause.
6. Run `rndc reconfig` again.
Implement the required cleanup of the in-memory catalog zone during
the first `rndc reconfig`, so that the second `rndc reconfig` could
find it in an expected state.
(cherry picked from commit
43ac2cd229813c04438e027c42c0b93b9661adda)
if (zone_is_catz) {
dns_zone_catz_enable(zone, view->catzs);
+ } else if (dns_zone_catz_is_enabled(zone)) {
+ dns_zone_catz_disable(zone);
}
/*
* \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);
/*%<
dns_zone_addnsec3chain
dns_zone_asyncload
dns_zone_attach
+dns_zone_catz_disable
dns_zone_catz_enable
dns_zone_catz_enable_db
+dns_zone_catz_is_enabled
dns_zone_cdscheck
dns_zone_checknames
dns_zone_clearforwardacl
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.
*/