]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Merge tag 'v9.21.0'
authorNicki Křížek <nicki@isc.org>
Wed, 21 Aug 2024 14:22:41 +0000 (16:22 +0200)
committerNicki Křížek <nicki@isc.org>
Wed, 21 Aug 2024 14:23:09 +0000 (16:23 +0200)
1  2 
bin/named/server.c
lib/dns/catz.c

index a57f5f5597a0f1a1807d85944402c66bdf6e951d,6c48c198d171cfc41c171757af9890659181947c..bc96a77ce38853dae5b26b79a291d8d155b5e68a
@@@ -3030,6 -3042,88 +3036,88 @@@ catz_changeview(dns_catz_entry_t *entry
        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) {
diff --cc lib/dns/catz.c
Simple merge