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); } /*