From: Timo Sirainen Date: Thu, 8 Feb 2018 08:53:50 +0000 (+0200) Subject: lib-smtp: Recreate connection IO after streams change X-Git-Tag: 2.3.9~2345 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a145e6ad48c860a2a174996299489b6669e410b;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: Recreate connection IO after streams change This fixes hangs after STARTTLS. Originally by Stephan Bosch --- diff --git a/src/lib-smtp/smtp-client-connection.c b/src/lib-smtp/smtp-client-connection.c index a6426720eb..e4b021bab8 100644 --- a/src/lib-smtp/smtp-client-connection.c +++ b/src/lib-smtp/smtp-client-connection.c @@ -1164,6 +1164,8 @@ smtp_client_connection_streams_changed(struct smtp_client_connection *conn) smtp_reply_parser_set_stream(conn->reply_parser, conn->conn.input); } + + connection_streams_changed(&conn->conn); } static int @@ -1222,6 +1224,7 @@ smtp_client_connection_ssl_init(struct smtp_client_connection *conn, conn->conn.output = conn->raw_output; } + io_remove(&conn->conn.io); if (io_stream_create_ssl_client(conn->ssl_ctx, conn->host, conn->set.ssl, &conn->conn.input, &conn->conn.output, @@ -1231,6 +1234,9 @@ smtp_client_connection_ssl_init(struct smtp_client_connection *conn, conn->conn.name, error); return -1; } + conn->conn.io = io_add_istream(conn->conn.input, + smtp_client_connection_input, + &conn->conn); smtp_client_connection_streams_changed(conn); ssl_iostream_set_handshake_callback(conn->ssl_iostream,