From 9b466f35fb8cecaea1dc893adcbac65959feeb0a Mon Sep 17 00:00:00 2001 From: Asanka Herath Date: Fri, 18 Jun 2010 16:23:21 -0400 Subject: [PATCH] Windows: RAND_file_name() should look up profile path If RANDFILE and HOME environment variables aren't defined, failover to looking up the user's profile path. In particular, default to a file named .rnd in the user's local (non-roamin) application data directory. --- lib/hcrypto/rand.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/hcrypto/rand.c b/lib/hcrypto/rand.c index b02f938c5..d5c1f687b 100644 --- a/lib/hcrypto/rand.c +++ b/lib/hcrypto/rand.c @@ -46,6 +46,10 @@ #define O_BINARY 0 #endif +#ifdef _WIN32 +#include +#endif + /** * @page page_rand RAND - random number * @@ -352,6 +356,8 @@ RAND_file_name(char *filename, size_t size) if (e) pathp = 1; } + +#ifndef _WIN32 /* * Here we really want to call getpwuid(getuid()) but this will * cause recursive lookups if the nss library uses @@ -359,7 +365,6 @@ RAND_file_name(char *filename, size_t size) * * So at least return the unix /dev/random if we have one */ -#ifndef _WIN32 if (e == NULL) { int fd; @@ -367,7 +372,22 @@ RAND_file_name(char *filename, size_t size) if (fd >= 0) close(fd); } +#else /* Win32 */ + + if (e == NULL) { + char profile[MAX_PATH]; + + if (SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, + SHGFP_TYPE_CURRENT, profile) == S_OK) { + ret = snprintf(filename, size, "%s\\.rnd", profile); + + if (ret > 0 && ret < size) + return filename; + } + } + #endif + if (e == NULL) return NULL; -- 2.11.4.GIT