diff options
author | peter <peter@FreeBSD.org> | 1998-10-20 12:36:36 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1998-10-20 12:36:36 +0000 |
commit | 6bb510cabe2cd49356f8a6aa3c280f8a115ac657 (patch) | |
tree | 7c6c55994b183da766fd258bc8d603e4ca6f0e40 /lib | |
parent | 1c3787c6df085dec76e6a1224cb3a3eb832f7831 (diff) | |
download | FreeBSD-src-6bb510cabe2cd49356f8a6aa3c280f8a115ac657.zip FreeBSD-src-6bb510cabe2cd49356f8a6aa3c280f8a115ac657.tar.gz |
Stop mk*temp() from being pathologically stupid in the face of a umask(0);
There are other ways to fix this than wrapping _gettemp(), but this was
the most convenient.
Discovered by: bde
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/stdio/mktemp.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/lib/libc/stdio/mktemp.c b/lib/libc/stdio/mktemp.c index ca3fa5b..fd43c45 100644 --- a/lib/libc/stdio/mktemp.c +++ b/lib/libc/stdio/mktemp.c @@ -36,7 +36,7 @@ static char sccsid[] = "@(#)mktemp.c 8.1 (Berkeley) 6/4/93"; #endif static const char rcsid[] = - "$Id: mktemp.c,v 1.9 1998/03/03 14:38:36 bde Exp $"; + "$Id: mktemp.c,v 1.10 1998/04/14 07:25:05 peter Exp $"; #endif /* LIBC_SCCS and not lint */ #include <sys/types.h> @@ -56,23 +56,39 @@ int mkstemp(path) char *path; { - int fd; + int fd, rval; + mode_t oldumask; - return (_gettemp(path, &fd, 0) ? fd : -1); + oldumask = umask(077); + rval = (_gettemp(path, &fd, 0) ? fd : -1); + umask(oldumask); + return rval; } char * mkdtemp(path) char *path; { - return(_gettemp(path, (int *)NULL, 1) ? path : (char *)NULL); + char *rval; + mode_t oldumask; + + oldumask = umask(077); + rval = (_gettemp(path, (int *)NULL, 1) ? path : (char *)NULL); + umask(oldumask); + return rval; } char * _mktemp(path) char *path; { - return(_gettemp(path, (int *)NULL, 0) ? path : (char *)NULL); + char *rval; + mode_t oldumask; + + oldumask = umask(077); + rval = (_gettemp(path, (int *)NULL, 0) ? path : (char *)NULL); + umask(oldumask); + return rval; } #ifdef UNSAFE_WARN |