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.
This commit is contained in:
Asanka Herath
2010-06-18 16:23:21 -04:00
parent 12909ec109
commit 9b466f35fb

View File

@@ -46,6 +46,10 @@
#define O_BINARY 0
#endif
#ifdef _WIN32
#include<shlobj.h>
#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;