Deleted Added
full compact
pwupd.c (33259) pwupd.c (44229)
1/*-
2 * Copyright (C) 1996
3 * David L. Nugent. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 12 unchanged lines hidden (view full) ---

21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#ifndef lint
28static const char rcsid[] =
1/*-
2 * Copyright (C) 1996
3 * David L. Nugent. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 12 unchanged lines hidden (view full) ---

21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#ifndef lint
28static const char rcsid[] =
29 "$Id: pwupd.c,v 1.6 1997/10/10 06:23:41 charnier Exp $";
29 "$Id: pwupd.c,v 1.7 1998/02/11 23:31:24 wosch Exp $";
30#endif /* not lint */
31
32#include <stdio.h>
33#include <stdlib.h>
34#include <string.h>
35#include <unistd.h>
36#include <stdarg.h>
37#include <errno.h>
38#include <sys/types.h>
39#include <sys/stat.h>
30#endif /* not lint */
31
32#include <stdio.h>
33#include <stdlib.h>
34#include <string.h>
35#include <unistd.h>
36#include <stdarg.h>
37#include <errno.h>
38#include <sys/types.h>
39#include <sys/stat.h>
40#include <sys/param.h>
40#include <sys/wait.h>
41
42#include "pwupd.h"
43
44#define HAVE_PWDB_C 1
45
41#include <sys/wait.h>
42
43#include "pwupd.h"
44
45#define HAVE_PWDB_C 1
46
46static int
47static char pathpwd[] = _PATH_PWD;
48static char * pwpath = pathpwd;
49
50int
51setpwdir(const char * dir)
52{
53 if (dir == NULL)
54 return -1;
55 else {
56 char * d = malloc(strlen(dir)+1);
57 if (d == NULL)
58 return -1;
59 pwpath = strcpy(d, dir);
60 }
61 return 0;
62}
63
64char *
65getpwpath(char const * file)
66{
67 static char pathbuf[MAXPATHLEN];
68
69 snprintf(pathbuf, sizeof pathbuf, "%s/%s", pwpath, file);
70 return pathbuf;
71}
72
73int
47pwdb(char *arg,...)
48{
49 int i = 0;
50 pid_t pid;
51 va_list ap;
74pwdb(char *arg,...)
75{
76 int i = 0;
77 pid_t pid;
78 va_list ap;
52 char *args[8];
79 char *args[10];
53
54 args[i++] = _PATH_PWD_MKDB;
55 va_start(ap, arg);
56 while (i < 6 && arg != NULL) {
57 args[i++] = arg;
58 arg = va_arg(ap, char *);
59 }
80
81 args[i++] = _PATH_PWD_MKDB;
82 va_start(ap, arg);
83 while (i < 6 && arg != NULL) {
84 args[i++] = arg;
85 arg = va_arg(ap, char *);
86 }
60 args[i++] = _PATH_MASTERPASSWD;
87 if (pwpath != pathpwd) {
88 args[i++] = "-d";
89 args[i++] = pwpath;
90 }
91 args[i++] = getpwpath(_MASTERPASSWD);
61 args[i] = NULL;
62
63 if ((pid = fork()) == -1) /* Error (errno set) */
64 i = -1;
65 else if (pid == 0) { /* Child */
66 execv(args[0], args);
67 _exit(1);
68 } else { /* Parent */

--- 34 unchanged lines hidden (view full) ---

103 return fmtpwentry(buf, pwd, PWF_STANDARD);
104}
105
106static int
107pw_update(struct passwd * pwd, char const * user, int mode)
108{
109 int rc = 0;
110
92 args[i] = NULL;
93
94 if ((pid = fork()) == -1) /* Error (errno set) */
95 i = -1;
96 else if (pid == 0) { /* Child */
97 execv(args[0], args);
98 _exit(1);
99 } else { /* Parent */

--- 34 unchanged lines hidden (view full) ---

134 return fmtpwentry(buf, pwd, PWF_STANDARD);
135}
136
137static int
138pw_update(struct passwd * pwd, char const * user, int mode)
139{
140 int rc = 0;
141
111 endpwent();
142 ENDPWENT();
112
113 /*
114 * First, let's check the see if the database is alright
115 * Note: -C is only available in FreeBSD 2.2 and above
116 */
117#ifdef HAVE_PWDB_C
118 if (pwdb("-C", NULL) == 0) { /* Check only */
119#else

--- 5 unchanged lines hidden (view full) ---

125
126 /*
127 * Update the passwd file first
128 */
129 if (pwd == NULL)
130 *pwbuf = '\0';
131 else
132 fmtpwentry(pwbuf, pwd, PWF_PASSWD);
143
144 /*
145 * First, let's check the see if the database is alright
146 * Note: -C is only available in FreeBSD 2.2 and above
147 */
148#ifdef HAVE_PWDB_C
149 if (pwdb("-C", NULL) == 0) { /* Check only */
150#else

--- 5 unchanged lines hidden (view full) ---

156
157 /*
158 * Update the passwd file first
159 */
160 if (pwd == NULL)
161 *pwbuf = '\0';
162 else
163 fmtpwentry(pwbuf, pwd, PWF_PASSWD);
133 if ((rc = fileupdate(_PATH_PASSWD, 0644, pwbuf, pfx, l, mode)) != 0) {
164 if ((rc = fileupdate(getpwpath(_PASSWD), 0644, pwbuf, pfx, l, mode)) != 0) {
134
135 /*
136 * Then the master.passwd file
137 */
138 if (pwd != NULL)
139 fmtpwentry(pwbuf, pwd, PWF_MASTER);
165
166 /*
167 * Then the master.passwd file
168 */
169 if (pwd != NULL)
170 fmtpwentry(pwbuf, pwd, PWF_MASTER);
140 if ((rc = fileupdate(_PATH_MASTERPASSWD, 0644, pwbuf, pfx, l, mode)) != 0)
171 if ((rc = fileupdate(getpwpath(_MASTERPASSWD), 0644, pwbuf, pfx, l, mode)) != 0)
141 rc = pwdb(NULL) == 0;
142 }
143 }
144 return rc;
145}
146
147int
148addpwent(struct passwd * pwd)

--- 15 unchanged lines hidden ---
172 rc = pwdb(NULL) == 0;
173 }
174 }
175 return rc;
176}
177
178int
179addpwent(struct passwd * pwd)

--- 15 unchanged lines hidden ---