From: Colin Vidal Date: Tue, 21 Oct 2025 14:29:34 +0000 (+0200) Subject: remove global named defaults parser X-Git-Tag: v9.21.15~43^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a72b8a1a60c0b3f31f00a710b06db5560794f3a6;p=thirdparty%2Fbind9.git remove global named defaults parser Remove the global named defaults parser. Instead, a parser is created during the execution time of named_config_parsedefaults(). This simplifies the API (no parser to pass around) and the life-cycle of the default configuration tree (it doesn't depends on a parser instance). --- diff --git a/bin/named/config.c b/bin/named/config.c index 9268185444d..d08e94c959f 100644 --- a/bin/named/config.c +++ b/bin/named/config.c @@ -361,15 +361,25 @@ remote-servers " DEFAULT_IANA_ROOT_ZONE_PRIMARIES " {\n\ "; isc_result_t -named_config_parsedefaults(cfg_parser_t *parser, cfg_obj_t **conf) { +named_config_parsedefaults(cfg_obj_t **conf) { isc_buffer_t b; + cfg_parser_t *parser = NULL; + isc_result_t result; + + result = cfg_parser_create(isc_g_mctx, &parser); + if (result != ISC_R_SUCCESS) { + return result; + } isc_buffer_init(&b, defaultconf, sizeof(defaultconf) - 1); isc_buffer_add(&b, sizeof(defaultconf) - 1); - return cfg_parse_buffer(parser, &b, __FILE__, 0, &cfg_type_namedconf, - CFG_PCTX_NODEPRECATED | CFG_PCTX_NOOBSOLETE | - CFG_PCTX_NOEXPERIMENTAL, - conf); + result = cfg_parse_buffer(parser, &b, __FILE__, 0, &cfg_type_namedconf, + CFG_PCTX_NODEPRECATED | CFG_PCTX_NOOBSOLETE | + CFG_PCTX_NOEXPERIMENTAL, + conf); + + cfg_parser_destroy(&parser); + return result; } /* diff --git a/bin/named/include/named/config.h b/bin/named/include/named/config.h index 744f583423a..6b275727d4b 100644 --- a/bin/named/include/named/config.h +++ b/bin/named/include/named/config.h @@ -25,7 +25,7 @@ #define DEFAULT_IANA_ROOT_ZONE_PRIMARIES "_default_iana_root_zone_primaries" isc_result_t -named_config_parsedefaults(cfg_parser_t *parser, cfg_obj_t **conf); +named_config_parsedefaults(cfg_obj_t **conf); isc_result_t named_config_parsefile(cfg_parser_t *parser, cfg_obj_t **conf); diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index fa5fd5581c5..c087fe60df7 100644 --- a/bin/named/include/named/globals.h +++ b/bin/named/include/named/globals.h @@ -61,7 +61,6 @@ EXTERN bool named_g_run_done INIT(false); * for really short timers, another for client timers, and one * for zone timers. */ -EXTERN cfg_parser_t *named_g_parser INIT(NULL); EXTERN cfg_parser_t *named_g_addparser INIT(NULL); EXTERN const char *named_g_version INIT(PACKAGE_VERSION); EXTERN const char *named_g_product INIT(PACKAGE_NAME); diff --git a/bin/named/main.c b/bin/named/main.c index 3c12ba0d1dc..6751b394326 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -513,7 +513,6 @@ printversion(bool verbose) { isc_buffer_t b; char buf[512]; #if defined(HAVE_GEOIP2) - cfg_parser_t *parser = NULL; cfg_obj_t *config = NULL; const cfg_obj_t *defaults = NULL, *obj = NULL; #endif /* if defined(HAVE_GEOIP2) */ @@ -611,15 +610,13 @@ printversion(bool verbose) { #define RTC(x) RUNTIME_CHECK((x) == ISC_R_SUCCESS) isc_mem_t *geoip_mctx = NULL; isc_mem_create("geoip", &geoip_mctx); - RTC(cfg_parser_create(geoip_mctx, &parser)); - RTC(named_config_parsedefaults(parser, &config)); + RTC(named_config_parsedefaults(&config)); RTC(cfg_map_get(config, "options", &defaults)); RTC(cfg_map_get(defaults, "geoip-directory", &obj)); if (cfg_obj_isstring(obj)) { printf(" geoip-directory: %s\n", cfg_obj_asstring(obj)); } cfg_obj_destroy(&config); - cfg_parser_destroy(&parser); isc_mem_detach(&geoip_mctx); #endif /* HAVE_GEOIP2 */ } diff --git a/bin/named/server.c b/bin/named/server.c index d8654be66d2..fd77c106859 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -9529,11 +9529,7 @@ run_server(void *arg) { isc_timer_create(isc_loop_main(), pps_timer_tick, server, &server->pps_timer); - CHECKFATAL(cfg_parser_create(isc_g_mctx, &named_g_parser), - "creating default configuration parser"); - - CHECKFATAL(named_config_parsedefaults(named_g_parser, - &named_g_defaultconfig), + CHECKFATAL(named_config_parsedefaults(&named_g_defaultconfig), "unable to parse defaults config"); CHECKFATAL(cfg_map_get(named_g_defaultconfig, "options", @@ -9595,7 +9591,6 @@ shutdown_server(void *arg) { } cfg_obj_destroy(&named_g_defaultconfig); - cfg_parser_destroy(&named_g_parser); cfg_parser_destroy(&named_g_addparser); (void)named_server_saventa(server);