diff options
author | beck <> | 2000-03-19 11:13:58 +0000 |
---|---|---|
committer | beck <> | 2000-03-19 11:13:58 +0000 |
commit | 796d609550df3a33fc11468741c5d2f6d3df4c11 (patch) | |
tree | 6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libcrypto/x509/by_file.c | |
parent | 5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff) | |
download | openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2 openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip |
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2
if you are using the ssl26 packages for ssh and other things to work you will
need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libcrypto/x509/by_file.c')
-rw-r--r-- | src/lib/libcrypto/x509/by_file.c | 63 |
1 files changed, 47 insertions, 16 deletions
diff --git a/src/lib/libcrypto/x509/by_file.c b/src/lib/libcrypto/x509/by_file.c index 00ee5e8bbc..78e9240a8d 100644 --- a/src/lib/libcrypto/x509/by_file.c +++ b/src/lib/libcrypto/x509/by_file.c | |||
@@ -59,8 +59,6 @@ | |||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include <time.h> | 60 | #include <time.h> |
61 | #include <errno.h> | 61 | #include <errno.h> |
62 | #include <sys/types.h> | ||
63 | #include <sys/stat.h> | ||
64 | 62 | ||
65 | #include "cryptlib.h" | 63 | #include "cryptlib.h" |
66 | #include <openssl/lhash.h> | 64 | #include <openssl/lhash.h> |
@@ -94,7 +92,7 @@ X509_LOOKUP_METHOD *X509_LOOKUP_file(void) | |||
94 | static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, | 92 | static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, |
95 | char **ret) | 93 | char **ret) |
96 | { | 94 | { |
97 | int ok=0,ok2=0; | 95 | int ok=0; |
98 | char *file; | 96 | char *file; |
99 | 97 | ||
100 | switch (cmd) | 98 | switch (cmd) |
@@ -102,31 +100,30 @@ static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, | |||
102 | case X509_L_FILE_LOAD: | 100 | case X509_L_FILE_LOAD: |
103 | if (argl == X509_FILETYPE_DEFAULT) | 101 | if (argl == X509_FILETYPE_DEFAULT) |
104 | { | 102 | { |
105 | ok=X509_load_cert_file(ctx,X509_get_default_cert_file(), | 103 | ok = (X509_load_cert_crl_file(ctx,X509_get_default_cert_file(), |
106 | X509_FILETYPE_PEM); | 104 | X509_FILETYPE_PEM) != 0); |
107 | ok2=X509_load_crl_file(ctx,X509_get_default_cert_file(), | 105 | if (!ok) |
108 | X509_FILETYPE_PEM); | ||
109 | if (!ok || !ok2) | ||
110 | { | 106 | { |
111 | X509err(X509_F_BY_FILE_CTRL,X509_R_LOADING_DEFAULTS); | 107 | X509err(X509_F_BY_FILE_CTRL,X509_R_LOADING_DEFAULTS); |
112 | } | 108 | } |
113 | else | 109 | else |
114 | { | 110 | { |
115 | file=(char *)Getenv(X509_get_default_cert_file_env()); | 111 | file=(char *)Getenv(X509_get_default_cert_file_env()); |
116 | ok=X509_load_cert_file(ctx,file, | 112 | ok = (X509_load_cert_crl_file(ctx,file, |
117 | X509_FILETYPE_PEM); | 113 | X509_FILETYPE_PEM) != 0); |
118 | ok2=X509_load_crl_file(ctx,file, | ||
119 | X509_FILETYPE_PEM); | ||
120 | } | 114 | } |
121 | } | 115 | } |
122 | else | 116 | else |
123 | { | 117 | { |
124 | ok=X509_load_cert_file(ctx,argp,(int)argl); | 118 | if(argl == X509_FILETYPE_PEM) |
125 | ok2=X509_load_crl_file(ctx,argp,(int)argl); | 119 | ok = (X509_load_cert_crl_file(ctx,argp, |
120 | X509_FILETYPE_PEM) != 0); | ||
121 | else | ||
122 | ok = (X509_load_cert_file(ctx,argp,(int)argl) != 0); | ||
126 | } | 123 | } |
127 | break; | 124 | break; |
128 | } | 125 | } |
129 | return((ok && ok2)?ok:0); | 126 | return(ok); |
130 | } | 127 | } |
131 | 128 | ||
132 | int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) | 129 | int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) |
@@ -149,7 +146,7 @@ int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) | |||
149 | { | 146 | { |
150 | for (;;) | 147 | for (;;) |
151 | { | 148 | { |
152 | x=PEM_read_bio_X509(in,NULL,NULL,NULL); | 149 | x=PEM_read_bio_X509_AUX(in,NULL,NULL,NULL); |
153 | if (x == NULL) | 150 | if (x == NULL) |
154 | { | 151 | { |
155 | if ((ERR_GET_REASON(ERR_peek_error()) == | 152 | if ((ERR_GET_REASON(ERR_peek_error()) == |
@@ -263,5 +260,39 @@ err: | |||
263 | return(ret); | 260 | return(ret); |
264 | } | 261 | } |
265 | 262 | ||
263 | int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type) | ||
264 | { | ||
265 | STACK_OF(X509_INFO) *inf; | ||
266 | X509_INFO *itmp; | ||
267 | BIO *in; | ||
268 | int i, count = 0; | ||
269 | if(type != X509_FILETYPE_PEM) | ||
270 | return X509_load_cert_file(ctx, file, type); | ||
271 | in = BIO_new_file(file, "r"); | ||
272 | if(!in) { | ||
273 | X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_SYS_LIB); | ||
274 | return 0; | ||
275 | } | ||
276 | inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL); | ||
277 | BIO_free(in); | ||
278 | if(!inf) { | ||
279 | X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_PEM_LIB); | ||
280 | return 0; | ||
281 | } | ||
282 | for(i = 0; i < sk_X509_INFO_num(inf); i++) { | ||
283 | itmp = sk_X509_INFO_value(inf, i); | ||
284 | if(itmp->x509) { | ||
285 | X509_STORE_add_cert(ctx->store_ctx, itmp->x509); | ||
286 | count++; | ||
287 | } else if(itmp->crl) { | ||
288 | X509_STORE_add_crl(ctx->store_ctx, itmp->crl); | ||
289 | count++; | ||
290 | } | ||
291 | } | ||
292 | sk_X509_INFO_pop_free(inf, X509_INFO_free); | ||
293 | return count; | ||
294 | } | ||
295 | |||
296 | |||
266 | #endif /* NO_STDIO */ | 297 | #endif /* NO_STDIO */ |
267 | 298 | ||