[git commit] adduser: make it accept "adduser USER GROUP" form

Denys Vlasenko vda.linux at googlemail.com
Mon Oct 8 09:18:08 UTC 2012


commit: http://git.busybox.net/busybox/commit/?id=8dc6d1a813e2be33ecfcf3fa97a1b5aae05a8631
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Tito Ragusa <farmatito at tiscali.it>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 loginutils/adduser.c |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index 1d082c8..dc02444 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -9,9 +9,9 @@
  */
 
 //usage:#define adduser_trivial_usage
-//usage:       "[OPTIONS] USER"
+//usage:       "[OPTIONS] USER [GROUP]"
 //usage:#define adduser_full_usage "\n\n"
-//usage:       "Add a user\n"
+//usage:       "Create new user, or add USER to GROUP\n"
 //usage:     "\n	-h DIR		Home directory"
 //usage:     "\n	-g GECOS	GECOS field"
 //usage:     "\n	-s SHELL	Login shell"
@@ -80,7 +80,7 @@ static void passwd_study(struct passwd *p)
 	}
 }
 
-static void addgroup_wrapper(struct passwd *p, const char *group_name)
+static int addgroup_wrapper(struct passwd *p, const char *group_name)
 {
 	char *argv[6];
 
@@ -110,7 +110,7 @@ static void addgroup_wrapper(struct passwd *p, const char *group_name)
 		argv[5] = NULL;
 	}
 
-	spawn_and_wait(argv);
+	return spawn_and_wait(argv);
 }
 
 static void passwd_wrapper(const char *login_name) NORETURN;
@@ -162,9 +162,9 @@ int adduser_main(int argc UNUSED_PARAM, char **argv)
 	pw.pw_shell = (char *)get_shell_name();
 	pw.pw_dir = NULL;
 
-	/* exactly one non-option arg */
+	/* at most two non-option args */
 	/* disable interactive passwd for system accounts */
-	opt_complementary = "=1:SD:u+";
+	opt_complementary = "?2:SD:u+";
 	if (sizeof(pw.pw_uid) == sizeof(int)) {
 		opts = getopt32(argv, "h:g:s:G:DSHu:", &pw.pw_dir, &pw.pw_gecos, &pw.pw_shell, &usegroup, &pw.pw_uid);
 	} else {
@@ -175,9 +175,16 @@ int adduser_main(int argc UNUSED_PARAM, char **argv)
 		}
 	}
 	argv += optind;
+	pw.pw_name = argv[0];
+
+	if (!opts && argv[1]) {
+		/* if called with two non-option arguments, adduser
+		 * will add an existing user to an existing group.
+		 */
+		return addgroup_wrapper(&pw, argv[1]);
+	}
 
 	/* fill in the passwd struct */
-	pw.pw_name = argv[0];
 	die_if_bad_username(pw.pw_name);
 	if (!pw.pw_dir) {
 		/* create string for $HOME if not specified already */
@@ -205,7 +212,6 @@ int adduser_main(int argc UNUSED_PARAM, char **argv)
 	}
 	if (ENABLE_FEATURE_CLEAN_UP)
 		free(p);
-
 #if ENABLE_FEATURE_SHADOWPASSWDS
 	/* /etc/shadow fields:
 	 * 1. username


More information about the busybox-cvs mailing list