summaryrefslogtreecommitdiff
path: root/loginutils
diff options
context:
space:
mode:
authorRobert Griebl <griebl@gmx.de>2002-07-16 23:50:05 +0000
committerRobert Griebl <griebl@gmx.de>2002-07-16 23:50:05 +0000
commit2c0d0f00513e44f8545eb0756f874a25f54f9b40 (patch)
treef9355e356a4039cdd76bf9488915a9c42366234b /loginutils
parente4f9f3a96060932d799d4e498f83ec6175d75999 (diff)
downloadbusybox-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)
Diffstat (limited to 'loginutils')
-rw-r--r--loginutils/adduser.c28
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
111static void addgroup_wrapper(const char *login, gid_t gid) 111static 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
127static void passwd_wrapper(const char *login) 120static void passwd_wrapper(const char *login)
@@ -235,8 +228,7 @@ static inline uid_t i_am_not_root(void)
235 * ________________________________________________________________________ */ 228 * ________________________________________________________________________ */
236int adduser_main(int argc, char **argv) 229int 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 $ */