mirror of
https://github.com/curl/curl.git
synced 2026-08-25 17:23:37 +03:00
quic: implement CURLINFO_TLS_SSL_PTR
Replace the old Curl_ssl_get_internals() with a new connection filter query to retrieve the information. Implement that filter query for TCP and QUIC TLS filter types. Add tests in client tls_session_reuse to use the info option and check that pointers are returned. Reported-by: Larry Campbell Fixes #17801 Closes #17809
This commit is contained in:
parent
81693c77be
commit
2db8ae480f
13 changed files with 144 additions and 85 deletions
|
|
@ -1558,6 +1558,18 @@ static CURLcode ssl_cf_query(struct Curl_cfilter *cf,
|
|||
*when = connssl->handshake_done;
|
||||
return CURLE_OK;
|
||||
}
|
||||
case CF_QUERY_SSL_INFO:
|
||||
case CF_QUERY_SSL_CTX_INFO: {
|
||||
struct curl_tlssessioninfo *info = pres2;
|
||||
struct cf_call_data save;
|
||||
CF_DATA_SAVE(save, cf, data);
|
||||
info->backend = Curl_ssl_backend();
|
||||
info->internals = connssl->ssl_impl->get_internals(
|
||||
cf->ctx, (query == CF_QUERY_SSL_INFO) ?
|
||||
CURLINFO_TLS_SSL_PTR : CURLINFO_TLS_SESSION);
|
||||
CF_DATA_RESTORE(cf, save);
|
||||
return CURLE_OK;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -1727,40 +1739,6 @@ bool Curl_ssl_supports(struct Curl_easy *data, unsigned int ssl_option)
|
|||
return (Curl_ssl->supports & ssl_option);
|
||||
}
|
||||
|
||||
static struct Curl_cfilter *get_ssl_filter(struct Curl_cfilter *cf)
|
||||
{
|
||||
for(; cf; cf = cf->next) {
|
||||
if(cf->cft == &Curl_cft_ssl)
|
||||
return cf;
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
if(cf->cft == &Curl_cft_ssl_proxy)
|
||||
return cf;
|
||||
#endif
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void *Curl_ssl_get_internals(struct Curl_easy *data, int sockindex,
|
||||
CURLINFO info, int n)
|
||||
{
|
||||
void *result = NULL;
|
||||
(void)n;
|
||||
if(data->conn) {
|
||||
struct Curl_cfilter *cf;
|
||||
/* get first SSL filter in chain, if any is present */
|
||||
cf = get_ssl_filter(data->conn->cfilter[sockindex]);
|
||||
if(cf) {
|
||||
struct ssl_connect_data *connssl = cf->ctx;
|
||||
struct cf_call_data save;
|
||||
CF_DATA_SAVE(save, cf, data);
|
||||
result = connssl->ssl_impl->get_internals(cf->ctx, info);
|
||||
CF_DATA_RESTORE(cf, save);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static CURLcode vtls_shutdown_blocking(struct Curl_cfilter *cf,
|
||||
struct Curl_easy *data,
|
||||
bool send_shutdown, bool *done)
|
||||
|
|
|
|||
|
|
@ -233,16 +233,6 @@ CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at,
|
|||
*/
|
||||
bool Curl_ssl_supports(struct Curl_easy *data, unsigned int ssl_option);
|
||||
|
||||
/**
|
||||
* Get the internal ssl instance (like OpenSSL's SSL*) from the filter
|
||||
* chain at `sockindex` of type specified by `info`.
|
||||
* For `n` == 0, the first active (top down) instance is returned.
|
||||
* 1 gives the second active, etc.
|
||||
* NULL is returned when no active SSL filter is present.
|
||||
*/
|
||||
void *Curl_ssl_get_internals(struct Curl_easy *data, int sockindex,
|
||||
CURLINFO info, int n);
|
||||
|
||||
/**
|
||||
* Get the ssl_config_data in `data` that is relevant for cfilter `cf`.
|
||||
*/
|
||||
|
|
@ -272,7 +262,6 @@ extern struct Curl_cftype Curl_cft_ssl_proxy;
|
|||
#define Curl_ssl_free_certinfo(x) Curl_nop_stmt
|
||||
#define Curl_ssl_random(x,y,z) ((void)x, CURLE_NOT_BUILT_IN)
|
||||
#define Curl_ssl_cert_status_request() FALSE
|
||||
#define Curl_ssl_get_internals(a,b,c,d) NULL
|
||||
#define Curl_ssl_supports(a,b) FALSE
|
||||
#define Curl_ssl_cfilter_add(a,b,c) CURLE_NOT_BUILT_IN
|
||||
#define Curl_ssl_cfilter_remove(a,b,c) CURLE_OK
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue