adduser: prefer to call addgroup --gid, not non-std addgroup -g
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 21 May 2011 17:57:58 +0000 (19:57 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 21 May 2011 17:57:58 +0000 (19:57 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/adduser.c

index a05b721583e9a80c7451dab01d6aed6854c654c5..0e06ab2f593bb5bddfa132c7f640c9a95435437a 100644 (file)
@@ -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;