From: Stephan Bosch Date: Fri, 16 Feb 2018 09:13:35 +0000 (+0100) Subject: lib-smtp: server: STARTTLS command: Properly handle output stream flush error. X-Git-Tag: 2.3.1~135 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a7bff44c8d01e2cf7ffc50181466f9124effa280;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: server: STARTTLS command: Properly handle output stream flush error. --- diff --git a/src/lib-smtp/smtp-server-cmd-starttls.c b/src/lib-smtp/smtp-server-cmd-starttls.c index 940adf50fa..0314dfafc3 100644 --- a/src/lib-smtp/smtp-server-cmd-starttls.c +++ b/src/lib-smtp/smtp-server-cmd-starttls.c @@ -70,6 +70,7 @@ static void cmd_starttls_destroy(struct smtp_server_cmd_ctx *cmd) { struct smtp_server_connection *conn = cmd->conn; struct smtp_server_command *command = cmd->cmd; + int ret; if (conn->conn.output == NULL) return; @@ -81,8 +82,12 @@ static void cmd_starttls_destroy(struct smtp_server_cmd_ctx *cmd) /* uncork */ o_stream_uncork(conn->conn.output); - if (o_stream_flush(conn->conn.output) <= 0) { + /* flush */ + if ((ret=smtp_server_connection_flush(conn)) < 0) { + return; + } else if (ret == 0) { /* the buffer has to be flushed */ + i_assert(!conn->conn.output->closed); o_stream_set_flush_callback(conn->conn.output, cmd_starttls_output, conn);