OpenCoverage

by_file.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/x509/by_file.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: by_file.c,v 1.21 2017/01/29 17:49:23 beck Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include <errno.h>-
60#include <stdio.h>-
61#include <time.h>-
62#include <unistd.h>-
63-
64#include <openssl/buffer.h>-
65#include <openssl/err.h>-
66#include <openssl/pem.h>-
67#include <openssl/lhash.h>-
68#include <openssl/x509.h>-
69-
70static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,-
71 long argl, char **ret);-
72-
73static X509_LOOKUP_METHOD x509_file_lookup = {-
74 .name = "Load file into cache",-
75 .new_item = NULL,-
76 .free = NULL,-
77 .init = NULL,-
78 .shutdown = NULL,-
79 .ctrl = by_file_ctrl,-
80 .get_by_subject = NULL,-
81 .get_by_issuer_serial = NULL,-
82 .get_by_fingerprint = NULL,-
83 .get_by_alias = NULL,-
84};-
85-
86X509_LOOKUP_METHOD *-
87X509_LOOKUP_file(void)-
88{-
89 return (&x509_file_lookup);
executed 43 times by 2 tests: return (&x509_file_lookup);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
43
90}-
91-
92static int-
93by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,-
94 char **ret)-
95{-
96 int ok = 0;-
97-
98 switch (cmd) {-
99 case X509_L_FILE_LOAD:
executed 43 times by 2 tests: case 1:
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
43
100 if (argl == X509_FILETYPE_DEFAULT) {
argl == 3Description
TRUEevaluated 23 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
20-23
101 ok = (X509_load_cert_crl_file(ctx,-
102 X509_get_default_cert_file(),-
103 X509_FILETYPE_PEM) != 0);-
104 if (!ok) {
!okDescription
TRUEevaluated 23 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEnever evaluated
0-23
105 X509error(X509_R_LOADING_DEFAULTS);-
106 }
executed 23 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
23
107 } else {
executed 23 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
23
108 if (argl == X509_FILETYPE_PEM)
argl == 1Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
FALSEnever evaluated
0-20
109 ok = (X509_load_cert_crl_file(ctx, argp,
executed 20 times by 1 test: ok = (X509_load_cert_crl_file(ctx, argp, 1) != 0);
Executed by:
  • ssltest
20
110 X509_FILETYPE_PEM) != 0);
executed 20 times by 1 test: ok = (X509_load_cert_crl_file(ctx, argp, 1) != 0);
Executed by:
  • ssltest
20
111 else-
112 ok = (X509_load_cert_file(ctx,
never executed: ok = (X509_load_cert_file(ctx, argp, (int)argl) != 0);
0
113 argp, (int)argl) != 0);
never executed: ok = (X509_load_cert_file(ctx, argp, (int)argl) != 0);
0
114 }-
115 break;
executed 43 times by 2 tests: break;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
43
116 }-
117 return (ok);
executed 43 times by 2 tests: return (ok);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
43
118}-
119-
120int-
121X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type)-
122{-
123 int ret = 0;-
124 BIO *in = NULL;-
125 int i, count = 0;-
126 X509 *x = NULL;-
127-
128 if (file == NULL)
file == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
129 return (1);
never executed: return (1);
0
130 in = BIO_new(BIO_s_file_internal());-
131-
132 if ((in == NULL) || (BIO_read_filename(in, file) <= 0)) {
(in == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(BIO_ctrl(in,1... *)file) <= 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
133 X509error(ERR_R_SYS_LIB);-
134 goto err;
never executed: goto err;
0
135 }-
136-
137 if (type == X509_FILETYPE_PEM) {
type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
138 for (;;) {-
139 x = PEM_read_bio_X509_AUX(in, NULL, NULL, NULL);-
140 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
141 if ((ERR_GET_REASON(ERR_peek_last_error()) ==
((int)((ERR_pe...xfffL) == 108)Description
TRUEnever evaluated
FALSEnever evaluated
0
142 PEM_R_NO_START_LINE) && (count > 0)) {
((int)((ERR_pe...xfffL) == 108)Description
TRUEnever evaluated
FALSEnever evaluated
(count > 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
143 ERR_clear_error();-
144 break;
never executed: break;
0
145 } else {-
146 X509error(ERR_R_PEM_LIB);-
147 goto err;
never executed: goto err;
0
148 }-
149 }-
150 i = X509_STORE_add_cert(ctx->store_ctx, x);-
151 if (!i)
!iDescription
TRUEnever evaluated
FALSEnever evaluated
0
152 goto err;
never executed: goto err;
0
153 count++;-
154 X509_free(x);-
155 x = NULL;-
156 }
never executed: end of block
0
157 ret = count;-
158 } else if (type == X509_FILETYPE_ASN1) {
never executed: end of block
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
159 x = d2i_X509_bio(in, NULL);-
160 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
161 X509error(ERR_R_ASN1_LIB);-
162 goto err;
never executed: goto err;
0
163 }-
164 i = X509_STORE_add_cert(ctx->store_ctx, x);-
165 if (!i)
!iDescription
TRUEnever evaluated
FALSEnever evaluated
0
166 goto err;
never executed: goto err;
0
167 ret = i;-
168 } else {
never executed: end of block
0
169 X509error(X509_R_BAD_X509_FILETYPE);-
170 goto err;
never executed: goto err;
0
171 }-
172err:
code before this statement never executed: err:
0
173 X509_free(x);-
174 BIO_free(in);-
175 return (ret);
never executed: return (ret);
0
176}-
177-
178int-
179X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type)-
180{-
181 int ret = 0;-
182 BIO *in = NULL;-
183 int i, count = 0;-
184 X509_CRL *x = NULL;-
185-
186 if (file == NULL)
file == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
187 return (1);
never executed: return (1);
0
188 in = BIO_new(BIO_s_file_internal());-
189-
190 if ((in == NULL) || (BIO_read_filename(in, file) <= 0)) {
(in == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
(BIO_ctrl(in,1... *)file) <= 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
191 X509error(ERR_R_SYS_LIB);-
192 goto err;
never executed: goto err;
0
193 }-
194-
195 if (type == X509_FILETYPE_PEM) {
type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
196 for (;;) {-
197 x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);-
198 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
199 if ((ERR_GET_REASON(ERR_peek_last_error()) ==
((int)((ERR_pe...xfffL) == 108)Description
TRUEnever evaluated
FALSEnever evaluated
0
200 PEM_R_NO_START_LINE) && (count > 0)) {
((int)((ERR_pe...xfffL) == 108)Description
TRUEnever evaluated
FALSEnever evaluated
(count > 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
201 ERR_clear_error();-
202 break;
never executed: break;
0
203 } else {-
204 X509error(ERR_R_PEM_LIB);-
205 goto err;
never executed: goto err;
0
206 }-
207 }-
208 i = X509_STORE_add_crl(ctx->store_ctx, x);-
209 if (!i)
!iDescription
TRUEnever evaluated
FALSEnever evaluated
0
210 goto err;
never executed: goto err;
0
211 count++;-
212 X509_CRL_free(x);-
213 x = NULL;-
214 }
never executed: end of block
0
215 ret = count;-
216 } else if (type == X509_FILETYPE_ASN1) {
never executed: end of block
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
217 x = d2i_X509_CRL_bio(in, NULL);-
218 if (x == NULL) {
x == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
219 X509error(ERR_R_ASN1_LIB);-
220 goto err;
never executed: goto err;
0
221 }-
222 i = X509_STORE_add_crl(ctx->store_ctx, x);-
223 if (!i)
!iDescription
TRUEnever evaluated
FALSEnever evaluated
0
224 goto err;
never executed: goto err;
0
225 ret = i;-
226 } else {
never executed: end of block
0
227 X509error(X509_R_BAD_X509_FILETYPE);-
228 goto err;
never executed: goto err;
0
229 }-
230err:
code before this statement never executed: err:
0
231 if (x != NULL)
x != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
232 X509_CRL_free(x);
never executed: X509_CRL_free(x);
0
233 BIO_free(in);-
234 return (ret);
never executed: return (ret);
0
235}-
236-
237int-
238X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type)-
239{-
240 STACK_OF(X509_INFO) *inf;-
241 X509_INFO *itmp;-
242 BIO *in;-
243 int i, count = 0;-
244 if (type != X509_FILETYPE_PEM)
type != 1Description
TRUEnever evaluated
FALSEevaluated 43 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
0-43
245 return X509_load_cert_file(ctx, file, type);
never executed: return X509_load_cert_file(ctx, file, type);
0
246 in = BIO_new_file(file, "r");-
247 if (!in) {
!inDescription
TRUEevaluated 23 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
20-23
248 X509error(ERR_R_SYS_LIB);-
249 return 0;
executed 23 times by 2 tests: return 0;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
23
250 }-
251 inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);-
252 BIO_free(in);-
253 if (!inf) {
!infDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
0-20
254 X509error(ERR_R_PEM_LIB);-
255 return 0;
never executed: return 0;
0
256 }-
257 for (i = 0; i < sk_X509_INFO_num(inf); i++) {
i < sk_num(((_...509_INFO*)0)))Description
TRUEevaluated 40 times by 1 test
Evaluated by:
  • ssltest
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ssltest
20-40
258 itmp = sk_X509_INFO_value(inf, i);-
259 if (itmp->x509) {
itmp->x509Description
TRUEevaluated 40 times by 1 test
Evaluated by:
  • ssltest
FALSEnever evaluated
0-40
260 X509_STORE_add_cert(ctx->store_ctx, itmp->x509);-
261 count++;-
262 }
executed 40 times by 1 test: end of block
Executed by:
  • ssltest
40
263 if (itmp->crl) {
itmp->crlDescription
TRUEnever evaluated
FALSEevaluated 40 times by 1 test
Evaluated by:
  • ssltest
0-40
264 X509_STORE_add_crl(ctx->store_ctx, itmp->crl);-
265 count++;-
266 }
never executed: end of block
0
267 }
executed 40 times by 1 test: end of block
Executed by:
  • ssltest
40
268 sk_X509_INFO_pop_free(inf, X509_INFO_free);-
269 return count;
executed 20 times by 1 test: return count;
Executed by:
  • ssltest
20
270}-
271-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2