diff options
author | imp <imp@FreeBSD.org> | 1999-08-21 17:56:44 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 1999-08-21 17:56:44 +0000 |
commit | 019ef99305239293158eb2df6f4780465957b216 (patch) | |
tree | 9f2e9b90fa22a2216615af7bb943b95da48ef86b /lib/libc/stdio/tempnam.c | |
parent | cdea47dc6eedf22eb73e5b4675affbc31669814e (diff) | |
download | FreeBSD-src-019ef99305239293158eb2df6f4780465957b216.zip FreeBSD-src-019ef99305239293158eb2df6f4780465957b216.tar.gz |
Add warnings, ala mktemp, to tempnam and tmpnam as a reminder that
these are inherently unsafe interfaces.
Do not allow TMPDIR to override path for setuid/setgid programs.
Diffstat (limited to 'lib/libc/stdio/tempnam.c')
-rw-r--r-- | lib/libc/stdio/tempnam.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/libc/stdio/tempnam.c b/lib/libc/stdio/tempnam.c index 243fa39..803596a 100644 --- a/lib/libc/stdio/tempnam.c +++ b/lib/libc/stdio/tempnam.c @@ -36,7 +36,7 @@ static char sccsid[] = "@(#)tempnam.c 8.1 (Berkeley) 6/4/93"; #endif static const char rcsid[] = - "$Id$"; + "$Id: tempnam.c,v 1.5 1997/02/22 15:02:37 peter Exp $"; #endif /* LIBC_SCCS and not lint */ #include <sys/param.h> @@ -47,6 +47,11 @@ static const char rcsid[] = #include <unistd.h> #include <paths.h> +__warn_references(tempnam, + "warning: tempnam() possibly used unsafely; consider using mkstemp()"); + +extern char *_mktemp __P((char *)); + char * tempnam(dir, pfx) const char *dir, *pfx; @@ -60,10 +65,10 @@ tempnam(dir, pfx) if (!pfx) pfx = "tmp."; - if ((f = getenv("TMPDIR"))) { + if (issetugid() == 0 && (f = getenv("TMPDIR"))) { (void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f, *(f + strlen(f) - 1) == '/'? "": "/", pfx); - if ((f = mktemp(name))) + if ((f = _mktemp(name))) return(f); } |