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 --- |