diff options
author | tedu <> | 2014-04-18 13:19:03 +0000 |
---|---|---|
committer | tedu <> | 2014-04-18 13:19:03 +0000 |
commit | d96b82c0a9ec4585ac1f50f617bb0ee79c7b96f7 (patch) | |
tree | 3b966b1e6478816bc9e673717596fca44b3c34de /src/lib/libcrypto/rand/randfile.c | |
parent | 48839e33a53ed2d6e54cb31ec1a93635e0a4dc60 (diff) | |
download | openbsd-d96b82c0a9ec4585ac1f50f617bb0ee79c7b96f7.tar.gz openbsd-d96b82c0a9ec4585ac1f50f617bb0ee79c7b96f7.tar.bz2 openbsd-d96b82c0a9ec4585ac1f50f617bb0ee79c7b96f7.zip |
another round of chemo for the RAND code to provide clarity.
ok deraadt
Diffstat (limited to 'src/lib/libcrypto/rand/randfile.c')
-rw-r--r-- | src/lib/libcrypto/rand/randfile.c | 53 |
1 files changed, 6 insertions, 47 deletions
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c index c47d1f7224..23efa17388 100644 --- a/src/lib/libcrypto/rand/randfile.c +++ b/src/lib/libcrypto/rand/randfile.c | |||
@@ -74,10 +74,7 @@ | |||
74 | #define BUFSIZE 1024 | 74 | #define BUFSIZE 1024 |
75 | #define RAND_DATA 1024 | 75 | #define RAND_DATA 1024 |
76 | 76 | ||
77 | #define RFILE ".rnd" | 77 | /* Note that these functions should not be used. */ |
78 | |||
79 | /* Note that these functions are intended for seed files only. | ||
80 | * Entropy devices and EGD sockets are handled in rand_unix.c */ | ||
81 | 78 | ||
82 | int RAND_load_file(const char *file, long bytes) | 79 | int RAND_load_file(const char *file, long bytes) |
83 | { | 80 | { |
@@ -145,46 +142,8 @@ err: | |||
145 | } | 142 | } |
146 | 143 | ||
147 | const char *RAND_file_name(char *buf, size_t size) | 144 | const char *RAND_file_name(char *buf, size_t size) |
148 | { | 145 | { |
149 | char *s=NULL; | 146 | if (BUF_strlcpy(buf,"/dev/urandom",size) >= size) |
150 | struct stat sb; | 147 | return(NULL); |
151 | 148 | return buf; | |
152 | if (OPENSSL_issetugid() == 0) | 149 | } |
153 | s=getenv("RANDFILE"); | ||
154 | if (s != NULL && *s && strlen(s) + 1 < size) | ||
155 | { | ||
156 | if (BUF_strlcpy(buf,s,size) >= size) | ||
157 | return NULL; | ||
158 | } | ||
159 | else | ||
160 | { | ||
161 | if (OPENSSL_issetugid() == 0) | ||
162 | s=getenv("HOME"); | ||
163 | if (s && *s && strlen(s)+strlen(RFILE)+2 < size) | ||
164 | { | ||
165 | BUF_strlcpy(buf,s,size); | ||
166 | BUF_strlcat(buf,"/",size); | ||
167 | BUF_strlcat(buf,RFILE,size); | ||
168 | } | ||
169 | else | ||
170 | buf[0] = '\0'; /* no file name */ | ||
171 | } | ||
172 | |||
173 | /* given that all random loads just fail if the file can't be | ||
174 | * seen on a stat, we stat the file we're returning, if it | ||
175 | * fails, use /dev/arandom instead. this allows the user to | ||
176 | * use their own source for good random data, but defaults | ||
177 | * to something hopefully decent if that isn't available. | ||
178 | */ | ||
179 | |||
180 | if (!buf[0]) | ||
181 | if (BUF_strlcpy(buf,"/dev/arandom",size) >= size) { | ||
182 | return(NULL); | ||
183 | } | ||
184 | if (stat(buf,&sb) == -1) | ||
185 | if (BUF_strlcpy(buf,"/dev/arandom",size) >= size) { | ||
186 | return(NULL); | ||
187 | } | ||
188 | |||
189 | return(buf); | ||
190 | } | ||