From: Alan T. DeKok Date: Fri, 6 Jul 2018 16:16:59 +0000 (-0400) Subject: add "show module config MODULE" and "show module list" X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=34e4ebe02f16c24f78244453f5681b031c3a4064;p=thirdparty%2Ffreeradius-server.git add "show module config MODULE" and "show module list" Woo! Commands are useful --- diff --git a/src/main/module.c b/src/main/module.c index d51ed842270..0d923bd4b0a 100644 --- a/src/main/module.c +++ b/src/main/module.c @@ -32,6 +32,8 @@ RCSID("$Id$") #include #include #include +#include +#include static _Thread_local rbtree_t *module_thread_inst_tree; @@ -631,6 +633,7 @@ int modules_thread_instantiate(TALLOC_CTX *ctx, CONF_SECTION *root, fr_event_lis return 0; } + /** Complete module setup by calling its instantiate function * * @param[in] instance of module to complete instantiation for. @@ -722,6 +725,69 @@ static int module_instantiate(CONF_SECTION *root, char const *name) return _module_instantiate(mi, NULL); } + +static int cmd_show_module_config(FILE *fp, UNUSED FILE *fp_err, void *ctx, fr_cmd_info_t const *info) +{ + module_instance_t *mi; + CONF_SECTION *modules = (CONF_SECTION *) ctx; + + mi = cf_data_value(cf_data_find(modules, module_instance_t, info->argv[0])); + if (!mi) return -1; + + rad_assert(mi->dl_inst->conf != NULL); + + (void) cf_section_write(fp, mi->dl_inst->conf, 0); + + return 0; +} + +static int _module_list(void *instance, void *ctx) +{ + module_instance_t *mi = talloc_get_type_abort(instance, module_instance_t); + FILE *fp = ctx; + + fprintf(fp, "\t%s\n", mi->name); + + return 0; +} + +static int cmd_show_module_list(FILE *fp, UNUSED FILE *fp_err, void *ctx, UNUSED fr_cmd_info_t const *info) +{ + CONF_SECTION *modules = (CONF_SECTION *) ctx; + + (void) cf_data_walk(modules, module_instance_t, _module_list, fp); + + return 0; +} + +static char const *show_module_parents[] = { + "show", + "module", + NULL +}; + +static fr_cmd_table_t cmd_module_table[] = { + { + .syntax = "config STRING", + .func = cmd_show_module_config, + .help = "show module config :name", + // @todo - do tab expand, by walking over the whole module list... + .read_only = true, + .parents = show_module_parents, + }, + + { + .syntax = "list", + .func = cmd_show_module_list, + .help = "show module listx", + .read_only = true, + .parents = show_module_parents, + }, + + CMD_TABLE_END + +}; + /** Completes instantiation of modules * * Allows the module to initialise connection pools, and complete any registrations that depend on @@ -741,6 +807,12 @@ int modules_instantiate(CONF_SECTION *root) DEBUG2("#### Instantiating modules ####"); + if (fr_radmin_register(NULL, modules, cmd_module_table) < 0) { + ERROR("Failed registering radmin commands for modules - %s", + fr_strerror()); + return -1; + } + if (cf_data_walk(modules, module_instance_t, _module_instantiate, NULL) < 0) return -1; #ifndef NDEBUG