summaryrefslogtreecommitdiff
path: root/lib/libcrypto
diff options
context:
space:
mode:
authorBob Beck <beck@cvs.openbsd.org>2000-04-16 21:46:37 +0000
committerBob Beck <beck@cvs.openbsd.org>2000-04-16 21:46:37 +0000
commit804f9f2c9221f8f82fcbee4dea21a5b61a967d32 (patch)
tree93cb6d11f9a2f3b0f3d644b1225d44a6ffc5a5fc /lib/libcrypto
parent4ff85c04cc31eaf22ad95748c87f04db641dc3ee (diff)
Fix randfile so it doesn't attempt to chmod and write entropy back to
devices. This caused people's /dev/arandom's to be permitted 600, which causes rsa to fail to get random data, which results in all kinds of fun with ssh :)
Diffstat (limited to 'lib/libcrypto')
-rw-r--r--lib/libcrypto/rand/randfile.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/libcrypto/rand/randfile.c b/lib/libcrypto/rand/randfile.c
index 4a994bf73b4..c3a0c12c580 100644
--- a/lib/libcrypto/rand/randfile.c
+++ b/lib/libcrypto/rand/randfile.c
@@ -142,7 +142,20 @@ int RAND_write_file(const char *file)
int i,ret=0,err=0;
FILE *out = NULL;
int n;
-
+ struct stat sb;
+
+ i=stat(file,&sb);
+ if (i != -1) {
+ if (sb.st_mode & (S_IFBLK | S_IFCHR)) {
+ /* this file is a device. we don't write back to it.
+ * we "succeed" on the assumption this is some sort
+ * of random device. Otherwise attempting to write to
+ * and chmod the device causes problems.
+ */
+ return(1);
+ }
+ }
+
#if defined(O_CREAT) && defined(O_EXCL) && !defined(WIN32)
/* For some reason Win32 can't write to files created this way */