Mercurial > hg > toybox
annotate toys/pending/useradd.c @ 1776:7bf68329eb3b draft default tip
Repository switched to git at https://github.com/landley/toybox
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 09 Apr 2015 02:28:32 -0500 |
parents | 5fac2769a159 |
children |
rev | line source |
---|---|
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
1 /* useradd.c - add a new user |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 * |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
3 * Copyright 2013 Ashwini Kumar <ak.ashwini@gmail.com> |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com> |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
5 * |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
6 * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/useradd.html |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
7 |
1476 | 8 USE_USERADD(NEWTOY(useradd, "<1>2u#<0G:s:g:h:SDH", TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) |
1634
5fac2769a159
Redo option parsing infrastructure so #define FORCE_FLAGS can unzero flag macros for a disabled command (needed when multiple commands share infrastructure with a common set of flags).
Rob Landley <rob@landley.net>
parents:
1500
diff
changeset
|
9 USE_USERADD(OLDTOY(adduser, useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN)) |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
10 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
11 config USERADD |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
12 bool "useradd" |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
13 default n |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
14 help |
1476 | 15 usage: useradd [-SDH] [-h DIR] [-s SHELL] [-G GRP] [-g NAME] [-u UID] USER [GROUP] |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
16 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
17 Create new user, or add USER to GROUP |
1476 | 18 |
19 -D Don't assign a password | |
20 -g NAME Real name | |
21 -G GRP Add user to existing group | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
22 -h DIR Home directory |
1476 | 23 -H Don't create home directory |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
24 -s SHELL Login shell |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
25 -S Create a system user |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
26 -u UID User id |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
27 */ |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
28 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
29 #define FOR_useradd |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
30 #include "toys.h" |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
31 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
32 GLOBALS( |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
33 char *dir; |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
34 char *gecos; |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
35 char *shell; |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
36 char *u_grp; |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
37 long uid; |
1476 | 38 |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
39 long gid; |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
40 ) |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
41 |
1476 | 42 void useradd_main(void) |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
43 { |
1476 | 44 char *s = *toys.optargs, *entry; |
45 struct passwd pwd; | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
46 |
1476 | 47 // Act like groupadd? |
48 if (toys.optc == 2) { | |
49 if (toys.optflags) { | |
50 toys.exithelp = 1; | |
51 error_exit("options with USER GROUP"); | |
52 } | |
53 xexec((char *[]){"groupadd", toys.optargs[0], toys.optargs[1], 0}); | |
54 } | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
55 |
1476 | 56 // Sanity check user to add |
1500
cf77c4939385
The only illegal characters in a username are ":" (field separator), "\n" (line separator), and "/" (filename separator).
Rob Landley <rob@landley.net>
parents:
1476
diff
changeset
|
57 if (s[strcspn(s, ":/\n")] || strlen(s) > LOGIN_NAME_MAX) |
cf77c4939385
The only illegal characters in a username are ":" (field separator), "\n" (line separator), and "/" (filename separator).
Rob Landley <rob@landley.net>
parents:
1476
diff
changeset
|
58 error_exit("bad username"); |
1476 | 59 // race condition: two adds at same time? |
60 if (getpwnam(s)) error_exit("'%s' in use", s); | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
61 |
1476 | 62 // Add a new group to the system, if UID is given then that is validated |
63 // to be free, else a free UID is choosen by self. | |
64 // SYSTEM IDs are considered in the range 100 ... 999 | |
65 // add_user(), add a new entry in /etc/passwd, /etc/shadow files | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
66 |
1476 | 67 pwd.pw_name = s; |
68 pwd.pw_passwd = "x"; | |
69 pwd.pw_gecos = TT.gecos ? TT.gecos : "Linux User,"; | |
70 pwd.pw_dir = TT.dir ? TT.dir : xmprintf("/home/%s", *toys.optargs); | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
71 |
1476 | 72 if (!TT.shell) { |
73 TT.shell = getenv("SHELL"); | |
74 | |
75 if (!TT.shell) { | |
76 struct passwd *pw = getpwuid(getuid()); | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
77 |
1476 | 78 if (pw && pw->pw_shell && *pw->pw_shell) TT.shell = xstrdup(pw->pw_shell); |
79 else TT.shell = "/bin/sh"; | |
80 } | |
81 } | |
82 pwd.pw_shell = TT.shell; | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
83 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
84 if (toys.optflags & FLAG_u) { |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
85 if (TT.uid > INT_MAX) error_exit("bad uid"); |
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
86 if (getpwuid(TT.uid)) error_exit("uid '%ld' in use", TT.uid); |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
87 } else { |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
88 if (toys.optflags & FLAG_S) TT.uid = CFG_TOYBOX_UID_SYS; |
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
89 else TT.uid = CFG_TOYBOX_UID_USR; |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
90 //find unused uid |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
91 while (getpwuid(TT.uid)) TT.uid++; |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
92 } |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
93 pwd.pw_uid = TT.uid; |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
94 |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
95 if (toys.optflags & FLAG_G) TT.gid = xgetgrnam(TT.u_grp)->gr_gid; |
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
96 else { |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
97 // Set the GID for the user, if not specified |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
98 if (toys.optflags & FLAG_S) TT.gid = CFG_TOYBOX_UID_SYS; |
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
99 else TT.gid = CFG_TOYBOX_UID_USR; |
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
100 if (getgrnam(pwd.pw_name)) error_exit("group '%s' in use", pwd.pw_name); |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
101 //find unused gid |
1439
ed28d4d9558d
Cleanups on useradd/groupadd/groupdel, and put TOYBOX_UID_SYS and TOYBOX_UID_USR in the top level Config.
Rob Landley <rob@landley.net>
parents:
1347
diff
changeset
|
102 while (getgrgid(TT.gid)) TT.gid++; |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
103 } |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
104 pwd.pw_gid = TT.gid; |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
105 |
1476 | 106 // Create a new group for user |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
107 if (!(toys.optflags & FLAG_G)) { |
1476 | 108 char *s = xmprintf("-g%ld", pwd.pw_gid); |
109 | |
110 if (xrun((char *[]){"groupadd", *toys.optargs, s, 0})) | |
111 error_msg("addgroup -g%ld fail", pwd.pw_gid); | |
112 free(s); | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
113 } |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
114 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
115 /*add user to system |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
116 * 1. add an entry to /etc/passwd and /etcshadow file |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
117 * 2. Copy /etc/skel dir contents to use home dir |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
118 * 3. update the user passwd by running 'passwd' utility |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
119 */ |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
120 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
121 // 1. add an entry to /etc/passwd and /etc/shadow file |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1091
diff
changeset
|
122 entry = xmprintf("%s:%s:%ld:%ld:%s:%s:%s", pwd.pw_name, pwd.pw_passwd, |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
123 pwd.pw_uid, pwd.pw_gid, pwd.pw_gecos, pwd.pw_dir, pwd.pw_shell); |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
124 if (update_password("/etc/passwd", pwd.pw_name, entry)) error_exit("updating passwd file failed"); |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
125 free(entry); |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
126 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
127 if (toys.optflags & FLAG_S) |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1091
diff
changeset
|
128 entry = xmprintf("%s:!!:%u::::::", pwd.pw_name, |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
129 (unsigned)(time(NULL))/(24*60*60)); //passwd is not set initially |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1091
diff
changeset
|
130 else entry = xmprintf("%s:!!:%u:%ld:%ld:%ld:::", pwd.pw_name, |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
131 (unsigned)(time(NULL))/(24*60*60), 0, 99999, 7); //passwd is not set initially |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
132 update_password("/etc/shadow", pwd.pw_name, entry); |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
133 free(entry); |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
134 |
1476 | 135 // create home dir & copy skel dir to home |
136 if (!(toys.optflags & (FLAG_S|FLAG_H))) { | |
137 char *skel = "/etc/skel", *p = pwd.pw_dir; | |
138 | |
139 // Copy and change ownership | |
140 if (access(p, F_OK)) { | |
141 if (!access(skel, R_OK)) | |
142 toys.exitval = xrun((char *[]){"cp", "-R", skel, p, 0}); | |
143 else toys.exitval = xrun((char *[]){"mkdir", "-p", p, 0}); | |
144 if (!toys.exitval) | |
145 toys.exitval |= xrun((char *[]){"chown", "-R", | |
146 xmprintf("%u:%u", TT.uid, TT.gid), p, 0}); | |
147 wfchmodat(AT_FDCWD, p, 0700); | |
148 } else fprintf(stderr, "'%s' exists, not copying '%s'", p, skel); | |
149 } | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
150 |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
151 //3. update the user passwd by running 'passwd' utility |
1476 | 152 if (!(toys.optflags & FLAG_D)) |
153 if (xrun((char *[]){"passwd", pwd.pw_name, 0})) error_exit("passwd"); | |
154 | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
155 if (toys.optflags & FLAG_G) { |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
156 /*add user to the existing group, invoke addgroup command */ |
1476 | 157 if (xrun((char *[]){"groupadd", *toys.optargs, TT.u_grp, 0})) |
158 error_exit("groupadd"); | |
1091
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
159 } |
c4d4a6e7473f
useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
160 } |