From e1ca56ea6c972e7b6d4953cc051f543a984e8768 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Mon, 30 Nov 2020 19:12:11 +0100 Subject: [PATCH] lib-imap-client: Add support for channel binding --- src/lib-imap-client/imapc-connection.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index 06f2007619..7fb295fa1b 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -1005,6 +1005,17 @@ imapc_connection_get_sasl_mech(struct imapc_connection *conn, return -1; } +static int +imapc_connection_channel_bind_callback(const char *type, void *context, + const buffer_t **data_r, + const char **error_r) +{ + struct imapc_connection *conn = context; + + return ssl_iostream_get_channel_binding(conn->ssl_iostream, + type, data_r, error_r); +} + static void imapc_connection_authenticate(struct imapc_connection *conn) { const struct imapc_settings *set = conn->client->set; @@ -1067,6 +1078,12 @@ static void imapc_connection_authenticate(struct imapc_connection *conn) if (sasl_mech == NULL) sasl_mech = &dsasl_client_mech_plain; conn->sasl_client = dsasl_client_new(sasl_mech, &sasl_set); + if (conn->ssl_iostream != NULL) { + dsasl_client_enable_channel_binding( + conn->sasl_client, + ssl_iostream_get_protocol_version(conn->ssl_iostream), + imapc_connection_channel_bind_callback, conn); + } cmd = imapc_connection_cmd(conn, imapc_connection_authenticate_cb, conn); cmd->authenticate = TRUE; -- 2.47.3