]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fixup proto_detail so it works again
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 12 May 2024 23:24:12 +0000 (17:24 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 13 May 2024 13:42:01 +0000 (07:42 -0600)
src/lib/server/virtual_servers.c
src/lib/server/virtual_servers.h
src/listen/detail/proto_detail.c
src/listen/detail/proto_detail.h

index 96754dea61ebdf4d39c97505f0594b29a9377d4e..de919617b3348a0093de8719167d36e1e7121222 100644 (file)
@@ -30,6 +30,7 @@ RCSID("$Id$")
 #include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
 #include <freeradius-devel/server/base.h>
 #include <freeradius-devel/server/command.h>
+#include <freeradius-devel/server/module.h>
 #include <freeradius-devel/server/dl_module.h>
 #include <freeradius-devel/server/global_lib.h>
 #include <freeradius-devel/server/modpriv.h>
@@ -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
  *
  */
index 445872ed85c009efd9066bda7df5fb339f5d7ccd..c40b8ea9b525b78bcef2c25dcdea8421b934a5e1 100644 (file)
@@ -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
  *
  * @{
index 7fe5890b8888b541cba61bcb99a3054d19872f3c..0b205159b5aee9793df514c8665f77e0dda49be0 100644 (file)
 #include <freeradius-devel/radius/radius.h>
 #include <freeradius-devel/util/pair_legacy.h>
 
+#include <freeradius-devel/server/dl_module.h>
+#include <freeradius-devel/server/module.h>
+#include <freeradius-devel/server/module_rlm.h>
+
 #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;
 
        /*
index be402500d8923c2ac08f7909c223cd10e0e52495..d6e360a7de23fac314f6fa4fc5e936df68e54441 100644 (file)
@@ -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