]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: Record main backend for the transaction.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 15 Sep 2018 15:33:03 +0000 (17:33 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 9 Oct 2018 06:41:17 +0000 (06:41 +0000)
This is a preparation for plugins overriding the default backend for a transaction.

src/submission/submission-backend.c
src/submission/submission-client.h
src/submission/submission-commands.c

index db9322b8bac50ade6aa5335c584d44cdb61fda6d..d21b4d1ff038d499a16dc4da13d9649fd33e0206 100644 (file)
@@ -30,6 +30,7 @@ void submission_backends_destroy_all(struct client *client)
 {
        while (client->backends != NULL)
                submission_backend_destroy(client->backends);
+       client->state.backend = NULL;
 }
 
 void submission_backend_start(struct submission_backend *backend)
index 11e1c582cbb2675904b34a2c1e2fbdc6fae0eadf..bc0c9bdd529dbfe4ad0c450b47bf2774a3958516 100644 (file)
@@ -10,6 +10,7 @@ struct submission_backend;
 struct client;
 
 struct client_state {
+       struct submission_backend *backend;
        struct istream *data_input;
        uoff_t data_size;
 };
index b51f2e9d80cc0f0c7dc7ecd8a40e9e21a8e21da8..b472cb594b9eb5cac129d3e497ca366fc90cc629 100644 (file)
@@ -101,7 +101,9 @@ int cmd_mail(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
 {
        struct client *client = conn_ctx;
 
-       return submission_backend_cmd_mail(client->backend_default, cmd, data);
+       client->state.backend = client->backend_default;
+
+       return submission_backend_cmd_mail(client->state.backend, cmd, data);
 }
 
 /*
@@ -144,7 +146,7 @@ int cmd_rcpt(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
        data->trans_context = rcpt;
        data->hook_finished = submission_rcpt_finished;
 
-       return submission_backend_cmd_rcpt(client->backend_default, cmd, data);
+       return submission_backend_cmd_rcpt(client->state.backend, cmd, data);
 }
 
 /*
@@ -154,8 +156,12 @@ int cmd_rcpt(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
 int cmd_rset(void *conn_ctx, struct smtp_server_cmd_ctx *cmd)
 {
        struct client *client = conn_ctx;
+       struct submission_backend *backend = client->state.backend;
+
+       if (backend == NULL)
+               backend = client->backend_default;
 
-       return submission_backend_cmd_rset(client->backend_default, cmd);
+       return submission_backend_cmd_rset(backend, cmd);
 }
 
 /*
@@ -208,7 +214,7 @@ int cmd_data_continue(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
        i_stream_unref(&inputs[0]);
        i_stream_unref(&inputs[1]);
 
-       ret = submission_backend_cmd_data(client->backend_default, cmd,
+       ret = submission_backend_cmd_data(client->state.backend, cmd,
                                          trans, data_input, data_size);
 
        i_stream_unref(&data_input);