]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: DATA command: Pass the total size of the data stream to the backend.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Thu, 4 Oct 2018 19:56:20 +0000 (21:56 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 12 Feb 2019 13:40:41 +0000 (15:40 +0200)
src/submission/submission-backend-relay.c
src/submission/submission-backend.c
src/submission/submission-backend.h
src/submission/submission-commands.c

index ab4ab2e617cc12fed849faca3c3d3ae3c5d95336..cb5c4b0e1db49d8e8d9ad4a142ca57e7825cff94 100644 (file)
@@ -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;
index 5eb1aec210befa945731a08852d486cbd7f64427..db9322b8bac50ade6aa5335c584d44cdb61fda6d 100644 (file)
@@ -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,
index 12ad93bbeec4f405bb1a4111331cc424e8b3e9e3..a13c592948f75f8d0ff853612af6ca443fbd9b7e 100644 (file)
@@ -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,
index 62e46216d8b4b08a9155f6bd5184829420a2fbda..b51f2e9d80cc0f0c7dc7ecd8a40e9e21a8e21da8 100644 (file)
@@ -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;