diff options
author | Daniel Stenberg <daniel@haxx.se> | 2007-05-30 21:37:17 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2007-05-30 21:37:17 +0000 |
commit | 6a674ded0edc507473184940585b33e34211a2bf (patch) | |
tree | 7c8ec7ca7554030f107d995fa0a7a27dfee5f783 /ares/ares_init.c | |
parent | 2faba57c85ea9b0f38558b4f55777727f21c5964 (diff) |
first take at detecting a random device and seeding the random key using data
from it in randomize_key()
Diffstat (limited to 'ares/ares_init.c')
-rw-r--r-- | ares/ares_init.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/ares/ares_init.c b/ares/ares_init.c index e86d80ca4..efde96772 100644 --- a/ares/ares_init.c +++ b/ares/ares_init.c @@ -1276,6 +1276,7 @@ static void natural_mask(struct apattern *pat) static void randomize_key(unsigned char* key,int key_data_len) { int randomized = 0; + int counter=0; #ifdef WIN32 HMODULE lib=LoadLibrary("ADVAPI32.DLL"); if (lib) { @@ -1286,11 +1287,22 @@ static void randomize_key(unsigned char* key,int key_data_len) FreeLibrary(lib); } +#else /* !WIN32 */ +#ifdef RANDOM_FILE + char buffer[256]; + FILE *f = fopen(RANDOM_FILE, "rb"); + if(f) { + size_t i; + size_t rc = fread(buffer, key_data_len, 1, f); + for(i=0; i<rc && counter < key_data_len; i++) + key[counter++]=buffer[i]; + fclose(f); + } #endif +#endif /* WIN32 */ if ( !randomized ) { - int counter; - for (counter=0;counter<key_data_len;counter++) + for (;counter<key_data_len;counter++) key[counter]=rand() % 256; } } |