diff options
author | Robert Griebl <griebl@gmx.de> | 2002-07-16 23:50:05 +0000 |
---|---|---|
committer | Robert Griebl <griebl@gmx.de> | 2002-07-16 23:50:05 +0000 |
commit | 2c0d0f00513e44f8545eb0756f874a25f54f9b40 (patch) | |
tree | f9355e356a4039cdd76bf9488915a9c42366234b | |
parent | e4f9f3a96060932d799d4e498f83ec6175d75999 (diff) | |
download | busybox-w32-2c0d0f00513e44f8545eb0756f874a25f54f9b40.tar.gz busybox-w32-2c0d0f00513e44f8545eb0756f874a25f54f9b40.tar.bz2 busybox-w32-2c0d0f00513e44f8545eb0756f874a25f54f9b40.zip |
Fix for the totally broken adduser applet (parts/ideas from vodz and tito)
-rw-r--r-- | loginutils/adduser.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c index 7aa7fcfd3..7455f23a6 100644 --- a/loginutils/adduser.c +++ b/loginutils/adduser.c | |||
@@ -110,18 +110,11 @@ static int passwd_study(const char *filename, struct passwd *p) | |||
110 | 110 | ||
111 | static void addgroup_wrapper(const char *login, gid_t gid) | 111 | static void addgroup_wrapper(const char *login, gid_t gid) |
112 | { | 112 | { |
113 | int argc = 3; | 113 | char *cmd = xmalloc(strlen(login)+32); |
114 | const char *argv0_save; | 114 | |
115 | char group_id[8]; | 115 | sprintf(cmd, "addgroup -g %d %s", gid, login); |
116 | char group_name[32]; | 116 | system(cmd); |
117 | char *argv[] = { group_name, "-g", group_id }; | 117 | free(cmd); |
118 | |||
119 | argv0_save = applet_name; | ||
120 | applet_name = "addgroup"; | ||
121 | safe_strncpy(group_name, login, 32); | ||
122 | sprintf(group_id, "%d", gid); | ||
123 | addgroup_main(argc, argv); | ||
124 | applet_name = argv0_save; | ||
125 | } | 118 | } |
126 | 119 | ||
127 | static void passwd_wrapper(const char *login) | 120 | static void passwd_wrapper(const char *login) |
@@ -235,8 +228,7 @@ static inline uid_t i_am_not_root(void) | |||
235 | * ________________________________________________________________________ */ | 228 | * ________________________________________________________________________ */ |
236 | int adduser_main(int argc, char **argv) | 229 | int adduser_main(int argc, char **argv) |
237 | { | 230 | { |
238 | int i = 0; | 231 | int opt; |
239 | char opt; | ||
240 | const char *login; | 232 | const char *login; |
241 | const char *gecos; | 233 | const char *gecos; |
242 | const char *home = NULL; | 234 | const char *home = NULL; |
@@ -255,13 +247,13 @@ int adduser_main(int argc, char **argv) | |||
255 | while ((opt = getopt (argc, argv, "h:g:s:")) != -1) | 247 | while ((opt = getopt (argc, argv, "h:g:s:")) != -1) |
256 | switch (opt) { | 248 | switch (opt) { |
257 | case 'h': | 249 | case 'h': |
258 | home = argv[++i]; | 250 | home = optarg; |
259 | break; | 251 | break; |
260 | case 'g': | 252 | case 'g': |
261 | gecos = argv[++i]; | 253 | gecos = optarg; |
262 | break; | 254 | break; |
263 | case 's': | 255 | case 's': |
264 | shell = argv[++i]; | 256 | shell = optarg; |
265 | break; | 257 | break; |
266 | default: | 258 | default: |
267 | show_usage (); | 259 | show_usage (); |
@@ -301,4 +293,4 @@ int adduser_main(int argc, char **argv) | |||
301 | return adduser(passwd_file, &pw); | 293 | return adduser(passwd_file, &pw); |
302 | } | 294 | } |
303 | 295 | ||
304 | /* $Id: adduser.c,v 1.2 2002/06/23 04:24:24 andersen Exp $ */ | 296 | /* $Id: adduser.c,v 1.3 2002/07/16 23:50:05 sandman Exp $ */ |