diff options
author | Denys Vlasenko | 2011-05-21 19:57:58 +0200 |
---|---|---|
committer | Denys Vlasenko | 2011-05-21 19:57:58 +0200 |
commit | 569e930768922812ce5169a3058b65fff9196308 (patch) | |
tree | 4b957c01e4446e92017fc1f4c9f6d20dab6394d7 /loginutils/adduser.c | |
parent | b808614785d04753b689233d27614189e25f6f0c (diff) | |
download | busybox-569e930768922812ce5169a3058b65fff9196308.zip busybox-569e930768922812ce5169a3058b65fff9196308.tar.gz |
adduser: prefer to call addgroup --gid, not non-std addgroup -g
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'loginutils/adduser.c')
-rw-r--r-- | loginutils/adduser.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c index a05b721..0e06ab2 100644 --- a/loginutils/adduser.c +++ b/loginutils/adduser.c @@ -67,6 +67,7 @@ static void passwd_study(struct passwd *p) } if (p->pw_uid == max) { bb_error_msg_and_die("no %cids left", 'u'); + /* this format string is reused in adduser and addgroup */ } p->pw_uid++; } @@ -92,9 +93,16 @@ static void addgroup_wrapper(struct passwd *p, const char *group_name) argv[3] = (char*)group_name; argv[4] = 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... + /* Add user to his own group with the first free gid + * found in passwd_study. + * We try to use --gid, not -g, because "standard" addgroup + * has no such short option, it has only long --gid. + */ +#if ENABLE_FEATURE_ADDGROUP_LONG_OPTIONS + argv[1] = (char*)"--gid"; +#else argv[1] = (char*)"-g"; +#endif argv[2] = utoa(p->pw_gid); argv[3] = (char*)"--"; argv[4] = p->pw_name; @@ -230,9 +238,11 @@ int adduser_main(int argc UNUSED_PARAM, char **argv) if (mkdir_err == 0) { /* New home. Copy /etc/skel to it */ const char *args[] = { - "chown", "-R", + "chown", + "-R", xasprintf("%u:%u", (int)pw.pw_uid, (int)pw.pw_gid), - pw.pw_dir, NULL + pw.pw_dir, + NULL }; /* Be silent on any errors (like: no /etc/skel) */ logmode = LOGMODE_NONE; |