}
result = dns_catz_zone_add(view->catzs, &origin, &zone);
+ if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) {
+ cfg_obj_log(catz_obj, DNS_CATZ_ERROR_LEVEL,
+ "catz: dns_catz_zone_add failed: %s",
+ isc_result_totext(result));
+ goto cleanup;
+ }
+
+ dns_catz_zone_prereconfig(zone);
+
if (result == ISC_R_EXISTS) {
catz_reconfig_data_t data = {
.catz = zone,
&data);
result = ISC_R_SUCCESS;
- } else if (result != ISC_R_SUCCESS) {
- cfg_obj_log(catz_obj, DNS_CATZ_ERROR_LEVEL,
- "catz: dns_catz_zone_add failed: %s",
- isc_result_totext(result));
- goto cleanup;
}
dns_catz_zone_resetdefoptions(zone);
opts->min_update_interval = cfg_obj_asduration(obj);
}
+ dns_catz_zone_postreconfig(zone);
+
cleanup:
dns_name_free(&origin, view->mctx);
if (ipkl.count != 0) {
isc_ht_iter_destroy(&iter);
}
+void
+dns_catz_zone_prereconfig(dns_catz_zone_t *catz) {
+ LOCK(&catz->lock);
+}
+
+void
+dns_catz_zone_postreconfig(dns_catz_zone_t *catz) {
+ UNLOCK(&catz->lock);
+}
+
void
dns_catz_zone_for_each_entry2(dns_catz_zone_t *catz, dns_catz_entry_cb2 cb,
void *arg1, void *arg2) {
typedef void (*dns_catz_entry_cb2)(dns_catz_entry_t *entry, void *arg1,
void *arg2);
+void
+dns_catz_zone_prereconfig(dns_catz_zone_t *catz);
+/*%<
+ * Must be called before reconfiguring a catalog zone. Locks the catalog zone.
+ *
+ * Requires:
+ * \li 'catz' is a valid, unlocked dns_catz_zone_t.
+ */
+
+void
+dns_catz_zone_postreconfig(dns_catz_zone_t *catz);
+/*%<
+ * Must be called after reconfiguring a catalog zone. Unlocks the catalog zone.
+ *
+ * Requires:
+ * \li 'catz' is a valid, locked dns_catz_zone_t.
+ */
+
void
dns_catz_zone_for_each_entry2(dns_catz_zone_t *catz, dns_catz_entry_cb2 cb,
void *arg1, void *arg2);