]> granicus.if.org Git - shadow/commitdiff
* NEWS, src/useradd.c, man/useradd.8.xml: Added options
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Mon, 25 Feb 2008 21:03:46 +0000 (21:03 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Mon, 25 Feb 2008 21:03:46 +0000 (21:03 +0000)
  -user-group (-U, Uflg) and --no-user-group (-N, Nflg) to replace
  nflg.
* man/login.defs.d/USERGROUPS_ENAB.xml: useradd now also uses
  USERGROUPS_ENAB.

ChangeLog
NEWS
man/login.defs.d/USERGROUPS_ENAB.xml
man/useradd.8.xml
src/useradd.c

index 7a0eb2e940eb2d89ce956014f5994eb9b5316609..a0387c60587cf417c724f741b4dd8d11948f2d37 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-02-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/useradd.c, man/useradd.8.xml: Added options
+       --user-group (-U, Uflg) and --no-user-group (-N, Nflg) to replace
+       nflg.
+       * man/login.defs.d/USERGROUPS_ENAB.xml: useradd now also uses
+       USERGROUPS_ENAB.
+
+
 2008-02-19  Nicolas François  <nicolas.francois@centraliens.net>
 
        * src/groupmod.c: Add missing 'p' to the getopt_long's optstring.
diff --git a/NEWS b/NEWS
index 9814ce34db4d3cccd44fe0f8ec46f22c265b0ea8..4f492ee960a71ebd76b537c5f3aa125cc51308b0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -70,6 +70,10 @@ shadow-4.1.0 -> shadow-4.1.1                                         UNRELEASED
   * Document the --defaults option, which was already described in the
     useradd's Usage information.
   * New option -r, --system for system accounts.
+  * New options -U, --user-group and -N, --no-user-group. These options
+    should replace nflg from the previous versions. Please set any -n
+    option to deprecated because its meaning differs from one distribution
+    to the other.
 - usermod
   * Keep the access and modification time of files when moving an user's home
     directory.
index f44bbb292c20f57ed98c344fd43bb69bba209592..63ffba5ad7ef5def1deb335761319b2fb93912ef 100644 (file)
@@ -7,8 +7,10 @@
       the same as gid, and username is the same as the primary group name.
     <para>
     </para>
-      If set to <replaceable>yes</replaceable>, userdel will remove the
-      user's group if it contains no more members.
+      If set to <replaceable>yes</replaceable>, <command>userdel</command>
+      will remove the user's group if it contains no more members, and
+      <command>useradd</command> will create by default a group with the
+      name of the user.
     </para>
   </listitem>
 </varlistentry>
index 12c4cfb808537957e5826dd86013efb609d6d4e3..c4df3f8f364c840c1166dd72fabde035ede1157d 100644 (file)
@@ -7,8 +7,11 @@
 <!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
 <!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
 <!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY SYS_GID_MAX           SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYS_UID_MAX           SYSTEM "login.defs.d/SYS_UID_MAX.xml">
 <!ENTITY UID_MAX               SYSTEM "login.defs.d/UID_MAX.xml">
 <!ENTITY UMASK                 SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY USERGROUPS_ENAB       SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
 ]>
 <refentry id='useradd.8'>
   <!--  $Id$ -->
          </para>
        </listitem>
       </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-N</option>, <option>--no-user-group</option>
+       </term>
+       <listitem>
+         <para>
+           Do not create a group with the same name as the user, but
+           add the user to the group specified by the <option>-g</option>
+           option or by the GROUP variable in
+           <filename>/etc/default/useradd</filename>.
+         </para>
+         <para>
+           The default behavior (if the <option>-g</option>,
+           <option>-N</option>, and <option>-U</option> options are not
+           specified) is defined by the <option>USERGROUPS_ENAB</option>
+           variable in <filename>login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
       <varlistentry>
        <term>
          <option>-o</option>, <option>--non-unique</option>
          </para>
        </listitem>
       </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-U</option>, <option>--user-group</option>
+       </term>
+       <listitem>
+         <para>
+           Create a group with the same name as the user, and
+           add the user to this group.
+         </para>
+         <para>
+           The default behavior (if the <option>-g</option>,
+           <option>-N</option>, and <option>-U</option> options are not
+           specified) is defined by the <option>USERGROUPS_ENAB</option>
+           variable in <filename>login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
     </variablelist>
 
     <refsect2 id='changing_the_default_values'>
       &PASS_MAX_DAYS;
       &PASS_MIN_DAYS;
       &PASS_WARN_AGE;
+      &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+      &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
       &UID_MAX; <!-- documents also UID_MIN -->
       &UMASK;
+      &USERGROUPS_ENAB;
     </variablelist>
   </refsect1>
 
index 57cbdfc7e3878c40498d7e7d183ffbd667171c39..5fdc07b578f34e137cf64d67a0207ecab2556e50 100644 (file)
@@ -126,11 +126,12 @@ static int
     kflg = 0,                  /* specify a directory to fill new user directory */
     lflg = 0,                  /* do not add user to lastlog database file */
     mflg = 0,                  /* create user's home directory if it doesn't exist */
-    nflg = 0,                  /* create a group having the same name as the user */
+    Nflg = 0,                  /* do not create a group having the same name as the user, but add the user to def_group (or the group specified with -g) */
     oflg = 0,                  /* permit non-unique user ID to be specified with -u */
     rflg = 0,                  /* create a system account */
     sflg = 0,                  /* shell program for new account */
-    uflg = 0;                  /* specify user ID for new account */
+    uflg = 0,                  /* specify user ID for new account */
+    Uflg = 0;                  /* create a group having the same name as the user */
 
 static int home_added;
 
@@ -633,6 +634,8 @@ static void usage (void)
                 "                                faillog databases\n"
                 "  -m, --create-home             create home directory for the new user\n"
                 "                                account\n"
+                "  -N, --no-user-group           do not create a group with the same name as\n"
+                "                                the user\n"
                 "  -o, --non-unique              allow create user with duplicate\n"
                 "                                (non-unique) UID\n"
                 "  -p, --password PASSWORD       use encrypted password for the new user\n"
@@ -640,6 +643,7 @@ static void usage (void)
                 "  -r, --system                  create a system account\n"
                 "  -s, --shell SHELL             the login shell for the new user account\n"
                 "  -u, --uid UID                 force use the UID for the new user account\n"
+                "  -U, --user-group              create a group with the same name as the user\n"
                 "\n"), stderr);
        exit (E_USAGE);
 }
@@ -850,15 +854,17 @@ static void process_flags (int argc, char **argv)
                        {"skel", required_argument, NULL, 'k'},
                        {"key", required_argument, NULL, 'K'},
                        {"create-home", no_argument, NULL, 'm'},
+                       {"no-user-group", no_argument, NULL, 'N'},
                        {"non-unique", no_argument, NULL, 'o'},
                        {"password", required_argument, NULL, 'p'},
                        {"system", no_argument, NULL, 'r'},
                        {"shell", required_argument, NULL, 's'},
                        {"uid", required_argument, NULL, 'u'},
+                       {"user-group", no_argument, NULL, 'U'},
                        {NULL, 0, NULL, '\0'}
                };
                while ((c =
-                       getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:lmMop:rs:u:",
+                       getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:U",
                                     long_options, NULL)) != -1) {
                        switch (c) {
                        case 'b':
@@ -998,6 +1004,9 @@ static void process_flags (int argc, char **argv)
                        case 'm':
                                mflg++;
                                break;
+                       case 'N':
+                               Nflg++;
+                               break;
                        case 'o':
                                oflg++;
                                break;
@@ -1033,6 +1042,9 @@ static void process_flags (int argc, char **argv)
                                user_id = get_uid (optarg);
                                uflg++;
                                break;
+                       case 'U':
+                               Uflg++;
+                               break;
                        default:
                                usage ();
                        }
@@ -1040,12 +1052,39 @@ static void process_flags (int argc, char **argv)
                }
        }
 
+       if (!gflg && !Nflg && ! Uflg) {
+               /* Get the settings from login.defs */
+               Uflg = getdef_bool ("USERGROUPS_ENAB");
+       }
+
        /*
         * Certain options are only valid in combination with others.
         * Check it here so that they can be specified in any order.
         */
-       if ((oflg && !uflg) || (kflg && !mflg))
+       if (oflg && !uflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is ONLY allowed with the %s flag\n"),
+                        Prog, "-o", "-u");
+               usage ();
+       }
+       if (kflg && !mflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is ONLY allowed with the %s flag\n"),
+                        Prog, "-k", "-m");
                usage ();
+       }
+       if (Uflg && gflg) {
+               fprintf (stderr,
+                        _("%s: options %s and %s conflict\n"),
+                        Prog, "-U", "-g");
+               usage ();
+       }
+       if (Uflg && Nflg) {
+               fprintf (stderr,
+                        _("%s: options %s and %s conflict\n"),
+                        Prog, "-U", "-N");
+               usage ();
+       }
 
        /*
         * Either -D or username is required. Defaults can be set with -D
@@ -1583,7 +1622,7 @@ int main (int argc, char **argv)
         * to that group, use useradd -g username username.
         * --bero
         */
-       if (!gflg) {
+       if (Uflg) {
                if (getgrnam (user_name)) { /* local, no need for xgetgrnam */
                        fprintf (stderr,
                                 _
@@ -1630,7 +1669,7 @@ int main (int argc, char **argv)
 
        /* do we have to add a group for that user? This is why we need to
         * open the group files in the open_files() function  --gafton */
-       if (!(nflg || gflg)) {
+       if (Uflg) {
                if (find_new_gid (rflg, &user_gid, &user_id) < 0) {
                        fprintf (stderr,
                                 _("%s: can't create group\n"),