From e29f6955a7a5f71f6c7ca3db208a355c4c7c35dc Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Fri, 28 Dec 2018 00:36:32 +0100 Subject: [PATCH] lib-smtp: smtp-submit - Collect optional inputs to smtp_submit_session_init() into a struct. --- src/lib-lda/mail-send.c | 5 ++++- src/lib-smtp/smtp-submit.c | 16 +++++++++------- src/lib-smtp/smtp-submit.h | 13 +++++++++---- src/lib-smtp/test-smtp-submit.c | 30 ++++++++++++++++++++++-------- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/lib-lda/mail-send.c b/src/lib-lda/mail-send.c index 6a1fc128c0..806784f38e 100644 --- a/src/lib-lda/mail-send.c +++ b/src/lib-lda/mail-send.c @@ -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); diff --git a/src/lib-smtp/smtp-submit.c b/src/lib-smtp/smtp-submit.c index ebe88c48d8..a06be6b0f1 100644 --- a/src/lib-smtp/smtp-submit.c +++ b/src/lib-smtp/smtp-submit.c @@ -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; diff --git a/src/lib-smtp/smtp-submit.h b/src/lib-smtp/smtp-submit.h index a8883df30c..7a623400a4 100644 --- a/src/lib-smtp/smtp-submit.h +++ b/src/lib-smtp/smtp-submit.h @@ -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); diff --git a/src/lib-smtp/test-smtp-submit.c b/src/lib-smtp/test-smtp-submit.c index a43cb2ff46..eae38bbd3f 100644 --- a/src/lib-smtp/test-smtp-submit.c +++ b/src/lib-smtp/test-smtp-submit.c @@ -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,