summaryrefslogtreecommitdiffstats
path: root/eurephiadm
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-06 12:57:39 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-06 12:57:39 +0100
commit78b107e4ac56e3df6cd3b4f8614a82f3c1c02f74 (patch)
treede76ae0b2dbbc536c90962d0724c7b5285686a43 /eurephiadm
parent108d06bc0943669dc8521b229d0167471f1f7429 (diff)
downloadeurephia-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.txt2
-rw-r--r--eurephiadm/commands.h7
-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;
+}
+