]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: server: Perform output stream error handling in one place.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 17 Feb 2018 00:46:25 +0000 (01:46 +0100)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 17 Feb 2018 14:40:25 +0000 (15:40 +0100)
src/lib-smtp/smtp-server-connection.c
src/lib-smtp/smtp-server-private.h
src/lib-smtp/smtp-server-reply.c

index c6e8a0af7a8f8a4932408b1e62a99547268df6bb..cca0e570a3c91167834ed736d7e761b635338f05 100644 (file)
@@ -617,7 +617,6 @@ static bool
 smtp_server_connection_next_reply(struct smtp_server_connection *conn)
 {
        struct smtp_server_command *cmd;
-       const char *error = NULL;
        unsigned int i;
 
        cmd = conn->command_queue_head;
@@ -651,21 +650,8 @@ smtp_server_connection_next_reply(struct smtp_server_connection *conn)
                        cmd->state = SMTP_SERVER_COMMAND_STATE_PROCESSING;
                        break;
                }
-               if (smtp_server_reply_send(reply, &error) < 0) {
-                       if (error != NULL) {
-                               smtp_server_connection_error(conn,
-                                       "Failed to send reply: %s", error);
-                               smtp_server_connection_close(&conn,
-                                       "Write failure");
-                       } else {
-                               smtp_server_connection_debug(conn,
-                                       "Failed to send reply: "
-                                       "Remote disconnected");
-                               smtp_server_connection_close(&conn,
-                                       "Remote closed connection");
-                       }
+               if (smtp_server_reply_send(reply) < 0)
                        return FALSE;
-               }
        }
        if (cmd->state == SMTP_SERVER_COMMAND_STATE_PROCESSING)
                return FALSE;
index 6dc3fc658b8addd52cd515c507265a4a296a1102..dc843aaf417df92de5c67cab7cb05c239e0379f2 100644 (file)
@@ -208,8 +208,7 @@ bool smtp_server_connection_pending_command_data(
 
 void smtp_server_reply_free(struct smtp_server_command *cmd);
 
-int smtp_server_reply_send(struct smtp_server_reply *resp,
-                            const char **error_r);
+int smtp_server_reply_send(struct smtp_server_reply *resp);
 
 const char *smtp_server_reply_get_one_line(struct smtp_server_reply *reply);
 
index 0663ecdf9fdbbfdda515e2de6f1c0e4d066cf1cc..2ad013ca0cd71c38bba0526025395eb85b4edb94 100644 (file)
@@ -399,8 +399,7 @@ const char *smtp_server_reply_get_one_line(struct smtp_server_reply *reply)
        return str_c(str);
 }
 
-static int smtp_server_reply_send_real(struct smtp_server_reply *reply,
-                                      const char **error_r)
+static int smtp_server_reply_send_real(struct smtp_server_reply *reply)
 {
        struct smtp_server_command *cmd = reply->command;
        struct smtp_server_connection *conn = cmd->context.conn;
@@ -410,8 +409,6 @@ static int smtp_server_reply_send_real(struct smtp_server_reply *reply,
        char *text;
        int ret = 0;
 
-       *error_r = NULL;
-
        i_assert(reply->content != NULL);
        textbuf = reply->content->text;
        i_assert(str_len(textbuf) > 0);
@@ -425,13 +422,8 @@ static int smtp_server_reply_send_real(struct smtp_server_reply *reply,
        }
 
        if (o_stream_send(output, str_data(textbuf), str_len(textbuf)) < 0) {
-               if (output->stream_errno != EPIPE &&
-                   output->stream_errno != ECONNRESET) {
-                       *error_r = t_strdup_printf("write(%s) failed: %s",
-                                                  o_stream_get_name(output),
-                                                  o_stream_get_error(output));
-               }
-               ret = -1;
+               smtp_server_connection_handle_output_error(conn);
+               return -1;
        }
 
        if (set->debug) {
@@ -441,8 +433,7 @@ static int smtp_server_reply_send_real(struct smtp_server_reply *reply,
        return ret;
 }
 
-int smtp_server_reply_send(struct smtp_server_reply *reply,
-                          const char **error_r)
+int smtp_server_reply_send(struct smtp_server_reply *reply)
 {
        int ret;
 
@@ -450,7 +441,7 @@ int smtp_server_reply_send(struct smtp_server_reply *reply,
                return 0;
 
        T_BEGIN {
-               ret = smtp_server_reply_send_real(reply, error_r);
+               ret = smtp_server_reply_send_real(reply);
        } T_END;
 
        reply->sent = TRUE;