From 143c5baf6c2471c7f695e5e20da865f9e799ffbd Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 27 Feb 2011 04:03:27 +0100 Subject: adduser: use better argv passing to addgroup function old new delta adduser_main 855 882 +27 Signed-off-by: Denys Vlasenko --- loginutils/adduser.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'loginutils/adduser.c') 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) 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; -- cgit v1.2.3