aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--loginutils/adduser.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index d938b80f3..9d3d9cb4c 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -67,15 +67,24 @@ static void passwd_study(struct passwd *p)
67 67
68static void addgroup_wrapper(struct passwd *p, const char *group_name) 68static void addgroup_wrapper(struct passwd *p, const char *group_name)
69{ 69{
70 char *cmd; 70 char *argv[5];
71 71
72 if (group_name) /* Add user to existing group */ 72 argv[0] = (char*)"addgroup";
73 cmd = xasprintf("addgroup '%s' '%s'", p->pw_name, group_name); 73 if (group_name) {
74 else /* Add user to his own group with the first free gid found in passwd_study */ 74 /* Add user to existing group */
75 cmd = xasprintf("addgroup -g %u '%s'", (unsigned)p->pw_gid, p->pw_name); 75 argv[1] = p->pw_name;
76 /* Warning: to be compatible with external addgroup programs we should use --gid instead */ 76 argv[2] = (char*)group_name;
77 system(cmd); 77 argv[3] = NULL;
78 free(cmd); 78 } else {
79 /* Add user to his own group with the first free gid found in passwd_study */
80//TODO: to be compatible with external addgroup programs we should use --gid instead...
81 argv[1] = (char*)"-g";
82 argv[2] = utoa(p->pw_gid);
83 argv[3] = p->pw_name;
84 argv[4] = NULL;
85 }
86
87 spawn_and_wait(argv);
79} 88}
80 89
81static void passwd_wrapper(const char *login_name) NORETURN; 90static void passwd_wrapper(const char *login_name) NORETURN;