X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c57309a50444d858c0a2dc1581846a850d78a9ad..ec2a355fdc961aba7ace27c624c01accd58dc1ed:/src/src/tls.c diff --git a/src/src/tls.c b/src/src/tls.c index e6b1bf7a7..e80dd9aaf 100644 --- a/src/src/tls.c +++ b/src/src/tls.c @@ -3,7 +3,7 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ -/* Copyright (c) The Exim Maintainers 2020 - 2021 */ +/* Copyright (c) The Exim Maintainers 2020 - 2022 */ /* See the file NOTICE for conditions of use and distribution. */ /* This module provides TLS (aka SSL) support for Exim. The code for OpenSSL is @@ -25,6 +25,11 @@ functions from the OpenSSL or GNU TLS libraries. */ #endif +/* Forward decl. */ +static void tls_client_resmption_key(tls_support *, smtp_connect_args *, + smtp_transport_options_block *); + + #if defined(MACRO_PREDEF) && !defined(DISABLE_TLS) # include "macro_predef.h" # ifdef USE_GNUTLS @@ -209,7 +214,7 @@ for (;;) if (!(S_ISLNK(sb.st_mode))) break; - t = store_get(1024, FALSE); + t = store_get(1024, GET_UNTAINTED); Ustrncpy(t, s, 1022); j = Ustrlen(s); t[j++] = '/'; @@ -791,6 +796,43 @@ return status == 0; +static void +tls_client_resmption_key(tls_support * tlsp, smtp_connect_args * conn_args, + smtp_transport_options_block * ob) +{ +hctx * h = &tlsp->resume_hctx; +blob b; +gstring * g; + +DEBUG(D_tls) if (conn_args->host_lbserver) + debug_printf("TLS: lbserver '%s'\n", conn_args->host_lbserver); + +#ifdef EXIM_HAVE_SHA2 +exim_sha_init(h, HASH_SHA2_256); +#else +exim_sha_init(h, HASH_SHA1); +#endif +exim_sha_update_string(h, conn_args->host_lbserver); +#ifdef SUPPORT_DANE +if (conn_args->dane) + exim_sha_update(h, CUS &conn_args->tlsa_dnsa, sizeof(dns_answer)); +#endif +exim_sha_update_string(h, conn_args->host->address); +exim_sha_update(h, CUS &conn_args->host->port, sizeof(conn_args->host->port)); +exim_sha_update_string(h, conn_args->sending_ip_address); +exim_sha_update_string(h, openssl_options); +exim_sha_update_string(h, ob->tls_require_ciphers); +exim_sha_update_string(h, tlsp->sni); +#ifdef EXIM_HAVE_ALPN +exim_sha_update_string(h, ob->tls_alpn); +#endif +exim_sha_finish(h, &b); +for (g = string_get(b.len*2+1); b.len-- > 0; ) + g = string_fmt_append(g, "%02x", *b.data++); +tlsp->resume_index = string_from_gstring(g); +DEBUG(D_tls) debug_printf("TLS: resume session index %s\n", tlsp->resume_index); +} + #endif /*!DISABLE_TLS*/ #endif /*!MACRO_PREDEF*/