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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
18
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
19 -D Don't assign a password
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
20 -g NAME Real name
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
44 char *s = *toys.optargs, *entry;
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
45 struct passwd pwd;
1091
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
46
1476
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
47 // Act like groupadd?
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
48 if (toys.optc == 2) {
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
49 if (toys.optflags) {
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
50 toys.exithelp = 1;
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
51 error_exit("options with USER GROUP");
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
52 }
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
53 xexec((char *[]){"groupadd", toys.optargs[0], toys.optargs[1], 0});
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
54 }
1091
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
55
1476
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
59 // race condition: two adds at same time?
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
62 // Add a new group to the system, if UID is given then that is validated
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
63 // to be free, else a free UID is choosen by self.
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
64 // SYSTEM IDs are considered in the range 100 ... 999
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
67 pwd.pw_name = s;
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
68 pwd.pw_passwd = "x";
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
69 pwd.pw_gecos = TT.gecos ? TT.gecos : "Linux User,";
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
72 if (!TT.shell) {
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
73 TT.shell = getenv("SHELL");
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
74
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
75 if (!TT.shell) {
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
78 if (pw && pw->pw_shell && *pw->pw_shell) TT.shell = xstrdup(pw->pw_shell);
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
79 else TT.shell = "/bin/sh";
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
80 }
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
81 }
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
108 char *s = xmprintf("-g%ld", pwd.pw_gid);
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
109
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
110 if (xrun((char *[]){"groupadd", *toys.optargs, s, 0}))
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
111 error_msg("addgroup -g%ld fail", pwd.pw_gid);
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
135 // create home dir & copy skel dir to home
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
136 if (!(toys.optflags & (FLAG_S|FLAG_H))) {
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
137 char *skel = "/etc/skel", *p = pwd.pw_dir;
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
138
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
139 // Copy and change ownership
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
140 if (access(p, F_OK)) {
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
141 if (!access(skel, R_OK))
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
142 toys.exitval = xrun((char *[]){"cp", "-R", skel, p, 0});
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
143 else toys.exitval = xrun((char *[]){"mkdir", "-p", p, 0});
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
144 if (!toys.exitval)
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
145 toys.exitval |= xrun((char *[]){"chown", "-R",
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
146 xmprintf("%u:%u", TT.uid, TT.gid), p, 0});
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
147 wfchmodat(AT_FDCWD, p, 0700);
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
148 } else fprintf(stderr, "'%s' exists, not copying '%s'", p, skel);
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
152 if (!(toys.optflags & FLAG_D))
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
153 if (xrun((char *[]){"passwd", pwd.pw_name, 0})) error_exit("passwd");
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
157 if (xrun((char *[]){"groupadd", *toys.optargs, TT.u_grp, 0}))
3ca7dc4c2a50 Cleanup pass on useradd.
Rob Landley <rob@landley.net>
parents: 1439
diff changeset
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 }