- strip implied proto and superfluous "www." domain part.
[oweals/busybox.git] / loginutils / adduser.c
index e91417ad55cf795cb5d328806bea90a7cd5fc4c4..3154806b61162725cb65fafa8449541a28037cd1 100644 (file)
@@ -35,7 +35,7 @@ static void passwd_study(struct passwd *p)
        /* check for a free uid (and maybe gid) */
        while (getpwuid(p->pw_uid) || (!p->pw_gid && getgrgid(p->pw_uid)))
                p->pw_uid++;
-        
+
        if (!p->pw_gid) {
                /* new gid = uid */
                p->pw_gid = p->pw_uid;
@@ -56,7 +56,7 @@ static void addgroup_wrapper(struct passwd *p)
        free(cmd);
 }
 
-static void passwd_wrapper(const char *login) ATTRIBUTE_NORETURN;
+static void passwd_wrapper(const char *login) NORETURN;
 
 static void passwd_wrapper(const char *login)
 {
@@ -66,18 +66,35 @@ static void passwd_wrapper(const char *login)
        bb_error_msg_and_die("cannot execute %s, you must set password manually", prog);
 }
 
+#if ENABLE_FEATURE_ADDUSER_LONG_OPTIONS
+static const char adduser_longopts[] ALIGN1 =
+               "home\0"                Required_argument "h"
+               "gecos\0"               Required_argument "g"
+               "shell\0"               Required_argument "s"
+               "ingroup\0"             Required_argument "G"
+               "disabled-password\0"   No_argument       "D"
+               "empty-password\0"      No_argument       "D"
+               "system\0"              No_argument       "S"
+               "no-create-home\0"      No_argument       "H"
+               ;
+#endif
+
 /*
  * adduser will take a login_name as its first parameter.
  * home, shell, gecos:
  * can be customized via command-line parameters.
  */
 int adduser_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int adduser_main(int argc, char **argv)
+int adduser_main(int argc UNUSED_PARAM, char **argv)
 {
        struct passwd pw;
        const char *usegroup = NULL;
        FILE *file;
 
+#if ENABLE_FEATURE_ADDUSER_LONG_OPTIONS
+       applet_long_options = adduser_longopts;
+#endif
+
        /* got root? */
        if (geteuid()) {
                bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
@@ -94,6 +111,7 @@ int adduser_main(int argc, char **argv)
 
        /* fill in the passwd struct */
        pw.pw_name = argv[0];
+       die_if_bad_username(pw.pw_name);
        if (!pw.pw_dir) {
                /* create string for $HOME if not specified already */
                pw.pw_dir = xasprintf("/home/%s", argv[0]);
@@ -146,7 +164,7 @@ int adduser_main(int argc, char **argv)
                if (mkdir(pw.pw_dir, 0755)
                 || chown(pw.pw_dir, pw.pw_uid, pw.pw_gid)
                 || chmod(pw.pw_dir, 02755) /* set setgid bit on homedir */
-               ) { 
+               ) {
                        bb_simple_perror_msg(pw.pw_dir);
                }
        }