summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/rand/randfile.c34
-rw-r--r--src/lib/libcrypto/threads/mttest.c3
-rw-r--r--src/lib/libssl/src/crypto/rand/randfile.c34
-rw-r--r--src/lib/libssl/src/crypto/threads/mttest.c3
4 files changed, 38 insertions, 36 deletions
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c
index 29718bdb9d..8e993360fa 100644
--- a/src/lib/libcrypto/rand/randfile.c
+++ b/src/lib/libcrypto/rand/randfile.c
@@ -215,34 +215,32 @@ err:
215 215
216const char *RAND_file_name(char *buf, int size) 216const char *RAND_file_name(char *buf, int size)
217 { 217 {
218 char *s; 218 char *s = NULL;
219 char *ret=NULL; 219 char *ret=NULL;
220 struct stat sb; 220 struct stat sb;
221 221
222 s=getenv("RANDFILE"); 222 if (issetugid() == 0)
223 if (s != NULL) 223 s = getenv("RANDFILE");
224 if (s != NULL && *s && strlen(s) < size)
224 { 225 {
225 strncpy(buf,s,size-1); 226 strlcpy(buf,s,size);
226 buf[size-1]='\0';
227 ret=buf; 227 ret=buf;
228 } 228 }
229 else 229 else
230 { 230 {
231 s=getenv("HOME"); 231 if (issetugid() == 0)
232 if (s == NULL || *s == '\0') 232 s=getenv("HOME");
233 ret = RFILE; 233 if (s && *s && strlen(s)+strlen(RFILE)+2 < size)
234 if (((int)(strlen(s)+strlen(RFILE)+2)) > size)
235 ret=RFILE;
236 else
237 { 234 {
238 strlcpy(buf,s,size); 235 strlcpy(buf,s,size);
239#ifndef VMS 236#ifndef VMS
240 strcat(buf,"/"); 237 strcat(buf,"/");
241#endif 238#endif
242 strlcat(buf,RFILE,size); 239 strlcat(buf,RFILE,size);
243 ret=buf; 240 ret=buf;
244 } 241 }
245 } 242 }
243
246#ifdef DEVRANDOM 244#ifdef DEVRANDOM
247 /* given that all random loads just fail if the file can't be 245 /* given that all random loads just fail if the file can't be
248 * seen on a stat, we stat the file we're returning, if it 246 * seen on a stat, we stat the file we're returning, if it
@@ -251,9 +249,11 @@ const char *RAND_file_name(char *buf, int size)
251 * to something hopefully decent if that isn't available. 249 * to something hopefully decent if that isn't available.
252 */ 250 */
253 251
252 if (ret == NULL)
253 ret = DEVRANDOM;
254
254 if (stat(ret,&sb) == -1) 255 if (stat(ret,&sb) == -1)
255 ret = DEVRANDOM; 256 ret = DEVRANDOM;
256#endif 257#endif
257 return(ret); 258 return(ret);
258 } 259 }
259
diff --git a/src/lib/libcrypto/threads/mttest.c b/src/lib/libcrypto/threads/mttest.c
index 100165948c..019add4d9c 100644
--- a/src/lib/libcrypto/threads/mttest.c
+++ b/src/lib/libcrypto/threads/mttest.c
@@ -248,7 +248,8 @@ bad:
248 goto end; 248 goto end;
249 } 249 }
250 250
251 if (cipher == NULL) cipher=getenv("SSL_CIPHER"); 251 if (cipher == NULL && issetugid() == 0)
252 cipher=getenv("SSL_CIPHER");
252 253
253 SSL_load_error_strings(); 254 SSL_load_error_strings();
254 OpenSSL_add_ssl_algorithms(); 255 OpenSSL_add_ssl_algorithms();
diff --git a/src/lib/libssl/src/crypto/rand/randfile.c b/src/lib/libssl/src/crypto/rand/randfile.c
index 29718bdb9d..8e993360fa 100644
--- a/src/lib/libssl/src/crypto/rand/randfile.c
+++ b/src/lib/libssl/src/crypto/rand/randfile.c
@@ -215,34 +215,32 @@ err:
215 215
216const char *RAND_file_name(char *buf, int size) 216const char *RAND_file_name(char *buf, int size)
217 { 217 {
218 char *s; 218 char *s = NULL;
219 char *ret=NULL; 219 char *ret=NULL;
220 struct stat sb; 220 struct stat sb;
221 221
222 s=getenv("RANDFILE"); 222 if (issetugid() == 0)
223 if (s != NULL) 223 s = getenv("RANDFILE");
224 if (s != NULL && *s && strlen(s) < size)
224 { 225 {
225 strncpy(buf,s,size-1); 226 strlcpy(buf,s,size);
226 buf[size-1]='\0';
227 ret=buf; 227 ret=buf;
228 } 228 }
229 else 229 else
230 { 230 {
231 s=getenv("HOME"); 231 if (issetugid() == 0)
232 if (s == NULL || *s == '\0') 232 s=getenv("HOME");
233 ret = RFILE; 233 if (s && *s && strlen(s)+strlen(RFILE)+2 < size)
234 if (((int)(strlen(s)+strlen(RFILE)+2)) > size)
235 ret=RFILE;
236 else
237 { 234 {
238 strlcpy(buf,s,size); 235 strlcpy(buf,s,size);
239#ifndef VMS 236#ifndef VMS
240 strcat(buf,"/"); 237 strcat(buf,"/");
241#endif 238#endif
242 strlcat(buf,RFILE,size); 239 strlcat(buf,RFILE,size);
243 ret=buf; 240 ret=buf;
244 } 241 }
245 } 242 }
243
246#ifdef DEVRANDOM 244#ifdef DEVRANDOM
247 /* given that all random loads just fail if the file can't be 245 /* given that all random loads just fail if the file can't be
248 * seen on a stat, we stat the file we're returning, if it 246 * seen on a stat, we stat the file we're returning, if it
@@ -251,9 +249,11 @@ const char *RAND_file_name(char *buf, int size)
251 * to something hopefully decent if that isn't available. 249 * to something hopefully decent if that isn't available.
252 */ 250 */
253 251
252 if (ret == NULL)
253 ret = DEVRANDOM;
254
254 if (stat(ret,&sb) == -1) 255 if (stat(ret,&sb) == -1)
255 ret = DEVRANDOM; 256 ret = DEVRANDOM;
256#endif 257#endif
257 return(ret); 258 return(ret);
258 } 259 }
259
diff --git a/src/lib/libssl/src/crypto/threads/mttest.c b/src/lib/libssl/src/crypto/threads/mttest.c
index 100165948c..019add4d9c 100644
--- a/src/lib/libssl/src/crypto/threads/mttest.c
+++ b/src/lib/libssl/src/crypto/threads/mttest.c
@@ -248,7 +248,8 @@ bad:
248 goto end; 248 goto end;
249 } 249 }
250 250
251 if (cipher == NULL) cipher=getenv("SSL_CIPHER"); 251 if (cipher == NULL && issetugid() == 0)
252 cipher=getenv("SSL_CIPHER");
252 253
253 SSL_load_error_strings(); 254 SSL_load_error_strings();
254 OpenSSL_add_ssl_algorithms(); 255 OpenSSL_add_ssl_algorithms();