dns_zone_detach(&zone);
}
- isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
- NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
+ static void
+ catz_reconfigure(dns_catz_entry_t *entry, void *arg1, void *arg2) {
+ dns_view_t *view = arg1;
+ catz_reconfig_data_t *data = arg2;
+ isc_buffer_t namebuf;
+ isc_buffer_t *confbuf = NULL;
+ const cfg_obj_t *zlist = NULL;
+ char nameb[DNS_NAME_FORMATSIZE];
+ cfg_obj_t *zoneconf = NULL;
+ cfg_obj_t *zoneobj = NULL;
+ ns_cfgctx_t *cfg = NULL;
+ dns_zone_t *zone = NULL;
+ isc_result_t result;
+
+ isc_buffer_init(&namebuf, nameb, DNS_NAME_FORMATSIZE);
+ dns_name_totext(dns_catz_entry_getname(entry), DNS_NAME_OMITFINALDOT,
+ &namebuf);
+ isc_buffer_putuint8(&namebuf, 0);
+
+ result = dns_view_findzone(view, dns_catz_entry_getname(entry),
+ DNS_ZTFIND_EXACT, &zone);
+ if (result != ISC_R_SUCCESS) {
+ return;
+ }
+
+ /*
+ * A non-empty 'catalog-zones' statement implies that 'allow-new-zones'
+ * is true, so this is expected to be non-NULL.
+ */
+ cfg = (ns_cfgctx_t *)view->new_zone_config;
+ if (cfg == NULL) {
+ CHECK(ISC_R_FAILURE);
+ }
+
+ result = dns_catz_generate_zonecfg(data->catz, entry, &confbuf);
+ if (result == ISC_R_SUCCESS) {
+ cfg_parser_reset(cfg->add_parser);
+ result = cfg_parse_buffer(cfg->add_parser, confbuf, "catz", 0,
+ &cfg_type_addzoneconf, 0, &zoneconf);
+ isc_buffer_free(&confbuf);
+ }
+ /*
+ * Fail if either dns_catz_generate_zonecfg() or cfg_parse_buffer()
+ * failed.
+ */
+ if (result != ISC_R_SUCCESS) {
- isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
- NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
++ isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER,
++ ISC_LOG_ERROR,
+ "catz_reconfigure: error \"%s\" while trying to "
+ "generate config for member zone '%s'",
+ isc_result_totext(result), nameb);
+ goto cleanup;
+ }
+
+ CHECK(cfg_map_get(zoneconf, "zone", &zlist));
+ if (!cfg_obj_islist(zlist)) {
+ CHECK(ISC_R_FAILURE);
+ }
+ zoneobj = cfg_listelt_value(cfg_list_first(zlist));
+
+ result = configure_zone(data->config, zoneobj, cfg->vconfig, view,
+ &data->cbd->server->viewlist,
+ &data->cbd->server->kasplist,
+ &data->cbd->server->keystorelist, cfg->actx,
+ true, false, true, true);
+ if (result != ISC_R_SUCCESS) {
++ isc_log_write(NAMED_LOGCATEGORY_GENERAL, NAMED_LOGMODULE_SERVER,
++ ISC_LOG_ERROR,
+ "catz_reconfigure : error \"%s\" while trying to "
+ "reconfigure member zone '%s'",
+ isc_result_totext(result), nameb);
+ goto cleanup;
+ }
+
+ cleanup:
+ if (zoneconf != NULL) {
+ cfg_obj_destroy(cfg->add_parser, &zoneconf);
+ }
+
+ dns_zone_detach(&zone);
+ }
+
static isc_result_t
configure_catz_zone(dns_view_t *view, dns_view_t *pview,
const cfg_obj_t *config, const cfg_listelt_t *element) {