From: Arran Cudbard-Bell Date: Sun, 12 May 2024 23:24:12 +0000 (-0600) Subject: Fixup proto_detail so it works again X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fd1a06a808b648909963c178a769b0d35d07e5b;p=thirdparty%2Ffreeradius-server.git Fixup proto_detail so it works again --- diff --git a/src/lib/server/virtual_servers.c b/src/lib/server/virtual_servers.c index 96754dea61e..de919617b33 100644 --- a/src/lib/server/virtual_servers.c +++ b/src/lib/server/virtual_servers.c @@ -30,6 +30,7 @@ RCSID("$Id$") #include #include #include +#include #include #include #include @@ -178,6 +179,18 @@ void virtual_server_process_debug(void) module_list_debug(process_modules); } +/** Resolve proto data to a module instance + * + * @param[in] data Pointer to the proto data. + * @return + * - The module instance for the proto data. + * - NULL if no data matches. + */ +module_instance_t *virtual_server_listerner_by_data(void const *data) +{ + return module_instance_by_data(proto_modules, data); +} + /** Generic conf_parser_t func for loading drivers * */ diff --git a/src/lib/server/virtual_servers.h b/src/lib/server/virtual_servers.h index 445872ed85c..c40b8ea9b52 100644 --- a/src/lib/server/virtual_servers.h +++ b/src/lib/server/virtual_servers.h @@ -45,6 +45,12 @@ void virtual_server_listen_debug(void); void virtual_server_process_debug(void); /** @} */ +/** @name Resolution functions + * @{ + */ +module_instance_t *virtual_server_listerner_by_data(void const *data); +/** @} */ + /** @name Callbacks for dealing with transports * * @{ diff --git a/src/listen/detail/proto_detail.c b/src/listen/detail/proto_detail.c index 7fe5890b888..0b205159b5a 100644 --- a/src/listen/detail/proto_detail.c +++ b/src/listen/detail/proto_detail.c @@ -28,9 +28,11 @@ #include #include +#include +#include +#include + #include "proto_detail.h" -#include "lib/server/dl_module.h" -#include "lib/server/module.h" extern fr_app_t proto_detail; @@ -162,19 +164,19 @@ static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM * */ if (strcmp(inst->io_submodule->module->dl->name, "proto_detail_work") != 0) { CONF_SECTION *transport_cs; - module_instance_t *parent_inst; + module_instance_t *mi; inst->work_submodule = NULL; - transport_cs = cf_section_find(inst->cs, "work", NULL); - parent_inst = cf_data_value(cf_data_find(inst->cs, module_instance_t, "proto_detail")); - fr_assert(parent_inst); + mi = virtual_server_listerner_by_data(parent); + fr_assert(mi); + transport_cs = cf_section_find(mi->conf, "work", NULL); if (!transport_cs) { - transport_cs = cf_section_dup(inst->cs, inst->cs, inst->app_io_conf, + transport_cs = cf_section_dup(mi->conf, mi->conf, inst->app_io_conf, "work", NULL, false); if (!transport_cs) { - cf_log_err(inst->cs, "Failed to create configuration for worker"); + cf_log_err(mi->conf, "Failed to create configuration for worker"); return -1; } } @@ -187,11 +189,11 @@ static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM * * to iterate over instead of a tree, so we can add this to the end * of that list. */ - inst->work_submodule = module_instance_alloc(parent_inst->ml, parent_inst, DL_MODULE_TYPE_SUBMODULE, + inst->work_submodule = module_instance_alloc(mi->ml, mi, DL_MODULE_TYPE_SUBMODULE, "work", module_instance_name_from_conf(transport_cs), 0); if (inst->work_submodule == NULL) { error: - cf_log_perr(inst->cs, "Failed to load proto_detail_work"); + cf_log_perr(mi->conf, "Failed to load proto_detail_work"); TALLOC_FREE(inst->work_submodule); return -1; } @@ -523,7 +525,6 @@ static int mod_instantiate(module_inst_ctx_t const *mctx) * The listener is inside of a virtual server. */ inst->server_cs = cf_item_to_section(cf_parent(conf)); - inst->cs = conf; inst->self = &proto_detail; /* diff --git a/src/listen/detail/proto_detail.h b/src/listen/detail/proto_detail.h index be402500d89..d6e360a7de2 100644 --- a/src/listen/detail/proto_detail.h +++ b/src/listen/detail/proto_detail.h @@ -36,7 +36,6 @@ extern "C" { typedef struct { CONF_SECTION *server_cs; //!< server CS for this listener - CONF_SECTION *cs; //!< my configuration fr_app_t *self; //!< child / parent linking issues char const *type; //!< packet type name