dl_t *dl = NULL;
char *module_name = NULL;
char *p, *q;
- dl_module_common_t const *common;
+ dl_module_common_t *common;
DL_INIT_CHECK;
dl_module_type_t _CONST type; //!< of this module.
- dl_module_common_t const * _CONST exported; //!< Symbol exported by the module, containing its public
+ dl_module_common_t *exported; //!< Symbol exported by the module, containing its public
//!< functions, name and behaviour control flags.
CONF_SECTION * _CONST conf; //!< The module's global configuration
/*
* We have no way of checking if this is correct... so we hope...
*/
- mi->exported = (module_t const *)mi->module->exported;
+ mi->exported = (module_t *)mi->module->exported;
if (unlikely(mi->exported == NULL)) {
ERROR("Missing public structure for \"%s\"", qual_inst_name);
goto error;
typedef struct module_s module_t;
typedef struct module_state_func_table_s module_state_func_table_t;
+typedef struct module_method_group_s module_method_group_t;
typedef struct module_method_binding_s module_method_binding_t;
typedef struct module_instance_s module_instance_t;
typedef struct module_thread_instance_s module_thread_instance_t;
*/
#define MODULE_BINDING_TERMINATOR { .section = NULL }
+/** A group of methods exported by a module or added as an overlay
+ *
+ * Module method groups are organised into a linked list, with each group
+ * containing a list of named methods. This allows common collections of
+ * methods to be added to a module.
+ *
+ * One common use case is adding the `instantiate`, `exists`, and `detach`
+ * methods which are added to dynamic modules, and allow dynamic module
+ * instances to be created and destroyed at runtime.
+ */
+struct module_method_group_s {
+ module_method_binding_t *bindings; //!< named methods
+
+ bool validated; //!< Set to true by #module_method_group_validate.
+ module_method_group_t *next; //!< Next group in the list.
+};
+
/** Named methods exported by a module
*
*/
size_t len; //!< How much data we need mprotect to protect.
} module_data_pool_t;
-/** Per instance data
+/** Module instance data
*
- * Per-instance data structure, to correlate the modules with the
+ * Per-module-instance data structure to correlate the modules with the
* instance names (may NOT be the module names!), and the per-instance
* data structures.
*/
* @{
*/
void *data; //!< Module's instance data. This is most
- ///< frequently access comes first.
+ ///< frequently accessed, so comes first.
void *boot; //!< Data allocated during the boostrap phase
- module_t const *exported; //!< Public module structure. Cached for convenience.
+ module_t *exported; //!< Public module structure. Cached for convenience.
///< This exports module methods, i.e. the functions
///< which allow the module to perform actions.
- ///< This is an identical address to dl_module->common,
+ ///< This is an identical address to module->common,
///< but with a different type, containing additional
///< instance callbacks to make it easier to use.
pthread_mutex_t mutex; //!< Used prevent multiple threads entering a thread
///< unsafe module simultaneously.
- dl_module_t *module; //!< dynamic loader handle. Contains the module's
+ dl_module_t *module; //!< Dynamic loader handle. Contains the module's
///< dlhandle, and the functions it exports.
///< The dl_module is reference counted so that it
///< can be freed automatically when the last instance
};
/** Callback to retrieve thread-local data for a module
+ *
+ * This is public for performance reasons, and should be called through
+ * #module_thread.
*
* @param[in] mi to add data to (use mi->ml for the module list).
* @return
.name2 = fr_sbuff_used(elem2) ? elem2->start : NULL
};
- mmb = module_binding_find(mmc->rlm->bindings, &method);
+ mmb = module_binding_find(mmc->rlm->method.bindings, &method);
if (!mmb) {
fr_strerror_printf("Module \"%s\" does not have method %s%s%s",
mmc->mi->name,
method.name2 ? method.name2 : ""
);
- module_rlm_methods_to_strerror(mmc->rlm->bindings);
+ module_rlm_methods_to_strerror(mmc->rlm->method.bindings);
return fr_sbuff_error(&meth_start);
}
mmc->mmb = *mmb; /* For locality of reference and fewer derefs */
*
* If that fails, we're done.
*/
- mmb = module_binding_find(mmc->rlm->bindings, section);
+ mmb = module_binding_find(mmc->rlm->method.bindings, section);
if (!mmb) {
section_name_t const **alt_p = virtual_server_section_methods(vs, section);
if (alt_p) {
for (; *alt_p; alt_p++) {
- mmb = module_binding_find(mmc->rlm->bindings, *alt_p);
+ mmb = module_binding_find(mmc->rlm->method.bindings, *alt_p);
if (mmb) {
if (mmc_out) section_name_dup(ctx, &mmc->asked, *alt_p);
break;
section->name2 ? "." : "",
section->name2 ? section->name2 : ""
);
- module_rlm_methods_to_strerror(mmc->rlm->bindings);
+ module_rlm_methods_to_strerror(mmc->rlm->method.bindings);
return fr_sbuff_error(&meth_start);
}
return section_name_cmp(a->section, b->section);
}
-static int module_method_validate(module_instance_t *mi)
+static int module_method_group_validate(module_method_group_t *group)
{
module_method_binding_t *p, *srt_p;
- module_rlm_t const *mrlm;
fr_dlist_head_t bindings;
bool in_order = true;
- mrlm = module_rlm_from_module(mi->exported);
-
- fr_dlist_init(&bindings, module_method_binding_t, entry);
-
/*
* Not all modules export module method bindings
*/
- if (!mrlm->bindings) return 0;
+ if (!group || !group->bindings || group->validated) return 0;
+
+ fr_dlist_init(&bindings, module_method_binding_t, entry);
- for (p = mrlm->bindings; p->section; p++) {
+ for (p = group->bindings; p->section; p++) {
if (!fr_cond_assert_msg(p->section->name1,
- "%s: First section identifier can't be NULL", mi->name)) return -1;
+ "First section identifier can't be NULL")) return -1;
if (!fr_cond_assert_msg(p->section->name1 || p->section->name2,
- "%s: Section identifiers can't both be null", mi->name)) return -1;
+ "Section identifiers can't both be null")) return -1;
/*
* All the bindings go in a list so we can sort them
* and the original list, to ensure they're
* in the correct order.
*/
- for (srt_p = fr_dlist_head(&bindings), p = mrlm->bindings;
+ for (srt_p = fr_dlist_head(&bindings), p = group->bindings;
srt_p;
srt_p = fr_dlist_next(&bindings, srt_p), p++) {
if (p != srt_p) {
srt_p = fr_dlist_next(&bindings, srt_p), p++) {
*p = *srt_p;
}
- memcpy(mrlm->bindings, ordered, fr_dlist_num_elements(&bindings) * sizeof(*ordered));
+ memcpy(group->bindings, ordered, fr_dlist_num_elements(&bindings) * sizeof(*ordered));
talloc_free(ordered);
}
{
module_method_binding_t *last_binding = NULL;
- for (p = mrlm->bindings; p->section; p++) {
+ for (p = group->bindings; p->section; p++) {
if (!last_binding ||
(
(last_binding->section->name1 != p->section->name1) &&
fr_dlist_insert_tail(&last_binding->same_name1, p);
}
}
+ group->validated = true;
- return 0;
+ CC_HINT(musttail) return module_method_group_validate(group->next);
+}
+
+static int module_method_validate(module_instance_t *mi)
+{
+ module_rlm_t *mrlm = module_rlm_from_module(mi->exported);
+
+ return module_method_group_validate(&mrlm->method);
}
/** Compare xlat functions registered to a module
struct module_rlm_s {
module_t common; //!< Common fields presented by all modules.
- module_method_binding_t *bindings; //!< named methods
+ module_method_group_t method; //!< named methods
};
struct module_rlm_instance_s {
tmpl_t *key; //!< Dynamic key, only set for dynamic modules.
} module_method_call_t;
-/** Cast a module_t to a module_rlm_t
- *
- */
-static inline module_rlm_t const *module_rlm_from_module(module_t const *module)
+static inline module_rlm_t *module_rlm_from_module(module_t *module)
{
- return (module_rlm_t const *)module;
+ return (module_rlm_t *)module;
}
/** @name Debug functions
* and use the appropriate dictionaries for where the module is in use.
*/
struct call_env_parser_s {
- char const *name; //!< Of conf pair to pass to tmpl_tokenizer.
- call_env_flags_t flags; //!< Flags controlling parser behaviour.
+ char const *name; //!< Of conf pair to pass to tmpl_tokenizer.
+ call_env_flags_t flags; //!< Flags controlling parser behaviour.
union {
struct {
} parsed;
fr_value_box_safe_for_t literals_safe_for; //!< What safe_for value to assign any literals that are arguments to the tmpl_t.
- tmpl_escape_t escape; //!< Escape method to use when evaluating tmpl_t.
+ tmpl_escape_t escape; //!< Escape method to use when evaluating tmpl_t.
} pair;
struct {
} section;
};
- void const *uctx; //!< User context for callback functions.
+ void const *uctx; //!< User context for callback functions.
};
typedef enum {
- CALL_ENV_CTX_TYPE_MODULE = 1, //!< The callenv is registered to a module method.
- CALL_ENV_CTX_TYPE_XLAT //!< The callenv is registered to an xlat.
+ CALL_ENV_CTX_TYPE_MODULE = 1, //!< The callenv is registered to a module method.
+ CALL_ENV_CTX_TYPE_XLAT //!< The callenv is registered to an xlat.
} call_env_ctx_type_t;
struct call_env_ctx_s {
- call_env_ctx_type_t type; //!< Type of callenv ctx.
+ call_env_ctx_type_t type; //!< Type of callenv ctx.
- module_instance_t const *mi; //!< Module instance that the callenv is registered to.
- ///< Available for both module methods, and xlats.
+ module_instance_t const *mi; //!< Module instance that the callenv is registered to.
+ ///< Available for both module methods, and xlats.
- section_name_t const *asked; //!< The actual name1/name2 that resolved to a
- ///< module_method_binding_t.
+ section_name_t const *asked; //!< The actual name1/name2 that resolved to a
+ ///< module_method_binding_t.
};
#define CALL_ENV_TERMINATOR { NULL }
.inst_type = STRINGIFY(_inst) \
struct call_env_method_s {
- size_t inst_size; //!< Size of per call env.
- char const *inst_type; //!< Type of per call env.
- call_env_parser_t const *env; //!< Parsing rules for call method env.
+ size_t inst_size; //!< Size of per call env.
+ char const *inst_type; //!< Type of per call env.
+ call_env_parser_t const *env; //!< Parsing rules for call method env.
};
/** Structure containing both a talloc pool, a list of parsed call_env_pairs
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_always_return },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_always_return },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("clear", CF_IDENT_ANY), .method = mod_method_clear, .method_env = &cache_method_env },
- { .section = SECTION_NAME("load", CF_IDENT_ANY), .method = mod_method_load, .method_env = &cache_method_env },
- { .section = SECTION_NAME("status", CF_IDENT_ANY), .method = mod_method_status, .method_env = &cache_method_env },
- { .section = SECTION_NAME("store", CF_IDENT_ANY), .method = mod_method_store, .method_env = &cache_method_env },
- { .section = SECTION_NAME("ttl", CF_IDENT_ANY), .method = mod_method_ttl, .method_env = &cache_method_env },
- { .section = SECTION_NAME("update", CF_IDENT_ANY), .method = mod_method_update, .method_env = &cache_method_env },
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_cache_it, .method_env = &cache_method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("clear", CF_IDENT_ANY), .method = mod_method_clear, .method_env = &cache_method_env },
+ { .section = SECTION_NAME("load", CF_IDENT_ANY), .method = mod_method_load, .method_env = &cache_method_env },
+ { .section = SECTION_NAME("status", CF_IDENT_ANY), .method = mod_method_status, .method_env = &cache_method_env },
+ { .section = SECTION_NAME("store", CF_IDENT_ANY), .method = mod_method_store, .method_env = &cache_method_env },
+ { .section = SECTION_NAME("ttl", CF_IDENT_ANY), .method = mod_method_ttl, .method_env = &cache_method_env },
+ { .section = SECTION_NAME("update", CF_IDENT_ANY), .method = mod_method_update, .method_env = &cache_method_env },
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_cache_it, .method_env = &cache_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &chap_auth_method_env },
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize, .method_env = &chap_autz_method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &chap_auth_method_env },
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize, .method_env = &chap_autz_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.onload = mod_load,
.unload = mod_unload
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.bootstrap = mod_bootstrap,
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.bootstrap = mod_bootstrap
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_delay },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_delay },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &method_env },
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_accounting, .method_env = &method_env },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &method_env },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth, .method_env = &method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &method_env },
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_accounting, .method_env = &method_env },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &method_env },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth, .method_env = &method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.thread_inst_type = "rlm_dhcpv4_thread_t",
.thread_instantiate = mod_thread_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
- MODULE_BINDING_TERMINATOR
- },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
+ MODULE_BINDING_TERMINATOR
+ }
+ }
};
.inst_size = sizeof(rlm_digest_t),
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
- MODULE_BINDING_TERMINATOR
- },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
+ MODULE_BINDING_TERMINATOR
+ }
+ }
};
.unload = mod_unload,
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
- }
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
+ }
};
.bootstrap = mod_bootstrap,
.instantiate = mob_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_exec_dispatch_oneshot, .method_env = &exec_method_env },
- MODULE_BINDING_TERMINATOR
- }
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_exec_dispatch_oneshot, .method_env = &exec_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
+ }
};
.inst_size = sizeof(rlm_files_t),
.config = module_config,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_files, .method_env = &method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_files, .method_env = &method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
-
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
extern module_rlm_t rlm_ldap;
module_rlm_t rlm_ldap = {
.common = {
- .magic = MODULE_MAGIC_INIT,
- .name = "ldap",
- .flags = 0,
- .boot_size = sizeof(rlm_ldap_boot_t),
- .boot_type = "rlm_ldap_boot_t",
- .inst_size = sizeof(rlm_ldap_t),
- .config = module_config,
- .onload = mod_load,
- .unload = mod_unload,
- .bootstrap = mod_bootstrap,
- .instantiate = mod_instantiate,
- .detach = mod_detach,
+ .magic = MODULE_MAGIC_INIT,
+ .name = "ldap",
+ .flags = 0,
+ .boot_size = sizeof(rlm_ldap_boot_t),
+ .boot_type = "rlm_ldap_boot_t",
+ .inst_size = sizeof(rlm_ldap_t),
+ .config = module_config,
+ .onload = mod_load,
+ .unload = mod_unload,
+ .bootstrap = mod_bootstrap,
+ .instantiate = mod_instantiate,
+ .detach = mod_detach,
.thread_inst_size = sizeof(fr_ldap_thread_t),
.thread_inst_type = "fr_ldap_thread_t",
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &usermod_method_env },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &authenticate_method_env },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &usermod_method_env },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &authenticate_method_env },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth, .method_env = &usermod_method_env },
- MODULE_BINDING_TERMINATOR
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth, .method_env = &usermod_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_do_linelog, .method_env = &linelog_method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_do_linelog, .method_env = &linelog_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.thread_instantiate = mod_thread_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_insert_logtee },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_insert_logtee },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.detach = mod_detach,
.thread_detach = mod_thread_detach
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
-
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
+
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach,
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
-
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
-
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
+
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &mschap_auth_method_env },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &mschap_autz_method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &mschap_auth_method_env },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &mschap_autz_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.inst_size = sizeof(rlm_opendirectory_t),
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &pap_method_env },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &pap_method_env },
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize, .method_env = &pap_method_env },
-
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &pap_method_env },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &pap_method_env },
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize, .method_env = &pap_method_env },
+
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_passwd_map },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_passwd_map },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
#endif /* TEST */
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
- MODULE_BINDING_TERMINATOR
- },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
+ MODULE_BINDING_TERMINATOR
+ },
+ }
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.onload = mod_load,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* radius */
- { .section = SECTION_NAME("accounting", "Start"), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* radius */
- { .section = SECTION_NAME("accounting", "Interim-Update"), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* radius */
- { .section = SECTION_NAME("accounting", "Stop"), .method = mod_release, .method_env = &redis_ippool_release_method_env }, /* radius */
- { .section = SECTION_NAME("accounting", "Accounting-On"), .method = mod_bulk_release, .method_env = &redis_ippool_bulk_release_method_env }, /* radius */
- { .section = SECTION_NAME("accounting", "Accounting-Off"), .method = mod_bulk_release, .method_env = &redis_ippool_bulk_release_method_env }, /* radius */
-
- { .section = SECTION_NAME("recv", "Discover"), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* dhcpv4 */
- { .section = SECTION_NAME("recv", "Release"), .method = mod_release, .method_env = &redis_ippool_release_method_env }, /* dhcpv4 */
- { .section = SECTION_NAME("send", "Ack"), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* dhcpv4 */
-
- { .section = SECTION_NAME("recv", "Solicit"), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* dhcpv6 */
-
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* generic */
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* generic */
-
- { .section = SECTION_NAME("allocate", NULL), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* verb */
- { .section = SECTION_NAME("update", NULL), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* verb */
- { .section = SECTION_NAME("renew", NULL), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* verb */
- { .section = SECTION_NAME("release", NULL), .method = mod_release, .method_env = &redis_ippool_release_method_env }, /* verb */
- { .section = SECTION_NAME("bulk-release", NULL), .method = mod_bulk_release, .method_env = &redis_ippool_bulk_release_method_env }, /* verb */
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* radius */
+ { .section = SECTION_NAME("accounting", "Start"), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* radius */
+ { .section = SECTION_NAME("accounting", "Interim-Update"), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* radius */
+ { .section = SECTION_NAME("accounting", "Stop"), .method = mod_release, .method_env = &redis_ippool_release_method_env }, /* radius */
+ { .section = SECTION_NAME("accounting", "Accounting-On"), .method = mod_bulk_release, .method_env = &redis_ippool_bulk_release_method_env }, /* radius */
+ { .section = SECTION_NAME("accounting", "Accounting-Off"), .method = mod_bulk_release, .method_env = &redis_ippool_bulk_release_method_env }, /* radius */
+
+ { .section = SECTION_NAME("recv", "Discover"), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* dhcpv4 */
+ { .section = SECTION_NAME("recv", "Release"), .method = mod_release, .method_env = &redis_ippool_release_method_env }, /* dhcpv4 */
+ { .section = SECTION_NAME("send", "Ack"), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* dhcpv4 */
+
+ { .section = SECTION_NAME("recv", "Solicit"), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* dhcpv6 */
+
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* generic */
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* generic */
+
+ { .section = SECTION_NAME("allocate", NULL), .method = mod_alloc, .method_env = &redis_ippool_alloc_method_env }, /* verb */
+ { .section = SECTION_NAME("update", NULL), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* verb */
+ { .section = SECTION_NAME("renew", NULL), .method = mod_update, .method_env = &redis_ippool_update_method_env }, /* verb */
+ { .section = SECTION_NAME("release", NULL), .method = mod_release, .method_env = &redis_ippool_release_method_env }, /* verb */
+ { .section = SECTION_NAME("bulk-release", NULL), .method = mod_bulk_release, .method_env = &redis_ippool_bulk_release_method_env }, /* verb */
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.onload = mod_load,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &rest_call_env_authorize },
-
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_accounting, .method_env = &rest_call_env_accounting },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &rest_call_env_authorize },
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &rest_call_env_accounting },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &rest_call_env_authenticate },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth, .method_env = &rest_call_env_post_auth },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &rest_call_env_authorize },
+
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_accounting, .method_env = &rest_call_env_accounting },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &rest_call_env_authorize },
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting, .method_env = &rest_call_env_accounting },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &rest_call_env_authenticate },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth, .method_env = &rest_call_env_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &auth_env },
- { .section = SECTION_NAME("mail", CF_IDENT_ANY), .method = mod_mail, .method_env = &method_env },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &auth_env },
+ { .section = SECTION_NAME("mail", CF_IDENT_ANY), .method = mod_mail, .method_env = &method_env },
- MODULE_BINDING_TERMINATOR
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_sometimes_reply },
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_sometimes_packet },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_sometimes_reply },
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_sometimes_packet },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
- .bindings = (module_method_binding_t[]){
- /*
- * Hack to support old configurations
- */
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_sql_redundant, .method_env = &accounting_method_env },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * Hack to support old configurations
+ */
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_sql_redundant, .method_env = &accounting_method_env },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_sql_redundant, .method_env = &send_method_env },
- MODULE_BINDING_TERMINATOR
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &authorize_method_env },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_sql_redundant, .method_env = &send_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.bootstrap = mod_bootstrap,
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize, .method_env = &sqlcounter_call_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_authorize, .method_env = &sqlcounter_call_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- /*
- * RADIUS specific
- */
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
- { .section = SECTION_NAME("accounting", "Start"), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("accounting", "Alive"), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("accounting", "Stop"), .method = mod_common, .method_env = &sqlippool_release_method_env },
- { .section = SECTION_NAME("accounting", "Accounting-On"), .method = mod_common, .method_env = &sqlippool_bulk_release_method_env },
- { .section = SECTION_NAME("accounting", "Accounting-Off"), .method = mod_common, .method_env = &sqlippool_bulk_release_method_env },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ /*
+ * RADIUS specific
+ */
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
+ { .section = SECTION_NAME("accounting", "Start"), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("accounting", "Alive"), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("accounting", "Stop"), .method = mod_common, .method_env = &sqlippool_release_method_env },
+ { .section = SECTION_NAME("accounting", "Accounting-On"), .method = mod_common, .method_env = &sqlippool_bulk_release_method_env },
+ { .section = SECTION_NAME("accounting", "Accounting-Off"), .method = mod_common, .method_env = &sqlippool_bulk_release_method_env },
- /*
- * DHCPv4
- */
- { .section = SECTION_NAME("recv", "Discover"), .method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
- { .section = SECTION_NAME("recv", "Request"), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("recv", "Confirm"), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("recv", "Rebind"), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("recv", "Renew"), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("recv", "Release"), .method = mod_common, .method_env = &sqlippool_release_method_env },
- { .section = SECTION_NAME("recv", "Decline"), .method = mod_common, .method_env = &sqlippool_mark_method_env },
+ /*
+ * DHCPv4
+ */
+ { .section = SECTION_NAME("recv", "Discover"), .method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
+ { .section = SECTION_NAME("recv", "Request"), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("recv", "Confirm"), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("recv", "Rebind"), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("recv", "Renew"), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("recv", "Release"), .method = mod_common, .method_env = &sqlippool_release_method_env },
+ { .section = SECTION_NAME("recv", "Decline"), .method = mod_common, .method_env = &sqlippool_mark_method_env },
- /*
- * Generic
- */
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("send", CF_IDENT_ANY),.method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
+ /*
+ * Generic
+ */
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY),.method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
- /*
- * Named methods matching module operations
- */
- { .section = SECTION_NAME("allocate", NULL), .method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
- { .section = SECTION_NAME("update", NULL), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("renew", NULL), .method = mod_common, .method_env = &sqlippool_update_method_env },
- { .section = SECTION_NAME("release", NULL), .method = mod_common, .method_env = &sqlippool_release_method_env },
- { .section = SECTION_NAME("bulk-release", NULL), .method = mod_common, .method_env = &sqlippool_bulk_release_method_env },
- { .section = SECTION_NAME("mark", NULL),.method = mod_common,.method_env = &sqlippool_mark_method_env },
-
- MODULE_BINDING_TERMINATOR
+ /*
+ * Named methods matching module operations
+ */
+ { .section = SECTION_NAME("allocate", NULL), .method = mod_alloc, .method_env = &sqlippool_alloc_method_env },
+ { .section = SECTION_NAME("update", NULL), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("renew", NULL), .method = mod_common, .method_env = &sqlippool_update_method_env },
+ { .section = SECTION_NAME("release", NULL), .method = mod_common, .method_env = &sqlippool_release_method_env },
+ { .section = SECTION_NAME("bulk-release", NULL), .method = mod_common, .method_env = &sqlippool_bulk_release_method_env },
+ { .section = SECTION_NAME("mark", NULL),.method = mod_common,.method_env = &sqlippool_mark_method_env },
+
+ MODULE_BINDING_TERMINATOR
+ }
}
-
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_stats },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_stats },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.instantiate = mod_instantiate,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
- MODULE_BINDING_TERMINATOR
- },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_process },
+ MODULE_BINDING_TERMINATOR
+ }
+ }
};
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("authorize", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("name1_null", NULL), .method = mod_return },
+ { .section = SECTION_NAME("name1_null", NULL), .method = mod_return },
- { .section = SECTION_NAME("recv", "access-challenge"), .method = mod_return },
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("recv", "access-challenge"), .method = mod_return },
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("retry", NULL), .method = mod_retry },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_return },
+ { .section = SECTION_NAME("retry", NULL), .method = mod_retry },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_return },
- MODULE_BINDING_TERMINATOR
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.instantiate = mod_instantiate
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.config = module_config,
.bootstrap = mod_bootstrap
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
- { .section = SECTION_NAME("send", "Accounting-Response"), .method = mod_accounting }, /* Backwards compatibility */
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("accounting", CF_IDENT_ANY), .method = mod_accounting },
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
+ { .section = SECTION_NAME("send", "Accounting-Response"), .method = mod_accounting }, /* Backwards compatibility */
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.magic = MODULE_MAGIC_INIT,
.name = "utf8"
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_utf8_clean },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME(CF_IDENT_ANY, CF_IDENT_ANY), .method = mod_utf8_clean },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.inst_size = sizeof(rlm_wimax_t),
.config = module_config,
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
- { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("recv", "accounting-request"), .method = mod_preacct },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize },
+ { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_post_auth },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.bootstrap = mod_bootstrap,
.detach = mod_detach
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &winbind_auth_method_env },
- { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &winbind_autz_method_env },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate, .method_env = &winbind_auth_method_env },
+ { .section = SECTION_NAME("recv", CF_IDENT_ANY), .method = mod_authorize, .method_env = &winbind_autz_method_env },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
.detach = mod_detach,
#endif
},
- .bindings = (module_method_binding_t[]){
- { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
- { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
- MODULE_BINDING_TERMINATOR
+ .method = {
+ .bindings = (module_method_binding_t[]){
+ { .section = SECTION_NAME("authenticate", CF_IDENT_ANY), .method = mod_authenticate },
+ { .section = SECTION_NAME("recv", "Access-Request"), .method = mod_authorize },
+ MODULE_BINDING_TERMINATOR
+ }
}
};
-# .bindings = (module_method_binding_t[]){
-# { .section = SECTION_NAME("recv", "Access-Challenge"), .method = mod_return },
-# { .section = SECTION_NAME("name1_null", NULL), .method = mod_return },
-# { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_return },
-# { .section = SECTION_NAME("retry", NULL), .method = mod_retry },
#
-# MODULE_BINDING_TERMINATOR
+# .method = {
+# .bindings = (module_method_binding_t[]){
+# { .section = SECTION_NAME("recv", "Access-Challenge"), .method = mod_return },
+# { .section = SECTION_NAME("name1_null", NULL), .method = mod_return },
+# { .section = SECTION_NAME("send", CF_IDENT_ANY), .method = mod_return },
+# { .section = SECTION_NAME("retry", NULL), .method = mod_retry },
+#
+# MODULE_BINDING_TERMINATOR
+# }
# }
noop