OpenCoverage

x509_vpm.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/x509/x509_vpm.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include <stdio.h>-
11-
12#include "internal/cryptlib.h"-
13#include <openssl/crypto.h>-
14#include <openssl/buffer.h>-
15#include <openssl/x509.h>-
16#include <openssl/x509v3.h>-
17#include "internal/x509_int.h"-
18-
19#include "x509_lcl.h"-
20-
21/* X509_VERIFY_PARAM functions */-
22-
23#define SET_HOST 0-
24#define ADD_HOST 1-
25-
26static char *str_copy(const char *s)-
27{-
28 return OPENSSL_strdup(s);
executed 49 times by 1 test: return CRYPTO_strdup(s, __FILE__, 28);
Executed by:
  • libcrypto.so.1.1
49
29}-
30-
31static void str_free(char *s)-
32{-
33 OPENSSL_free(s);-
34}
executed 98 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
98
35-
36static int int_x509_param_set_hosts(X509_VERIFY_PARAM *vpm, int mode,-
37 const char *name, size_t namelen)-
38{-
39 char *copy;-
40-
41 /*-
42 * Refuse names with embedded NUL bytes, except perhaps as final byte.-
43 * XXX: Do we need to push an error onto the error stack?-
44 */-
45 if (namelen == 0 || name == NULL)
namelen == 0Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
name == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0-49
46 namelen = name ? strlen(name) : 0;
executed 49 times by 1 test: namelen = name ? strlen(name) : 0;
Executed by:
  • libcrypto.so.1.1
nameDescription
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-49
47 else if (name && memchr(name, '\0', namelen > 1 ? namelen - 1 : namelen))
nameDescription
TRUEnever evaluated
FALSEnever evaluated
memchr(name, '...- 1 : namelen)Description
TRUEnever evaluated
FALSEnever evaluated
0
48 return 0;
never executed: return 0;
0
49 if (namelen > 0 && name[namelen - 1] == '\0')
namelen > 0Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
name[namelen - 1] == '\0'Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-49
50 --namelen;
never executed: --namelen;
0
51-
52 if (mode == SET_HOST) {
mode == 0Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-49
53 sk_OPENSSL_STRING_pop_free(vpm->hosts, str_free);-
54 vpm->hosts = NULL;-
55 }
executed 49 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
49
56 if (name == NULL || namelen == 0)
name == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
namelen == 0Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-49
57 return 1;
never executed: return 1;
0
58-
59 copy = OPENSSL_strndup(name, namelen);-
60 if (copy == NULL)
copy == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-49
61 return 0;
never executed: return 0;
0
62-
63 if (vpm->hosts == NULL &&
vpm->hosts == ((void *)0)Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-49
64 (vpm->hosts = sk_OPENSSL_STRING_new_null()) == NULL) {
(vpm->hosts = ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-49
65 OPENSSL_free(copy);-
66 return 0;
never executed: return 0;
0
67 }-
68-
69 if (!sk_OPENSSL_STRING_push(vpm->hosts, copy)) {
!sk_OPENSSL_ST...->hosts, copy)Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-49
70 OPENSSL_free(copy);-
71 if (sk_OPENSSL_STRING_num(vpm->hosts) == 0) {
sk_OPENSSL_STR...m->hosts) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
72 sk_OPENSSL_STRING_free(vpm->hosts);-
73 vpm->hosts = NULL;-
74 }
never executed: end of block
0
75 return 0;
never executed: return 0;
0
76 }-
77-
78 return 1;
executed 49 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
49
79}-
80-
81-
82X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void)-
83{-
84 X509_VERIFY_PARAM *param;-
85-
86 param = OPENSSL_zalloc(sizeof(*param));-
87 if (param == NULL) {
param == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 31573 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-31573
88 X509err(X509_F_X509_VERIFY_PARAM_NEW, ERR_R_MALLOC_FAILURE);-
89 return NULL;
never executed: return ((void *)0) ;
0
90 }-
91 param->trust = X509_TRUST_DEFAULT;-
92 /* param->inh_flags = X509_VP_FLAG_DEFAULT; */-
93 param->depth = -1;-
94 param->auth_level = -1; /* -1 means unset, 0 is explicit */-
95 return param;
executed 31573 times by 1 test: return param;
Executed by:
  • libcrypto.so.1.1
31573
96}-
97-
98void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param)-
99{-
100 if (param == NULL)
param == ((void *)0)Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 31573 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
7-31573
101 return;
executed 7 times by 1 test: return;
Executed by:
  • libcrypto.so.1.1
7
102 sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free);-
103 sk_OPENSSL_STRING_pop_free(param->hosts, str_free);-
104 OPENSSL_free(param->peername);-
105 OPENSSL_free(param->email);-
106 OPENSSL_free(param->ip);-
107 OPENSSL_free(param);-
108}
executed 31573 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
31573
109-
110/*--
111 * This function determines how parameters are "inherited" from one structure-
112 * to another. There are several different ways this can happen.-
113 *-
114 * 1. If a child structure needs to have its values initialized from a parent-
115 * they are simply copied across. For example SSL_CTX copied to SSL.-
116 * 2. If the structure should take on values only if they are currently unset.-
117 * For example the values in an SSL structure will take appropriate value-
118 * for SSL servers or clients but only if the application has not set new-
119 * ones.-
120 *-
121 * The "inh_flags" field determines how this function behaves.-
122 *-
123 * Normally any values which are set in the default are not copied from the-
124 * destination and verify flags are ORed together.-
125 *-
126 * If X509_VP_FLAG_DEFAULT is set then anything set in the source is copied-
127 * to the destination. Effectively the values in "to" become default values-
128 * which will be used only if nothing new is set in "from".-
129 *-
130 * If X509_VP_FLAG_OVERWRITE is set then all value are copied across whether-
131 * they are set or not. Flags is still Ored though.-
132 *-
133 * If X509_VP_FLAG_RESET_FLAGS is set then the flags value is copied instead-
134 * of ORed.-
135 *-
136 * If X509_VP_FLAG_LOCKED is set then no values are copied.-
137 *-
138 * If X509_VP_FLAG_ONCE is set then the current inh_flags setting is zeroed-
139 * after the next call.-
140 */-
141-
142/* Macro to test if a field should be copied from src to dest */-
143-
144#define test_x509_verify_param_copy(field, def) \-
145 (to_overwrite || \-
146 ((src->field != def) && (to_default || (dest->field == def))))-
147-
148/* Macro to test and copy a field if necessary */-
149-
150#define x509_verify_param_copy(field, def) \-
151 if (test_x509_verify_param_copy(field, def)) \-
152 dest->field = src->field-
153-
154int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest,-
155 const X509_VERIFY_PARAM *src)-
156{-
157 unsigned long inh_flags;-
158 int to_default, to_overwrite;-
159 if (!src)
!srcDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23912
160 return 1;
never executed: return 1;
0
161 inh_flags = dest->inh_flags | src->inh_flags;-
162-
163 if (inh_flags & X509_VP_FLAG_ONCE)
inh_flags & 0x10Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23911 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-23911
164 dest->inh_flags = 0;
executed 1 time by 1 test: dest->inh_flags = 0;
Executed by:
  • libcrypto.so.1.1
1
165-
166 if (inh_flags & X509_VP_FLAG_LOCKED)
inh_flags & 0x8Description
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23912
167 return 1;
never executed: return 1;
0
168-
169 if (inh_flags & X509_VP_FLAG_DEFAULT)
inh_flags & 0x1Description
TRUEevaluated 2850 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 21062 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2850-21062
170 to_default = 1;
executed 2850 times by 1 test: to_default = 1;
Executed by:
  • libcrypto.so.1.1
2850
171 else-
172 to_default = 0;
executed 21062 times by 1 test: to_default = 0;
Executed by:
  • libcrypto.so.1.1
21062
173-
174 if (inh_flags & X509_VP_FLAG_OVERWRITE)
inh_flags & 0x2Description
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23912
175 to_overwrite = 1;
never executed: to_overwrite = 1;
0
176 else-
177 to_overwrite = 0;
executed 23912 times by 1 test: to_overwrite = 0;
Executed by:
  • libcrypto.so.1.1
23912
178-
179 x509_verify_param_copy(purpose, 0);
executed 3015 times by 1 test: dest->purpose = src->purpose;
Executed by:
  • libcrypto.so.1.1
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->purpose != 0)Description
TRUEevaluated 3015 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 20897 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEevaluated 134 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2881 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(dest->purpose == 0)Description
TRUEevaluated 2881 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-23912
180 x509_verify_param_copy(trust, X509_TRUST_DEFAULT);
executed 2748 times by 1 test: dest->trust = src->trust;
Executed by:
  • libcrypto.so.1.1
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->trust != 0)Description
TRUEevaluated 2748 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 21164 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEnever evaluated
FALSEevaluated 2748 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(dest->trust == 0)Description
TRUEevaluated 2748 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-23912
181 x509_verify_param_copy(depth, -1);
executed 5035 times by 1 test: dest->depth = src->depth;
Executed by:
  • libcrypto.so.1.1
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->depth != -1)Description
TRUEevaluated 5039 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18873 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5034 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(dest->depth == -1)Description
TRUEevaluated 5030 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23912
182 x509_verify_param_copy(auth_level, -1);
executed 267 times by 1 test: dest->auth_level = src->auth_level;
Executed by:
  • libcrypto.so.1.1
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->auth_level != -1)Description
TRUEevaluated 267 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23645 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEevaluated 134 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 133 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(dest->auth_level == -1)Description
TRUEevaluated 133 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-23912
183-
184 /* If overwrite or check time not set, copy across */-
185-
186 if (to_overwrite || !(dest->flags & X509_V_FLAG_USE_CHECK_TIME)) {
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!(dest->flags & 0x2)Description
TRUEevaluated 23887 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23912
187 dest->check_time = src->check_time;-
188 dest->flags &= ~X509_V_FLAG_USE_CHECK_TIME;-
189 /* Don't need to copy flag: that is done below */-
190 }
executed 23887 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
23887
191-
192 if (inh_flags & X509_VP_FLAG_RESET_FLAGS)
inh_flags & 0x4Description
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-23912
193 dest->flags = 0;
never executed: dest->flags = 0;
0
194-
195 dest->flags |= src->flags;-
196-
197 if (test_x509_verify_param_copy(policies, NULL)) {
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->policies... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEnever evaluated
FALSEnever evaluated
(dest->policie... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-23912
198 if (!X509_VERIFY_PARAM_set1_policies(dest, src->policies))
!X509_VERIFY_P...src->policies)Description
TRUEnever evaluated
FALSEnever evaluated
0
199 return 0;
never executed: return 0;
0
200 }
never executed: end of block
0
201-
202 /* Copy the host flags if and only if we're copying the host list */-
203 if (test_x509_verify_param_copy(hosts, NULL)) {
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->hosts != ((void *)0) )Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23863 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
(dest->hosts == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-23912
204 sk_OPENSSL_STRING_pop_free(dest->hosts, str_free);-
205 dest->hosts = NULL;-
206 if (src->hosts) {
src->hostsDescription
TRUEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-49
207 dest->hosts =-
208 sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free);-
209 if (dest->hosts == NULL)
dest->hosts == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-49
210 return 0;
never executed: return 0;
0
211 dest->hostflags = src->hostflags;-
212 }
executed 49 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
49
213 }
executed 49 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
49
214-
215 if (test_x509_verify_param_copy(email, NULL)) {
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->email != ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEnever evaluated
FALSEnever evaluated
(dest->email == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-23912
216 if (!X509_VERIFY_PARAM_set1_email(dest, src->email, src->emaillen))
!X509_VERIFY_P...src->emaillen)Description
TRUEnever evaluated
FALSEnever evaluated
0
217 return 0;
never executed: return 0;
0
218 }
never executed: end of block
0
219-
220 if (test_x509_verify_param_copy(ip, NULL)) {
to_overwriteDescription
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(src->ip != ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 23912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
to_defaultDescription
TRUEnever evaluated
FALSEnever evaluated
(dest->ip == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0-23912
221 if (!X509_VERIFY_PARAM_set1_ip(dest, src->ip, src->iplen))
!X509_VERIFY_P...p, src->iplen)Description
TRUEnever evaluated
FALSEnever evaluated
0
222 return 0;
never executed: return 0;
0
223 }
never executed: end of block
0
224-
225 return 1;
executed 23912 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
23912
226}-
227-
228int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to,-
229 const X509_VERIFY_PARAM *from)-
230{-
231 unsigned long save_flags = to->inh_flags;-
232 int ret;-
233 to->inh_flags |= X509_VP_FLAG_DEFAULT;-
234 ret = X509_VERIFY_PARAM_inherit(to, from);-
235 to->inh_flags = save_flags;-
236 return ret;
executed 2849 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
2849
237}-
238-
239static int int_x509_param_set1(char **pdest, size_t *pdestlen,-
240 const char *src, size_t srclen)-
241{-
242 void *tmp;-
243 if (src) {
srcDescription
TRUEnever evaluated
FALSEnever evaluated
0
244 if (srclen == 0)
srclen == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
245 srclen = strlen(src);
never executed: srclen = strlen(src);
0
246-
247 tmp = OPENSSL_memdup(src, srclen);-
248 if (tmp == NULL)
tmp == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
249 return 0;
never executed: return 0;
0
250 } else {
never executed: end of block
0
251 tmp = NULL;-
252 srclen = 0;-
253 }
never executed: end of block
0
254 OPENSSL_free(*pdest);-
255 *pdest = tmp;-
256 if (pdestlen != NULL)
pdestlen != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
257 *pdestlen = srclen;
never executed: *pdestlen = srclen;
0
258 return 1;
never executed: return 1;
0
259}-
260-
261int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name)-
262{-
263 OPENSSL_free(param->name);-
264 param->name = OPENSSL_strdup(name);-
265 if (param->name)
param->nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
266 return 1;
never executed: return 1;
0
267 return 0;
never executed: return 0;
0
268}-
269-
270int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags)-
271{-
272 param->flags |= flags;-
273 if (flags & X509_V_FLAG_POLICY_MASK)
flags & (0x80 ...0x200 | 0x400)Description
TRUEnever evaluated
FALSEevaluated 2843 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2843
274 param->flags |= X509_V_FLAG_POLICY_CHECK;
never executed: param->flags |= 0x80;
0
275 return 1;
executed 2843 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2843
276}-
277-
278int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,-
279 unsigned long flags)-
280{-
281 param->flags &= ~flags;-
282 return 1;
never executed: return 1;
0
283}-
284-
285unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param)-
286{-
287 return param->flags;
never executed: return param->flags;
0
288}-
289-
290uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param)-
291{-
292 return param->inh_flags;
never executed: return param->inh_flags;
0
293}-
294-
295int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, uint32_t flags)-
296{-
297 param->inh_flags = flags;-
298 return 1;
never executed: return 1;
0
299}-
300-
301int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose)-
302{-
303 return X509_PURPOSE_set(&param->purpose, purpose);
executed 134 times by 1 test: return X509_PURPOSE_set(&param->purpose, purpose);
Executed by:
  • libcrypto.so.1.1
134
304}-
305-
306int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust)-
307{-
308 return X509_TRUST_set(&param->trust, trust);
never executed: return X509_TRUST_set(&param->trust, trust);
0
309}-
310-
311void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth)-
312{-
313 param->depth = depth;-
314}
executed 11 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
11
315-
316void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level)-
317{-
318 param->auth_level = auth_level;-
319}
executed 2756 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
2756
320-
321time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param)-
322{-
323 return param->check_time;
executed 7 times by 1 test: return param->check_time;
Executed by:
  • libcrypto.so.1.1
7
324}-
325-
326void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t)-
327{-
328 param->check_time = t;-
329 param->flags |= X509_V_FLAG_USE_CHECK_TIME;-
330}
executed 62 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
62
331-
332int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,-
333 ASN1_OBJECT *policy)-
334{-
335 if (!param->policies) {
!param->policiesDescription
TRUEnever evaluated
FALSEnever evaluated
0
336 param->policies = sk_ASN1_OBJECT_new_null();-
337 if (!param->policies)
!param->policiesDescription
TRUEnever evaluated
FALSEnever evaluated
0
338 return 0;
never executed: return 0;
0
339 }
never executed: end of block
0
340 if (!sk_ASN1_OBJECT_push(param->policies, policy))
!sk_ASN1_OBJEC...icies, policy)Description
TRUEnever evaluated
FALSEnever evaluated
0
341 return 0;
never executed: return 0;
0
342 return 1;
never executed: return 1;
0
343}-
344-
345int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,-
346 STACK_OF(ASN1_OBJECT) *policies)-
347{-
348 int i;-
349 ASN1_OBJECT *oid, *doid;-
350-
351 if (!param)
!paramDescription
TRUEnever evaluated
FALSEnever evaluated
0
352 return 0;
never executed: return 0;
0
353 sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free);-
354-
355 if (!policies) {
!policiesDescription
TRUEnever evaluated
FALSEnever evaluated
0
356 param->policies = NULL;-
357 return 1;
never executed: return 1;
0
358 }-
359-
360 param->policies = sk_ASN1_OBJECT_new_null();-
361 if (!param->policies)
!param->policiesDescription
TRUEnever evaluated
FALSEnever evaluated
0
362 return 0;
never executed: return 0;
0
363-
364 for (i = 0; i < sk_ASN1_OBJECT_num(policies); i++) {
i < sk_ASN1_OB..._num(policies)Description
TRUEnever evaluated
FALSEnever evaluated
0
365 oid = sk_ASN1_OBJECT_value(policies, i);-
366 doid = OBJ_dup(oid);-
367 if (!doid)
!doidDescription
TRUEnever evaluated
FALSEnever evaluated
0
368 return 0;
never executed: return 0;
0
369 if (!sk_ASN1_OBJECT_push(param->policies, doid)) {
!sk_ASN1_OBJEC...olicies, doid)Description
TRUEnever evaluated
FALSEnever evaluated
0
370 ASN1_OBJECT_free(doid);-
371 return 0;
never executed: return 0;
0
372 }-
373 }
never executed: end of block
0
374 param->flags |= X509_V_FLAG_POLICY_CHECK;-
375 return 1;
never executed: return 1;
0
376}-
377-
378int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,-
379 const char *name, size_t namelen)-
380{-
381 return int_x509_param_set_hosts(param, SET_HOST, name, namelen);
executed 49 times by 1 test: return int_x509_param_set_hosts(param, 0, name, namelen);
Executed by:
  • libcrypto.so.1.1
49
382}-
383-
384int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,-
385 const char *name, size_t namelen)-
386{-
387 return int_x509_param_set_hosts(param, ADD_HOST, name, namelen);
never executed: return int_x509_param_set_hosts(param, 1, name, namelen);
0
388}-
389-
390void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,-
391 unsigned int flags)-
392{-
393 param->hostflags = flags;-
394}
never executed: end of block
0
395-
396unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param)-
397{-
398 return param->hostflags;
never executed: return param->hostflags;
0
399}-
400-
401char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param)-
402{-
403 return param->peername;
executed 53 times by 1 test: return param->peername;
Executed by:
  • libcrypto.so.1.1
53
404}-
405-
406/*-
407 * Move peername from one param structure to another, freeing any name present-
408 * at the target. If the source is a NULL parameter structure, free and zero-
409 * the target peername.-
410 */-
411void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *to,-
412 X509_VERIFY_PARAM *from)-
413{-
414 char *peername = (from != NULL) ? from->peername : NULL;
(from != ((void *)0) )Description
TRUEevaluated 2611 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16269 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2611-16269
415-
416 if (to->peername != peername) {
to->peername != peernameDescription
TRUEnever evaluated
FALSEevaluated 18880 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-18880
417 OPENSSL_free(to->peername);-
418 to->peername = peername;-
419 }
never executed: end of block
0
420 if (from)
fromDescription
TRUEevaluated 2611 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16269 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2611-16269
421 from->peername = NULL;
executed 2611 times by 1 test: from->peername = ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
2611
422}
executed 18880 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
18880
423-
424int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,-
425 const char *email, size_t emaillen)-
426{-
427 return int_x509_param_set1(&param->email, &param->emaillen,
never executed: return int_x509_param_set1(&param->email, &param->emaillen, email, emaillen);
0
428 email, emaillen);
never executed: return int_x509_param_set1(&param->email, &param->emaillen, email, emaillen);
0
429}-
430-
431int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,-
432 const unsigned char *ip, size_t iplen)-
433{-
434 if (iplen != 0 && iplen != 4 && iplen != 16)
iplen != 0Description
TRUEnever evaluated
FALSEnever evaluated
iplen != 4Description
TRUEnever evaluated
FALSEnever evaluated
iplen != 16Description
TRUEnever evaluated
FALSEnever evaluated
0
435 return 0;
never executed: return 0;
0
436 return int_x509_param_set1((char **)&param->ip, &param->iplen,
never executed: return int_x509_param_set1((char **)&param->ip, &param->iplen, (char *)ip, iplen);
0
437 (char *)ip, iplen);
never executed: return int_x509_param_set1((char **)&param->ip, &param->iplen, (char *)ip, iplen);
0
438}-
439-
440int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc)-
441{-
442 unsigned char ipout[16];-
443 size_t iplen;-
444-
445 iplen = (size_t)a2i_ipadd(ipout, ipasc);-
446 if (iplen == 0)
iplen == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
447 return 0;
never executed: return 0;
0
448 return X509_VERIFY_PARAM_set1_ip(param, ipout, iplen);
never executed: return X509_VERIFY_PARAM_set1_ip(param, ipout, iplen);
0
449}-
450-
451int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param)-
452{-
453 return param->depth;
never executed: return param->depth;
0
454}-
455-
456int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param)-
457{-
458 return param->auth_level;
never executed: return param->auth_level;
0
459}-
460-
461const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param)-
462{-
463 return param->name;
never executed: return param->name;
0
464}-
465-
466#define vpm_empty_id NULL, 0U, NULL, NULL, 0, NULL, 0-
467-
468/*-
469 * Default verify parameters: these are used for various applications and can-
470 * be overridden by the user specified table. NB: the 'name' field *must* be-
471 * in alphabetical order because it will be searched using OBJ_search.-
472 */-
473-
474static const X509_VERIFY_PARAM default_table[] = {-
475 {-
476 "default", /* X509 default parameters */-
477 0, /* Check time */-
478 0, /* internal flags */-
479 X509_V_FLAG_TRUSTED_FIRST, /* flags */-
480 0, /* purpose */-
481 0, /* trust */-
482 100, /* depth */-
483 -1, /* auth_level */-
484 NULL, /* policies */-
485 vpm_empty_id},-
486 {-
487 "pkcs7", /* S/MIME sign parameters */-
488 0, /* Check time */-
489 0, /* internal flags */-
490 0, /* flags */-
491 X509_PURPOSE_SMIME_SIGN, /* purpose */-
492 X509_TRUST_EMAIL, /* trust */-
493 -1, /* depth */-
494 -1, /* auth_level */-
495 NULL, /* policies */-
496 vpm_empty_id},-
497 {-
498 "smime_sign", /* S/MIME sign parameters */-
499 0, /* Check time */-
500 0, /* internal flags */-
501 0, /* flags */-
502 X509_PURPOSE_SMIME_SIGN, /* purpose */-
503 X509_TRUST_EMAIL, /* trust */-
504 -1, /* depth */-
505 -1, /* auth_level */-
506 NULL, /* policies */-
507 vpm_empty_id},-
508 {-
509 "ssl_client", /* SSL/TLS client parameters */-
510 0, /* Check time */-
511 0, /* internal flags */-
512 0, /* flags */-
513 X509_PURPOSE_SSL_CLIENT, /* purpose */-
514 X509_TRUST_SSL_CLIENT, /* trust */-
515 -1, /* depth */-
516 -1, /* auth_level */-
517 NULL, /* policies */-
518 vpm_empty_id},-
519 {-
520 "ssl_server", /* SSL/TLS server parameters */-
521 0, /* Check time */-
522 0, /* internal flags */-
523 0, /* flags */-
524 X509_PURPOSE_SSL_SERVER, /* purpose */-
525 X509_TRUST_SSL_SERVER, /* trust */-
526 -1, /* depth */-
527 -1, /* auth_level */-
528 NULL, /* policies */-
529 vpm_empty_id}-
530};-
531-
532static STACK_OF(X509_VERIFY_PARAM) *param_table = NULL;-
533-
534static int table_cmp(const X509_VERIFY_PARAM *a, const X509_VERIFY_PARAM *b)-
535{-
536 return strcmp(a->name, b->name);
executed 20544 times by 1 test: return __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( a->name ) && __builtin_constant_p ( b->name ) && (__s1_len = __builtin_strlen ( a->name ), __s2_len = __builtin_strlen ( b->name ), (!((size_t)(const void *)(( a->name ) + 1) - (si... = (((const unsigned char *) (const char *) ( b->name ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( b->name ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( a->name , b->name )))); }) ;
Executed by:
  • libcrypto.so.1.1
never executed: __result = (((const unsigned char *) (const char *) ( a->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( b->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-20544
537}-
538-
539DECLARE_OBJ_BSEARCH_CMP_FN(X509_VERIFY_PARAM, X509_VERIFY_PARAM, table);-
540IMPLEMENT_OBJ_BSEARCH_CMP_FN(X509_VERIFY_PARAM, X509_VERIFY_PARAM, table);
executed 20544 times by 1 test: return table_cmp(a,b);
Executed by:
  • libcrypto.so.1.1
executed 7779 times by 1 test: return (X509_VERIFY_PARAM *)OBJ_bsearch_(key, base, num, sizeof(X509_VERIFY_PARAM), table_cmp_BSEARCH_CMP_FN);
Executed by:
  • libcrypto.so.1.1
7779-20544
541-
542static int param_cmp(const X509_VERIFY_PARAM *const *a,-
543 const X509_VERIFY_PARAM *const *b)-
544{-
545 return strcmp((*a)->name, (*b)->name);
never executed: return __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( (*a)->name ) && __builtin_constant_p ( (*b)->name ) && (__s1_len = __builtin_strlen ( (*a)->name ), __s2_len = __builtin_strlen ( (*b)->name ), (!((size_t)(const void *)(( (*a)->na...unsigned char *) (const char *) ( (*b)->name ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( (*b)->name ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( (*a)->name , (*b)->name )))); }) ;
never executed: __result = (((const unsigned char *) (const char *) ( (*a)->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( (*b)->name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
546}-
547-
548int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param)-
549{-
550 int idx;-
551 X509_VERIFY_PARAM *ptmp;-
552 if (param_table == NULL) {
param_table == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
553 param_table = sk_X509_VERIFY_PARAM_new(param_cmp);-
554 if (param_table == NULL)
param_table == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
555 return 0;
never executed: return 0;
0
556 } else {
never executed: end of block
0
557 idx = sk_X509_VERIFY_PARAM_find(param_table, param);-
558 if (idx >= 0) {
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
559 ptmp = sk_X509_VERIFY_PARAM_delete(param_table, idx);-
560 X509_VERIFY_PARAM_free(ptmp);-
561 }
never executed: end of block
0
562 }
never executed: end of block
0
563 if (!sk_X509_VERIFY_PARAM_push(param_table, param))
!sk_X509_VERIF..._table, param)Description
TRUEnever evaluated
FALSEnever evaluated
0
564 return 0;
never executed: return 0;
0
565 return 1;
never executed: return 1;
0
566}-
567-
568int X509_VERIFY_PARAM_get_count(void)-
569{-
570 int num = OSSL_NELEM(default_table);-
571 if (param_table)
param_tableDescription
TRUEnever evaluated
FALSEnever evaluated
0
572 num += sk_X509_VERIFY_PARAM_num(param_table);
never executed: num += sk_X509_VERIFY_PARAM_num(param_table);
0
573 return num;
never executed: return num;
0
574}-
575-
576const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id)-
577{-
578 int num = OSSL_NELEM(default_table);-
579 if (id < num)
id < numDescription
TRUEnever evaluated
FALSEnever evaluated
0
580 return default_table + id;
never executed: return default_table + id;
0
581 return sk_X509_VERIFY_PARAM_value(param_table, id - num);
never executed: return sk_X509_VERIFY_PARAM_value(param_table, id - num);
0
582}-
583-
584const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name)-
585{-
586 int idx;-
587 X509_VERIFY_PARAM pm;-
588-
589 pm.name = (char *)name;-
590 if (param_table != NULL) {
param_table != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 7779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-7779
591 idx = sk_X509_VERIFY_PARAM_find(param_table, &pm);-
592 if (idx >= 0)
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
593 return sk_X509_VERIFY_PARAM_value(param_table, idx);
never executed: return sk_X509_VERIFY_PARAM_value(param_table, idx);
0
594 }
never executed: end of block
0
595 return OBJ_bsearch_table(&pm, default_table, OSSL_NELEM(default_table));
executed 7779 times by 1 test: return OBJ_bsearch_table(&pm, default_table, (sizeof(default_table)/sizeof((default_table)[0])));
Executed by:
  • libcrypto.so.1.1
7779
596}-
597-
598void X509_VERIFY_PARAM_table_cleanup(void)-
599{-
600 sk_X509_VERIFY_PARAM_pop_free(param_table, X509_VERIFY_PARAM_free);-
601 param_table = NULL;-
602}
never executed: end of block
0
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2