To apply:
cd /usr/src/usr.bin/chpass
patch -p0 < chpass.patch
Index: chpass.c
===================================================================
RCS file: /cvs/src/usr.bin/chpass/chpass.c,v
retrieving revision 1.10
retrieving revision 1.12
diff -u -r1.10 -r1.12
--- chpass.c 1998/03/30 06:59:28 1.10
+++ chpass.c 1998/08/02 03:35:07 1.12
@@ -90,7 +90,7 @@
enum { NEWSH, LOADENTRY, EDITENTRY } op;
struct passwd *pw, lpw;
int ch, pfd, tfd, dfd;
- char *arg, tempname[] = "/etc/pw.XXXXXX";
+ char *arg, tempname[] = __CONCAT(_PATH_VARTMP,"pw.XXXXXXXX");
#ifdef YP
use_yp = _yp_check(NULL);
@@ -181,20 +181,20 @@
/* Get the passwd lock file and open the passwd file for reading. */
pw_init();
tfd = pw_lock(0);
- if (tfd < 0) {
+ if (tfd == -1 || fcntl(tfd, F_SETFD, 1) == -1) {
if (errno == EEXIST)
errx(1, "the passwd file is busy.");
else
err(1, "can't open passwd temp file");
}
pfd = open(_PATH_MASTERPASSWD, O_RDONLY, 0);
- if (pfd < 0)
+ if (pfd == -1 || fcntl(pfd, F_SETFD, 1) == -1)
pw_error(_PATH_MASTERPASSWD, 1, 1);
/* Edit the user passwd information if requested. */
if (op == EDITENTRY) {
dfd = mkstemp(tempname);
- if (dfd < 0)
+ if (dfd == -1 || fcntl(dfd, F_SETFD, 1) == -1)
pw_error(tempname, 1, 1);
display(tempname, dfd, pw);
edit(tempname, pw);
@@ -217,7 +217,7 @@
pw_copy(pfd, tfd, pw);
/* Now finish the passwd file update. */
- if (pw_mkdb() < 0)
+ if (pw_mkdb() == -1)
pw_error(NULL, 0, 1);
}