From e395700cd3900e8d91a6e2bbc09f5e9b24437d30 Mon Sep 17 00:00:00 2001 From: kx Date: Wed, 28 Sep 2022 19:09:56 +0300 Subject: Use one get_args() for all users commands --- src/users.c | 187 ++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 137 insertions(+), 50 deletions(-) diff --git a/src/users.c b/src/users.c index 292f9ad..338834f 100644 --- a/src/users.c +++ b/src/users.c @@ -38,6 +38,14 @@ static int argc; static char args[PATH_MAX]; static const char *argv[PATH_MAX]; +/* Options: */ +#define USER_NAME_SIZE 64 +#define USER_ROLE_SIZE 16 + +static int opt_help = 0; +static char opt_name[USER_NAME_SIZE]; +static char opt_role[USER_ROLE_SIZE]; + void split_args( const char *name, char *arg ) { char *p = NULL; @@ -71,55 +79,15 @@ void split_args( const char *name, char *arg ) } } -int com_useradd( char *arg ) -{ - /* temporary STUB. Should use busctl or REST */ - if( !valid_argument( "useradd", arg ) ) - return( 1 ); - - sprintf (syscom, "useradd %s", arg); - return( system( syscom ) ); -} - -int com_userdel( char *arg ) +void get_args( int argc, char * const *argv ) { - /* temporary STUB. Should use busctl or REST */ - if( !valid_argument( "userdel", arg ) ) - return( 1 ); - - sprintf( syscom, "userdel %s", arg ); - return( system( syscom ) ); -} - - - -/*************************************************************** - Users list functions: - ***************************************************************/ - -/* Options: */ -static int userlist_opt_help = 0; - -static void userlist_usage( char *fname ) -{ - fprintf( stdout, "\n" ); - fprintf( stdout, "Usage: %s [options]\n", fname ); - fprintf( stdout, "\n" ); - fprintf( stdout, "List users.\n" ); - fprintf( stdout, "\n" ); - fprintf( stdout, "Options:\n" ); - fprintf( stdout, " -h,--help Display this information.\n" ); - fprintf( stdout, "\n" ); -} - - -void userlist_get_args( int argc, char * const *argv ) -{ - const char* short_options = "h"; + const char* short_options = "hn:r:"; const struct option long_options[] = { { "help", no_argument, NULL, 'h' }, + { "name", required_argument, NULL, 'n' }, + { "role", required_argument, NULL, 'r' }, { NULL, 0, NULL, 0 } }; @@ -127,7 +95,9 @@ void userlist_get_args( int argc, char * const *argv ) int option_index = 0; /* Reset options: */ - userlist_opt_help = 0; + opt_help = 0; + bzero( &opt_name[0], USER_NAME_SIZE ); + bzero( &opt_role[0], USER_ROLE_SIZE ); while( (ret = getopt_long( argc, argv, short_options, long_options, &option_index )) != -1 ) { @@ -135,12 +105,28 @@ void userlist_get_args( int argc, char * const *argv ) { case 'h': { - userlist_opt_help = 1; + opt_help = 1; + break; + } + case 'n': + { + if( optarg != NULL ) + strncpy( opt_name, (const char *)optarg, sizeof( opt_name ) - 1 ); + else + opt_help = 1; + break; + } + case 'r': + { + if( optarg != NULL ) + strncpy( opt_role, (const char *)optarg, sizeof( opt_role ) - 1 ); + else + opt_help = 1; break; } case '?': default: { - userlist_opt_help = 1; + opt_help = 1; break; } } @@ -148,7 +134,7 @@ void userlist_get_args( int argc, char * const *argv ) if( optind < argc ) { - userlist_opt_help = 1; + opt_help = 1; } /* This is important for call getopt_long() several times! */ @@ -156,6 +142,107 @@ void userlist_get_args( int argc, char * const *argv ) } +/*************************************************************** + Users management commands: + ***************************************************************/ + +static void useradd_usage( char *fname ) +{ + fprintf( stdout, "\n" ); + fprintf( stdout, "Usage: %s [options]\n", fname ); + fprintf( stdout, "\n" ); + fprintf( stdout, "Delete user.\n" ); + fprintf( stdout, "\n" ); + fprintf( stdout, "Options:\n" ); + fprintf( stdout, " -h,--help Display this information.\n" ); + fprintf( stdout, " -n,--name User Name.\n" ); + fprintf( stdout, " -r,--role User Role (default: %s.\n", ROLE_USER ); + fprintf( stdout, "\n" ); +} + +int com_useradd( char *arg ) +{ + split_args( "useradd", arg ); + + get_args( argc, (char * const *)&argv[0] ); + + if( opt_help ) + { + useradd_usage( "useradd" ); + } + else + { + /* check args */ + if( !opt_name[0] || !opt_role[0] ) + { + useradd_usage( "useradd" ); + } + else + { + /* temporary STUB. Should use busctl or REST */ + sprintf( syscom, "echo 'useradd --name %s --role %s (command is not implemented yet).'", opt_name, opt_role ); + return( system( syscom ) ); + } + } + + return( 0 ); + +} + + +static void userdel_usage( char *fname ) +{ + fprintf( stdout, "\n" ); + fprintf( stdout, "Usage: %s [options]\n", fname ); + fprintf( stdout, "\n" ); + fprintf( stdout, "Delete user.\n" ); + fprintf( stdout, "\n" ); + fprintf( stdout, "Options:\n" ); + fprintf( stdout, " -h,--help Display this information.\n" ); + fprintf( stdout, " -n,--name User Name.\n" ); + fprintf( stdout, "\n" ); +} + +int com_userdel( char *arg ) +{ + split_args( "userdel", arg ); + + get_args( argc, (char * const *)&argv[0] ); + + if( opt_help ) + { + userdel_usage( "userdel" ); + } + else + { + /* check args */ + if( !opt_name[0] ) + { + useradd_usage( "userdel" ); + } + else + { + /* temporary STUB. Should use busctl or REST */ + sprintf( syscom, "echo 'userdel --name %s (command is not implemented yet).'", opt_name ); + return( system( syscom ) ); + } + } + + return( 0 ); +} + + +static void userlist_usage( char *fname ) +{ + fprintf( stdout, "\n" ); + fprintf( stdout, "Usage: %s [options]\n", fname ); + fprintf( stdout, "\n" ); + fprintf( stdout, "List users.\n" ); + fprintf( stdout, "\n" ); + fprintf( stdout, "Options:\n" ); + fprintf( stdout, " -h,--help Display this information.\n" ); + fprintf( stdout, "\n" ); +} int com_userlist( char *arg ) { @@ -174,9 +261,9 @@ int com_userlist( char *arg ) } */ - userlist_get_args( argc, (char * const *)&argv[0] ); + get_args( argc, (char * const *)&argv[0] ); - if( userlist_opt_help ) + if( opt_help ) { userlist_usage( "list" ); } -- cgit v1.2.3