]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Remove more module-list specific lookup functions
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 15 May 2024 21:50:10 +0000 (15:50 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 15 May 2024 21:50:10 +0000 (15:50 -0600)
rlm_sql_ippool and rlm_sql_counter won't work with dynamic modules... but that's OK, because the way they depend on other modules is stupid, and needs to be fixed anyway.

src/lib/server/module.c
src/lib/server/module.h
src/lib/server/module_rlm.c
src/lib/server/module_rlm.h
src/lib/unlang/xlat_inst.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_ldap/rlm_ldap.h
src/modules/rlm_sqlcounter/rlm_sqlcounter.c
src/modules/rlm_sqlippool/rlm_sqlippool.c

index f67f5eb9a1f9d64897f7eca03729bf90258e9c9c..9b1f2d5f17ff828f164ff85a9ba7980a4d48ddd9 100644 (file)
@@ -467,9 +467,9 @@ static int mlg_thread_init(UNUSED TALLOC_CTX **ctx, UNUSED module_list_t const *
  *
  * @param[in] mi       Module instance to get the thread-specific data for.
  */
-static module_thread_instance_t *mlg_thread_data_get(module_instance_t *mi)
+static module_thread_instance_t *mlg_thread_data_get(module_instance_t const *mi)
 {
-       mlg_module_instance_t           *mlg_mi = (mlg_module_instance_t *)talloc_get_type_abort(mi, module_instance_t);
+       mlg_module_instance_t const     *mlg_mi = (mlg_module_instance_t const *)talloc_get_type_abort_const(mi, module_instance_t);
        module_thread_instance_t        *ti;
 
        fr_assert_msg(mlg_mi->inst_idx <= talloc_array_length(mlg_thread_inst_list),
@@ -535,9 +535,9 @@ static void mltl_mlg_data_del(module_instance_t *mi)
        if (mltl_mi->ti) module_thread_detach(mltl_mi->ti);
 }
 
-static module_thread_instance_t *mltl_thread_data_get(module_instance_t *mi)
+static module_thread_instance_t *mltl_thread_data_get(module_instance_t const *mi)
 {
-       mltl_module_instance_t *mltl_mi = (mltl_module_instance_t *)talloc_get_type_abort(mi, module_instance_t);
+       mltl_module_instance_t const *mltl_mi = (mltl_module_instance_t *)talloc_get_type_abort_const(mi, module_instance_t);
        return mltl_mi->ti;
 }
 
index ed05320fdd6abe6adfdf5cfcc348cfe192790dae..05380981aa4ca294f87b270ae7df47756eaa39a1 100644 (file)
@@ -327,7 +327,7 @@ struct module_thread_instance_s {
  *     - NULL if no data exists.
  *     - Pointer to the data on success.
  */
-typedef module_thread_instance_t *(*module_list_thread_data_get_t)(module_instance_t *mi);
+typedef module_thread_instance_t *(*module_list_thread_data_get_t)(module_instance_t const *mi);
 
 /** A list of modules
  *
@@ -436,7 +436,7 @@ module_instance_t   *module_instance_by_data(module_list_t const *ml, void const *
  *     - NULL if module has no thread instance data.
  */
 static inline CC_HINT(warn_unused_result) CC_HINT(always_inline)
-module_thread_instance_t *module_thread(module_instance_t *mi)
+module_thread_instance_t *module_thread(module_instance_t const *mi)
 {
        return mi->ml->thread_data_get(mi);
 }
index 2d67bde3f318c59eca36698252e5e0d81b2c6c25..647463dfc9a5929e82dc2cb68f8518a4f39f0af4 100644 (file)
@@ -474,7 +474,7 @@ module_instance_t *module_rlm_by_name_and_method(module_method_t *method, call_e
         *      Module names are allowed to contain '.'
         *      so we search for the bare module name first.
         */
-       mi = module_instance_by_name(rlm_modules_static, NULL, name);
+       mi = module_rlm_static_by_name(NULL, name);
        if (mi) {
                virtual_server_method_t const   *allowed_list;
 
@@ -793,12 +793,7 @@ CONF_SECTION *module_rlm_by_name_virtual(char const *asked_name)
        return inst->cs;
 }
 
-module_thread_instance_t *module_rlm_thread_by_data(void const *data)
-{
-       return module_thread_by_data(rlm_modules_static, data);
-}
-
-module_instance_t *module_rlm_by_name(module_instance_t const *parent, char const *asked_name)
+module_instance_t *module_rlm_static_by_name(module_instance_t const *parent, char const *asked_name)
 {
        return module_instance_by_name(rlm_modules_static, parent, asked_name);
 }
index 7332ea3e2f301896c6ee8ee8fcc37550799d9681..2df0749ef3d10c8e465fba58be71df1925584149 100644 (file)
@@ -94,9 +94,7 @@ module_instance_t     *module_rlm_by_name_and_method(module_method_t *method, call_e
                                                       char const **name1, char const **name2,
                                                       char const *asked_name);
 
-module_thread_instance_t *module_rlm_thread_by_data(void const *data);
-
-module_instance_t      *module_rlm_by_name(module_instance_t const *parent, char const *asked_name);
+module_instance_t      *module_rlm_static_by_name(module_instance_t const *parent, char const *asked_name);
 
 CONF_SECTION           *module_rlm_by_name_virtual(char const *asked_name);
 
index fd05d2a9aaa224f566233af6b7e51836334779ee..33bcef8cf38f4ded54e8f02ab7dc0085a4283642 100644 (file)
@@ -158,7 +158,7 @@ static xlat_thread_inst_t *xlat_thread_inst_alloc(TALLOC_CTX *ctx, fr_event_list
                module_ctx_t *mctx;
 
                mctx = module_ctx_from_inst(xt, call->func->mctx);
-               mctx->thread = module_rlm_thread_by_data(mctx->mi->data)->data;
+               mctx->thread = module_thread(mctx->mi)->data;
 
                xt->mctx = mctx;
        }
index e551bc559e604ad9d55c542ae9fe0f06abe3bc9f..562074731ea71aaf3b27cc8384b7cce7e86c3ac5 100644 (file)
@@ -1286,7 +1286,7 @@ static unlang_action_t mod_map_proc(rlm_rcode_t *p_result, void const *mod_inst,
                                    fr_value_box_list_t *url, map_list_t const *maps)
 {
        rlm_ldap_t const        *inst = talloc_get_type_abort_const(mod_inst, rlm_ldap_t);
-       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_rlm_thread_by_data(inst)->data, fr_ldap_thread_t);
+       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_thread(inst->mi)->data, fr_ldap_thread_t);
 
        LDAPURLDesc             *ldap_url;
        int                     ldap_url_ret;
@@ -1428,7 +1428,7 @@ static unlang_action_t mod_authenticate_resume(rlm_rcode_t *p_result, UNUSED int
 static unlang_action_t CC_HINT(nonnull) mod_authenticate(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 {
        rlm_ldap_t const        *inst = talloc_get_type_abort_const(mctx->mi->data, rlm_ldap_t);
-       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_rlm_thread_by_data(inst)->data, fr_ldap_thread_t);
+       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_thread(inst->mi), fr_ldap_thread_t);
        ldap_auth_ctx_t         *auth_ctx;
        ldap_auth_call_env_t    *call_env = talloc_get_type_abort(mctx->env_data, ldap_auth_call_env_t);
 
@@ -1616,7 +1616,7 @@ static unlang_action_t mod_authorize_resume(rlm_rcode_t *p_result, UNUSED int *p
                if (inst->edir && inst->edir_autz) {
                        fr_pair_t       *password = fr_pair_find_by_da(&request->control_pairs,
                                                                       NULL, attr_cleartext_password);
-                       fr_ldap_thread_t *thread = talloc_get_type_abort(module_rlm_thread_by_data(inst)->data,
+                       fr_ldap_thread_t *thread = talloc_get_type_abort(module_thread(inst->mi)->data,
                                                                         fr_ldap_thread_t);
 
                        if (!password) {
@@ -1808,7 +1808,7 @@ static int autz_ctx_free(ldap_autz_ctx_t *autz_ctx)
 static unlang_action_t CC_HINT(nonnull) mod_authorize(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
 {
        rlm_ldap_t const        *inst = talloc_get_type_abort_const(mctx->mi->data, rlm_ldap_t);
-       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_rlm_thread_by_data(inst)->data, fr_ldap_thread_t);
+       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_thread(inst->mi)->data, fr_ldap_thread_t);
        ldap_autz_ctx_t         *autz_ctx;
        fr_ldap_map_exp_t       *expanded;
        ldap_autz_call_env_t    *call_env = talloc_get_type_abort(mctx->env_data, ldap_autz_call_env_t);
@@ -1965,7 +1965,7 @@ static unlang_action_t user_modify(rlm_rcode_t *p_result, rlm_ldap_t const *inst
                                   ldap_acct_section_t *section, ldap_usermod_call_env_t *call_env)
 {
        rlm_rcode_t             rcode = RLM_MODULE_FAIL;
-       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_rlm_thread_by_data(inst)->data, fr_ldap_thread_t);
+       fr_ldap_thread_t        *thread = talloc_get_type_abort(module_thread(inst->mi)->data, fr_ldap_thread_t);
        ldap_user_modify_ctx_t  *usermod_ctx = NULL;
 
        int             total = 0, last_pass = 0;
@@ -2400,6 +2400,7 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
        rlm_ldap_t              *inst = talloc_get_type_abort(mctx->mi->data, rlm_ldap_t);
        CONF_SECTION            *conf = mctx->mi->conf;
 
+       inst->mi = mctx->mi;    /* Cached for IO callbacks */
        inst->group.da = boot->group_da;
        inst->group.cache_da = boot->cache_da;
 
index 0ae07cc940cfbaffe177b1969e425aeb1ca5fdcd..1440e74eb7778c06fbd5f781dd086aeb0c3f0620 100644 (file)
@@ -127,6 +127,8 @@ typedef struct {
        fr_ldap_config_t handle_config;                 //!< Connection configuration instance.
        fr_trunk_conf_t trunk_conf;                     //!< Trunk configuration
        fr_trunk_conf_t bind_trunk_conf;                //!< Trunk configuration for trunk used for bind auths
+
+       module_instance_t const *mi;                    //!< Module instance data for thread lookups.
 } rlm_ldap_t;
 
 /** Call environment used in LDAP authorization
index 77cc598f9ba5dedca5993acb0b336f381839b2ed..c9162239e9795caa0d52c797ae1226e756af13c3 100644 (file)
@@ -508,7 +508,7 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
        module_instance_t const *sql_inst;
        fr_assert(inst->query && *inst->query);
 
-       sql_inst = module_rlm_by_name(NULL, inst->sql_name);
+       sql_inst = module_rlm_static_by_name(NULL, inst->sql_name);
        if (!sql_inst) {
                cf_log_err(conf, "Module \"%s\" not found", inst->sql_name);
                return -1;
index 82a682bdee69979d683f89bb19dbeb325bcca75c..8f1f526cf47a3cd034a6116eaebe0c5defbe5e71 100644 (file)
@@ -241,7 +241,7 @@ static int mod_instantiate(module_inst_ctx_t const *mctx)
 
        inst->name = talloc_asprintf(inst, "%s - %s", mctx->mi->name, inst->sql_name);
 
-       sql = module_rlm_by_name(NULL, inst->sql_name);
+       sql = module_rlm_static_by_name(NULL, inst->sql_name);
        if (!sql) {
                cf_log_err(conf, "failed to find sql instance named %s",
                           inst->sql_name);
@@ -598,7 +598,7 @@ static int call_env_parse(TALLOC_CTX *ctx, void *out, tmpl_rules_t const *t_rule
        /*
         *      Lookup the sql module instance.
         */
-       sql_inst = module_rlm_by_name(NULL, inst->sql_name);
+       sql_inst = module_rlm_static_by_name(NULL, inst->sql_name);
        if (!sql_inst) return -1;
        sql = talloc_get_type_abort(sql_inst->data, rlm_sql_t);