From: Stephan Bosch Date: Fri, 26 Oct 2018 19:00:00 +0000 (+0200) Subject: submission: Add support for modifying the transaction path and parameters in the... X-Git-Tag: 2.3.9~1119 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7017982a5d8835591e7fe641493e511ab8403220;p=thirdparty%2Fdovecot%2Fcore.git submission: Add support for modifying the transaction path and parameters in the trans_start backend vfunc. To keep the changes limited to a particular backend, the server transaction cannot be modified. Also, creating a mock server transaction and passing it on is not a good idea, since it is not a simple container struct. --- diff --git a/src/submission/submission-backend-relay.c b/src/submission/submission-backend-relay.c index e6ff29314e..00cf208f13 100644 --- a/src/submission/submission-backend-relay.c +++ b/src/submission/submission-backend-relay.c @@ -149,7 +149,9 @@ backend_relay_trans_start_callback( static void backend_relay_trans_start(struct submission_backend *_backend, - struct smtp_server_transaction *trans) + struct smtp_server_transaction *trans ATTR_UNUSED, + const struct smtp_address *path, + const struct smtp_params_mail *params) { struct submission_backend_relay *backend = (struct submission_backend_relay *)_backend; @@ -157,7 +159,7 @@ backend_relay_trans_start(struct submission_backend *_backend, if (backend->trans == NULL) { backend->trans_started = TRUE; backend->trans = smtp_client_transaction_create( - backend->conn, trans->mail_from, &trans->params, + backend->conn, path, params, backend_relay_trans_finished, backend); smtp_client_transaction_set_immediate(backend->trans, TRUE); smtp_client_transaction_start( @@ -166,7 +168,7 @@ backend_relay_trans_start(struct submission_backend *_backend, } else if (!backend->trans_started) { backend->trans_started = TRUE; smtp_client_transaction_start_empty( - backend->trans, trans->mail_from, &trans->params, + backend->trans, path, params, backend_relay_trans_start_callback, backend); } } diff --git a/src/submission/submission-backend.c b/src/submission/submission-backend.c index 07b6caa41f..a983b5e391 100644 --- a/src/submission/submission-backend.c +++ b/src/submission/submission-backend.c @@ -208,8 +208,10 @@ void submission_backend_trans_start(struct submission_backend *backend, return; backend->trans_started = TRUE; - if (backend->v.trans_start != NULL) - backend->v.trans_start(backend, trans); + if (backend->v.trans_start != NULL) { + backend->v.trans_start(backend, trans, + trans->mail_from, &trans->params); + } } static void diff --git a/src/submission/submission-backend.h b/src/submission/submission-backend.h index 249fa6385c..df46739fd5 100644 --- a/src/submission/submission-backend.h +++ b/src/submission/submission-backend.h @@ -20,7 +20,9 @@ struct submission_backend_vfuncs { uoff_t (*get_max_mail_size)(struct submission_backend *backend); void (*trans_start)(struct submission_backend *backend, - struct smtp_server_transaction *trans); + struct smtp_server_transaction *trans, + const struct smtp_address *path, + const struct smtp_params_mail *params); void (*trans_free)(struct submission_backend *backend, struct smtp_server_transaction *trans);