]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-submit - Collect optional inputs to smtp_submit_session_init() into...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Thu, 27 Dec 2018 23:36:32 +0000 (00:36 +0100)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 2 Mar 2019 16:20:02 +0000 (17:20 +0100)
src/lib-lda/mail-send.c
src/lib-smtp/smtp-submit.c
src/lib-smtp/smtp-submit.h
src/lib-smtp/test-smtp-submit.c

index 6a1fc128c06cb9a58d82cbc15fa45812182844e5..806784f38e68df8079bcef0f201196a1f515c21e 100644 (file)
@@ -54,6 +54,7 @@ int mail_send_rejection(struct mail_deliver_context *ctx,
        struct ssl_iostream_settings ssl_set;
        struct mail *mail = ctx->src_mail;
        struct istream *input;
+       struct smtp_submit_input smtp_input;
        struct smtp_submit *smtp_submit;
        struct ostream *output;
        const struct message_address *postmaster_addr;
@@ -97,7 +98,9 @@ int mail_send_rejection(struct mail_deliver_context *ctx,
        i_zero(&ssl_set);
        mail_user_init_ssl_client_settings(user, &ssl_set);
 
-       smtp_submit = smtp_submit_init_simple(ctx->smtp_set, &ssl_set, NULL);
+       i_zero(&smtp_input);
+       smtp_input.ssl = &ssl_set;
+       smtp_submit = smtp_submit_init_simple(&smtp_input, ctx->smtp_set, NULL);
        smtp_submit_add_rcpt(smtp_submit, return_addr);
        output = smtp_submit_send(smtp_submit);
 
index ebe88c48d823414dde3eaff4413d90f0538a13f8..a06be6b0f18ab25a8fbd67d705b28b2e9a5ceb5c 100644 (file)
@@ -54,8 +54,8 @@ struct smtp_submit {
 };
 
 struct smtp_submit_session *
-smtp_submit_session_init(const struct smtp_submit_settings *set,
-                        const struct ssl_iostream_settings *ssl_set)
+smtp_submit_session_init(const struct smtp_submit_input *input,
+                        const struct smtp_submit_settings *set)
 {
        struct smtp_submit_session *session;
        pool_t pool;
@@ -74,8 +74,10 @@ smtp_submit_session_init(const struct smtp_submit_settings *set,
        session->set.submission_ssl =
                p_strdup_empty(pool, set->submission_ssl);
 
-       if (ssl_set != NULL)
-               ssl_iostream_settings_init_from(pool, &session->ssl_set, ssl_set);
+       if (input->ssl != NULL) {
+               ssl_iostream_settings_init_from(pool, &session->ssl_set,
+                                               input->ssl);
+       }
 
        return session;
 }
@@ -107,14 +109,14 @@ smtp_submit_init(struct smtp_submit_session *session,
 }
 
 struct smtp_submit *
-smtp_submit_init_simple(const struct smtp_submit_settings *set,
-                       const struct ssl_iostream_settings *ssl_set,
+smtp_submit_init_simple(const struct smtp_submit_input *input,
+                       const struct smtp_submit_settings *set,
                        const struct smtp_address *mail_from)
 {
        struct smtp_submit_session *session;
        struct smtp_submit *subm;
 
-       session = smtp_submit_session_init(set, ssl_set);
+       session = smtp_submit_session_init(input, set);
        subm = smtp_submit_init(session, mail_from);
        subm->simple = TRUE;
        return subm;
index a8883df30ccfd9154bdc9c0112cd1ee61e42a270..7a623400a47b52a5851050dc8b5585733ce98e84 100644 (file)
@@ -9,6 +9,11 @@ struct smtp_submit_settings;
 struct smtp_submit_session;
 struct smtp_submit;
 
+struct smtp_submit_input {
+       /* SSL settings */
+       const struct ssl_iostream_settings *ssl;
+};
+
 struct smtp_submit_result {
        /* 1 on success,
           0 on permanent failure (e.g. invalid destination),
@@ -25,16 +30,16 @@ smtp_submit_callback_t(const struct smtp_submit_result *result,
 /* Use submit session to reuse resources (e.g. SMTP connections) between
    submissions (FIXME: actually implement this) */
 struct smtp_submit_session *
-smtp_submit_session_init(const struct smtp_submit_settings *set,
-                        const struct ssl_iostream_settings *ssl_set) ATTR_NULL(2);
+smtp_submit_session_init(const struct smtp_submit_input *input,
+                        const struct smtp_submit_settings *set);
 void smtp_submit_session_deinit(struct smtp_submit_session **_session);
 
 struct smtp_submit *
 smtp_submit_init(struct smtp_submit_session *session,
                 const struct smtp_address *mail_from);
 struct smtp_submit *
-smtp_submit_init_simple(const struct smtp_submit_settings *set,
-                       const struct ssl_iostream_settings *ssl_set,
+smtp_submit_init_simple(const struct smtp_submit_input *input,
+                       const struct smtp_submit_settings *set,
                        const struct smtp_address *mail_from) ATTR_NULL(2);
 void smtp_submit_deinit(struct smtp_submit **_submit);
 
index a43cb2ff46a34d8e4d25b4a1fb71cbe4a3774551..eae38bbd3fad8c65181a7e26df66727f7345b7e1 100644 (file)
@@ -747,6 +747,7 @@ static bool
 test_client_denied_second_rcpt(const struct smtp_submit_settings *submit_set)
 {
        struct smtp_submit *smtp_submit;
+       struct smtp_submit_input smtp_input;
        struct smtp_submit_settings smtp_submit_set;
        struct ostream *output;
        const char *error = NULL;
@@ -757,7 +758,8 @@ test_client_denied_second_rcpt(const struct smtp_submit_settings *submit_set)
                t_strdup_printf("127.0.0.1:%u", bind_ports[0]);
        smtp_submit_set.submission_timeout = 1000;
 
-       smtp_submit = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       i_zero(&smtp_input);
+       smtp_submit = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit,
@@ -1453,6 +1455,7 @@ test_client_parallel_delivery_callback(const struct smtp_submit_result *result,
 static bool
 test_client_parallel_delivery(const struct smtp_submit_settings *submit_set)
 {
+       struct smtp_submit_input smtp_input;
        struct smtp_submit_settings smtp_submit_set;
        struct _parallel_delivery_client *ctx;
        struct smtp_submit *smtp_submit1, *smtp_submit2;
@@ -1468,9 +1471,10 @@ test_client_parallel_delivery(const struct smtp_submit_settings *submit_set)
        smtp_submit_set.submission_timeout = 5;
 
        /* submit 1 */
+       i_zero(&smtp_input);
        smtp_submit_set.submission_host =
                t_strdup_printf("127.0.0.1:%u",  bind_ports[0]);
-       smtp_submit1 = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       smtp_submit1 = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit1,
@@ -1482,9 +1486,10 @@ test_client_parallel_delivery(const struct smtp_submit_settings *submit_set)
                test_client_parallel_delivery_callback, ctx);
 
        /* submit 2 */
+       i_zero(&smtp_input);
        smtp_submit_set.submission_host =
                t_strdup_printf("127.0.0.1:%u",  bind_ports[1]);
-       smtp_submit2 = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       smtp_submit2 = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit2,
@@ -1547,6 +1552,7 @@ static bool
 test_client_failed_sendmail(const struct smtp_submit_settings *submit_set)
 {
        struct smtp_submit_settings smtp_submit_set;
+       struct smtp_submit_input smtp_input;
        struct smtp_submit *smtp_submit;
        struct ostream *output;
        const char *sendmail_path, *error = NULL;
@@ -1558,7 +1564,8 @@ test_client_failed_sendmail(const struct smtp_submit_settings *submit_set)
        smtp_submit_set.sendmail_path = sendmail_path;
        smtp_submit_set.submission_timeout = 5;
 
-       smtp_submit = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       i_zero(&smtp_input);
+       smtp_submit = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit,
@@ -1598,6 +1605,7 @@ static void test_failed_sendmail(void)
 static bool
 test_client_successful_sendmail(const struct smtp_submit_settings *submit_set)
 {
+       struct smtp_submit_input smtp_input;
        struct smtp_submit_settings smtp_submit_set;
        struct smtp_submit *smtp_submit;
        struct ostream *output;
@@ -1613,7 +1621,8 @@ test_client_successful_sendmail(const struct smtp_submit_settings *submit_set)
        smtp_submit_set.sendmail_path = sendmail_path;
        smtp_submit_set.submission_timeout = 5;
 
-       smtp_submit = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       i_zero(&smtp_input);
+       smtp_submit = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit,
@@ -1671,6 +1680,7 @@ test_client_parallel_sendmail_callback(const struct smtp_submit_result *result,
 static bool
 test_client_parallel_sendmail(const struct smtp_submit_settings *submit_set)
 {
+       struct smtp_submit_input smtp_input;
        struct smtp_submit_settings smtp_submit_set;
        struct _parallel_sendmail_client *ctx;
        struct smtp_submit *smtp_submit1, *smtp_submit2;
@@ -1696,8 +1706,9 @@ test_client_parallel_sendmail(const struct smtp_submit_settings *submit_set)
        smtp_submit_set.submission_timeout = 5;
 
        /* submit 1 */
+       i_zero(&smtp_input);
        smtp_submit_set.sendmail_path = sendmail_path1;
-       smtp_submit1 = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       smtp_submit1 = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit1,
@@ -1709,8 +1720,9 @@ test_client_parallel_sendmail(const struct smtp_submit_settings *submit_set)
                test_client_parallel_sendmail_callback, ctx);
 
        /* submit 2 */
+       i_zero(&smtp_input);
        smtp_submit_set.sendmail_path = sendmail_path2;
-       smtp_submit2 = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       smtp_submit2 = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit2,
@@ -1799,6 +1811,7 @@ test_client_smtp_send_simple(const struct smtp_submit_settings *smtp_set,
        const char *message, const char *host,
        const char **error_r)
 {
+       struct smtp_submit_input smtp_input;
        struct smtp_submit_settings smtp_submit_set;
        struct smtp_submit *smtp_submit;
        struct ostream *output;
@@ -1808,7 +1821,8 @@ test_client_smtp_send_simple(const struct smtp_submit_settings *smtp_set,
        smtp_submit_set = *smtp_set;
        smtp_submit_set.submission_host = host,
 
-       smtp_submit = smtp_submit_init_simple(&smtp_submit_set, NULL,
+       i_zero(&smtp_input);
+       smtp_submit = smtp_submit_init_simple(&smtp_input, &smtp_submit_set,
                SMTP_ADDRESS_LITERAL("sender", "example.com"));
 
        smtp_submit_add_rcpt(smtp_submit,