Submitted By: Matt Burgess (matthew at linuxfromscratch dot org)
Date: 2007-03-18
Initial Package Version: 4.0.18.1
Origin: useradd and usermod '-g' handling from
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=381394. Removal of
GROUP handling Matt Burgess
Upstream Status: useradd and usermod '-g' handling submitted
Removal of GROUP handling awaiting test feedback
Description: Fixes an issue whereby the '-g' switch to useradd and usermod don't
accept group names. Also removes all handling of the GROUP default
read from /etc/default/useradd as it's no longer used.
diff -Naur shadow-4.0.18.1.orig/etc/useradd shadow-4.0.18.1/etc/useradd
--- shadow-4.0.18.1.orig/etc/useradd 2003-05-07 14:04:53.000000000 +0000
+++ shadow-4.0.18.1/etc/useradd 2007-03-15 20:41:43.000000000 +0000
@@ -1,5 +1,4 @@
# useradd defaults file
-GROUP=1000
HOME=/home/users
INACTIVE=-1
EXPIRE=
diff -Naur shadow-4.0.18.1.orig/man/useradd.8 shadow-4.0.18.1/man/useradd.8
--- shadow-4.0.18.1.orig/man/useradd.8 2006-07-30 20:54:26.000000000 +0000
+++ shadow-4.0.18.1/man/useradd.8 2007-03-15 20:43:40.000000000 +0000
@@ -146,9 +146,6 @@
\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
The number of days after a password has expired before the account will be disabled.
.TP 3n
-\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
-The group name or ID for a new user's initial group. The named group must exist, and a numerical group ID must have an existing entry.
-.TP 3n
\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
The name of the new user's login shell. The named program will be used for all future new user accounts.
.PP
diff -Naur shadow-4.0.18.1.orig/man/useradd.8.xml shadow-4.0.18.1/man/useradd.8.xml
--- shadow-4.0.18.1.orig/man/useradd.8.xml 2006-07-24 05:48:36.000000000 +0000
+++ shadow-4.0.18.1/man/useradd.8.xml 2007-03-15 20:41:43.000000000 +0000
@@ -300,19 +300,6 @@
- ,
- GROUP
-
-
-
- The group name or ID for a new user's initial group. The named
- group must exist, and a numerical group ID must have an
- existing entry.
-
-
-
-
-
,
SHELL
diff -Naur shadow-4.0.18.1.orig/src/useradd.c shadow-4.0.18.1/src/useradd.c
--- shadow-4.0.18.1.orig/src/useradd.c 2006-07-28 17:42:48.000000000 +0000
+++ shadow-4.0.18.1/src/useradd.c 2007-03-15 20:41:43.000000000 +0000
@@ -148,7 +148,6 @@
#define E_HOMEDIR 12 /* can't create home directory */
#define E_MAIL_SPOOL 13 /* can't create mail spool */
-#define DGROUP "GROUP="
#define HOME "HOME="
#define SHELL "SHELL="
#define INACT "INACTIVE="
@@ -203,13 +202,17 @@
long gid;
char *errptr;
+ struct group* grp = getgrnam (grname);
+ if (grp)
+ return grp;
+
gid = strtol (grname, &errptr, 10);
if (*errptr || errno == ERANGE || gid < 0) {
fprintf (stderr,
_("%s: invalid numeric argument '%s'\n"), Prog, grname);
exit (E_BAD_ARG);
}
- return getgrnam (grname);
+ return getgrgid (gid);
}
static long get_number (const char *numstr)
@@ -278,33 +281,9 @@
cp++;
/*
- * Primary GROUP identifier
- */
- if (MATCH (buf, DGROUP)) {
- unsigned int val = (unsigned int) strtoul (cp, &ep, 10);
-
- if (*cp != '\0' && *ep == '\0') { /* valid number */
- def_group = val;
- if ((grp = getgrgid (def_group))) {
- def_gname = xstrdup (grp->gr_name);
- } else {
- fprintf (stderr,
- _("%s: unknown GID %s\n"),
- Prog, cp);
- }
- } else if ((grp = getgrnam (cp))) {
- def_group = grp->gr_gid;
- def_gname = xstrdup (cp);
- } else {
- fprintf (stderr,
- _("%s: unknown group %s\n"), Prog, cp);
- }
- }
-
- /*
* Default HOME filesystem
*/
- else if (MATCH (buf, HOME)) {
+ if (MATCH (buf, HOME)) {
def_home = xstrdup (cp);
}
@@ -425,10 +404,7 @@
if ((cp = strrchr (buf, '\n')))
*cp = '\0';
- if (!out_group && MATCH (buf, DGROUP)) {
- fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
- out_group++;
- } else if (!out_home && MATCH (buf, HOME)) {
+ if (!out_home && MATCH (buf, HOME)) {
fprintf (ofp, HOME "%s\n", def_home);
out_home++;
} else if (!out_inactive && MATCH (buf, INACT)) {
@@ -459,8 +435,6 @@
* causes new values to be added to a file which did not previously
* have an entry for that value.
*/
- if (!out_group)
- fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
if (!out_home)
fprintf (ofp, HOME "%s\n", def_home);
if (!out_inactive)
@@ -1118,12 +1092,7 @@
Prog, optarg);
exit (E_NOTFOUND);
}
- if (Dflg) {
- def_group = grp->gr_gid;
- def_gname = optarg;
- } else {
- user_gid = grp->gr_gid;
- }
+ user_gid = grp->gr_gid;
gflg++;
break;
case 'G':
@@ -1210,13 +1179,13 @@
/*
* Either -D or username is required. Defaults can be set with -D
- * for the -b, -e, -f, -g, -s options only.
+ * for the -b, -e, -f, -s options only.
*/
if (Dflg) {
if (optind != argc)
usage ();
- if (uflg || oflg || Gflg || dflg || cflg || mflg)
+ if (uflg || oflg || gflg || Gflg || dflg || cflg || mflg)
usage ();
} else {
if (optind != argc - 1)
@@ -1711,7 +1680,7 @@
* a new user.
*/
if (Dflg) {
- if (gflg || bflg || fflg || eflg || sflg)
+ if (bflg || fflg || eflg || sflg)
exit (set_defaults ()? 1 : 0);
show_defaults ();
diff -Naur shadow-4.0.18.1.orig/src/usermod.c shadow-4.0.18.1/src/usermod.c
--- shadow-4.0.18.1.orig/src/usermod.c 2006-07-28 17:42:48.000000000 +0000
+++ shadow-4.0.18.1/src/usermod.c 2007-03-15 20:41:43.000000000 +0000
@@ -165,13 +165,17 @@
long val;
char *errptr;
+ struct group* grp = getgrnam (grname);
+ if (grp)
+ return grp;
+
val = strtol (grname, &errptr, 10);
if (*errptr || errno == ERANGE || val < 0) {
fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog,
grname);
exit (E_BAD_ARG);
}
- return getgrnam (grname);
+ return getgrgid (val);
}
/*