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);
       }