summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdio
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1998-10-20 12:36:36 +0000
committerpeter <peter@FreeBSD.org>1998-10-20 12:36:36 +0000
commit6bb510cabe2cd49356f8a6aa3c280f8a115ac657 (patch)
tree7c6c55994b183da766fd258bc8d603e4ca6f0e40 /lib/libc/stdio
parent1c3787c6df085dec76e6a1224cb3a3eb832f7831 (diff)
downloadFreeBSD-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/libc/stdio')
-rw-r--r--lib/libc/stdio/mktemp.c26
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
OpenPOWER on IntegriCloud