adduser: use better argv passing to addgroup
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 27 Feb 2011 03:03:27 +0000 (04:03 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 27 Feb 2011 03:03:27 +0000 (04:03 +0100)
function                                             old     new   delta
adduser_main                                         855     882     +27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/adduser.c

index d938b80f317e34e554491e2f16ef045aa595326a..9d3d9cb4c6b24a7ee1691b7dbe69f89e51877a9c 100644 (file)
@@ -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;