summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeck <>2001-12-20 18:14:36 +0000
committerbeck <>2001-12-20 18:14:36 +0000
commitbfe794090e8e3b62162fd2d947146ec58befd39a (patch)
tree2360656db5808f35273b15134b232a597a6f2a4a
parent65bf7ee6190777552683e91fe4c627663e22339a (diff)
downloadopenbsd-bfe794090e8e3b62162fd2d947146ec58befd39a.tar.gz
openbsd-bfe794090e8e3b62162fd2d947146ec58befd39a.tar.bz2
openbsd-bfe794090e8e3b62162fd2d947146ec58befd39a.zip
fix to match documented behaviour. RAND_file_name must return a pointer to
buf, not something else.
-rw-r--r--src/lib/libcrypto/rand/randfile.c22
-rw-r--r--src/lib/libssl/src/crypto/rand/randfile.c22
2 files changed, 26 insertions, 18 deletions
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c
index 2ffb84c89e..c4eb79ac5f 100644
--- a/src/lib/libcrypto/rand/randfile.c
+++ b/src/lib/libcrypto/rand/randfile.c
@@ -219,7 +219,7 @@ err:
219const char *RAND_file_name(char *buf, size_t size) 219const char *RAND_file_name(char *buf, size_t size)
220 { 220 {
221 char *s = NULL; 221 char *s = NULL;
222 char *ret=NULL; 222 int ok = 0;
223 struct stat sb; 223 struct stat sb;
224 224
225 if (issetugid() == 0) 225 if (issetugid() == 0)
@@ -227,7 +227,7 @@ const char *RAND_file_name(char *buf, size_t size)
227 if (s != NULL && *s && strlen(s) + 1 < size) 227 if (s != NULL && *s && strlen(s) + 1 < size)
228 { 228 {
229 strlcpy(buf,s,size); 229 strlcpy(buf,s,size);
230 ret=buf; 230 ok = 1;
231 } 231 }
232 else 232 else
233 { 233 {
@@ -246,7 +246,7 @@ const char *RAND_file_name(char *buf, size_t size)
246 strcat(buf,"/"); 246 strcat(buf,"/");
247#endif 247#endif
248 strlcat(buf,RFILE,size); 248 strlcat(buf,RFILE,size);
249 ret=buf; 249 ok = 1;
250 } 250 }
251 else 251 else
252 buf[0] = '\0'; /* no file name */ 252 buf[0] = '\0'; /* no file name */
@@ -255,17 +255,21 @@ const char *RAND_file_name(char *buf, size_t size)
255#ifdef DEVRANDOM 255#ifdef DEVRANDOM
256 /* given that all random loads just fail if the file can't be 256 /* given that all random loads just fail if the file can't be
257 * seen on a stat, we stat the file we're returning, if it 257 * seen on a stat, we stat the file we're returning, if it
258 * fails, use DEVRANDOM instead. the allows the user to 258 * fails, use DEVRANDOM instead. this allows the user to
259 * use their own source for good random data, but defaults 259 * use their own source for good random data, but defaults
260 * to something hopefully decent if that isn't available. 260 * to something hopefully decent if that isn't available.
261 */ 261 */
262 262
263 if (ret == NULL) 263 if (!ok)
264 ret = DEVRANDOM; 264 if (strlcpy(buf,DEVRANDOM,size) >= size) {
265 return(NULL);
266 }
267 if (stat(buf,&sb) == -1)
268 if (strlcpy(buf,DEVRANDOM,size) >= size) {
269 return(NULL);
270 }
265 271
266 if (stat(ret,&sb) == -1)
267 ret = DEVRANDOM;
268#endif 272#endif
269 return(ret); 273 return(buf);
270 } 274 }
271 275
diff --git a/src/lib/libssl/src/crypto/rand/randfile.c b/src/lib/libssl/src/crypto/rand/randfile.c
index 2ffb84c89e..c4eb79ac5f 100644
--- a/src/lib/libssl/src/crypto/rand/randfile.c
+++ b/src/lib/libssl/src/crypto/rand/randfile.c
@@ -219,7 +219,7 @@ err:
219const char *RAND_file_name(char *buf, size_t size) 219const char *RAND_file_name(char *buf, size_t size)
220 { 220 {
221 char *s = NULL; 221 char *s = NULL;
222 char *ret=NULL; 222 int ok = 0;
223 struct stat sb; 223 struct stat sb;
224 224
225 if (issetugid() == 0) 225 if (issetugid() == 0)
@@ -227,7 +227,7 @@ const char *RAND_file_name(char *buf, size_t size)
227 if (s != NULL && *s && strlen(s) + 1 < size) 227 if (s != NULL && *s && strlen(s) + 1 < size)
228 { 228 {
229 strlcpy(buf,s,size); 229 strlcpy(buf,s,size);
230 ret=buf; 230 ok = 1;
231 } 231 }
232 else 232 else
233 { 233 {
@@ -246,7 +246,7 @@ const char *RAND_file_name(char *buf, size_t size)
246 strcat(buf,"/"); 246 strcat(buf,"/");
247#endif 247#endif
248 strlcat(buf,RFILE,size); 248 strlcat(buf,RFILE,size);
249 ret=buf; 249 ok = 1;
250 } 250 }
251 else 251 else
252 buf[0] = '\0'; /* no file name */ 252 buf[0] = '\0'; /* no file name */
@@ -255,17 +255,21 @@ const char *RAND_file_name(char *buf, size_t size)
255#ifdef DEVRANDOM 255#ifdef DEVRANDOM
256 /* given that all random loads just fail if the file can't be 256 /* given that all random loads just fail if the file can't be
257 * seen on a stat, we stat the file we're returning, if it 257 * seen on a stat, we stat the file we're returning, if it
258 * fails, use DEVRANDOM instead. the allows the user to 258 * fails, use DEVRANDOM instead. this allows the user to
259 * use their own source for good random data, but defaults 259 * use their own source for good random data, but defaults
260 * to something hopefully decent if that isn't available. 260 * to something hopefully decent if that isn't available.
261 */ 261 */
262 262
263 if (ret == NULL) 263 if (!ok)
264 ret = DEVRANDOM; 264 if (strlcpy(buf,DEVRANDOM,size) >= size) {
265 return(NULL);
266 }
267 if (stat(buf,&sb) == -1)
268 if (strlcpy(buf,DEVRANDOM,size) >= size) {
269 return(NULL);
270 }
265 271
266 if (stat(ret,&sb) == -1)
267 ret = DEVRANDOM;
268#endif 272#endif
269 return(ret); 273 return(buf);
270 } 274 }
271 275