aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/ssl_util.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-02-18 13:05:35 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-02-18 13:05:35 +0000
commit3f964eee87e17d473651b13c3e81840f39ad2890 (patch)
treed27048193c2387acfe326ce50a4a787d50338796 /src/libserver/ssl_util.c
parentef68f4073a524bd1552d63c365a78888ea6969e0 (diff)
downloadrspamd-3f964eee87e17d473651b13c3e81840f39ad2890.tar.gz
rspamd-3f964eee87e17d473651b13c3e81840f39ad2890.zip
[Rework] Use internal ssl cache for client sessions
Diffstat (limited to 'src/libserver/ssl_util.c')
-rw-r--r--src/libserver/ssl_util.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/libserver/ssl_util.c b/src/libserver/ssl_util.c
index 5a1abdeef..995d46cc6 100644
--- a/src/libserver/ssl_util.c
+++ b/src/libserver/ssl_util.c
@@ -656,10 +656,22 @@ rspamd_ssl_connect_fd (struct rspamd_ssl_connection *conn, gint fd,
gpointer handler_data)
{
gint ret;
+ SSL_SESSION *session = NULL;
g_assert (conn != NULL);
conn->ssl = SSL_new (conn->ssl_ctx->s);
+
+ if (hostname) {
+ session = rspamd_lru_hash_lookup (conn->ssl_ctx->sessions, hostname,
+ ev_now (conn->event_loop));
+
+ }
+
+ if (session) {
+ SSL_set_session (conn->ssl, session);
+ }
+
SSL_set_app_data (conn->ssl, conn);
msg_debug_ssl ("new ssl connection %p; session reused=%s",
conn->ssl, SSL_session_reused (conn->ssl) ? "true" : "false");
@@ -946,12 +958,16 @@ rspamd_ssl_connection_free (struct rspamd_ssl_connection *conn)
static int
rspamd_ssl_new_client_session (SSL *ssl, SSL_SESSION *sess)
{
- struct rspamd_ssl_ctx *ctx;
struct rspamd_ssl_connection *conn;
conn = SSL_get_app_data (ssl);
- msg_debug_ssl ("hui: got new session from %p", conn);
+ if (conn->hostname) {
+ rspamd_lru_hash_insert (conn->ssl_ctx->sessions,
+ g_strdup (conn->hostname), SSL_get1_session (ssl),
+ ev_now (conn->event_loop), SSL_CTX_get_timeout (conn->ssl_ctx->s));
+ msg_debug_ssl ("saved new session for %s: %p", conn->hostname, conn);
+ }
return 0;
}