static int
smp_fetch_ssl_fc_has_early(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
+ SSL *ssl;
struct connection *conn;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
smp->flags = 0;
smp->data.type = SMP_T_BOOL;
#ifdef OPENSSL_IS_BORINGSSL
{
- struct ssl_sock_ctx *ctx = conn->xprt_ctx;
- smp->data.u.sint = (SSL_in_early_data(ctx->ssl) &&
- SSL_early_data_accepted(ctx->ssl));
+ smp->data.u.sint = (SSL_in_early_data(ssl) &&
+ SSL_early_data_accepted(ssl));
}
#else
smp->data.u.sint = ((conn->flags & CO_FL_EARLY_DATA) &&
int ret = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
int ret = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
-
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
return 0;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
unsigned int len = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
int ret = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
int ret = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
int ret = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
int ret = 0;
struct buffer *smp_trash;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
goto out;
{
X509 *crt;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
/* SSL_get_peer_certificate returns a ptr on allocated X509 struct */
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
if (crt) {
X509_free(crt);
}
int cert_peer = (kw[4] == 'c') ? 1 : 0;
X509 *crt;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
return 0;
__OPENSSL_110_CONST__ ASN1_OBJECT *algorithm;
int nid;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
return 0;
ASN1_OBJECT *algorithm;
int nid;
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
if (cert_peer)
- crt = SSL_get_peer_certificate(ctx->ssl);
+ crt = SSL_get_peer_certificate(ssl);
else
- crt = SSL_get_certificate(ctx->ssl);
+ crt = SSL_get_certificate(ssl);
if (!crt)
return 0;
{
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
struct connection *conn = objt_conn(smp->sess->origin);
- struct ssl_sock_ctx *ctx = conn ? conn->xprt_ctx : NULL;
+ SSL *ssl = ssl_sock_get_ssl_object(conn);
smp->data.type = SMP_T_BOOL;
- smp->data.u.sint = (conn && conn->xprt == &ssl_sock) &&
- conn->xprt_ctx &&
- SSL_get_servername(ctx->ssl, TLSEXT_NAMETYPE_host_name) != NULL;
+ smp->data.u.sint = ssl && SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name) != NULL;
return 1;
#else
return 0;
smp_fetch_ssl_fc_is_resumed(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
- ctx = conn ? conn->xprt_ctx : NULL;
+ ssl = ssl_sock_get_ssl_object(conn);
smp->data.type = SMP_T_BOOL;
- smp->data.u.sint = (conn && conn->xprt == &ssl_sock) &&
- conn->xprt_ctx &&
- SSL_session_reused(ctx->ssl);
+ smp->data.u.sint = ssl && SSL_session_reused(ssl);
return 1;
}
smp_fetch_ssl_fc_cipher(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
smp->flags = 0;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- smp->data.u.str.area = (char *)SSL_get_cipher_name(ctx->ssl);
+ smp->data.u.str.area = (char *)SSL_get_cipher_name(ssl);
if (!smp->data.u.str.area)
return 0;
smp_fetch_ssl_fc_alg_keysize(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
int sint;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
smp->flags = 0;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- if (!SSL_get_cipher_bits(ctx->ssl, &sint))
+ if (!SSL_get_cipher_bits(ssl, &sint))
return 0;
smp->data.u.sint = sint;
smp_fetch_ssl_fc_use_keysize(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
smp->flags = 0;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- smp->data.u.sint = (unsigned int)SSL_get_cipher_bits(ctx->ssl, NULL);
+ smp->data.u.sint = (unsigned int)SSL_get_cipher_bits(ssl, NULL);
if (!smp->data.u.sint)
return 0;
smp_fetch_ssl_fc_npn(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
unsigned int len = 0;
smp->flags = SMP_F_CONST;
conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
smp->data.u.str.area = NULL;
- SSL_get0_next_proto_negotiated(ctx->ssl,
+ SSL_get0_next_proto_negotiated(ssl,
(const unsigned char **)&smp->data.u.str.area,
&len);
smp_fetch_ssl_fc_alpn(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
unsigned int len = 0;
smp->flags = SMP_F_CONST;
conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
smp->data.u.str.area = NULL;
- SSL_get0_alpn_selected(ctx->ssl,
+ SSL_get0_alpn_selected(ssl,
(const unsigned char **)&smp->data.u.str.area,
&len);
smp_fetch_ssl_fc_protocol(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
smp->flags = 0;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- smp->data.u.str.area = (char *)SSL_get_version(ctx->ssl);
+ smp->data.u.str.area = (char *)SSL_get_version(ssl);
if (!smp->data.u.str.area)
return 0;
{
struct connection *conn;
SSL_SESSION *ssl_sess;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
unsigned int len = 0;
smp->flags = SMP_F_CONST;
conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- ssl_sess = SSL_get_session(ctx->ssl);
+ ssl_sess = SSL_get_session(ssl);
if (!ssl_sess)
return 0;
{
struct connection *conn;
struct buffer *data;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
data = get_trash_chunk();
if (kw[7] == 'c')
- data->data = SSL_get_client_random(ctx->ssl,
+ data->data = SSL_get_client_random(ssl,
(unsigned char *) data->area,
data->size);
else
- data->data = SSL_get_server_random(ctx->ssl,
+ data->data = SSL_get_server_random(ssl,
(unsigned char *) data->area,
data->size);
if (!data->data)
struct connection *conn;
SSL_SESSION *ssl_sess;
struct buffer *data;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- ssl_sess = SSL_get_session(ctx->ssl);
+ ssl_sess = SSL_get_session(ssl);
if (!ssl_sess)
return 0;
smp_fetch_ssl_fc_sni(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
smp->flags = SMP_F_CONST;
smp->data.type = SMP_T_STR;
conn = objt_conn(smp->sess->origin);
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- smp->data.u.str.area = (char *)SSL_get_servername(ctx->ssl, TLSEXT_NAMETYPE_host_name);
+ smp->data.u.str.area = (char *)SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
if (!smp->data.u.str.area)
return 0;
{
struct connection *conn;
struct ssl_capture *capture;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- capture = SSL_get_ex_data(ctx->ssl, ssl_capture_ptr_index);
+ capture = SSL_get_ex_data(ssl, ssl_capture_ptr_index);
if (!capture)
return 0;
{
struct connection *conn;
struct ssl_capture *capture;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
- capture = SSL_get_ex_data(ctx->ssl, ssl_capture_ptr_index);
+ capture = SSL_get_ex_data(ssl, ssl_capture_ptr_index);
if (!capture)
return 0;
cipher = SSL_get_cipher_by_value(id);
#else
struct connection *conn = __objt_conn(smp->sess->origin);
- struct ssl_sock_ctx *ctx = conn->xprt_ctx;
- cipher = SSL_CIPHER_find(ctx->ssl, bin);
+ SSL *ssl = ssl_sock_get_ssl_object(conn);
+ cipher = SSL_CIPHER_find(ssl, bin);
#endif
str = SSL_CIPHER_get_name(cipher);
if (!str || strcmp(str, "(NONE)") == 0)
struct connection *conn;
int finished_len;
struct buffer *finished_trash;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
if (obj_type(smp->sess->origin) == OBJ_TYPE_CHECK)
conn = (kw[4] != 'b') ? cs_conn(__objt_check(smp->sess->origin)->cs) : NULL;
smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
smp->flags = 0;
- if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
- ctx = conn->xprt_ctx;
if (conn->flags & CO_FL_WAIT_XPRT) {
smp->flags |= SMP_F_MAY_CHANGE;
}
finished_trash = get_trash_chunk();
- if (!SSL_session_reused(ctx->ssl))
- finished_len = SSL_get_peer_finished(ctx->ssl,
+ if (!SSL_session_reused(ssl))
+ finished_len = SSL_get_peer_finished(ssl,
finished_trash->area,
finished_trash->size);
else
- finished_len = SSL_get_finished(ctx->ssl,
+ finished_len = SSL_get_finished(ssl,
finished_trash->area,
finished_trash->size);
smp_fetch_ssl_c_verify(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
struct connection *conn;
- struct ssl_sock_ctx *ctx;
+ SSL *ssl;
conn = objt_conn(smp->sess->origin);
- if (!conn || conn->xprt != &ssl_sock)
+ ssl = ssl_sock_get_ssl_object(conn);
+ if (!ssl)
return 0;
if (conn->flags & CO_FL_WAIT_XPRT) {
return 0;
}
- if (!conn->xprt_ctx)
- return 0;
- ctx = conn->xprt_ctx;
-
smp->data.type = SMP_T_SINT;
- smp->data.u.sint = (long long int)SSL_get_verify_result(ctx->ssl);
+ smp->data.u.sint = (long long int)SSL_get_verify_result(ssl);
smp->flags = 0;
return 1;