]> git.wh0rd.org Git - patches.git/blob - shadow-fix-useradd-usergroups.patch
initial import
[patches.git] / shadow-fix-useradd-usergroups.patch
1 Index: src/useradd.c
2 ===================================================================
3 RCS file: /cvsroot/shadow/src/useradd.c,v
4 retrieving revision 1.96
5 diff -u -p -r1.96 useradd.c
6 --- src/useradd.c       30 May 2006 18:28:45 -0000      1.96
7 +++ src/useradd.c       10 Jun 2006 22:13:32 -0000
8 @@ -114,7 +114,7 @@ static int do_grp_update = 0;       /* group f
9  static char *Prog;
10  
11  static int
12 - bflg = 0,                     /* new default root of home directory */
13 +    bflg = 0,                  /* new default root of home directory */
14      cflg = 0,                  /* comment (GECOS) field for new account */
15      dflg = 0,                  /* home directory for new account */
16      Dflg = 0,                  /* set/show new user default values */
17 @@ -253,6 +253,12 @@ static void get_defaults (void)
18         const struct group *grp;
19  
20         /*
21 +        * Pull relevant settings from login.defs first.
22 +        */
23 +       if (getdef_bool ("USERGROUPS_ENAB"))
24 +               nflg = -1;
25 +
26 +       /*
27          * Open the defaults file for reading.
28          */
29  
30 @@ -628,6 +634,8 @@ static void usage (void)
31                            "  -K, --key KEY=VALUE               overrides /etc/login.defs defaults\n"
32                            "  -m, --create-home         create home directory for the new user\n"
33                            "                            account\n"
34 +                          "  -n, --user-group          create a new group with the same name as the\n"
35 +                          "                            new user\n"
36                            "  -o, --non-unique          allow create user with duplicate\n"
37                            "                            (non-unique) UID\n"
38                            "  -p, --password PASSWORD   use encrypted password for the new user\n"
39 @@ -1009,6 +1017,7 @@ static void process_flags (int argc, cha
40                         {"skel", required_argument, NULL, 'k'},
41                         {"key", required_argument, NULL, 'K'},
42                         {"create-home", no_argument, NULL, 'm'},
43 +                       {"user-group", no_argument, NULL, 'n'},
44                         {"non-unique", no_argument, NULL, 'o'},
45                         {"password", required_argument, NULL, 'p'},
46                         {"shell", required_argument, NULL, 's'},
47 @@ -1016,7 +1025,7 @@ static void process_flags (int argc, cha
48                         {NULL, 0, NULL, '\0'}
49                 };
50                 while ((c =
51 -                       getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:mMop:s:u:",
52 +                       getopt_long (argc, argv, "b:c:d:De:f:g:G:k:K:mMnop:s:u:",
53                                      long_options, NULL)) != -1) {
54                         switch (c) {
55                         case 'b':
56 @@ -1156,6 +1165,9 @@ static void process_flags (int argc, cha
57                         case 'm':
58                                 mflg++;
59                                 break;
60 +                       case 'n':
61 +                               nflg = 1;
62 +                               break;
63                         case 'o':
64                                 oflg++;
65                                 break;
66 @@ -1203,6 +1215,16 @@ static void process_flags (int argc, cha
67                 usage ();
68  
69         /*
70 +        * Using --gid and --user-group doesn't make sense.
71 +        */
72 +       if (nflg == -1 && gflg)
73 +               nflg = 0;
74 +       if (nflg && gflg) {
75 +               fprintf (stderr, _("%s: options -g and -n conflict\n"), Prog);
76 +               exit (E_BAD_ARG);
77 +       }
78 +
79 +       /*
80          * Either -D or username is required. Defaults can be set with -D
81          * for the -b, -e, -f, -g, -s options only.
82          */
83 @@ -1725,7 +1747,7 @@ int main (int argc, char **argv)
84          * to that group, use useradd -g username username.
85          * --bero
86          */
87 -       if (!gflg) {
88 +       if (nflg) {
89                 if (getgrnam (user_name)) {
90                         fprintf (stderr,
91                                  _
92 @@ -1759,7 +1781,7 @@ int main (int argc, char **argv)
93  
94         /* do we have to add a group for that user? This is why we need to
95          * open the group files in the open_files() function  --gafton */
96 -       if (!(nflg || gflg)) {
97 +       if (nflg) {
98                 find_new_gid ();
99                 grp_add ();
100         }
101 Index: man/useradd.8.xml
102 ===================================================================
103 RCS file: /cvsroot/shadow/man/useradd.8.xml,v
104 retrieving revision 1.34
105 diff -u -p -r1.34 useradd.8.xml
106 --- man/useradd.8.xml   20 May 2006 12:11:38 -0000      1.34
107 +++ man/useradd.8.xml   10 Jun 2006 22:17:13 -0000
108 @@ -204,6 +204,19 @@
109        </varlistentry>
110        <varlistentry>
111         <term>
112 +         <option>-n</option>, <option>--user-group</option>
113 +       </term>
114 +       <listitem>
115 +         <para>
116 +           Create a new group with the same name as the new user.
117 +         </para>
118 +         <para>
119 +           See the <replaceable>USERGROUPS_ENAB</replaceable> login.defs option for more details.
120 +         </para>
121 +       </listitem>
122 +      </varlistentry>
123 +      <varlistentry>
124 +       <term>
125           <option>-o</option>, <option>--non-unique</option>
126         </term>
127         <listitem>