| http://bugs.gentoo.org/128715 |
| |
| exact implementation details are still in discussion upstream, but this fixes |
| the behavior to not suck like current code |
| |
| Index: src/useradd.c |
| =================================================================== |
| RCS file: /cvsroot/shadow/src/useradd.c,v |
| retrieving revision 1.96 |
| diff -u -p -r1.96 useradd.c |
| --- src/useradd.c 30 May 2006 18:28:45 -0000 1.96 |
| +++ src/useradd.c 10 Jun 2006 22:13:32 -0000 |
| @@ -114,7 +114,7 @@ static int do_grp_update = 0; /* group f |
| static char *Prog; |
| |
| static int |
| - bflg = 0, /* new default root of home directory */ |
| + bflg = 0, /* new default root of home directory */ |
| cflg = 0, /* comment (GECOS) field for new account */ |
| dflg = 0, /* home directory for new account */ |
| Dflg = 0, /* set/show new user default values */ |
| @@ -253,6 +253,12 @@ static void get_defaults (void) |
| const struct group *grp; |
| |
| /* |
| + * Pull relevant settings from login.defs first. |
| + */ |
| + if (getdef_bool ("USERGROUPS_ENAB")) |
| + nflg = -1; |
| + |
| + /* |
| * Open the defaults file for reading. |
| */ |
| |
| @@ -628,6 +634,8 @@ static void usage (void) |
| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n" |
| " -m, --create-home create home directory for the new user\n" |
| " account\n" |
| + " -n, --user-group create a new group with the same name as the\n" |
| + " new 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" |
| @@ -1009,6 +1017,7 @@ static void process_flags (int argc, cha |
| {"skel", required_argument, NULL, 'k'}, |
| {"key", required_argument, NULL, 'K'}, |
| {"create-home", no_argument, NULL, 'm'}, |
| + {"user-group", no_argument, NULL, 'n'}, |
| {"non-unique", no_argument, NULL, 'o'}, |
| {"password", required_argument, NULL, 'p'}, |
| {"shell", required_argument, NULL, 's'}, |
| @@ -1016,7 +1025,7 @@ static void process_flags (int argc, cha |
| {NULL, 0, NULL, '\0'} |
| }; |
| while ((c = |
| - getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:mMop:s:u:", |
| + getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:mMnop:s:u:", |
| long_options, NULL)) != -1) { |
| switch (c) { |
| case 'b': |
| @@ -1156,6 +1165,9 @@ static void process_flags (int argc, cha |
| case 'm': |
| mflg++; |
| break; |
| + case 'n': |
| + nflg = 1; |
| + break; |
| case 'o': |
| oflg++; |
| break; |
| @@ -1203,6 +1215,16 @@ static void process_flags (int argc, cha |
| usage (); |
| |
| /* |
| + * Using --gid and --user-group doesn't make sense. |
| + */ |
| + if (nflg == -1 && gflg) |
| + nflg = 0; |
| + if (nflg && gflg) { |
| + fprintf (stderr, _("%s: options -g and -n conflict\n"), Prog); |
| + exit (E_BAD_ARG); |
| + } |
| + |
| + /* |
| * Either -D or username is required. Defaults can be set with -D |
| * for the -b, -e, -f, -g, -s options only. |
| */ |
| @@ -1725,7 +1747,7 @@ int main (int argc, char **argv) |
| * to that group, use useradd -g username username. |
| * --bero |
| */ |
| - if (!gflg) { |
| + if (nflg) { |
| if (getgrnam (user_name)) { |
| fprintf (stderr, |
| _ |
| @@ -1759,7 +1781,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 (nflg) { |
| find_new_gid (); |
| grp_add (); |
| } |