]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: Add support for modifying the transaction path and parameters in the...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 26 Oct 2018 19:00:00 +0000 (21:00 +0200)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Mon, 29 Oct 2018 16:40:18 +0000 (17:40 +0100)
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.

src/submission/submission-backend-relay.c
src/submission/submission-backend.c
src/submission/submission-backend.h

index e6ff29314e1e24ebe5675685579e1a55259eae6a..00cf208f1331d2ada69151268124e1567d602ce3 100644 (file)
@@ -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);
        }
 }
index 07b6caa41facc459e526a5a6e5f08bdd8537ff41..a983b5e3915dbbeab4249e600995c99637323db6 100644 (file)
@@ -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
index 249fa6385ca3f21600a345afd9e00f57519a286c..df46739fd515b94731b773da1b17b976e0381bc9 100644 (file)
@@ -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);