]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: server: STARTTLS command: Properly handle output stream flush error.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 16 Feb 2018 09:13:35 +0000 (10:13 +0100)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 12 Mar 2018 08:42:26 +0000 (10:42 +0200)
src/lib-smtp/smtp-server-cmd-starttls.c

index 940adf50faf5c3a00bebc22627cd892f085231cf..0314dfafc3723fbabe94e2d69ec2f3d3fe3b3594 100644 (file)
@@ -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);