From: Stephan Bosch Date: Thu, 4 Oct 2018 19:56:20 +0000 (+0200) Subject: submission: DATA command: Pass the total size of the data stream to the backend. X-Git-Tag: 2.3.9~1291 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcc3b5157d7144539a93d7d42f4db730efcff420;p=thirdparty%2Fdovecot%2Fcore.git submission: DATA command: Pass the total size of the data stream to the backend. --- diff --git a/src/submission/submission-backend-relay.c b/src/submission/submission-backend-relay.c index ab4ab2e617..cb5c4b0e1d 100644 --- a/src/submission/submission-backend-relay.c +++ b/src/submission/submission-backend-relay.c @@ -521,7 +521,7 @@ static int backend_relay_cmd_data(struct submission_backend *_backend, struct smtp_server_cmd_ctx *cmd, struct smtp_server_transaction *trans, - struct istream *data_input) + struct istream *data_input, uoff_t data_size ATTR_UNUSED) { struct submission_backend_relay *backend = (struct submission_backend_relay *)_backend; diff --git a/src/submission/submission-backend.c b/src/submission/submission-backend.c index 5eb1aec210..db9322b8ba 100644 --- a/src/submission/submission-backend.c +++ b/src/submission/submission-backend.c @@ -142,9 +142,9 @@ int submission_backend_cmd_rset(struct submission_backend *backend, int submission_backend_cmd_data(struct submission_backend *backend, struct smtp_server_cmd_ctx *cmd, struct smtp_server_transaction *trans, - struct istream *data_input) + struct istream *data_input, uoff_t data_size) { - return backend->v.cmd_data(backend, cmd, trans, data_input); + return backend->v.cmd_data(backend, cmd, trans, data_input, data_size); } int submission_backend_cmd_vrfy(struct submission_backend *backend, diff --git a/src/submission/submission-backend.h b/src/submission/submission-backend.h index 12ad93bbee..a13c592948 100644 --- a/src/submission/submission-backend.h +++ b/src/submission/submission-backend.h @@ -28,7 +28,7 @@ struct submission_backend_vfuncs { int (*cmd_data)(struct submission_backend *backend, struct smtp_server_cmd_ctx *cmd, struct smtp_server_transaction *trans, - struct istream *data_input); + struct istream *data_input, uoff_t data_size); int (*cmd_vrfy)(struct submission_backend *backend, struct smtp_server_cmd_ctx *cmd, @@ -82,7 +82,7 @@ int submission_backend_cmd_rset(struct submission_backend *backend, int submission_backend_cmd_data(struct submission_backend *backend, struct smtp_server_cmd_ctx *cmd, struct smtp_server_transaction *trans, - struct istream *data_input); + struct istream *data_input, uoff_t data_size); int submission_backend_cmd_vrfy(struct submission_backend *backend, struct smtp_server_cmd_ctx *cmd, diff --git a/src/submission/submission-commands.c b/src/submission/submission-commands.c index 62e46216d8..b51f2e9d80 100644 --- a/src/submission/submission-commands.c +++ b/src/submission/submission-commands.c @@ -167,6 +167,7 @@ int cmd_data_continue(void *conn_ctx, struct smtp_server_cmd_ctx *cmd, { struct client *client = conn_ctx; struct istream *data_input = client->state.data_input; + uoff_t data_size; struct istream *inputs[3]; string_t *added_headers; const unsigned char *data; @@ -202,11 +203,13 @@ int cmd_data_continue(void *conn_ctx, struct smtp_server_cmd_ctx *cmd, inputs[2] = NULL; data_input = i_stream_create_concat(inputs); + data_size = client->state.data_size + str_len(added_headers); + i_stream_unref(&inputs[0]); i_stream_unref(&inputs[1]); ret = submission_backend_cmd_data(client->backend_default, cmd, - trans, data_input); + trans, data_input, data_size); i_stream_unref(&data_input); return ret;