summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Möller <ulf@openssl.org>2000-03-19 22:57:07 +0000
committerUlf Möller <ulf@openssl.org>2000-03-19 22:57:07 +0000
commita6aa71ff5f321d762c31da4caca31e375842653b (patch)
treec8d99e181f2e4256c605acd98651502b6391b3ef
parent87b89b799f310bd5ab1dae343b0175f6dd9fd925 (diff)
downloadopenssl-new-a6aa71ff5f321d762c31da4caca31e375842653b.tar.gz
Bug fix: RAND_write_file() failed to write to files created by open()
on Win32.
-rw-r--r--crypto/rand/md_rand.c2
-rw-r--r--crypto/rand/randfile.c56
2 files changed, 15 insertions, 43 deletions
diff --git a/crypto/rand/md_rand.c b/crypto/rand/md_rand.c
index 35bdbeb73e..b1d51e890b 100644
--- a/crypto/rand/md_rand.c
+++ b/crypto/rand/md_rand.c
@@ -1,4 +1,4 @@
-* crypto/rand/md_rand.c */
+/* crypto/rand/md_rand.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
diff --git a/crypto/rand/randfile.c b/crypto/rand/randfile.c
index cc73c799fd..9ff3974cc7 100644
--- a/crypto/rand/randfile.c
+++ b/crypto/rand/randfile.c
@@ -133,41 +133,20 @@ int RAND_write_file(const char *file)
int i,ret=0,err=0;
FILE *out = NULL;
int n;
-
-#ifdef VMS
- /* Under VMS, fopen(file, "wb") will create a new version of the
- same file. This is not good, so let's try updating an existing
- one, and create file only if it doesn't already exist. */
- /* At the same time, if we just update a file, we also need to
- truncate it, and unfortunately, ftruncate() and truncate() do
- not exist everywhere. All that remains is to delete old versions
- of the random data file (done at the end). */
-#if 0
- out=fopen(file,"rb+");
- if (out == NULL && errno != ENOENT)
- goto err;
-#endif
+
+#if defined(O_CREAT) && defined(O_EXCL) && !defined(WIN32)
+ /* For some reason Win32 can't write to files created this way */
+
+ /* chmod(..., 0600) is too late to protect the file,
+ * permissions should be restrictive from the start */
+ int fd = open(file, O_CREAT | O_EXCL, 0600);
+ if (fd != -1)
+ out = fdopen(fd, "wb");
#endif
+ if (out == NULL)
+ out = fopen(file,"wb");
+ if (out == NULL) goto err;
- if (out == NULL)
- {
-#if defined O_CREAT && defined O_EXCL
- /* chmod(..., 0600) is too late to protect the file,
- * permissions should be restrictive from the start */
- int fd = open(file, O_CREAT | O_EXCL, 0600);
- if (fd != -1)
- out = fdopen(fd, "wb");
- else /* the open(...) reportedly fails on Win98 w/ VisualC */
- out = fopen(file,"wb");
-#else
- out = fopen(file,"wb");
-#endif
- }
- if (out == NULL)
- {
- err=1;
- goto err;
- }
#ifndef NO_CHMOD
chmod(file,0600);
#endif
@@ -186,14 +165,8 @@ int RAND_write_file(const char *file)
}
ret+=i;
if (n <= 0) break;
- }
+ }
#ifdef VMS
- /* We may have updated an existing file using mode "rb+",
- * now remove any old extra bytes */
-#if 0
- if (ret > 0)
- ftruncate(fileno(out), ret);
-#else
/* Try to delete older versions of the file, until there aren't
any */
{
@@ -211,8 +184,7 @@ int RAND_write_file(const char *file)
some point... */
}
}
-#endif
-#endif
+#endif /* VMS */
fclose(out);
memset(buf,0,BUFSIZE);