From ed4d1cf9cc959bbc211215fb06bca5ec6f9689d1 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 6 Oct 1997 03:58:48 +0000 Subject: [PATCH] Be more paranoid about unlinking files. From mhpower@MIT.EDU by way of Theo de Raadt. Likely 2.2.5R candidate. Obtained from: OpenBSD --- usr.sbin/lpr/common_source/recvjob.c | 10 ++++++---- usr.sbin/lpr/lpd/recvjob.c | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/usr.sbin/lpr/common_source/recvjob.c b/usr.sbin/lpr/common_source/recvjob.c index 192d993bff3f..0a10e49aefeb 100644 --- a/usr.sbin/lpr/common_source/recvjob.c +++ b/usr.sbin/lpr/common_source/recvjob.c @@ -43,7 +43,7 @@ static const char copyright[] = static char sccsid[] = "@(#)recvjob.c 8.2 (Berkeley) 4/27/95"; #endif static const char rcsid[] = - "$Id$"; + "$Id: recvjob.c,v 1.10 1997/09/24 06:47:55 charnier Exp $"; #endif /* not lint */ /* @@ -263,7 +263,8 @@ readfile(file, size) if (err) frecverr("%s: write error", file); if (noresponse()) { /* file sent had bad data in it */ - (void) unlink(file); + if (strchr(file, '/') == NULL) + (void) unlink(file); return(0); } ack(); @@ -328,15 +329,16 @@ static void rcleanup(signo) int signo; { - if (tfname[0]) + if (tfname[0] && strchr(tfname, '/') == NULL) (void) unlink(tfname); - if (dfname[0]) + if (dfname[0] && strchr(dfname, '/') == NULL) { do { do (void) unlink(dfname); while (dfname[2]-- != 'A'); dfname[2] = 'z'; } while (dfname[0]-- != 'd'); + } dfname[0] = '\0'; } diff --git a/usr.sbin/lpr/lpd/recvjob.c b/usr.sbin/lpr/lpd/recvjob.c index 192d993bff3f..0a10e49aefeb 100644 --- a/usr.sbin/lpr/lpd/recvjob.c +++ b/usr.sbin/lpr/lpd/recvjob.c @@ -43,7 +43,7 @@ static const char copyright[] = static char sccsid[] = "@(#)recvjob.c 8.2 (Berkeley) 4/27/95"; #endif static const char rcsid[] = - "$Id$"; + "$Id: recvjob.c,v 1.10 1997/09/24 06:47:55 charnier Exp $"; #endif /* not lint */ /* @@ -263,7 +263,8 @@ readfile(file, size) if (err) frecverr("%s: write error", file); if (noresponse()) { /* file sent had bad data in it */ - (void) unlink(file); + if (strchr(file, '/') == NULL) + (void) unlink(file); return(0); } ack(); @@ -328,15 +329,16 @@ static void rcleanup(signo) int signo; { - if (tfname[0]) + if (tfname[0] && strchr(tfname, '/') == NULL) (void) unlink(tfname); - if (dfname[0]) + if (dfname[0] && strchr(dfname, '/') == NULL) { do { do (void) unlink(dfname); while (dfname[2]-- != 'A'); dfname[2] = 'z'; } while (dfname[0]-- != 'd'); + } dfname[0] = '\0'; }