* and ensures the module implements the specified method.
*
* @param[out] method the method function we will call
+ * @param[out] method_env the module_call_env to evaluate when compiling the method.
* @param[in,out] component the default component to use. Updated to be the found component
* @param[out] name1 name1 of the method being called
* @param[out] name2 name2 of the method being called
*
* If the module exists but the method doesn't exist, then `method` is set to NULL.
*/
-module_instance_t *module_rlm_by_name_and_method(module_method_t *method, UNUSED rlm_components_t *component,
+module_instance_t *module_rlm_by_name_and_method(module_method_t *method, module_method_env_t const **method_env,
+ UNUSED rlm_components_t *component,
char const **name1, char const **name2,
char const *name)
{
if (methods->name1 == CF_IDENT_ANY) {
found:
*method = methods->method;
+ if (method_env) *method_env = methods->method_env;
if (name1) *name1 = method_name1;
if (name2) *name2 = method_name2;
return mi;
*name1 = p;
*name2 = NULL;
*method = methods->method;
+ if (method_env) *method_env = methods->method_env;
break;
}
*name1 = methods->name1;
*name2 = name + (q - inst_name);
*method = methods->method;
+ if (method_env) *method_env = methods->method_env;
break;
}
* want to know if we need to register a
* redundant xlat for the virtual module.
*/
- mi = module_rlm_by_name_and_method(NULL, NULL, NULL, NULL, cf_pair_attr(cp));
+ mi = module_rlm_by_name_and_method(NULL, NULL, NULL, NULL, NULL, cf_pair_attr(cp));
if (!mi) {
cf_log_err(sub_ci, "Module instance \"%s\" referenced in %s block, does not exist",
cf_pair_attr(cp), cf_section_name1(cs));
*
* @{
*/
-module_instance_t *module_rlm_by_name_and_method(module_method_t *method, rlm_components_t *component,
+module_instance_t *module_rlm_by_name_and_method(module_method_t *method, module_method_env_t const ** method_env,
+ rlm_components_t *component,
char const **name1, char const **name2,
char const *asked_name);
bool policy;
unlang_op_compile_t compile;
unlang_t *c;
+ module_method_env_t const *method_env = NULL;
if (cf_item_is_section(ci)) {
cs = cf_item_to_section(ci);
* name2, etc.
*/
UPDATE_CTX2;
- inst = module_rlm_by_name_and_method(&method, &unlang_ctx2.component,
+ inst = module_rlm_by_name_and_method(&method, &method_env, &unlang_ctx2.component,
&unlang_ctx2.section_name1, &unlang_ctx2.section_name2,
realname);
if (inst) {