=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/chpass/edit.c,v retrieving revision 1.23 retrieving revision 1.24 diff -c -r1.23 -r1.24 *** src/usr.bin/chpass/edit.c 2002/07/31 22:08:42 1.23 --- src/usr.bin/chpass/edit.c 2003/02/02 18:38:22 1.24 *************** *** 1,4 **** ! /* $OpenBSD: edit.c,v 1.23 2002/07/31 22:08:42 millert Exp $ */ /* $NetBSD: edit.c,v 1.6 1996/05/15 21:50:45 jtc Exp $ */ /*- --- 1,4 ---- ! /* $OpenBSD: edit.c,v 1.24 2003/02/02 18:38:22 millert Exp $ */ /* $NetBSD: edit.c,v 1.6 1996/05/15 21:50:45 jtc Exp $ */ /*- *************** *** 38,44 **** #if 0 static char sccsid[] = "@(#)edit.c 8.3 (Berkeley) 4/2/94"; #else ! static char rcsid[] = "$OpenBSD: edit.c,v 1.23 2002/07/31 22:08:42 millert Exp $"; #endif #endif /* not lint */ --- 38,44 ---- #if 0 static char sccsid[] = "@(#)edit.c 8.3 (Berkeley) 4/2/94"; #else ! static char rcsid[] = "$OpenBSD: edit.c,v 1.24 2003/02/02 18:38:22 millert Exp $"; #endif #endif /* not lint */ *************** *** 48,53 **** --- 48,54 ---- #include #include #include + #include #include #include #include *************** *** 152,163 **** char *p, *q; ENTRY *ep; FILE *fp; ! if (!(fp = fopen(tempname, "r"))) pw_error(tempname, 1, 1); ! if (fstat(fileno(fp), &sb)) pw_error(tempname, 1, 1); ! if (sb.st_size == 0) { warnx("corrupted temporary file"); goto bad; } --- 153,166 ---- char *p, *q; ENTRY *ep; FILE *fp; + int fd; ! if ((fd = open(tempname, O_RDONLY|O_NOFOLLOW)) == -1 || ! (fp = fdopen(fd, "r")) == NULL) pw_error(tempname, 1, 1); ! if (fstat(fd, &sb)) pw_error(tempname, 1, 1); ! if (sb.st_size == 0 || sb.st_nlink != 1) { warnx("corrupted temporary file"); goto bad; }