summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorkris <kris@FreeBSD.org>2001-05-06 03:07:12 +0000
committerkris <kris@FreeBSD.org>2001-05-06 03:07:12 +0000
commitca9754c62774b32d7517180537892b8368b06456 (patch)
tree3e04a97826e97fe6589530618355cfa90a3992bb /gnu
parent08e03c867950bb514bac8b48cb92a19593e550ff (diff)
downloadFreeBSD-src-ca9754c62774b32d7517180537892b8368b06456.zip
FreeBSD-src-ca9754c62774b32d7517180537892b8368b06456.tar.gz
Create temporary files securely using mkstemp() instead of mktemp()
Reviewed by: mikeh, audit@ MFC after: 1 week
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/rcs/lib/conf.h1
-rw-r--r--gnu/usr.bin/rcs/lib/rcsedit.c7
-rw-r--r--gnu/usr.bin/rcs/lib/rcsfnms.c7
3 files changed, 13 insertions, 2 deletions
diff --git a/gnu/usr.bin/rcs/lib/conf.h b/gnu/usr.bin/rcs/lib/conf.h
index b60e3ce..11f718d 100644
--- a/gnu/usr.bin/rcs/lib/conf.h
+++ b/gnu/usr.bin/rcs/lib/conf.h
@@ -172,6 +172,7 @@ typedef void *malloc_type; /* type returned by malloc() */
/* #define has_getwd ? */ /* Does getwd() work? */
#define needs_getabsname 0 /* Must we define getabsname? */
#define has_mktemp 1 /* Does mktemp() work? */
+#define has_mkstemp 1 /* DOes mkstemp() work? */
#define has_NFS 1 /* Might NFS be used? */
#define has_psiginfo 0 /* Does psiginfo() work? */
#define has_psignal 1 /* Does psignal() work? */
diff --git a/gnu/usr.bin/rcs/lib/rcsedit.c b/gnu/usr.bin/rcs/lib/rcsedit.c
index ef6c7f7..dc9dd30 100644
--- a/gnu/usr.bin/rcs/lib/rcsedit.c
+++ b/gnu/usr.bin/rcs/lib/rcsedit.c
@@ -1507,6 +1507,9 @@ makedirtemp(isworkfile)
register size_t dl;
register struct buf *bn;
register char const *name = isworkfile ? workname : RCSname;
+# if has_mktemp
+ int fd;
+# endif
dl = basefilename(name) - name;
bn = &dirtpname[newRCSdirtp_index + isworkfile];
@@ -1525,10 +1528,12 @@ makedirtemp(isworkfile)
catchints();
# if has_mktemp
VOID strcpy(tp, "XXXXXX");
- if (!mktemp(np) || !*np)
+ fd = mkstemp(np);
+ if (fd < 0 || !*np)
faterror("can't make temporary pathname `%.*s_%cXXXXXX'",
(int)dl, name, '0'+isworkfile
);
+ close(fd);
# else
/*
* Posix 1003.1-1990 has no reliable way
diff --git a/gnu/usr.bin/rcs/lib/rcsfnms.c b/gnu/usr.bin/rcs/lib/rcsfnms.c
index 7d833bb..00caec5 100644
--- a/gnu/usr.bin/rcs/lib/rcsfnms.c
+++ b/gnu/usr.bin/rcs/lib/rcsfnms.c
@@ -284,6 +284,9 @@ maketemp(n)
{
char *p;
char const *t = tpnames[n];
+# if has_mktemp
+ int fd;
+# endif
if (t)
return t;
@@ -295,10 +298,12 @@ maketemp(n)
size_t tplen = dir_useful_len(tp);
p = testalloc(tplen + 10);
VOID sprintf(p, "%.*s%cT%cXXXXXX", (int)tplen, tp, SLASH, '0'+n);
- if (!mktemp(p) || !*p)
+ fd = mkstemp(p);
+ if (fd < 0 || !*p)
faterror("can't make temporary pathname `%.*s%cT%cXXXXXX'",
(int)tplen, tp, SLASH, '0'+n
);
+ close(fd);
# else
static char tpnamebuf[TEMPNAMES][L_tmpnam];
p = tpnamebuf[n];
OpenPOWER on IntegriCloud