CVE-2026-80231: native CA store conn reuse
What the report claims
A transfer expecting SecTrust verification silently inherits an OpenSSL-only verified connection due to mismatched native_ca_store handling during connection reuse on macOS.
Compare with curl's recorded outcome
Known vulnerability
A real vulnerability: CVE-2026-80231 native CA store conn reuse
Shown for comparison after analysis. The pipeline did not see this label.
ProveIt's finding
The code supports the reported flaw. A maintainer should review its impact and decide what to do next.
Why this finding?
- The release curl-8_21_0 lacks native_ca_store in ssl_primary_config and does not compare it in match_ssl_primary_config (lines 144-180 of vtls_config.c@curl-8_21_0).
- Curl_ssl_easy_config_complete in the release auto-sets native_ca_store=TRUE when no custom CA is configured (line 270) and auto-fills primary.CAfile from CURL_CA_BUNDLE (lines 279-284), creating the exact mismatch the report describes.
- Connection reuse via Curl_ssl_conn_config_match calls the flawed match_ssl_primary_config, so Transfer B silently inherits Transfer A's OpenSSL-verified connection instead of performing SecTrust verification.
- Master (7be1e70cb6bc) already fixed this via commit 7be1e70cb6 which moved native_ca_store into ssl_primary_config and added the comparison (current master line 144), but the flaw exists in the latest release.
How this analysis ran 5 claims · 11 citations verified
Checked against curl master on 2026-08-25 (7be1e70cb6bc). Dev evaluation split. Citation verification checks that a referenced line was in the evidence; it does not prove the model interpreted it correctly.
Review a draft reply to the reporter
Edit and verify before sending.
Thank you for the detailed report. The flaw exists in curl-8.21.0: native_ca_store is not part of ssl_primary_config, so match_ssl_primary_config does not compare it, causing connection reuse between transfers with different native CA store settings. Master already contains the fix (commit 7be1e70cb6). We will ensure the fix is in the next release. Could you confirm the reproduction works with curl-8.21.0?
Inspect all claims and source code 5 claims · 6 code excerpts
Report claims
native_ca_store is not part of ssl_primary_config, so match_ssl_primary_config does not compare it
Read the reasoning
In the release version (curl-8_21_0), match_ssl_primary_config compares many fields but native_ca_store is absent from both the struct and the comparison. Master (7be1e70cb6bc) fixed this via commit 7be1e70cb6 which moved native_ca_store into ssl_primary_config and added the comparison at line 144 of current master.
native_ca_store is in struct ssl_config_data (line 73 of vtls_config.h)
Read the reasoning
In the release, native_ca_store is a member of ssl_config_data (sslc), not ssl_primary_config. The deterministic check for master line 73 is irrelevant; the report describes the release code.
CURL_CA_BUNDLE is defined and no CURLOPT_CAINFO is set, causing auto-fill to set primary.CAfile and native_ca_store=TRUE
Read the reasoning
When CURL_CA_BUNDLE is defined and no custom CA file is set (custom_cafile=FALSE), the auto-fill sets primary.CAfile to the bundle path and also sets native_ca_store=TRUE (since custom_capath, custom_cafile, custom_cablob are all false). Transfer A explicitly sets CURLOPT_CAINFO making custom_cafile=TRUE, blocking the auto-set of native_ca_store (stays FALSE) but ending up with the same primary.CAfile.
Transfer B inherits Transfer A's connection without SecTrust verification running
Read the reasoning
Because match_ssl_primary_config in the release does not compare native_ca_store, two transfers with identical primary.CAfile and ssl_options but different native_ca_store (FALSE vs TRUE) will match, causing connection reuse. Transfer B inherits Transfer A's OpenSSL-verified connection without SecTrust running.
macOS baremetal build with -DUSE_APPLE_SECTRUST=ON -DCURL_CA_BUNDLE=<path> -DCURL_USE_OPENSSL=ON shows "Reusing existing https: connection" for Transfer B
Read the reasoning
The code path matches the reproduction: with USE_APPLE_SECTRUST and CURL_CA_BUNDLE defined, Transfer A (explicit CAINFO) gets native_ca_store=FALSE, Transfer B (no CAINFO) gets native_ca_store=TRUE and same CAfile. match_ssl_primary_config in release sees them as equal, logs connection reuse. The exact log message is not in provided snippets but the logic is sound.
Deterministic checks that failed
- line none of native_ca_store, ssl_primary_config, match_ssl_primary_config, Curl_ssl_easy_config_complete appear near line 73 at 7be1e70cb6bc; it reads: 'list errors */'
Read the original report
Source code
| 144 | static bool match_ssl_primary_config(struct Curl_easy *data, |
| C1: match_ssl_primary_config in release curl-8_21_0 does not compare native_ca_store (lines 149-176) | |
| C1: ssl_primary_config struct in release lacks native_ca_store field | |
| C4: match_ssl_primary_config lacks native_ca_store comparison | |
| 145 | struct ssl_primary_config *c1, |
| 146 | struct ssl_primary_config *c2) |
| 147 | { |
| 148 | (void)data; |
| 149 | if((c1->version == c2->version) && |
| 150 | (c1->version_max == c2->version_max) && |
| 151 | (c1->ssl_options == c2->ssl_options) && |
| 152 | (c1->verifypeer == c2->verifypeer) && |
| 153 | (c1->verifyhost == c2->verifyhost) && |
| 154 | (c1->verifystatus == c2->verifystatus) && |
| 155 | blobcmp(c1->cert_blob, c2->cert_blob) && |
| 156 | blobcmp(c1->ca_info_blob, c2->ca_info_blob) && |
| 157 | blobcmp(c1->issuercert_blob, c2->issuercert_blob) && |
| 158 | blobcmp(c1->key_blob, c2->key_blob) && |
| 159 | Curl_safecmp(c1->CApath, c2->CApath) && |
| 160 | Curl_safecmp(c1->CAfile, c2->CAfile) && |
| 161 | Curl_safecmp(c1->issuercert, c2->issuercert) && |
| 162 | Curl_safecmp(c1->clientcert, c2->clientcert) && |
| 163 | #ifdef USE_TLS_SRP |
| 164 | !Curl_timestrcmp(c1->username, c2->username) && |
| 165 | !Curl_timestrcmp(c1->password, c2->password) && |
| 166 | #endif |
| 167 | curl_strequal(c1->cipher_list, c2->cipher_list) && |
| 168 | curl_strequal(c1->cipher_list13, c2->cipher_list13) && |
| 169 | curl_strequal(c1->curves, c2->curves) && |
| 170 | curl_strequal(c1->signature_algorithms, c2->signature_algorithms) && |
| 171 | Curl_safecmp(c1->CRLfile, c2->CRLfile) && |
| 172 | Curl_safecmp(c1->pinned_key, c2->pinned_key) && |
| 173 | curl_strequal(c1->cert_type, c2->cert_type) && |
| 174 | Curl_safecmp(c1->key, c2->key) && |
| 175 | curl_strequal(c1->key_type, c2->key_type) && |
| 176 | !Curl_timestrcmp(c1->key_passwd, c2->key_passwd)) |
| 177 | return TRUE; |
| 178 | |
| 179 | return FALSE; |
| 180 | } |
| 256 | CURLcode Curl_ssl_easy_config_complete(struct Curl_easy *data, |
| 257 | struct Curl_peer *origin) |
| 258 | { |
| 259 | struct ssl_config_data *sslc = &data->set.ssl; |
| C2: struct ssl_config_data *sslc = &data->set.ssl; | |
| 260 | #if defined(CURL_CA_PATH) || defined(CURL_CA_BUNDLE) |
| C2: sslc is struct ssl_config_data*; line 270 sets sslc->native_ca_store = TRUE | |
| 261 | struct UserDefined *set = &data->set; |
| 262 | CURLcode result; |
| 263 | #endif |
| 264 | |
| 265 | ssl_easy_config_compl_options(origin, data->state.initial_origin, sslc); |
| 266 | |
| 267 | if(Curl_ssl_backend() != CURLSSLBACKEND_SCHANNEL) { |
| 268 | #if defined(USE_APPLE_SECTRUST) || defined(CURL_CA_NATIVE) |
| 269 | if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob) |
| C3: if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob) sslc->native_ca_store = TRUE; | |
| C5: Auto-set of native_ca_store=TRUE guarded by USE_APPLE_SECTRUST || CURL_CA_NATIVE | |
| 270 | sslc->native_ca_store = TRUE; |
| 271 | #endif |
| 272 | #ifdef CURL_CA_PATH |
| 273 | if(!sslc->custom_capath && !set->str[STRING_SSL_CAPATH]) { |
| 274 | result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], CURL_CA_PATH); |
| 275 | if(result) |
| 276 | return result; |
| 277 | } |
| 278 | #endif |
| 279 | #ifdef CURL_CA_BUNDLE |
| C3: #ifdef CURL_CA_BUNDLE block sets STRING_SSL_CAFILE to CURL_CA_BUNDLE when !sslc->custom_cafile | |
| C5: CURL_CA_BUNDLE auto-fill sets primary.CAfile | |
| 280 | if(!sslc->custom_cafile && !set->str[STRING_SSL_CAFILE]) { |
| 281 | result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], CURL_CA_BUNDLE); |
| 282 | if(result) |
| 283 | return result; |
| 284 | } |
| 285 | #endif |
| 286 | } |
| 287 | sslc->primary.CAfile = data->set.str[STRING_SSL_CAFILE]; |
| C3: sslc->primary.CAfile = ssl_easy_steal(data, STRING_SSL_CAFILE_PROXY); | |
| 288 | sslc->primary.CRLfile = data->set.str[STRING_SSL_CRLFILE]; |
| 289 | sslc->primary.CApath = data->set.str[STRING_SSL_CAPATH]; |
| 290 | sslc->primary.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST]; |
| 291 | sslc->primary.cipher_list13 = data->set.str[STRING_SSL_CIPHER13_LIST]; |
| 292 | sslc->primary.signature_algorithms = |
| 293 | data->set.str[STRING_SSL_SIGNATURE_ALGORITHMS]; |
| 294 | sslc->primary.ca_info_blob = data->set.blobs[BLOB_CAINFO]; |
| 295 | sslc->primary.curves = data->set.str[STRING_SSL_EC_CURVES]; |
| 296 | /* Maybe these should not be used for another origin. But for |
| 297 | * backwards compatibility, keep them in. */ |
| 298 | sslc->primary.issuercert = data->set.str[STRING_SSL_ISSUERCERT]; |
| 299 | sslc->primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT]; |
| 300 | |
| 301 | if(Curl_peer_equal(data->state.initial_origin, origin)) { |
| 302 | sslc->primary.pinned_key = data->set.str[STRING_SSL_PINNEDPUBLICKEY]; |
| 303 | sslc->primary.cert_blob = data->set.blobs[BLOB_CERT]; |
| 304 | sslc->primary.cert_type = data->set.str[STRING_CERT_TYPE]; |
| 305 | sslc->primary.key = data->set.str[STRING_KEY]; |
| 306 | sslc->primary.key_type = data->set.str[STRING_KEY_TYPE]; |
| 307 | sslc->primary.key_passwd = data->set.str[STRING_KEY_PASSWD]; |
| 308 | sslc->primary.clientcert = data->set.str[STRING_CERT]; |
| 309 | sslc->primary.key_blob = data->set.blobs[BLOB_KEY]; |
| 310 | #ifdef USE_TLS_SRP |
| 311 | sslc->primary.username = data->set.str[STRING_TLSAUTH_USERNAME]; |
| 312 | sslc->primary.password = data->set.str[STRING_TLSAUTH_PASSWORD]; |
| 313 | #endif |
| 314 | } |
| 315 | else { |
| 316 | sslc->primary.pinned_key = NULL; |
| 317 | sslc->primary.cert_blob = NULL; |
| 318 | sslc->primary.cert_type = NULL; |
| 319 | sslc->primary.key = NULL; |
| 320 | sslc->primary.key_type = NULL; |
| 321 | sslc->primary.key_passwd = NULL; |
| 322 | sslc->primary.clientcert = NULL; |
| 323 | sslc->primary.key_blob = NULL; |
| 324 | #ifdef USE_TLS_SRP |
| 325 | sslc->primary.username = NULL; |
| 326 | sslc->primary.password = NULL; |
| 327 | #endif |
| 328 | } |
| 329 | |
| 330 | #ifndef CURL_DISABLE_PROXY |
| 331 | sslc = &data->set.proxy_ssl; |
| 332 | /* no initial origin for proxy, it is not changed for redirects */ |
| 333 | ssl_easy_config_compl_options(NULL, NULL, sslc); |
| 334 | |
| 335 | if(Curl_ssl_backend() != CURLSSLBACKEND_SCHANNEL) { |
| 336 | #if defined(USE_APPLE_SECTRUST) || defined(CURL_CA_NATIVE) |
| 337 | if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob) |
| 338 | sslc->native_ca_store = TRUE; |
| 339 | #endif |
| 340 | #ifdef CURL_CA_PATH |
| 341 | if(!sslc->custom_capath && !set->str[STRING_SSL_CAPATH_PROXY]) { |
| 342 | result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], |
| 343 | CURL_CA_PATH); |
| 344 | if(result) |
| 345 | return result; |
| 346 | } |
| 347 | #endif |
| 348 | #ifdef CURL_CA_BUNDLE |
| 349 | if(!sslc->custom_cafile && !set->str[STRING_SSL_CAFILE_PROXY]) { |
| 350 | result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], |
| 351 | CURL_CA_BUNDLE); |
| 352 | if(result) |
| 353 | return result; |
| 354 | } |
| 355 | #endif |
| 356 | } |
| 357 | sslc->primary.CAfile = data->set.str[STRING_SSL_CAFILE_PROXY]; |
| 358 | sslc->primary.CApath = data->set.str[STRING_SSL_CAPATH_PROXY]; |
| 359 | sslc->primary.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST_PROXY]; |
| 360 | sslc->primary.cipher_list13 = data->set.str[STRING_SSL_CIPHER13_LIST_PROXY]; |
| 361 | sslc->primary.pinned_key = data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]; |
| 362 | sslc->primary.cert_blob = data->set.blobs[BLOB_CERT_PROXY]; |
| 363 | sslc->primary.ca_info_blob = data->set.blobs[BLOB_CAINFO_PROXY]; |
| 364 | sslc->primary.issuercert = data->set.str[STRING_SSL_ISSUERCERT_PROXY]; |
| 365 | sslc->primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT_PROXY]; |
| 366 | sslc->primary.CRLfile = data->set.str[STRING_SSL_CRLFILE_PROXY]; |
| 367 | sslc->primary.cert_type = data->set.str[STRING_CERT_TYPE_PROXY]; |
| 368 | sslc->primary.key = data->set.str[STRING_KEY_PROXY]; |
| 369 | sslc->primary.key_type = data->set.str[STRING_KEY_TYPE_PROXY]; |
| 370 | sslc->primary.key_passwd = data->set.str[STRING_KEY_PASSWD_PROXY]; |
| 371 | sslc->primary.clientcert = data->set.str[STRING_CERT_PROXY]; |
| 372 | sslc->primary.key_blob = data->set.blobs[BLOB_KEY_PROXY]; |
| 373 | #ifdef USE_TLS_SRP |
| 374 | sslc->primary.username = data->set.str[STRING_TLSAUTH_USERNAME_PROXY]; |
| 375 | sslc->primary.password = data->set.str[STRING_TLSAUTH_PASSWORD_PROXY]; |
| 376 | #endif |
| 377 | #endif /* CURL_DISABLE_PROXY */ |
| 378 | |
| 379 | return CURLE_OK; |
| 380 | } |
| 171 | bool Curl_ssl_conn_config_match(struct Curl_easy *data, |
| C4: Curl_ssl_conn_config_match calls match_ssl_primary_config | |
| 172 | struct connectdata *candidate, |
| 173 | bool proxy) |
| 174 | { |
| 175 | #ifndef CURL_DISABLE_PROXY |
| 176 | if(proxy) |
| 177 | return match_ssl_primary_config(data, &data->set.proxy_ssl.primary, |
| 178 | &candidate->proxy_ssl_config); |
| 179 | #else |
| 180 | (void)proxy; |
| 181 | #endif |
| 182 | return match_ssl_primary_config(data, &data->set.ssl.primary, |
| 183 | &candidate->ssl_config); |
| 184 | } |
Show 34 lines (not cited by the judge)
| 136 | static bool match_ssl_primary_config(struct Curl_easy *data, |
| 137 | struct ssl_primary_config *c1, |
| 138 | struct ssl_primary_config *c2) |
| 139 | { |
| 140 | (void)data; |
| 141 | if((c1->version == c2->version) && |
| 142 | (c1->version_max == c2->version_max) && |
| 143 | (c1->ssl_options == c2->ssl_options) && |
| 144 | (c1->native_ca_store == c2->native_ca_store) && |
| 145 | (c1->verifypeer == c2->verifypeer) && |
| 146 | (c1->verifyhost == c2->verifyhost) && |
| 147 | (c1->verifystatus == c2->verifystatus) && |
| 148 | blobcmp(c1->cert_blob, c2->cert_blob) && |
| 149 | blobcmp(c1->ca_info_blob, c2->ca_info_blob) && |
| 150 | blobcmp(c1->issuercert_blob, c2->issuercert_blob) && |
| 151 | blobcmp(c1->key_blob, c2->key_blob) && |
| 152 | Curl_safecmp(c1->CApath, c2->CApath) && |
| 153 | Curl_safecmp(c1->CAfile, c2->CAfile) && |
| 154 | Curl_safecmp(c1->issuercert, c2->issuercert) && |
| 155 | Curl_safecmp(c1->clientcert, c2->clientcert) && |
| 156 | curl_strequal(c1->cipher_list, c2->cipher_list) && |
| 157 | curl_strequal(c1->cipher_list13, c2->cipher_list13) && |
| 158 | curl_strequal(c1->curves, c2->curves) && |
| 159 | curl_strequal(c1->signature_algorithms, c2->signature_algorithms) && |
| 160 | Curl_safecmp(c1->CRLfile, c2->CRLfile) && |
| 161 | Curl_safecmp(c1->pinned_key, c2->pinned_key) && |
| 162 | curl_strequal(c1->cert_type, c2->cert_type) && |
| 163 | Curl_safecmp(c1->key, c2->key) && |
| 164 | curl_strequal(c1->key_type, c2->key_type) && |
| 165 | !Curl_timestrcmp(c1->key_passwd, c2->key_passwd)) |
| 166 | return TRUE; |
| 167 | |
| 168 | return FALSE; |
| 169 | } |
Show 116 lines (not cited by the judge)
| 248 | CURLcode Curl_ssl_easy_config_complete(struct Curl_easy *data, |
| 249 | struct Curl_peer *origin) |
| 250 | { |
| 251 | struct ssl_config_data *sslc = &data->set.ssl; |
| 252 | #if defined(CURL_CA_PATH) || defined(CURL_CA_BUNDLE) |
| 253 | CURLcode result; |
| 254 | #endif |
| 255 | |
| 256 | ssl_easy_config_compl_options(origin, data->state.initial_origin, sslc); |
| 257 | |
| 258 | if(Curl_ssl_backend() != CURLSSLBACKEND_SCHANNEL) { |
| 259 | #if defined(USE_APPLE_SECTRUST) || defined(CURL_CA_NATIVE) |
| 260 | if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob) |
| 261 | sslc->primary.native_ca_store = TRUE; |
| 262 | #endif |
| 263 | #ifdef CURL_CA_PATH |
| 264 | if(!sslc->custom_capath && !CURL_EASY_STR(data, STRING_SSL_CAPATH)) { |
| 265 | result = Curl_setstropt(data, STRING_SSL_CAPATH, CURL_CA_PATH); |
| 266 | if(result) |
| 267 | return result; |
| 268 | } |
| 269 | #endif |
| 270 | #ifdef CURL_CA_BUNDLE |
| 271 | if(!sslc->custom_cafile && !CURL_EASY_STR(data, STRING_SSL_CAFILE)) { |
| 272 | result = Curl_setstropt(data, STRING_SSL_CAFILE, CURL_CA_BUNDLE); |
| 273 | if(result) |
| 274 | return result; |
| 275 | } |
| 276 | #endif |
| 277 | } |
| 278 | sslc->primary.CAfile = ssl_easy_steal(data, STRING_SSL_CAFILE); |
| 279 | sslc->primary.CRLfile = ssl_easy_steal(data, STRING_SSL_CRLFILE); |
| 280 | sslc->primary.CApath = ssl_easy_steal(data, STRING_SSL_CAPATH); |
| 281 | sslc->primary.cipher_list = ssl_easy_steal(data, STRING_SSL_CIPHER_LIST); |
| 282 | sslc->primary.cipher_list13 = ssl_easy_steal(data, STRING_SSL_CIPHER13_LIST); |
| 283 | sslc->primary.signature_algorithms = |
| 284 | ssl_easy_steal(data, STRING_SSL_SIGNATURE_ALGORITHMS); |
| 285 | sslc->primary.ca_info_blob = data->set.blobs[BLOB_CAINFO]; |
| 286 | sslc->primary.curves = ssl_easy_steal(data, STRING_SSL_EC_CURVES); |
| 287 | /* Maybe these should not be used for another origin. But for |
| 288 | * backwards compatibility, keep them in. */ |
| 289 | sslc->primary.issuercert = ssl_easy_steal(data, STRING_SSL_ISSUERCERT); |
| 290 | sslc->primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT]; |
| 291 | |
| 292 | if(Curl_peer_equal(data->state.initial_origin, origin)) { |
| 293 | sslc->primary.pinned_key = |
| 294 | ssl_easy_steal(data, STRING_SSL_PINNEDPUBLICKEY); |
| 295 | sslc->primary.cert_blob = data->set.blobs[BLOB_CERT]; |
| 296 | sslc->primary.cert_type = ssl_easy_steal(data, STRING_CERT_TYPE); |
| 297 | sslc->primary.key = ssl_easy_steal(data, STRING_KEY); |
| 298 | sslc->primary.key_type = ssl_easy_steal(data, STRING_KEY_TYPE); |
| 299 | sslc->primary.key_passwd = ssl_easy_steal(data, STRING_KEY_PASSWD); |
| 300 | sslc->primary.clientcert = ssl_easy_steal(data, STRING_CERT); |
| 301 | sslc->primary.key_blob = data->set.blobs[BLOB_KEY]; |
| 302 | } |
| 303 | else { |
| 304 | sslc->primary.pinned_key = NULL; |
| 305 | sslc->primary.cert_blob = NULL; |
| 306 | sslc->primary.cert_type = NULL; |
| 307 | sslc->primary.key = NULL; |
| 308 | sslc->primary.key_type = NULL; |
| 309 | sslc->primary.key_passwd = NULL; |
| 310 | sslc->primary.clientcert = NULL; |
| 311 | sslc->primary.key_blob = NULL; |
| 312 | } |
| 313 | |
| 314 | #ifndef CURL_DISABLE_PROXY |
| 315 | sslc = &data->set.proxy_ssl; |
| 316 | /* no initial origin for proxy, it is not changed for redirects */ |
| 317 | ssl_easy_config_compl_options(NULL, NULL, sslc); |
| 318 | |
| 319 | if(Curl_ssl_backend() != CURLSSLBACKEND_SCHANNEL) { |
| 320 | #if defined(USE_APPLE_SECTRUST) || defined(CURL_CA_NATIVE) |
| 321 | if(!sslc->custom_capath && !sslc->custom_cafile && !sslc->custom_cablob) |
| 322 | sslc->primary.native_ca_store = TRUE; |
| 323 | #endif |
| 324 | #ifdef CURL_CA_PATH |
| 325 | if(!sslc->custom_capath && |
| 326 | !CURL_EASY_STR(data, STRING_SSL_CAPATH_PROXY)) { |
| 327 | result = Curl_setstropt(data, STRING_SSL_CAPATH_PROXY, CURL_CA_PATH); |
| 328 | if(result) |
| 329 | return result; |
| 330 | } |
| 331 | #endif |
| 332 | #ifdef CURL_CA_BUNDLE |
| 333 | if(!sslc->custom_cafile && |
| 334 | !CURL_EASY_STR(data, STRING_SSL_CAFILE_PROXY)) { |
| 335 | result = Curl_setstropt(data, STRING_SSL_CAFILE_PROXY, CURL_CA_BUNDLE); |
| 336 | if(result) |
| 337 | return result; |
| 338 | } |
| 339 | #endif |
| 340 | } |
| 341 | sslc->primary.CAfile = ssl_easy_steal(data, STRING_SSL_CAFILE_PROXY); |
| 342 | sslc->primary.CApath = ssl_easy_steal(data, STRING_SSL_CAPATH_PROXY); |
| 343 | sslc->primary.cipher_list = |
| 344 | ssl_easy_steal(data, STRING_SSL_CIPHER_LIST_PROXY); |
| 345 | sslc->primary.cipher_list13 = |
| 346 | ssl_easy_steal(data, STRING_SSL_CIPHER13_LIST_PROXY); |
| 347 | sslc->primary.pinned_key = |
| 348 | ssl_easy_steal(data, STRING_SSL_PINNEDPUBLICKEY_PROXY); |
| 349 | sslc->primary.cert_blob = data->set.blobs[BLOB_CERT_PROXY]; |
| 350 | sslc->primary.ca_info_blob = data->set.blobs[BLOB_CAINFO_PROXY]; |
| 351 | sslc->primary.issuercert = ssl_easy_steal(data, STRING_SSL_ISSUERCERT_PROXY); |
| 352 | sslc->primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT_PROXY]; |
| 353 | sslc->primary.CRLfile = ssl_easy_steal(data, STRING_SSL_CRLFILE_PROXY); |
| 354 | sslc->primary.cert_type = ssl_easy_steal(data, STRING_CERT_TYPE_PROXY); |
| 355 | sslc->primary.key = ssl_easy_steal(data, STRING_KEY_PROXY); |
| 356 | sslc->primary.key_type = ssl_easy_steal(data, STRING_KEY_TYPE_PROXY); |
| 357 | sslc->primary.key_passwd = ssl_easy_steal(data, STRING_KEY_PASSWD_PROXY); |
| 358 | sslc->primary.clientcert = ssl_easy_steal(data, STRING_CERT_PROXY); |
| 359 | sslc->primary.key_blob = data->set.blobs[BLOB_KEY_PROXY]; |
| 360 | #endif /* CURL_DISABLE_PROXY */ |
| 361 | |
| 362 | return CURLE_OK; |
| 363 | } |
Show 1 lines (not cited by the judge)
| 39 | #define CURL_CA_BUNDLE "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB" |