From 2f07c9a5d854404dad3380c5968b409e03fb4108 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 17 Feb 2018 01:46:25 +0100 Subject: [PATCH] lib-smtp: server: Perform output stream error handling in one place. --- src/lib-smtp/smtp-server-connection.c | 16 +--------------- src/lib-smtp/smtp-server-private.h | 3 +-- src/lib-smtp/smtp-server-reply.c | 19 +++++-------------- 3 files changed, 7 insertions(+), 31 deletions(-) diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index c6e8a0af7a..cca0e570a3 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -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; diff --git a/src/lib-smtp/smtp-server-private.h b/src/lib-smtp/smtp-server-private.h index 6dc3fc658b..dc843aaf41 100644 --- a/src/lib-smtp/smtp-server-private.h +++ b/src/lib-smtp/smtp-server-private.h @@ -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); diff --git a/src/lib-smtp/smtp-server-reply.c b/src/lib-smtp/smtp-server-reply.c index 0663ecdf9f..2ad013ca0c 100644 --- a/src/lib-smtp/smtp-server-reply.c +++ b/src/lib-smtp/smtp-server-reply.c @@ -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; -- 2.47.3