From: Stephan Bosch Date: Sat, 8 Sep 2018 18:54:54 +0000 (+0200) Subject: lib-smtp: client: BDAT command: Make sure the message contains CRLF consistently. X-Git-Tag: 2.3.6~96 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=692119a7cc845e04f2eea4f18e0d91f8cf322549;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: client: BDAT command: Make sure the message contains CRLF consistently. Before, only messages sent using DATA command guaranteed consistent CRLF, because these are sent using o_stream_dot(), which does that internally. For the BDAT command, the message was sent as-is, which is not always accepted by MTAs. --- diff --git a/src/lib-smtp/smtp-client-command.c b/src/lib-smtp/smtp-client-command.c index 97536b74c6..129c4b23c9 100644 --- a/src/lib-smtp/smtp-client-command.c +++ b/src/lib-smtp/smtp-client-command.c @@ -6,6 +6,7 @@ #include "str.h" #include "llist.h" #include "istream.h" +#include "istream-crlf.h" #include "ostream.h" #include "ostream-dot.h" #include "smtp-common.h" @@ -1324,14 +1325,15 @@ smtp_client_command_data_submit_after( ctx->conn = conn; ctx->pool = cmd->pool; ctx->cmd_data = cmd; - ctx->data = data; - i_stream_ref(data); /* capture abort event with our context */ smtp_client_command_set_abort_callback(cmd, _cmd_data_abort_cb, ctx); if ((conn->caps.standard & SMTP_CAPABILITY_CHUNKING) == 0) { /* DATA */ + ctx->data = data; + i_stream_ref(data); + p_array_init(&ctx->cmds, ctx->pool, 1); /* Data stream is sent in one go in the second stage. Since the data @@ -1349,6 +1351,8 @@ smtp_client_command_data_submit_after( } else { /* BDAT */ + ctx->data = i_stream_create_crlf(data); + p_array_init(&ctx->cmds, ctx->pool, conn->set.max_data_chunk_pipeline);