]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Remove server/base.h from some source files
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 25 May 2024 02:03:13 +0000 (22:03 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 25 May 2024 02:04:25 +0000 (22:04 -0400)
24 files changed:
src/lib/eap/chbind.c
src/lib/eap/tls.c
src/lib/server/auth.c
src/lib/server/base.c
src/lib/server/client.h
src/lib/server/dependency.c
src/lib/server/exfile.c
src/lib/server/log.c
src/lib/server/map_proc.c
src/lib/server/map_proc.h
src/lib/server/pairmove.c
src/lib/server/pool.c
src/lib/server/radmin.h
src/lib/server/request.c
src/lib/server/snmp.c
src/lib/server/state.c
src/lib/server/stats.c
src/lib/server/stats.h
src/lib/server/trigger.c
src/lib/server/util.c
src/lib/server/virtual_servers.c
src/lib/server/virtual_servers.h
src/lib/unlang/compile.c
src/lib/util/pair_list_perf_test.c

index b9ebd81311e53e153d1447dfe3dee6a601c6d668..bba5ec549eeb555f324154e9ef09cc39bd115efa 100644 (file)
@@ -27,6 +27,7 @@ RCSID("$Id$")
 
 #include <freeradius-devel/radius/defs.h>
 #include <freeradius-devel/radius/radius.h>
+#include <freeradius-devel/server/auth.h>
 
 #include <freeradius-devel/io/pair.h>
 #include "chbind.h"
index 1d71573a9a6f8e91f2f58efa8cdfdfe0042828c1..dde2da54c069846924f6a000a695646840f157d0 100644 (file)
@@ -72,6 +72,8 @@ RCSID("$Id$")
 USES_APPLE_DEPRECATED_API      /* OpenSSL API has been deprecated by Apple */
 
 #include <freeradius-devel/unlang/function.h>
+#include <freeradius-devel/unlang/interpret.h>
+#include <freeradius-devel/server/pair.h>
 #include "tls.h"
 #include "attrs.h"
 
@@ -1266,4 +1268,3 @@ fr_tls_conf_t *eap_tls_conf_parse(CONF_SECTION *cs, char const *attr)
 
        return tls_conf;
 }
-
index 775671df943734cb9b60384b06a0fb31d469888d..53a8f7dfa8b94462a3c3cd38a5089f719feaece4 100644 (file)
@@ -27,8 +27,9 @@
 RCSID("$Id$")
 
 #include <freeradius-devel/io/listen.h>
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/auth.h>
 #include <freeradius-devel/server/module.h>
+#include <freeradius-devel/server/protocol.h>
 #include <freeradius-devel/server/rcode.h>
 #include <freeradius-devel/server/state.h>
 #include <freeradius-devel/unlang/call.h>
@@ -39,8 +40,6 @@ RCSID("$Id$")
 
 #include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
 
-#include <ctype.h>
-
 /*
  *     Run a virtual server auth and postauth
  *
index 283934df3b3dfc67592eda3e7023ea5e20286d28..21c31a3b5a7902e5e8e52b6e1c200a530d380e22 100644 (file)
@@ -27,6 +27,9 @@ RCSID("$Id$")
 
 #include <freeradius-devel/server/base.h>
 #include <freeradius-devel/server/module_rlm.h>
+#include <freeradius-devel/server/trigger.h>
+#include <freeradius-devel/server/password.h>
+#include <freeradius-devel/server/packet.h>
 #include <freeradius-devel/unlang/xlat.h>
 
 /** Initialize src/lib/server/
index e07ed4bd8df39839b4811b97fef620cc2e3a8b0a..93618d75b46434d25b859d8d33d590dc9126962f 100644 (file)
@@ -30,6 +30,8 @@ RCSIDH(clients_h, "$Id$")
 extern "C" {
 #endif
 
+#include <freeradius-devel/server/cf_util.h>
+
 typedef struct fr_client_s fr_client_t;
 typedef struct fr_client_list_s fr_client_list_t;
 
index 2c9af55db2d575a91d8388066c875be03ab530a9..cda3784b242474c918c101fde83918ecb5b79e3f 100644 (file)
 
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/util/regex.h>
+#include <freeradius-devel/util/version.h>
+
+#include <freeradius-devel/server/cf_util.h>
+#include <freeradius-devel/server/dependency.h>
+#include <freeradius-devel/server/log.h>
+
 USES_APPLE_DEPRECATED_API      /* OpenSSL API has been deprecated by Apple */
 
 static uint64_t        libmagic = RADIUSD_MAGIC_NUMBER;
index 421ff39cb7022cac8029aae645eb5bec9663d6bb..1a36f80e002b5b0677364fa35183aabb089bfd9f 100644 (file)
  * @copyright 2014 The FreeRADIUS server project
  */
 #include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
-#include <freeradius-devel/server/base.h>
 #include <freeradius-devel/server/exfile.h>
+#include <freeradius-devel/server/trigger.h>
 
 #include <freeradius-devel/util/debug.h>
+#include <freeradius-devel/util/file.h>
 #include <freeradius-devel/util/misc.h>
 #include <freeradius-devel/util/perm.h>
 #include <freeradius-devel/util/syserror.h>
index 66def098fb2e293d9a6e82c24fe52646e75c67ff..92f932c307fd62f20b6ee3394bb5ef483b6741e3 100644 (file)
  */
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
 #include <freeradius-devel/util/debug.h>
+#include <freeradius-devel/util/dict.h>
+#include <freeradius-devel/util/log.h>
+#include <freeradius-devel/util/syserror.h>
+#include <freeradius-devel/util/file.h>
+
+#include <freeradius-devel/server/log.h>
+#include <freeradius-devel/server/pair.h>
+#include <freeradius-devel/server/util.h>
+
+#include <freeradius-devel/unlang/xlat.h>
 
 #ifdef HAVE_SYS_STAT_H
 #  include <sys/stat.h>
index e58c8c7545d085b62556f5e361984300037cda88..9b4c6dc3665881077cc33adf88f9edae2f6c11bf 100644 (file)
@@ -72,6 +72,11 @@ static int _map_proc_talloc_free(map_proc_t *proc)
        return 0;
 }
 
+bool map_proc_literals_safe_for(map_proc_t const *proc)
+{
+       return proc->literals_safe_for;
+}
+
 /** Find a map processor by name
  *
  * @param[in] name of map processor.
index ea9731fee140ed988b65b82a57081d731c9a8cf4..0427f65f2303d23bb8eb7738cc39fe4d13a0796c 100644 (file)
@@ -77,6 +77,8 @@ typedef unlang_action_t (*map_proc_func_t)(rlm_rcode_t *p_result, void const *mo
 typedef int (*map_proc_instantiate_t)(CONF_SECTION *cs, void const *mod_inst, void *proc_inst,
                                      tmpl_t const *src, map_list_t const *maps);
 
+bool           map_proc_literals_safe_for(map_proc_t const *proc);
+
 map_proc_t     *map_proc_find(char const *name);
 
 int            map_proc_register(TALLOC_CTX *ctx, void const *mod_inst, char const *name,
index 00035a763ce6a806f70935c91df80e202749298c..1bced2b10bfa00119e9ca1ab89fa5ad843efbd84 100644 (file)
  */
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/paircmp.h>
 #include <freeradius-devel/server/pairmove.h>
 #include <freeradius-devel/server/tmpl_dcursor.h>
 
 #include <freeradius-devel/util/debug.h>
 #include <freeradius-devel/util/calc.h>
 #include <freeradius-devel/util/edit.h>
+#include <freeradius-devel/util/pair_legacy.h>
 
 #include <freeradius-devel/protocol/radius/rfc2865.h>
 #include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
 
-#include <ctype.h>
-
 /*
  *     @fixme - integrate this with the code calling it, so that we
  *     only fr_pair_list_copy() those attributes that we're really going to
@@ -183,8 +182,8 @@ void radius_pairmove(request_t *request, fr_pair_list_t *to, fr_pair_list_t *fro
                                 *      If equal, delete the one in
                                 *      the "to" list.
                                 */
-                               rcode = paircmp_pairs(NULL, from_vp,
-                                                          to_vp);
+                               rcode = paircmp_pairs(NULL, from_vp, to_vp);
+
                                /*
                                 *      We may want to do more
                                 *      subtractions, so we re-set the
index a2a3bf4d2eee17a3c5460f4c6233b8043adf1dba..75965c06da3945161cca060a313d961e8433f410 100644 (file)
@@ -27,8 +27,10 @@ RCSID("$Id$")
 
 #define LOG_PREFIX pool->log_prefix
 
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/main_config.h>
 #include <freeradius-devel/server/modpriv.h>
+#include <freeradius-devel/server/trigger.h>
+
 #include <freeradius-devel/util/debug.h>
 
 #include <freeradius-devel/util/heap.h>
index 27d7a7f4febed089d1ef6ba15c4a2df74cc557eb..3e37f74ef5fb9904217d4d5a722128c3181f288b 100644 (file)
@@ -27,6 +27,7 @@
 RCSIDH(radmin_h, "$Id$")
 
 #include <freeradius-devel/server/command.h>
+#include <freeradius-devel/server/main_config.h>
 
 #ifdef __cplusplus
 extern "C" {
index be1b85abc1668b6a617b726ebdc6d9abc9ca0143..91cfebee5ad5df016cc62e07cc05f50d46f556a1 100644 (file)
  */
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/request.h>
+#include <freeradius-devel/server/request_data.h>
+#include <freeradius-devel/unlang/interpret.h>
+
 #include <freeradius-devel/util/debug.h>
 #include <freeradius-devel/util/atexit.h>
 
index 291f27e72a35d2c7040c1cdb73d0cc9c68b1cfc6..3640834e39910cd0f01ded26c0974c6e8055e9db 100644 (file)
  */
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
-
 #include <freeradius-devel/util/atexit.h>
 #include <freeradius-devel/util/debug.h>
 
 #include <freeradius-devel/util/misc.h>
 #include <freeradius-devel/util/proto.h>
+#include <freeradius-devel/util/value.h>
+
+#include <freeradius-devel/server/dependency.h>
+#include <freeradius-devel/server/main_loop.h>
 
 #include <freeradius-devel/protocol/snmp/freeradius.h>
 
index 0b11a910d2bfd5743448d32b56b771ec0b378974..4c58c4d3decae617b083f35e8b5722a8bd4d81e1 100644 (file)
@@ -46,8 +46,8 @@
  */
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
 #include <freeradius-devel/server/request.h>
+#include <freeradius-devel/server/request_data.h>
 #include <freeradius-devel/server/state.h>
 
 #include <freeradius-devel/io/listen.h>
index 0349e3853f605f4957aad93f21b9abe57b8a124b..372f342441e2f56d007bfb546c8865cce5aeae9c 100644 (file)
@@ -23,7 +23,9 @@
 
 RCSID("$Id$")
 
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/client.h>
+#include <freeradius-devel/server/request.h>
+#include <freeradius-devel/server/stats.h>
 #include <freeradius-devel/util/debug.h>
 
 #include <freeradius-devel/util/misc.h>
index f1cc663a2aabb42b2911c5dfcb20bf092c33d50f..6fc92b2c2f4d31250f2efc9914a390aefb3bb91f 100644 (file)
@@ -25,6 +25,8 @@
  */
 RCSIDH(stats_h, "$Id$")
 
+#include <freeradius-devel/server/request.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
index 16be837eb8bec08e434d8120d6c08e99357be578..46578ae6aea94392125e6ac15c86eb4ae151197a 100644 (file)
 RCSID("$Id$")
 
 #include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
-#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/cf_file.h>
 #include <freeradius-devel/server/cf_parse.h>
 #include <freeradius-devel/server/cf_util.h>
+#include <freeradius-devel/server/exec.h>
+#include <freeradius-devel/server/main_loop.h>
+#include <freeradius-devel/server/request_data.h>
+#include <freeradius-devel/server/trigger.h>
 #include <freeradius-devel/unlang/function.h>
 #include <freeradius-devel/unlang/interpret.h>
+#include <freeradius-devel/unlang/subrequest.h>
+#include <freeradius-devel/unlang/xlat.h>
 
 #include <freeradius-devel/util/atexit.h>
 #include <freeradius-devel/util/debug.h>
index 4285e85ecc4c6f1216b4a69abfa628c3fd92475a..4f483102971d8051e6003893d8ba8c9e915a2fd2 100644 (file)
@@ -30,8 +30,10 @@ RCSID("$Id$")
 #include <freeradius-devel/util/base16.h>
 #include <freeradius-devel/util/misc.h>
 #include <freeradius-devel/util/perm.h>
+#include <freeradius-devel/util/syserror.h>
+
+#include <freeradius-devel/unlang/xlat.h>
 
-#include <ctype.h>
 #include <fcntl.h>
 #include <signal.h>
 #include <sys/stat.h>
index 9fa6aac38b70d8351b6d777b6a11cf8e51629245..25ef115906c6db6445ed87afc0bf5ade362a9e25 100644 (file)
@@ -48,7 +48,7 @@ typedef struct {
                                                                ///< cached for convenience.
 } fr_virtual_listen_t;
 
-typedef struct {
+struct virtual_server_s {
        CONF_SECTION                    *server_cs;             //!< The server section.
        fr_virtual_listen_t             **listeners;            //!< Listeners in this virtual server.
 
@@ -57,7 +57,9 @@ typedef struct {
                                                                ///< server and the entry point for the state machine.
        fr_process_module_t const       *process_module;        //!< Public interface to the process_mi.
                                                                ///< cached for convenience.
-} fr_virtual_server_t;
+
+       fr_rb_tree_t                    *sections;              //!< List of sections that need to be compiled.
+};
 
 static fr_dict_t const *dict_freeradius;
 
@@ -93,7 +95,7 @@ static module_list_t  *proto_modules;
 /** Top level structure holding all virtual servers
  *
  */
-static fr_virtual_server_t **virtual_servers;
+static virtual_server_t **virtual_servers;
 
 /** CONF_SECTION holding all the virtual servers
  *
@@ -104,10 +106,6 @@ static CONF_SECTION *virtual_server_root;
 
 static fr_rb_tree_t *listen_addr_root = NULL;
 
-/** Lookup allowed section names for modules
- */
-static fr_rb_tree_t *server_section_name_tree = NULL;
-
 static int8_t server_section_name_cmp(void const *one, void const *two);
 
 static int namespace_on_read(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, conf_parser_t const *rule);
@@ -118,7 +116,7 @@ static int listen_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_IT
 static int server_parse(TALLOC_CTX *ctx, void *out, UNUSED void *parent, CONF_ITEM *ci, UNUSED conf_parser_t const *rule);
 
 static const conf_parser_t server_on_read_config[] = {
-       { FR_CONF_OFFSET_TYPE_FLAGS("namespace", FR_TYPE_VOID, CONF_FLAG_REQUIRED, fr_virtual_server_t, process_mi),
+       { FR_CONF_OFFSET_TYPE_FLAGS("namespace", FR_TYPE_VOID, CONF_FLAG_REQUIRED, virtual_server_t, process_mi),
                        .on_read = namespace_on_read },
 
        CONF_PARSER_TERMINATOR
@@ -130,7 +128,7 @@ const conf_parser_t virtual_servers_on_read_config[] = {
         *      let logic elsewhere handle the issue.
         */
        { FR_CONF_POINTER("server", 0, CONF_FLAG_SUBSECTION | CONF_FLAG_OK_MISSING | CONF_FLAG_MULTI, &virtual_servers),
-                         .subcs_size = sizeof(fr_virtual_server_t), .subcs_type = "fr_virtual_server_t",
+                         .subcs_size = sizeof(virtual_server_t), .subcs_type = "virtual_server_t",
                          .subcs = (void const *) server_on_read_config, .name2 = CF_IDENT_ANY,
                          .on_read = server_on_read },
 
@@ -138,11 +136,11 @@ const conf_parser_t virtual_servers_on_read_config[] = {
 };
 
 static const conf_parser_t server_config[] = {
-       { FR_CONF_OFFSET_TYPE_FLAGS("namespace", FR_TYPE_VOID, CONF_FLAG_REQUIRED, fr_virtual_server_t, process_mi),
+       { FR_CONF_OFFSET_TYPE_FLAGS("namespace", FR_TYPE_VOID, CONF_FLAG_REQUIRED, virtual_server_t, process_mi),
                         .func = namespace_parse },
 
        { FR_CONF_OFFSET_TYPE_FLAGS("listen", FR_TYPE_VOID, CONF_FLAG_SUBSECTION | CONF_FLAG_OK_MISSING | CONF_FLAG_MULTI,
-                        fr_virtual_server_t, listeners),
+                        virtual_server_t, listeners),
                         .name2 = CF_IDENT_ANY,
                         .subcs_size = sizeof(fr_virtual_listen_t), .subcs_type = "fr_virtual_listen_t",
                         .func = listen_parse },
@@ -156,7 +154,7 @@ const conf_parser_t virtual_servers_config[] = {
         *      let logic elsewhere handle the issue.
         */
        { FR_CONF_POINTER("server", 0, CONF_FLAG_SUBSECTION | CONF_FLAG_OK_MISSING | CONF_FLAG_MULTI, &virtual_servers),
-                         .subcs_size = sizeof(fr_virtual_server_t), .subcs_type = "fr_virtual_server_t",
+                         .subcs_size = sizeof(virtual_server_t), .subcs_type = "virtual_server_t",
                          .subcs = (void const *) server_config, .name2 = CF_IDENT_ANY,
                          .func = server_parse },
 
@@ -298,9 +296,8 @@ static int server_on_read(UNUSED TALLOC_CTX *ctx, UNUSED void *out, UNUSED void
        return 0;
 }
 
-
 static inline CC_HINT(always_inline)
-int add_compile_list(CONF_SECTION *cs, virtual_server_compile_t const *compile_list, char const *name)
+int add_compile_list(virtual_server_t *vs, CONF_SECTION *cs, virtual_server_compile_t const *compile_list, char const *name)
 {
        int i;
        virtual_server_compile_t const *list = compile_list;
@@ -310,7 +307,7 @@ int add_compile_list(CONF_SECTION *cs, virtual_server_compile_t const *compile_l
        for (i = 0; list[i].name1 != NULL; i++) {
                if (list[i].name1 == CF_IDENT_ANY) continue;
 
-               if (virtual_server_section_register(&list[i]) < 0) {
+               if (virtual_server_section_register(vs, &list[i]) < 0) {
                        cf_log_err(cs, "Failed registering processing section name %s for %s",
                                   list[i].name1, name);
                        return -1;
@@ -336,12 +333,12 @@ static int namespace_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *paren
        CONF_PAIR               *cp = cf_item_to_pair(ci);
        CONF_SECTION            *server_cs = cf_item_to_section(cf_parent(ci));
        CONF_SECTION            *process_cs;
-       fr_virtual_server_t     *server = talloc_get_type_abort(((uint8_t *) out) - offsetof(fr_virtual_server_t, process_mi), fr_virtual_server_t);
+       virtual_server_t        *server = talloc_get_type_abort(((uint8_t *) out) - offsetof(virtual_server_t, process_mi), virtual_server_t);
        char const              *namespace = cf_pair_value(cp);
        module_instance_t       *mi = cf_data_value(cf_data_find(server_cs, module_instance_t, "process_module"));
 
        /*
-        *      We don't have access to fr_virtual_server_t
+        *      We don't have access to virtual_server_t
         *      in the onread callback, so we need to do the
         *      fixups here.
         */
@@ -371,7 +368,7 @@ static int namespace_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *paren
         *      Pull the list of sections we need to compile out of
         *      the process module's public struct.
         */
-       add_compile_list(server->process_mi->conf, server->process_module->compile_list, namespace);
+       add_compile_list(server, server->process_mi->conf, server->process_module->compile_list, namespace);
 
        return 0;
 }
@@ -500,7 +497,7 @@ static int listen_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent,
 /** Callback to validate the server section
  *
  * @param[in] ctx      to allocate data in.
- * @param[out] out     Where to our listen configuration.  Is a #fr_virtual_server_t structure.
+ * @param[out] out     Where to our listen configuration.  Is a #virtual_server_t structure.
  * @param[in] parent   Base structure address.
  * @param[in] ci       #CONF_SECTION containing the listen section.
  * @param[in] rule     unused.
@@ -511,7 +508,7 @@ static int listen_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent,
 static int server_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent,
                        CONF_ITEM *ci, UNUSED conf_parser_t const *rule)
 {
-       fr_virtual_server_t     *server = talloc_get_type_abort(out, fr_virtual_server_t);
+       virtual_server_t        *server = talloc_get_type_abort(out, virtual_server_t);
        CONF_SECTION            *server_cs = cf_item_to_section(ci);
        CONF_PAIR               *namespace;
 
@@ -522,6 +519,7 @@ static int server_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent,
                return -1;
        }
 
+       MEM(server->sections = fr_rb_alloc(server, server_section_name_cmp, NULL));
        server->server_cs = server_cs;
 
        /*
@@ -532,7 +530,7 @@ static int server_parse(UNUSED TALLOC_CTX *ctx, void *out, UNUSED void *parent,
        /*
         *      And cache this struct for later referencing.
         */
-       cf_data_add(server_cs, server, "vs", false);
+       cf_data_add(server_cs, server, NULL, false);
 
        return 0;
 }
@@ -652,11 +650,11 @@ int virtual_server_has_namespace(CONF_SECTION **out,
  */
 unlang_action_t virtual_server_push(request_t *request, CONF_SECTION *server_cs, bool top_frame)
 {
-       fr_virtual_server_t *server;
+       virtual_server_t *server;
 
-       server = cf_data_value(cf_data_find(server_cs, fr_virtual_server_t, "vs"));
+       server = cf_data_value(cf_data_find(server_cs, virtual_server_t, NULL));
        if (!server) {
-               REDEBUG("server_cs does not contain virtual server data");
+               cf_log_err(server_cs, "server_cs does not contain virtual server data");
                return UNLANG_ACTION_FAIL;
        }
 
@@ -817,14 +815,29 @@ CONF_SECTION *virtual_server_find(char const *name)
 
 /** Find a virtual server using one of its sections
  *
- * @param[in] section  to find parent virtual server for.
+ * @param[in] ci       to find parent virtual server for.
  * @return
  *     - The virtual server section on success.
  *     - NULL if the child isn't associated with any virtual server section.
  */
-CONF_SECTION *virtual_server_by_child(CONF_SECTION *section)
+virtual_server_t const *virtual_server_by_child(CONF_ITEM const *ci)
 {
-       return cf_section_find_in_parent(section, "server", CF_IDENT_ANY);
+       CONF_SECTION *cs;
+       CONF_DATA const *cd;
+
+       cs = cf_section_find_in_parent(ci, "server", CF_IDENT_ANY);
+       if (unlikely(!cs)) {
+               cf_log_err(ci, "Child section is not associated with a virtual server");
+               return NULL;
+       }
+
+       cd = cf_data_find(cs, virtual_server_t, NULL);
+       if (unlikely(!cd)) {
+               cf_log_err(ci, "Virtual server section missing virtual_server_t data");
+               return NULL;
+       }
+
+       return cf_data_value(cd);
 }
 
 /** Wrapper for the config parser to allow pass1 resolution of virtual servers
@@ -996,13 +1009,11 @@ static int8_t server_section_name_cmp(void const *one, void const *two)
  *  This function is called from the virtual server bootstrap routine,
  *  which happens before module_bootstrap();
  */
-int virtual_server_section_register(virtual_server_compile_t const *entry)
+int virtual_server_section_register(virtual_server_t *vs, virtual_server_compile_t const *entry)
 {
        virtual_server_compile_t *old;
 
-       fr_assert(server_section_name_tree != NULL);
-
-       old = fr_rb_find(server_section_name_tree, entry);
+       old = fr_rb_find(vs->sections, entry);
        if (old) return 0;
 
 #ifndef NDEBUG
@@ -1032,7 +1043,7 @@ int virtual_server_section_register(virtual_server_compile_t const *entry)
        }
 #endif
 
-       if (!fr_rb_insert(server_section_name_tree, entry)) {
+       if (!fr_rb_insert(vs->sections, entry)) {
                fr_strerror_const("Failed inserting entry into internal tree");
                return -1;
        }
@@ -1043,33 +1054,31 @@ int virtual_server_section_register(virtual_server_compile_t const *entry)
 /** Find the component for a section
  *
  */
-virtual_server_method_t const *virtual_server_section_methods(char const *name1, char const *name2)
+virtual_server_method_t const *virtual_server_section_methods(virtual_server_t const *vs, char const *name1, char const *name2)
 {
        virtual_server_compile_t *entry;
 
-       fr_assert(server_section_name_tree != NULL);
-
        /*
         *      Look up the specific name first.  That way we can
         *      define both "accounting on", and "accounting *".
         */
        if (name2 != CF_IDENT_ANY) {
-               entry = fr_rb_find(server_section_name_tree,
-                                       &(virtual_server_compile_t) {
-                                               .name1 = name1,
-                                               .name2 = name2,
-                                       });
+               entry = fr_rb_find(vs->sections,
+                                  &(virtual_server_compile_t) {
+                                       .name1 = name1,
+                                       .name2 = name2,
+                                  });
                if (entry) return entry->methods;
        }
 
        /*
         *      Then look up the wildcard, if we didn't find any matching name2.
         */
-       entry = fr_rb_find(server_section_name_tree,
-                               &(virtual_server_compile_t) {
-                                       .name1 = name1,
-                                       .name2 = CF_IDENT_ANY,
-                               });
+       entry = fr_rb_find(vs->sections,
+                          &(virtual_server_compile_t) {
+                               .name1 = name1,
+                               .name2 = CF_IDENT_ANY,
+                          });
        if (!entry) return NULL;
 
        return entry->methods;
@@ -1482,7 +1491,7 @@ int virtual_servers_instantiate(void)
                CONF_ITEM                       *ci = NULL;
                CONF_SECTION                    *server_cs = virtual_servers[i]->server_cs;
                fr_dict_t const                 *dict;
-               fr_virtual_server_t const       *vs = virtual_servers[i];
+               virtual_server_t const  *vs = virtual_servers[i];
                fr_process_module_t const       *process = (fr_process_module_t const *)
                                                            vs->process_mi->module->exported;
 
@@ -1595,8 +1604,6 @@ int virtual_servers_free(void)
 {
        if (talloc_free(listen_addr_root) < 0) return -1;
        listen_addr_root = NULL;
-       if (talloc_free(server_section_name_tree) < 0) return -1;
-       server_section_name_tree = NULL;
        if (talloc_free(process_modules) < 0) return -1;
        process_modules = NULL;
        if (talloc_free(proto_modules) < 0) return -1;
@@ -1640,7 +1647,6 @@ int virtual_servers_init(void)
         */
        MEM(proto_modules = module_list_alloc(NULL, &module_list_type_global, "protocol", false));
        MEM(listen_addr_root = fr_rb_inline_alloc(NULL, fr_listen_t, virtual_server_node, listen_addr_cmp, NULL));
-       MEM(server_section_name_tree = fr_rb_alloc(NULL, server_section_name_cmp, NULL));
 
        /*
         *      Create a list to hold all the proto_* modules
index f0ef70fd99dce538a70c02eb86f472410b4a8d55..fbb68a3e312a39afd831a1694c633b15c6a53fe0 100644 (file)
@@ -29,6 +29,8 @@
 extern "C" {
 #endif
 
+typedef struct virtual_server_s virtual_server_t;
+
 #include <freeradius-devel/io/schedule.h>
 #include <freeradius-devel/server/cf_parse.h>
 #include <freeradius-devel/unlang/module.h>
@@ -79,16 +81,16 @@ int         virtual_server_has_namespace(CONF_SECTION **out,
  *
  * @{
  */
-CONF_SECTION   *virtual_server_find(char const *name) CC_HINT(nonnull);
+CONF_SECTION           *virtual_server_find(char const *name) CC_HINT(nonnull);
 
-CONF_SECTION   *virtual_server_by_child(CONF_SECTION *section) CC_HINT(nonnull);
+virtual_server_t const *virtual_server_by_child(CONF_ITEM const *ci) CC_HINT(nonnull);
 
-int            virtual_server_cf_parse(TALLOC_CTX *ctx, void *out, void *parent,
-                                       CONF_ITEM *ci, conf_parser_t const *rule) CC_HINT(nonnull(2,4));
+int                    virtual_server_cf_parse(TALLOC_CTX *ctx, void *out, void *parent,
+                                               CONF_ITEM *ci, conf_parser_t const *rule) CC_HINT(nonnull(2,4));
 /** @} */
 
-fr_listen_t *          listen_find_any(fr_listen_t *li) CC_HINT(nonnull);
-bool           listen_record(fr_listen_t *li) CC_HINT(nonnull);
+fr_listen_t *                  listen_find_any(fr_listen_t *li) CC_HINT(nonnull);
+bool                   listen_record(fr_listen_t *li) CC_HINT(nonnull);
 
 
 /** Module methods which are allowed in virtual servers.
@@ -115,12 +117,12 @@ typedef struct {
 
 #define COMPILE_TERMINATOR { .name1 = NULL, .name2 = NULL }
 
-int            virtual_server_section_register(virtual_server_compile_t const *entry) CC_HINT(nonnull);
+int            virtual_server_section_register(virtual_server_t *vs, virtual_server_compile_t const *entry) CC_HINT(nonnull);
 
 int            virtual_server_compile_sections(CONF_SECTION *server, virtual_server_compile_t const *list,
                                                tmpl_rules_t const *rules, void *instance) CC_HINT(nonnull(1,2,3));
 
-virtual_server_method_t const *virtual_server_section_methods(char const *name1, char const *name2) CC_HINT(nonnull(1));
+virtual_server_method_t const *virtual_server_section_methods(virtual_server_t const *vs, char const *name1, char const *name2) CC_HINT(nonnull(1));
 
 unlang_action_t        virtual_server_push(request_t *request, CONF_SECTION *server_cs, bool top_frame) CC_HINT(nonnull);
 
index 6b840a9be1c5f83f2616cdac49da40e7b0322585..9707b370db771c3fa9d4971b665a91d2b45ada8f 100644 (file)
@@ -4713,12 +4713,18 @@ check_for_module:
         *      name2, etc.
         */
        UPDATE_CTX2;
-       inst = module_rlm_by_name_and_method(&method, &method_env,
-                                            &unlang_ctx2.section_name1, &unlang_ctx2.section_name2,
-                                            realname);
-       if (inst) {
-               c = compile_module(parent, &unlang_ctx2, ci, inst, method, method_env, realname);
-               goto allocate_number;
+       {
+               virtual_server_t const *vs;
+
+               vs = virtual_server_by_child(ci);
+               fr_assert_msg(vs != NULL, "Failed getting virtual server for module call");
+               inst = module_rlm_by_name_and_method(&method, &method_env,
+                                                    &unlang_ctx2.section_name1, &unlang_ctx2.section_name2,
+                                                    vs, realname);
+               if (inst) {
+                       c = compile_module(parent, &unlang_ctx2, ci, inst, method, method_env, realname);
+                       goto allocate_number;
+               }
        }
 
        /*
index 8fc138e3fc1e0fef8f73fc9d69fb974bb4197bef..81fd79637d415fd2c4e358c3bf7a7868340dbe77 100644 (file)
@@ -49,7 +49,8 @@ static void pair_list_perf_init(void);
 #include <freeradius-devel/util/dict_test.h>
 #include <freeradius-devel/server/base.h>
 #include <freeradius-devel/util/rand.h>
-
+#include <freeradius-devel/util/pair.h>
+#include <freeradius-devel/util/pair_legacy.h>
 /*
  *      Global variables
  */