diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-02-27 04:03:27 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-02-27 04:03:27 +0100 |
commit | 143c5baf6c2471c7f695e5e20da865f9e799ffbd (patch) | |
tree | 5e6fa973a950a8a16009c947b2ae4100f7889a8f | |
parent | e3b1a1fd28558f7a1b3c0ec33313bedb675be8a1 (diff) | |
download | busybox-w32-143c5baf6c2471c7f695e5e20da865f9e799ffbd.tar.gz busybox-w32-143c5baf6c2471c7f695e5e20da865f9e799ffbd.tar.bz2 busybox-w32-143c5baf6c2471c7f695e5e20da865f9e799ffbd.zip |
adduser: use better argv passing to addgroup
function old new delta
adduser_main 855 882 +27
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | loginutils/adduser.c | 27 |
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 | ||
68 | static void addgroup_wrapper(struct passwd *p, const char *group_name) | 68 | static 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 | ||
81 | static void passwd_wrapper(const char *login_name) NORETURN; | 90 | static void passwd_wrapper(const char *login_name) NORETURN; |