[git commit master 1/1] adduser: use better argv passing to addgroup

Denys Vlasenko vda.linux at googlemail.com
Sun Feb 27 03:03:27 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=143c5baf6c2471c7f695e5e20da865f9e799ffbd
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
adduser_main                                         855     882     +27

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

diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index d938b80..9d3d9cb 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -67,15 +67,24 @@ static void passwd_study(struct passwd *p)
 
 static void addgroup_wrapper(struct passwd *p, const char *group_name)
 {
-	char *cmd;
-
-	if (group_name) /* Add user to existing group */
-		cmd = xasprintf("addgroup '%s' '%s'", p->pw_name, group_name);
-	else    /* Add user to his own group with the first free gid found in passwd_study */
-		cmd = xasprintf("addgroup -g %u '%s'", (unsigned)p->pw_gid, p->pw_name);
-	/* Warning: to be compatible with external addgroup programs we should use --gid instead */
-	system(cmd);
-	free(cmd);
+	char *argv[5];
+
+	argv[0] = (char*)"addgroup";
+	if (group_name) {
+		/* Add user to existing group */
+		argv[1] = p->pw_name;
+		argv[2] = (char*)group_name;
+		argv[3] = NULL;
+	} else {
+		/* Add user to his own group with the first free gid found in passwd_study */
+//TODO: to be compatible with external addgroup programs we should use --gid instead...
+		argv[1] = (char*)"-g";
+		argv[2] = utoa(p->pw_gid);
+		argv[3] = p->pw_name;
+		argv[4] = NULL;
+	}
+
+	spawn_and_wait(argv);
 }
 
 static void passwd_wrapper(const char *login_name) NORETURN;
-- 
1.7.3.4



More information about the busybox-cvs mailing list