]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Get the dictionary direct from the virtual server
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 5 Jun 2024 20:18:04 +0000 (16:18 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 5 Jun 2024 20:20:32 +0000 (16:20 -0400)
src/listen/cron/proto_cron_crontab.c
src/listen/load/proto_load_step.c

index 44dafff1e8583fce33a11794d152bd054f68f236..383304560360c0edc1bd93a4c2f0bf393e6439a1 100644 (file)
@@ -28,6 +28,7 @@
 #include <freeradius-devel/io/listen.h>
 #include <freeradius-devel/io/schedule.h>
 
+#include "lib/server/cf_util.h"
 #include "proto_cron.h"
 
 extern fr_app_io_t proto_cron_crontab;
@@ -76,6 +77,8 @@ struct proto_cron_tab_s {
        cron_tab_t                      tab[5];
 
        fr_client_t                     *client;                //!< static client
+
+       fr_dict_t const                 *dict;                  //!< our namespace.
 };
 
 
@@ -436,7 +439,7 @@ static int mod_decode(void const *instance, request_t *request, UNUSED uint8_t *
         *      generic->protocol attribute conversions as
         *      the request runs through the server.
         */
-       request->dict = inst->parent->dict;
+       request->dict = inst->dict;
 
        /*
         *      Hacks for now until we have a lower-level decode routine.
@@ -695,6 +698,11 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
 
        inst->parent = talloc_get_type_abort(mctx->mi->parent->data, proto_cron_t);
        inst->cs = mctx->mi->conf;
+       inst->dict = virtual_server_dict_by_child_ci(cf_section_to_item(conf));
+       if (!inst->dict) {
+               cf_log_err(conf, "Please define 'namespace' in this virtual server");
+               return -1;
+       }
 
        fr_pair_list_init(&inst->pair_list);
        inst->client = client = talloc_zero(inst, fr_client_t);
@@ -715,7 +723,7 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
                return -1;
        }
 
-       if (fr_pair_list_afrom_file(inst, inst->parent->dict, &inst->pair_list, fp, &done) < 0) {
+       if (fr_pair_list_afrom_file(inst, inst->dict, &inst->pair_list, fp, &done) < 0) {
                cf_log_perr(conf, "Failed reading %s", inst->filename);
                fclose(fp);
                return -1;
index f5363df40f725ed616f59f72f2c9d33d604fb5e1..6460a8bc8a0cab3426083625000734fb83895b0c 100644 (file)
@@ -73,6 +73,8 @@ struct proto_load_step_s {
        fr_load_config_t                load;                   //!< load configuration
        bool                            repeat;                 //!, do we repeat the load generation
        char const                      *csv;                   //!< where to write CSV stats
+
+       fr_dict_t const                 *dict;                  //!< Our namespace.
 };
 
 
@@ -262,7 +264,7 @@ static int mod_decode(void const *instance, request_t *request, UNUSED uint8_t *
         *      generic->protocol attribute conversions as
         *      the request runs through the server.
         */
-       request->dict = inst->parent->dict;
+       request->dict = inst->dict;
 
        /*
         *      Hacks for now until we have a lower-level decode routine.
@@ -344,6 +346,12 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
        fr_pair_t               *vp;
        module_instance_t const *mi = mctx->mi;
 
+       inst->dict = virtual_server_dict_by_child_ci(cf_section_to_item(conf));
+       if (!inst->dict) {
+               cf_log_err(conf, "Please define 'namespace' in this virtual server");
+               return -1;
+       }
+
        fr_pair_list_init(&inst->pair_list);
        inst->client = client = talloc_zero(inst, fr_client_t);
        if (!inst->client) return 0;
@@ -367,7 +375,7 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
                        return -1;
                }
 
-               if (fr_pair_list_afrom_file(inst, inst->parent->dict, &inst->pair_list, fp, &done) < 0) {
+               if (fr_pair_list_afrom_file(inst, inst->dict, &inst->pair_list, fp, &done) < 0) {
                        cf_log_perr(conf, "Failed reading %s", inst->filename);
                        fclose(fp);
                        return -1;