diff options
author | beck <> | 2001-12-20 18:14:36 +0000 |
---|---|---|
committer | beck <> | 2001-12-20 18:14:36 +0000 |
commit | bfe794090e8e3b62162fd2d947146ec58befd39a (patch) | |
tree | 2360656db5808f35273b15134b232a597a6f2a4a | |
parent | 65bf7ee6190777552683e91fe4c627663e22339a (diff) | |
download | openbsd-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.c | 22 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/rand/randfile.c | 22 |
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: | |||
219 | const char *RAND_file_name(char *buf, size_t size) | 219 | const 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: | |||
219 | const char *RAND_file_name(char *buf, size_t size) | 219 | const 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 | ||