]>
Commit | Line | Data |
---|---|---|
1 | --- src/useradd.c | |
2 | +++ src/useradd.c | |
3 | @@ -114,7 +114,7 @@ static int do_grp_update = 0; /* group f | |
4 | static char *Prog; | |
5 | ||
6 | static int | |
7 | - bflg = 0, /* new default root of home directory */ | |
8 | + bflg = 0, /* new default root of home directory */ | |
9 | cflg = 0, /* comment (GECOS) field for new account */ | |
10 | dflg = 0, /* home directory for new account */ | |
11 | Dflg = 0, /* set/show new user default values */ | |
12 | @@ -253,6 +253,12 @@ static void get_defaults (void) | |
13 | const struct group *grp; | |
14 | ||
15 | /* | |
16 | + * Pull relevant settings from login.defs first. | |
17 | + */ | |
18 | + if (getdef_bool ("USERGROUPS_ENAB")) | |
19 | + nflg = -1; | |
20 | + | |
21 | + /* | |
22 | * Open the defaults file for reading. | |
23 | */ | |
24 | ||
25 | @@ -628,6 +634,8 @@ static void usage (void) | |
26 | " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n" | |
27 | " -m, --create-home create home directory for the new user\n" | |
28 | " account\n" | |
29 | + " -n, --user-group create a new group with the same name as the\n" | |
30 | + " new user\n" | |
31 | " -o, --non-unique allow create user with duplicate\n" | |
32 | " (non-unique) UID\n" | |
33 | " -p, --password PASSWORD use encrypted password for the new user\n" | |
34 | @@ -1009,6 +1017,7 @@ static void process_flags (int argc, cha | |
35 | {"skel", required_argument, NULL, 'k'}, | |
36 | {"key", required_argument, NULL, 'K'}, | |
37 | {"create-home", no_argument, NULL, 'm'}, | |
38 | + {"user-group", no_argument, NULL, 'n'}, | |
39 | {"non-unique", no_argument, NULL, 'o'}, | |
40 | {"password", required_argument, NULL, 'p'}, | |
41 | {"shell", required_argument, NULL, 's'}, | |
42 | @@ -1016,7 +1025,7 @@ static void process_flags (int argc, cha | |
43 | {NULL, 0, NULL, '\0'} | |
44 | }; | |
45 | while ((c = | |
46 | - getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:mMop:s:u:", | |
47 | + getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:mMnop:s:u:", | |
48 | long_options, NULL)) != -1) { | |
49 | switch (c) { | |
50 | case 'b': | |
51 | @@ -1156,6 +1165,9 @@ static void process_flags (int argc, cha | |
52 | case 'm': | |
53 | mflg++; | |
54 | break; | |
55 | + case 'n': | |
56 | + nflg = 1; | |
57 | + break; | |
58 | case 'o': | |
59 | oflg++; | |
60 | break; | |
61 | @@ -1203,6 +1215,16 @@ static void process_flags (int argc, cha | |
62 | usage (); | |
63 | ||
64 | /* | |
65 | + * Using --gid and --user-group doesn't make sense. | |
66 | + */ | |
67 | + if (nflg == -1 && gflg) | |
68 | + nflg = 0; | |
69 | + if (nflg && gflg) { | |
70 | + fprintf (stderr, _("%s: options -g and -n conflict\n"), Prog); | |
71 | + exit (E_BAD_ARG); | |
72 | + } | |
73 | + | |
74 | + /* | |
75 | * Either -D or username is required. Defaults can be set with -D | |
76 | * for the -b, -e, -f, -g, -s options only. | |
77 | */ | |
78 | @@ -1725,7 +1747,7 @@ int main (int argc, char **argv) | |
79 | * to that group, use useradd -g username username. | |
80 | * --bero | |
81 | */ | |
82 | - if (!gflg) { | |
83 | + if (nflg) { | |
84 | if (getgrnam (user_name)) { | |
85 | fprintf (stderr, | |
86 | _ | |
87 | @@ -1759,7 +1781,7 @@ int main (int argc, char **argv) | |
88 | ||
89 | /* do we have to add a group for that user? This is why we need to | |
90 | * open the group files in the open_files() function --gafton */ | |
91 | - if (!(nflg || gflg)) { | |
92 | + if (nflg) { | |
93 | find_new_gid (); | |
94 | grp_add (); | |
95 | } |