From: Timo Sirainen Date: Fri, 11 Oct 2013 16:27:39 +0000 (+0300) Subject: imap: Improved "EOF while appending" disconnect log message. X-Git-Tag: 2.2.7~85 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b6540ed0dc3a4b9d43dc2e9e91971d27e1d0b384;p=thirdparty%2Fdovecot%2Fcore.git imap: Improved "EOF while appending" disconnect log message. --- diff --git a/src/imap/cmd-append.c b/src/imap/cmd-append.c index eb20fbb129..164704999d 100644 --- a/src/imap/cmd-append.c +++ b/src/imap/cmd-append.c @@ -52,7 +52,8 @@ static void cmd_append_finish(struct cmd_append_context *ctx); static bool cmd_append_continue_message(struct client_command_context *cmd); static bool cmd_append_parse_new_msg(struct client_command_context *cmd); -static const char *get_disconnect_reason(struct cmd_append_context *ctx) +static const char * +get_disconnect_reason(struct cmd_append_context *ctx, uoff_t lit_offset) { string_t *str = t_str_new(128); unsigned int secs = ioloop_time - ctx->started; @@ -61,7 +62,7 @@ static const char *get_disconnect_reason(struct cmd_append_context *ctx) ctx->count, secs); if (ctx->litinput != NULL) { str_printfa(str, ", %"PRIuUOFF_T"/%"PRIuUOFF_T" bytes", - ctx->litinput->v_offset, ctx->literal_size); + lit_offset, ctx->literal_size); } str_append_c(str, ')'); return str_c(str); @@ -82,7 +83,7 @@ static void client_input_append(struct client_command_context *cmd) switch (i_stream_read(client->input)) { case -1: /* disconnected */ - reason = get_disconnect_reason(ctx); + reason = get_disconnect_reason(ctx, ctx->litinput->v_offset); cmd_append_finish(cmd->context); /* Reset command so that client_destroy() doesn't try to call cmd_append_continue_message() anymore. */ @@ -825,7 +826,7 @@ static bool cmd_append_continue_message(struct client_command_context *cmd) } if (ctx->litinput->eof || client->input->closed) { - bool all_written = ctx->litinput->v_offset == ctx->literal_size; + uoff_t lit_offset = ctx->litinput->v_offset; /* finished - do one more read, to make sure istream-chain unreferences its stream, which is needed for litinput's @@ -843,12 +844,13 @@ static bool cmd_append_continue_message(struct client_command_context *cmd) /* failed above */ client_send_storage_error(cmd, ctx->storage); ctx->failed = TRUE; - } else if (!all_written) { + } else if (lit_offset != ctx->literal_size) { /* client disconnected before it finished sending the whole message. */ ctx->failed = TRUE; mailbox_save_cancel(&ctx->save_ctx); - client_disconnect(client, "EOF while appending"); + client_disconnect(client, + get_disconnect_reason(ctx, lit_offset)); } else if (ctx->catenate) { /* CATENATE isn't finished yet */ } else if (mailbox_save_finish(&ctx->save_ctx) < 0) {