From: Stephan Bosch Date: Sat, 15 Sep 2018 15:33:03 +0000 (+0200) Subject: submission: Record main backend for the transaction. X-Git-Tag: 2.3.9~1290 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c66ae1280307b1258ea77bcf03b30f5117a454f;p=thirdparty%2Fdovecot%2Fcore.git submission: Record main backend for the transaction. This is a preparation for plugins overriding the default backend for a transaction. --- diff --git a/src/submission/submission-backend.c b/src/submission/submission-backend.c index db9322b8ba..d21b4d1ff0 100644 --- a/src/submission/submission-backend.c +++ b/src/submission/submission-backend.c @@ -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) diff --git a/src/submission/submission-client.h b/src/submission/submission-client.h index 11e1c582cb..bc0c9bdd52 100644 --- a/src/submission/submission-client.h +++ b/src/submission/submission-client.h @@ -10,6 +10,7 @@ struct submission_backend; struct client; struct client_state { + struct submission_backend *backend; struct istream *data_input; uoff_t data_size; }; diff --git a/src/submission/submission-commands.c b/src/submission/submission-commands.c index b51f2e9d80..b472cb594b 100644 --- a/src/submission/submission-commands.c +++ b/src/submission/submission-commands.c @@ -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);