X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=apps%2Fapp_rand.c;h=2126fd5aa1981d9795454eeb8cb407f511ec7bf5;hp=2543a6405721ef5f2fd74864e5c4342f228c0e00;hb=4fb40db932c9d183de7a4ee67163d6e70aac56c8;hpb=847c52e47f76250d0a6f5c216395a72c1a8f35d6 diff --git a/apps/app_rand.c b/apps/app_rand.c index 2543a64057..2126fd5aa1 100644 --- a/apps/app_rand.c +++ b/apps/app_rand.c @@ -56,7 +56,7 @@ * [including the GNU Public Licence.] */ /* ==================================================================== - * Copyright (c) 1998-1999 The OpenSSL Project. All rights reserved. + * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -109,12 +109,15 @@ * */ +#define NON_MAIN +#include "apps.h" +#undef NON_MAIN #include #include -#include "apps.h" static int seeded = 0; +static int egdsocket = 0; int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn) { @@ -130,20 +133,30 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn) if (file == NULL) file = RAND_file_name(buffer, sizeof buffer); - if (file == NULL || !RAND_load_file(file, 1024L*1024L)) + else if (RAND_egd(file) > 0) + { + /* we try if the given filename is an EGD socket. + if it is, we don't write anything back to the file. */ + egdsocket = 1; + return 1; + } + if (file == NULL || !RAND_load_file(file, -1)) { - if (!dont_warn) + if (RAND_status() == 0) { - BIO_printf(bio_e,"unable to load 'random state'\n"); - BIO_printf(bio_e,"What this means is that the random number generator has not been seeded\n"); - BIO_printf(bio_e,"with much random data.\n"); - if (consider_randfile) /* explanation does not apply when a file is explicitly named */ + if (!dont_warn) { - BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n"); - BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n"); + BIO_printf(bio_e,"unable to load 'random state'\n"); + BIO_printf(bio_e,"This means that the random number generator has not been seeded\n"); + BIO_printf(bio_e,"with much random data.\n"); + if (consider_randfile) /* explanation does not apply when a file is explicitly named */ + { + BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n"); + BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n"); + } } + return 0; } - return 0; } seeded = 1; return 1; @@ -154,7 +167,8 @@ long app_RAND_load_files(char *name) char *p,*n; int last; long tot=0; - + int egd; + for (;;) { last=0; @@ -165,7 +179,9 @@ long app_RAND_load_files(char *name) name=p+1; if (*n == '\0') break; - tot+=RAND_load_file(n,1024L*1024L); + egd=RAND_egd(n); + if (egd > 0) tot+=egd; + tot+=RAND_load_file(n,-1); if (last) break; } if (tot > 512) @@ -177,10 +193,10 @@ int app_RAND_write_file(const char *file, BIO *bio_e) { char buffer[200]; - if (!seeded) + if (egdsocket || !seeded) /* If we did not manage to read the seed file, * we should not write a low-entropy seed file back -- - * it would supress a crucial warning the next time + * it would suppress a crucial warning the next time * we want to use it. */ return 0;