void fr_radmin_stop(void);
typedef struct fr_cmd_table_t fr_cmd_table_t;
+typedef int (*fr_radmin_register_hook_t)(char const *name, void *ctx, fr_cmd_table_t *table);
int fr_radmin_register(char const *name, void *ctx, fr_cmd_table_t *table);
#ifdef __cplusplus
#include <freeradius-devel/command.h>
#include <freeradius-devel/cf_file.h>
+extern fr_radmin_register_hook_t radmin_register_module;
+fr_radmin_register_hook_t radmin_register_module = NULL;
+
static _Thread_local rbtree_t *module_thread_inst_tree;
static TALLOC_CTX *instance_ctx = NULL;
DEBUG2("#### Instantiating modules ####");
- if (fr_radmin_register(NULL, modules, cmd_module_table) < 0) {
+ if (radmin_register_module && (radmin_register_module(NULL, modules, cmd_module_table) < 0)) {
ERROR("Failed registering radmin commands for modules - %s",
fr_strerror());
return -1;
}
#endif
+ if (radmin && (fr_radmin_start() < 0)) EXIT_WITH_FAILURE;
+
#ifndef __MINGW32__
/*
* Disconnect from session
*/
fr_strerror();
- if (radmin && (fr_radmin_start() < 0)) EXIT_WITH_FAILURE;
-
/*
* Process requests until HUP or exit.
*/
}
}
+extern fr_radmin_register_hook_t radmin_register_module;
/*
* MUST be called before fr_radmin_start()
*/
int fr_radmin_register(char const *name, void *ctx, fr_cmd_table_t *table)
{
+ radmin_register_module = fr_radmin_register;
+
return fr_command_add_multi(NULL, &radmin_cmd, name, ctx, table);
}