* 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:
parent
2a5c015cd1
commit
93e2f66a60
@ -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
4
NEWS
@ -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.
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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"),
|
||||||
|
Loading…
Reference in New Issue
Block a user