* 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.
This commit is contained in:
nekral-guest 2008-02-25 21:03:46 +00:00
parent 2a5c015cd1
commit 93e2f66a60
5 changed files with 104 additions and 8 deletions

View File

@ -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> 2008-02-19 Nicolas François <nicolas.francois@centraliens.net>
* src/groupmod.c: Add missing 'p' to the getopt_long's optstring. * src/groupmod.c: Add missing 'p' to the getopt_long's optstring.

4
NEWS
View File

@ -70,6 +70,10 @@ shadow-4.1.0 -> shadow-4.1.1 UNRELEASED
* Document the --defaults option, which was already described in the * Document the --defaults option, which was already described in the
useradd's Usage information. useradd's Usage information.
* New option -r, --system for system accounts. * 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 - usermod
* Keep the access and modification time of files when moving an user's home * Keep the access and modification time of files when moving an user's home
directory. directory.

View File

@ -7,8 +7,10 @@
the same as gid, and username is the same as the primary group name. the same as gid, and username is the same as the primary group name.
<para> <para>
</para> </para>
If set to <replaceable>yes</replaceable>, userdel will remove the If set to <replaceable>yes</replaceable>, <command>userdel</command>
user's group if it contains no more members. 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> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -7,8 +7,11 @@
<!ENTITY PASS_MAX_DAYS SYSTEM "login.defs.d/PASS_MAX_DAYS.xml"> <!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_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.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 UID_MAX SYSTEM "login.defs.d/UID_MAX.xml">
<!ENTITY UMASK SYSTEM "login.defs.d/UMASK.xml"> <!ENTITY UMASK SYSTEM "login.defs.d/UMASK.xml">
<!ENTITY USERGROUPS_ENAB SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
]> ]>
<refentry id='useradd.8'> <refentry id='useradd.8'>
<!-- $Id$ --> <!-- $Id$ -->
@ -238,6 +241,25 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </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> <varlistentry>
<term> <term>
<option>-o</option>, <option>--non-unique</option> <option>-o</option>, <option>--non-unique</option>
@ -287,6 +309,23 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </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> </variablelist>
<refsect2 id='changing_the_default_values'> <refsect2 id='changing_the_default_values'>
@ -405,8 +444,11 @@
&PASS_MAX_DAYS; &PASS_MAX_DAYS;
&PASS_MIN_DAYS; &PASS_MIN_DAYS;
&PASS_WARN_AGE; &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 --> &UID_MAX; <!-- documents also UID_MIN -->
&UMASK; &UMASK;
&USERGROUPS_ENAB;
</variablelist> </variablelist>
</refsect1> </refsect1>

View File

@ -126,11 +126,12 @@ static int
kflg = 0, /* specify a directory to fill new user directory */ kflg = 0, /* specify a directory to fill new user directory */
lflg = 0, /* do not add user to lastlog database file */ lflg = 0, /* do not add user to lastlog database file */
mflg = 0, /* create user's home directory if it doesn't exist */ 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 */ oflg = 0, /* permit non-unique user ID to be specified with -u */
rflg = 0, /* create a system account */ rflg = 0, /* create a system account */
sflg = 0, /* shell program for new 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; static int home_added;
@ -633,6 +634,8 @@ static void usage (void)
" faillog databases\n" " faillog databases\n"
" -m, --create-home create home directory for the new user\n" " -m, --create-home create home directory for the new user\n"
" account\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" " -o, --non-unique allow create user with duplicate\n"
" (non-unique) UID\n" " (non-unique) UID\n"
" -p, --password PASSWORD use encrypted password for the new user\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" " -r, --system create a system account\n"
" -s, --shell SHELL the login shell for the new user 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, --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); "\n"), stderr);
exit (E_USAGE); exit (E_USAGE);
} }
@ -850,15 +854,17 @@ static void process_flags (int argc, char **argv)
{"skel", required_argument, NULL, 'k'}, {"skel", required_argument, NULL, 'k'},
{"key", required_argument, NULL, 'K'}, {"key", required_argument, NULL, 'K'},
{"create-home", no_argument, NULL, 'm'}, {"create-home", no_argument, NULL, 'm'},
{"no-user-group", no_argument, NULL, 'N'},
{"non-unique", no_argument, NULL, 'o'}, {"non-unique", no_argument, NULL, 'o'},
{"password", required_argument, NULL, 'p'}, {"password", required_argument, NULL, 'p'},
{"system", no_argument, NULL, 'r'}, {"system", no_argument, NULL, 'r'},
{"shell", required_argument, NULL, 's'}, {"shell", required_argument, NULL, 's'},
{"uid", required_argument, NULL, 'u'}, {"uid", required_argument, NULL, 'u'},
{"user-group", no_argument, NULL, 'U'},
{NULL, 0, NULL, '\0'} {NULL, 0, NULL, '\0'}
}; };
while ((c = 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) { long_options, NULL)) != -1) {
switch (c) { switch (c) {
case 'b': case 'b':
@ -998,6 +1004,9 @@ static void process_flags (int argc, char **argv)
case 'm': case 'm':
mflg++; mflg++;
break; break;
case 'N':
Nflg++;
break;
case 'o': case 'o':
oflg++; oflg++;
break; break;
@ -1033,6 +1042,9 @@ static void process_flags (int argc, char **argv)
user_id = get_uid (optarg); user_id = get_uid (optarg);
uflg++; uflg++;
break; break;
case 'U':
Uflg++;
break;
default: default:
usage (); 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. * Certain options are only valid in combination with others.
* Check it here so that they can be specified in any order. * 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 (); 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 * 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. * to that group, use useradd -g username username.
* --bero * --bero
*/ */
if (!gflg) { if (Uflg) {
if (getgrnam (user_name)) { /* local, no need for xgetgrnam */ if (getgrnam (user_name)) { /* local, no need for xgetgrnam */
fprintf (stderr, 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 /* 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 */ * 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) { if (find_new_gid (rflg, &user_gid, &user_id) < 0) {
fprintf (stderr, fprintf (stderr,
_("%s: can't create group\n"), _("%s: can't create group\n"),