summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkx <kx@radix.pro>2022-09-28 19:09:56 +0300
committerkx <kx@radix.pro>2022-09-28 19:09:56 +0300
commite395700cd3900e8d91a6e2bbc09f5e9b24437d30 (patch)
tree55ecc6c7c90ecd0b5e25df30c83ec8eb30affe03
parent5780fdaca5a2cd49c8218aec48cb6647374089ec (diff)
downloadsila-shell-e395700cd3900e8d91a6e2bbc09f5e9b24437d30.tar.xz
Use one get_args() for all users commands
-rw-r--r--src/users.c187
1 files 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" );
}