Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | struct lookup_dir_hashes_st { | - |
10 | unsigned long hash; | - |
11 | int suffix; | - |
12 | }; | - |
13 | | - |
14 | struct lookup_dir_entry_st { | - |
15 | char *dir; | - |
16 | int dir_type; | - |
17 | struct stack_st_BY_DIR_HASH *hashes; | - |
18 | }; | - |
19 | | - |
20 | typedef struct lookup_dir_st { | - |
21 | BUF_MEM *buffer; | - |
22 | struct stack_st_BY_DIR_ENTRY *dirs; | - |
23 | CRYPTO_RWLOCK *lock; | - |
24 | } BY_DIR; | - |
25 | | - |
26 | static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, | - |
27 | char **ret); | - |
28 | static int new_dir(X509_LOOKUP *lu); | - |
29 | static void free_dir(X509_LOOKUP *lu); | - |
30 | static int add_cert_dir(BY_DIR *ctx, const char *dir, int type); | - |
31 | static int get_cert_by_subject(X509_LOOKUP *xl, X509_LOOKUP_TYPE type, | - |
32 | X509_NAME *name, X509_OBJECT *ret); | - |
33 | static X509_LOOKUP_METHOD x509_dir_lookup = { | - |
34 | "Load certs from files in a directory", | - |
35 | new_dir, | - |
36 | free_dir, | - |
37 | | - |
38 | ((void *)0) | - |
39 | , | - |
40 | | - |
41 | ((void *)0) | - |
42 | , | - |
43 | dir_ctrl, | - |
44 | get_cert_by_subject, | - |
45 | | - |
46 | ((void *)0) | - |
47 | , | - |
48 | | - |
49 | ((void *)0) | - |
50 | , | - |
51 | | - |
52 | ((void *)0) | - |
53 | , | - |
54 | }; | - |
55 | | - |
56 | X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void) | - |
57 | { | - |
58 | returnexecuted 492 times by 1 test: return &x509_dir_lookup; &x509_dir_lookup;executed 492 times by 1 test: return &x509_dir_lookup; | 492 |
59 | } | - |
60 | | - |
61 | static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, | - |
62 | char **retp) | - |
63 | { | - |
64 | int ret = 0; | - |
65 | BY_DIR *ld = (BY_DIR *)ctx->method_data; | - |
66 | | - |
67 | switch (cmd) { | - |
68 | caseexecuted 492 times by 1 test: case 2: 2:executed 492 times by 1 test: case 2: | 492 |
69 | if (argl == 3TRUE | evaluated 492 times by 1 test | FALSE | never evaluated |
) { | 0-492 |
70 | const char *dir = getenv(X509_get_default_cert_dir_env()); | - |
71 | | - |
72 | if (dirTRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) | 0-492 |
73 | ret = add_cert_dir(ld, dir, 1); never executed: ret = add_cert_dir(ld, dir, 1); | 0 |
74 | else | - |
75 | ret = add_cert_dir(ld, X509_get_default_cert_dir(),executed 492 times by 1 test: ret = add_cert_dir(ld, X509_get_default_cert_dir(), 1); | 492 |
76 | 1);executed 492 times by 1 test: ret = add_cert_dir(ld, X509_get_default_cert_dir(), 1); | 492 |
77 | if (!retTRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) { | 0-492 |
78 | ERR_put_error(11,(102),(103),__FILE__,84); | - |
79 | } never executed: end of block | 0 |
80 | }executed 492 times by 1 test: end of block else | 492 |
81 | ret = add_cert_dir(ld, argp, (int)argl); never executed: ret = add_cert_dir(ld, argp, (int)argl); | 0 |
82 | break;executed 492 times by 1 test: break; | 492 |
83 | } | - |
84 | returnexecuted 492 times by 1 test: return ret; ret;executed 492 times by 1 test: return ret; | 492 |
85 | } | - |
86 | | - |
87 | static int new_dir(X509_LOOKUP *lu) | - |
88 | { | - |
89 | BY_DIR *a = CRYPTO_malloc(sizeof(*a), __FILE__, 95); | - |
90 | | - |
91 | if (a == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
92 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
93 | ) { | - |
94 | ERR_put_error(11,(153),((1|64)),__FILE__,98); | - |
95 | return never executed: return 0; 0;never executed: return 0; | 0 |
96 | } | - |
97 | | - |
98 | if ((TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
a->buffer = BUF_MEM_new()) == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
99 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
100 | ) { | - |
101 | ERR_put_error(11,(153),((1|64)),__FILE__,103); | - |
102 | goto never executed: goto err; err;never executed: goto err; | 0 |
103 | } | - |
104 | a->dirs = | - |
105 | ((void *)0) | - |
106 | ; | - |
107 | a->lock = CRYPTO_THREAD_lock_new(); | - |
108 | if (a->lock == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
109 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
110 | ) { | - |
111 | BUF_MEM_free(a->buffer); | - |
112 | ERR_put_error(11,(153),((1|64)),__FILE__,110); | - |
113 | goto never executed: goto err; err;never executed: goto err; | 0 |
114 | } | - |
115 | lu->method_data = a; | - |
116 | returnexecuted 492 times by 1 test: return 1; 1;executed 492 times by 1 test: return 1; | 492 |
117 | | - |
118 | err: | - |
119 | CRYPTO_free(a, __FILE__, 117); | - |
120 | return never executed: return 0; 0;never executed: return 0; | 0 |
121 | } | - |
122 | | - |
123 | static void by_dir_hash_free(BY_DIR_HASH *hash) | - |
124 | { | - |
125 | CRYPTO_free(hash, __FILE__, 123); | - |
126 | } never executed: end of block | 0 |
127 | | - |
128 | static int by_dir_hash_cmp(const BY_DIR_HASH *const *a, | - |
129 | const BY_DIR_HASH *const *b) | - |
130 | { | - |
131 | if ((*TRUE | never evaluated | FALSE | never evaluated |
a)->hash > (*b)->hashTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
132 | return never executed: return 1; 1;never executed: return 1; | 0 |
133 | if ((*TRUE | never evaluated | FALSE | never evaluated |
a)->hash < (*b)->hashTRUE | never evaluated | FALSE | never evaluated |
) | 0 |
134 | return never executed: return -1; -1;never executed: return -1; | 0 |
135 | return never executed: return 0; 0;never executed: return 0; | 0 |
136 | } | - |
137 | | - |
138 | static void by_dir_entry_free(BY_DIR_ENTRY *ent) | - |
139 | { | - |
140 | CRYPTO_free(ent->dir, __FILE__, 138); | - |
141 | sk_BY_DIR_HASH_pop_free(ent->hashes, by_dir_hash_free); | - |
142 | CRYPTO_free(ent, __FILE__, 140); | - |
143 | }executed 492 times by 1 test: end of block | 492 |
144 | | - |
145 | static void free_dir(X509_LOOKUP *lu) | - |
146 | { | - |
147 | BY_DIR *a = (BY_DIR *)lu->method_data; | - |
148 | | - |
149 | sk_BY_DIR_ENTRY_pop_free(a->dirs, by_dir_entry_free); | - |
150 | BUF_MEM_free(a->buffer); | - |
151 | CRYPTO_THREAD_lock_free(a->lock); | - |
152 | CRYPTO_free(a, __FILE__, 150); | - |
153 | }executed 492 times by 1 test: end of block | 492 |
154 | | - |
155 | static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) | - |
156 | { | - |
157 | int j; | - |
158 | size_t len; | - |
159 | const char *s, *ss, *p; | - |
160 | | - |
161 | if (dir == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
162 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
163 | || !*dirTRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) { | 0-492 |
164 | ERR_put_error(11,(100),(113),__FILE__,160); | - |
165 | return never executed: return 0; 0;never executed: return 0; | 0 |
166 | } | - |
167 | | - |
168 | s = dir; | - |
169 | p = s; | - |
170 | do { | - |
171 | if ((*TRUE | never evaluated | FALSE | evaluated 10332 times by 1 test |
p == ':')TRUE | never evaluated | FALSE | evaluated 10332 times by 1 test |
|| (*TRUE | evaluated 492 times by 1 test | FALSE | evaluated 9840 times by 1 test |
p == '\0')TRUE | evaluated 492 times by 1 test | FALSE | evaluated 9840 times by 1 test |
) { | 0-10332 |
172 | BY_DIR_ENTRY *ent; | - |
173 | | - |
174 | ss = s; | - |
175 | s = p + 1; | - |
176 | len = p - ss; | - |
177 | if (len == 0TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) | 0-492 |
178 | continue; never executed: continue; | 0 |
179 | for (j = 0; j < sk_BY_DIR_ENTRY_num(ctx->dirs)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
; j++) { | 0-492 |
180 | ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j); | - |
181 | if (strlen(ent->dir) == lenTRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
182 | (TRUE | never evaluated | FALSE | never evaluated |
__extension__ (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
183 | lenTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
184 | )TRUE | never evaluated | FALSE | never evaluated |
&& ((__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
185 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
186 | )TRUE | never evaluated | FALSE | never evaluated |
&& strlen (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
187 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
188 | ) < ((size_t) (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
189 | lenTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
190 | ))TRUE | never evaluated | FALSE | never evaluated |
) || (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
191 | ssTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
192 | )TRUE | never evaluated | FALSE | never evaluated |
&& strlen (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
193 | ssTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
194 | ) < ((size_t) (TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
195 | lenTRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
196 | ))TRUE | never evaluated | FALSE | never evaluated |
)) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
197 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
198 | ) && __builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
199 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
200 | ) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
201 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
202 | ), __s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
203 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
204 | ), (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
205 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
206 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
207 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
208 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
209 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
210 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
211 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
212 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
213 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
214 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
215 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
216 | ) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
217 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
218 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
219 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
220 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
221 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
222 | ) == 1) && (__s1_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
223 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
224 | ), __s1_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
225 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
226 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
227 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
228 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
229 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
230 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
231 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
232 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
233 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
234 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
235 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
236 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
237 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
238 | ))[0] - __s2[0]); if (__s1_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
239 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
240 | ))[1] - __s2[1]); if (__s1_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
241 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
242 | ))[2] - __s2[2]); if (__s1_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( ent->dir ))[3] - __s2[3]); | 0 |
243 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( ent->dir ))[3] - __s2[3]); | 0 |
244 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
245 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
246 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
247 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
248 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
249 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
250 | ) == 1) && (__s2_len = __builtin_strlen (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
251 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
252 | ), __s2_len < 4) ? (__builtin_constant_p (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
253 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
254 | ) && ((size_t)(const void *)((TRUE | never evaluated | FALSE | never evaluated |
| 0 |
255 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
256 | ) + 1) - (size_t)(const void *)(TRUE | never evaluated | FALSE | never evaluated |
| 0 |
257 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
258 | ) == 1) ? __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
259 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
260 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
261 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
262 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
263 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
264 | ); int __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
265 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
266 | ))[0] - __s2[0]); if (__s2_len > 0TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
267 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
268 | ))[1] - __s2[1]); if (__s2_len > 1TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
269 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
270 | ))[2] - __s2[2]); if (__s2_len > 2TRUE | never evaluated | FALSE | never evaluated |
&& __result == 0TRUE | never evaluated | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( ss ))[3] - __s2[3]); | 0 |
271 | ssTRUE | never evaluated | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( ss ))[3] - __s2[3]); | 0 |
272 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
273 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
274 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
275 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
276 | )))); }) : strncmp (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
277 | ent->dirTRUE | never evaluated | FALSE | never evaluated |
| 0 |
278 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
279 | ssTRUE | never evaluated | FALSE | never evaluated |
| 0 |
280 | , TRUE | never evaluated | FALSE | never evaluated |
| 0 |
281 | lenTRUE | never evaluated | FALSE | never evaluated |
| 0 |
282 | ))) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
283 | == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
284 | break; never executed: break; | 0 |
285 | } never executed: end of block | 0 |
286 | if (j < sk_BY_DIR_ENTRY_num(ctx->dirs)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) | 0-492 |
287 | continue; never executed: continue; | 0 |
288 | if (ctx->dirs == TRUE | evaluated 492 times by 1 test | FALSE | never evaluated |
| 0-492 |
289 | ((void *)0)TRUE | evaluated 492 times by 1 test | FALSE | never evaluated |
| 0-492 |
290 | ) { | - |
291 | ctx->dirs = sk_BY_DIR_ENTRY_new_null(); | - |
292 | if (!ctx->dirsTRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) { | 0-492 |
293 | ERR_put_error(11,(100),((1|64)),__FILE__,185); | - |
294 | return never executed: return 0; 0;never executed: return 0; | 0 |
295 | } | - |
296 | }executed 492 times by 1 test: end of block | 492 |
297 | ent = CRYPTO_malloc(sizeof(*ent), __FILE__, 189); | - |
298 | if (ent == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
299 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
300 | ) { | - |
301 | ERR_put_error(11,(100),((1|64)),__FILE__,191); | - |
302 | return never executed: return 0; 0;never executed: return 0; | 0 |
303 | } | - |
304 | ent->dir_type = type; | - |
305 | ent->hashes = sk_BY_DIR_HASH_new(by_dir_hash_cmp); | - |
306 | ent->dir = CRYPTO_strndup(ss, len, __FILE__, 196); | - |
307 | if (ent->dir == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
308 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
309 | || ent->hashes == TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
310 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
| 0-492 |
311 | ) { | - |
312 | by_dir_entry_free(ent); | - |
313 | return never executed: return 0; 0;never executed: return 0; | 0 |
314 | } | - |
315 | if (!sk_BY_DIR_ENTRY_push(ctx->dirs, ent)TRUE | never evaluated | FALSE | evaluated 492 times by 1 test |
) { | 0-492 |
316 | by_dir_entry_free(ent); | - |
317 | ERR_put_error(11,(100),((1|64)),__FILE__,203); | - |
318 | return never executed: return 0; 0;never executed: return 0; | 0 |
319 | } | - |
320 | }executed 492 times by 1 test: end of block | 492 |
321 | }executed 10332 times by 1 test: end of block while (*TRUE | evaluated 9840 times by 1 test | FALSE | evaluated 492 times by 1 test |
p++ != '\0'TRUE | evaluated 9840 times by 1 test | FALSE | evaluated 492 times by 1 test |
); | 492-10332 |
322 | returnexecuted 492 times by 1 test: return 1; 1;executed 492 times by 1 test: return 1; | 492 |
323 | } | - |
324 | | - |
325 | static int get_cert_by_subject(X509_LOOKUP *xl, X509_LOOKUP_TYPE type, | - |
326 | X509_NAME *name, X509_OBJECT *ret) | - |
327 | { | - |
328 | BY_DIR *ctx; | - |
329 | union { | - |
330 | X509 st_x509; | - |
331 | X509_CRL crl; | - |
332 | } data; | - |
333 | int ok = 0; | - |
334 | int i, j, k; | - |
335 | unsigned long h; | - |
336 | BUF_MEM *b = | - |
337 | ((void *)0) | - |
338 | ; | - |
339 | X509_OBJECT stmp, *tmp; | - |
340 | const char *postfix = ""; | - |
341 | | - |
342 | if (name == TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
| 0-396 |
343 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
| 0-396 |
344 | ) | - |
345 | return never executed: return 0; 0;never executed: return 0; | 0 |
346 | | - |
347 | stmp.type = type; | - |
348 | if (type == X509_LU_X509TRUE | evaluated 396 times by 1 test | FALSE | never evaluated |
) { | 0-396 |
349 | data.st_x509.cert_info.subject = name; | - |
350 | stmp.data.x509 = &data.st_x509; | - |
351 | postfix = ""; | - |
352 | }executed 396 times by 1 test: end of block else if (type == X509_LU_CRLTRUE | never evaluated | FALSE | never evaluated |
) { | 0-396 |
353 | data.crl.crl.issuer = name; | - |
354 | stmp.data.crl = &data.crl; | - |
355 | postfix = "r"; | - |
356 | } never executed: end of block else { | 0 |
357 | ERR_put_error(11,(103),(112),__FILE__,239); | - |
358 | goto never executed: goto finish; finish;never executed: goto finish; | 0 |
359 | } | - |
360 | | - |
361 | if ((TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
b = BUF_MEM_new()) == TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
| 0-396 |
362 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
| 0-396 |
363 | ) { | - |
364 | ERR_put_error(11,(103),(7),__FILE__,244); | - |
365 | goto never executed: goto finish; finish;never executed: goto finish; | 0 |
366 | } | - |
367 | | - |
368 | ctx = (BY_DIR *)xl->method_data; | - |
369 | | - |
370 | h = X509_NAME_hash(name); | - |
371 | for (i = 0; i < sk_BY_DIR_ENTRY_num(ctx->dirs)TRUE | evaluated 396 times by 1 test | FALSE | evaluated 396 times by 1 test |
; i++) { | 396 |
372 | BY_DIR_ENTRY *ent; | - |
373 | int idx; | - |
374 | BY_DIR_HASH htmp, *hent; | - |
375 | | - |
376 | ent = sk_BY_DIR_ENTRY_value(ctx->dirs, i); | - |
377 | j = strlen(ent->dir) + 1 + 8 + 6 + 1 + 1; | - |
378 | if (!BUF_MEM_grow(b, j)TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
) { | 0-396 |
379 | ERR_put_error(11,(103),((1|64)),__FILE__,259); | - |
380 | goto never executed: goto finish; finish;never executed: goto finish; | 0 |
381 | } | - |
382 | if (type == X509_LU_CRLTRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
&& ent->hashesTRUE | never evaluated | FALSE | never evaluated |
) { | 0-396 |
383 | htmp.hash = h; | - |
384 | CRYPTO_THREAD_read_lock(ctx->lock); | - |
385 | idx = sk_BY_DIR_HASH_find(ent->hashes, &htmp); | - |
386 | if (idx >= 0TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
387 | hent = sk_BY_DIR_HASH_value(ent->hashes, idx); | - |
388 | k = hent->suffix; | - |
389 | } never executed: end of block else { | 0 |
390 | hent = | - |
391 | ((void *)0) | - |
392 | ; | - |
393 | k = 0; | - |
394 | } never executed: end of block | 0 |
395 | CRYPTO_THREAD_unlock(ctx->lock); | - |
396 | } never executed: end of block else { | 0 |
397 | k = 0; | - |
398 | hent = | - |
399 | ((void *)0) | - |
400 | ; | - |
401 | }executed 396 times by 1 test: end of block | 396 |
402 | for (;;) { | - |
403 | char c = '/'; | - |
404 | if (c == '\0'TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
) { | 0-396 |
405 | | - |
406 | | - |
407 | | - |
408 | | - |
409 | BIO_snprintf(b->data, b->max, | - |
410 | "%s%08lx.%s%d", ent->dir, h, postfix, k); | - |
411 | } never executed: end of block else { | 0 |
412 | BIO_snprintf(b->data, b->max, | - |
413 | "%s%c%08lx.%s%d", ent->dir, c, h, postfix, k); | - |
414 | }executed 396 times by 1 test: end of block | 396 |
415 | | - |
416 | | - |
417 | | - |
418 | | - |
419 | { | - |
420 | struct stat st; | - |
421 | if (stat(b->data, &st) < 0TRUE | evaluated 396 times by 1 test | FALSE | never evaluated |
) | 0-396 |
422 | break;executed 396 times by 1 test: break; | 396 |
423 | } | - |
424 | | - |
425 | | - |
426 | if (type == X509_LU_X509TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
427 | if ((TRUE | never evaluated | FALSE | never evaluated |
X509_load_cert_file(xl, b->data, ent->dir_type)) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
428 | break; never executed: break; | 0 |
429 | } never executed: end of block else if (type == X509_LU_CRLTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
430 | if ((TRUE | never evaluated | FALSE | never evaluated |
X509_load_crl_file(xl, b->data, ent->dir_type)) == 0TRUE | never evaluated | FALSE | never evaluated |
) | 0 |
431 | break; never executed: break; | 0 |
432 | } never executed: end of block | 0 |
433 | | - |
434 | k++; | - |
435 | } never executed: end of block | 0 |
436 | | - |
437 | | - |
438 | | - |
439 | | - |
440 | CRYPTO_THREAD_write_lock(ctx->lock); | - |
441 | j = sk_X509_OBJECT_find(xl->store_ctx->objs, &stmp); | - |
442 | tmp = sk_X509_OBJECT_value(xl->store_ctx->objs, j); | - |
443 | CRYPTO_THREAD_unlock(ctx->lock); | - |
444 | | - |
445 | | - |
446 | | - |
447 | if (type == X509_LU_CRLTRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
) { | 0-396 |
448 | CRYPTO_THREAD_write_lock(ctx->lock); | - |
449 | | - |
450 | | - |
451 | | - |
452 | | - |
453 | if (hent == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
454 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
455 | ) { | - |
456 | htmp.hash = h; | - |
457 | idx = sk_BY_DIR_HASH_find(ent->hashes, &htmp); | - |
458 | hent = sk_BY_DIR_HASH_value(ent->hashes, idx); | - |
459 | } never executed: end of block | 0 |
460 | if (hent == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
461 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
462 | ) { | - |
463 | hent = CRYPTO_malloc(sizeof(*hent), __FILE__, 349); | - |
464 | if (hent == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
465 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
466 | ) { | - |
467 | CRYPTO_THREAD_unlock(ctx->lock); | - |
468 | ERR_put_error(11,(103),((1|64)),__FILE__,352); | - |
469 | ok = 0; | - |
470 | goto never executed: goto finish; finish;never executed: goto finish; | 0 |
471 | } | - |
472 | hent->hash = h; | - |
473 | hent->suffix = k; | - |
474 | if (!sk_BY_DIR_HASH_push(ent->hashes, hent)TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
475 | CRYPTO_THREAD_unlock(ctx->lock); | - |
476 | CRYPTO_free(hent, __FILE__, 360); | - |
477 | ERR_put_error(11,(103),((1|64)),__FILE__,361); | - |
478 | ok = 0; | - |
479 | goto never executed: goto finish; finish;never executed: goto finish; | 0 |
480 | } | - |
481 | } never executed: end of block else if (hent->suffix < kTRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
482 | hent->suffix = k; | - |
483 | } never executed: end of block | 0 |
484 | | - |
485 | CRYPTO_THREAD_unlock(ctx->lock); | - |
486 | | - |
487 | } never executed: end of block | 0 |
488 | | - |
489 | if (tmp != TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
| 0-396 |
490 | ((void *)0)TRUE | never evaluated | FALSE | evaluated 396 times by 1 test |
| 0-396 |
491 | ) { | - |
492 | ok = 1; | - |
493 | ret->type = tmp->type; | - |
494 | memcpy(&ret->data, &tmp->data, sizeof(ret->data)); | - |
495 | | - |
496 | | - |
497 | | - |
498 | | - |
499 | | - |
500 | ERR_clear_error(); | - |
501 | | - |
502 | goto never executed: goto finish; finish;never executed: goto finish; | 0 |
503 | } | - |
504 | }executed 396 times by 1 test: end of block | 396 |
505 | finish:code before this statement executed 396 times by 1 test: finish: | 396 |
506 | BUF_MEM_free(b); | - |
507 | returnexecuted 396 times by 1 test: return ok; ok;executed 396 times by 1 test: return ok; | 396 |
508 | } | - |
| | |