]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
loop over virtual modules, compiling them
authorAlan T. DeKok <aland@freeradius.org>
Mon, 13 Jul 2026 22:24:08 +0000 (18:24 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 14 Jul 2026 02:28:05 +0000 (22:28 -0400)
src/lib/server/module_rlm.c
src/lib/server/virtual_servers.c

index 6ef71da90f172b698c8423f986b9548177e31d90..c61c940cae4c5dd799b26723b45bdf77a2680678 100644 (file)
@@ -751,6 +751,8 @@ fr_slen_t module_rlm_by_name_and_method(TALLOC_CTX *ctx, module_method_call_t *m
        }
 
 by_section:
+       if (!vs) goto section_error;
+
        /*
         *      First look for the section name in the module's
         *      bindings.  If that fails, look for the alt
@@ -774,6 +776,7 @@ by_section:
                if (mmc_out) section_name_dup(ctx, &mmc->asked, section);
        }
        if (!mmb) {
+       section_error:
                fr_strerror_printf("Module \"%s\" has no method for section %s %s { ... }, i.e. %s%s%s",
                                   mmc->mi->name,
                                   section->name1,
index 5d393fd2bae7c8cbf6cce2d0145a878365933f44..d14888714e33f8effaabc0aa201356a0e5525c34 100644 (file)
@@ -1945,6 +1945,8 @@ int virtual_servers_thread_instantiate(TALLOC_CTX *ctx, fr_event_list_t *el)
 int virtual_servers_instantiate(void)
 {
        size_t  i, server_cnt;
+       CONF_SECTION *cs;
+       fr_rb_iter_inorder_t iter;
 
        /*
         *      User didn't specify any "server" sections
@@ -2021,6 +2023,20 @@ int virtual_servers_instantiate(void)
                (void) virtual_server_warn_unused(server_cs, process->compile_list);
        }
 
+       /*
+        *      Iterate over virtual modules to see if we can compile them.
+        */
+       for (cs = module_rlm_virtual_iter_init(&iter);
+            cs != NULL;
+            cs = module_rlm_virtual_iter_next(&iter)) {
+               fr_dict_t const *dict;
+
+               dict = virtual_server_dict_by_cs(cs); /* cheating! */
+               if (!dict) continue;
+
+               if (unlang_compile_virtual_module(cs, dict) < 0) return -1;
+       }
+
        if (modules_instantiate(process_modules) < 0) {
                PERROR("Failed instantiating process modules");
                return -1;