From: Alan T. DeKok Date: Fri, 19 Feb 2021 14:26:48 +0000 (-0500) Subject: move on_read callback to separate struct element X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f0b7e80d2946bed5d83055f010ce4d23c3275d6;p=thirdparty%2Ffreeradius-server.git move on_read callback to separate struct element in preparation for getting rid of FR_TYPE_ON_READ --- diff --git a/src/lib/server/cf_file.c b/src/lib/server/cf_file.c index 73596b1ce2e..fe08df044eb 100644 --- a/src/lib/server/cf_file.c +++ b/src/lib/server/cf_file.c @@ -1571,7 +1571,7 @@ static int add_pair(CONF_SECTION *parent, char const *attr, char const *value, return 0; } - return rule->func(parent, NULL, NULL, cf_pair_to_item(cp), rule); + return rule->on_read(parent, NULL, NULL, cf_pair_to_item(cp), rule); } static fr_table_ptr_sorted_t unlang_keywords[] = { diff --git a/src/lib/server/cf_parse.h b/src/lib/server/cf_parse.h index 0d97a55dad9..93d6c8bab14 100644 --- a/src/lib/server/cf_parse.h +++ b/src/lib/server/cf_parse.h @@ -426,6 +426,9 @@ struct CONF_PARSER { cf_parse_t func; //!< Override default parsing behaviour for the specified type with //!< a custom parsing function. + cf_parse_t on_read; //!< Function to call as the item is being read, just after + //!< it has been allocated and initialized. + void const *uctx; //!< User data accessible by the #cf_parse_t func. Useful for ///< building reusable functions. diff --git a/src/lib/server/cf_util.c b/src/lib/server/cf_util.c index 9ab8e077102..50df317b965 100644 --- a/src/lib/server/cf_util.c +++ b/src/lib/server/cf_util.c @@ -766,10 +766,10 @@ CONF_SECTION *_cf_section_alloc(TALLOC_CTX *ctx, CONF_SECTION *parent, cd = cf_data_find(CF_TO_ITEM(parent), CONF_PARSER, name1); if (cd) { rule = cf_data_value(cd); - if (rule->func && + if (rule->on_read && (FR_BASE_TYPE(rule->type) == FR_TYPE_SUBSECTION) && ((rule->type & FR_TYPE_ON_READ) != 0)) { - if (rule->func(ctx, NULL, NULL, cf_section_to_item(cs), rule) < 0) { + if (rule->on_read(ctx, NULL, NULL, cf_section_to_item(cs), rule) < 0) { talloc_free(cs); return NULL; } diff --git a/src/lib/server/main_config.c b/src/lib/server/main_config.c index 3858e8d577e..771b6f6a294 100644 --- a/src/lib/server/main_config.c +++ b/src/lib/server/main_config.c @@ -125,7 +125,7 @@ static const CONF_PARSER lib_dir_on_read_config[] = { { FR_CONF_OFFSET_IS_SET("timestamp", FR_TYPE_BOOL, main_config_t, log_timestamp) }, { FR_CONF_OFFSET("libdir", FR_TYPE_STRING | FR_TYPE_ON_READ, main_config_t, lib_dir), .dflt = "${prefix}/lib", - .func = lib_dir_parse }, + .on_read = lib_dir_parse }, CONF_PARSER_TERMINATOR }; diff --git a/src/lib/server/virtual_servers.c b/src/lib/server/virtual_servers.c index 96bae318a35..5dece9deab9 100644 --- a/src/lib/server/virtual_servers.c +++ b/src/lib/server/virtual_servers.c @@ -109,7 +109,7 @@ static const CONF_PARSER listen_on_read_config[] = { { FR_CONF_OFFSET("listen", FR_TYPE_SUBSECTION | FR_TYPE_MULTI | FR_TYPE_OK_MISSING | FR_TYPE_ON_READ, fr_virtual_server_t, listener), \ .subcs_size = sizeof(fr_virtual_listen_t), .subcs_type = "fr_virtual_listen_t", - .func = listen_on_read }, + .on_read = listen_on_read }, CONF_PARSER_TERMINATOR }; @@ -122,7 +122,7 @@ const CONF_PARSER virtual_servers_on_read_config[] = { { FR_CONF_POINTER("server", FR_TYPE_SUBSECTION | FR_TYPE_MULTI | FR_TYPE_OK_MISSING | FR_TYPE_ON_READ, &virtual_servers), \ .subcs_size = sizeof(fr_virtual_server_t), .subcs_type = "fr_virtual_server_t", .subcs = (void const *) listen_on_read_config, .ident2 = CF_IDENT_ANY, - .func = server_on_read }, + .on_read = server_on_read }, CONF_PARSER_TERMINATOR };