diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-06 12:57:39 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-06 12:57:39 +0100 |
commit | 78b107e4ac56e3df6cd3b4f8614a82f3c1c02f74 (patch) | |
tree | de76ae0b2dbbc536c90962d0724c7b5285686a43 /eurephiadm | |
parent | 108d06bc0943669dc8521b229d0167471f1f7429 (diff) | |
download | eurephia-78b107e4ac56e3df6cd3b4f8614a82f3c1c02f74.tar.gz eurephia-78b107e4ac56e3df6cd3b4f8614a82f3c1c02f74.tar.xz eurephia-78b107e4ac56e3df6cd3b4f8614a82f3c1c02f74.zip |
Renamed listuser command to users and improved arg parsing
Reorganised the command a little bit, to make it more generic for user
management
Diffstat (limited to 'eurephiadm')
-rw-r--r-- | eurephiadm/CMakeLists.txt | 2 | ||||
-rw-r--r-- | eurephiadm/commands.h | 7 | ||||
-rw-r--r-- | eurephiadm/commands/users.c (renamed from eurephiadm/commands/list_users.c) | 52 |
3 files changed, 55 insertions, 6 deletions
diff --git a/eurephiadm/CMakeLists.txt b/eurephiadm/CMakeLists.txt index aaf0c41..a920ac6 100644 --- a/eurephiadm/CMakeLists.txt +++ b/eurephiadm/CMakeLists.txt @@ -8,7 +8,7 @@ SET(efw_ipt_SRC client_config.c client_context.c client_session.c - commands/list_users.c + commands/users.c commands/edit_config.c ../common/eurephia_log.c ../common/eurephia_getsym.c diff --git a/eurephiadm/commands.h b/eurephiadm/commands.h index 6f2c7dc..043b2d6 100644 --- a/eurephiadm/commands.h +++ b/eurephiadm/commands.h @@ -42,7 +42,8 @@ int cmd_ShowCfg(eurephiaCTX *, eurephiaSESSION *, eurephiaVALUES *cfg, int argc, /* Commands and help functions listed here are found in ./commands/{command}.c files - one file per command*/ -int cmd_ListUsers(eurephiaCTX *, eurephiaSESSION *, eurephiaVALUES *cfg, int argc, char **argv); +void help_Users(); +int cmd_Users(eurephiaCTX *, eurephiaSESSION *, eurephiaVALUES *cfg, int argc, char **argv); void help_EditConfig(); int cmd_EditConfig(eurephiaCTX *, eurephiaSESSION *, eurephiaVALUES *cfg, int argc, char **argv); @@ -59,8 +60,8 @@ static const eurephiadm_functions cmdline_functions[] = { {"logout", 1, NULL, NULL, // Logout is specially handled - change with care "Logout from an open session", NULL, cmd_Logout}, - {"listusers", 1, "useradmin", NULL, - "List all registered users", NULL, cmd_ListUsers}, + {"users", 1, "useradmin", "-l", + "User management", help_Users, cmd_Users}, {"show-config", 1, "config", NULL, "List all config settings", NULL, cmd_ShowCfg}, diff --git a/eurephiadm/commands/list_users.c b/eurephiadm/commands/users.c index 838b887..1ded4c2 100644 --- a/eurephiadm/commands/list_users.c +++ b/eurephiadm/commands/users.c @@ -24,7 +24,7 @@ #include <string.h> #include <assert.h> -#define MODULE "eurephia::ListUsers" +#define MODULE "eurephia::Users" #include <eurephia_nullsafe.h> #include <eurephia_context.h> #include <eurephia_log.h> @@ -36,7 +36,10 @@ #include "../argparser.h" -int cmd_ListUsers(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { +void help_Users() { +} + +int list_users(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { eurephiaUSERLIST *list = NULL; eurephiaUSERINFO *user = NULL; int i = 0; @@ -87,3 +90,48 @@ int cmd_ListUsers(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, return 0; } +int cmd_Users(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { + char **mode_argv; + int i, mode_argc = 0, rc = 0; + int (*mode_fnc) (eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv); + + e_options modeargs[] = { + {"--list", "-l", 0}, + {NULL, NULL, 0} + }; + + assert((ctx != NULL) && (ctx->dbc != NULL) && (ctx->dbc->config != NULL)); + mode_fnc = NULL; + for( i = 1; i < argc; i++ ) { + switch( eurephia_getopt(i, argc, argv, modeargs) ) { + case 'l': + mode_fnc = list_users; + break; + default: + break; + } + if( mode_fnc != NULL ) { + break; + } + } + + // If we do not have any known mode defined, exit with error + if( mode_fnc == NULL ) { + fprintf(stderr, "Unknown argument. No mode given\n"); + return 1; + } + + // Allocate memory for our arguments being sent to the mode function + mode_argv = (char **) calloc(sizeof(char *), (argc - i)+2); + assert(mode_argv != NULL); + + // Copy over only the arguments needed for the mode + mode_argc = eurephia_arraycp(i, argc, argv, mode_argv, (argc - i)); + + // Call the mode function + rc = mode_fnc(ctx, sess, cfg, mode_argc, mode_argv); + free_nullsafe(mode_argv); + + return rc; +} + |