Skip to content

Commit

Permalink
lib-smtp: smtp-submit - Collect optional inputs to smtp_submit_sessio…
Browse files Browse the repository at this point in the history
…n_init() into a struct.
  • Loading branch information
stephanbosch committed Mar 2, 2019
1 parent 5c4d394 commit e29f695
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 20 deletions.
5 changes: 4 additions & 1 deletion src/lib-lda/mail-send.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down
16 changes: 9 additions & 7 deletions src/lib-smtp/smtp-submit.c
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down Expand Up @@ -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;
Expand Down
13 changes: 9 additions & 4 deletions src/lib-smtp/smtp-submit.h
Expand Up @@ -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),
Expand All @@ -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);

Expand Down
30 changes: 22 additions & 8 deletions src/lib-smtp/test-smtp-submit.c
Expand Up @@ -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;
Expand All @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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,
Expand Down

0 comments on commit e29f695

Please sign in to comment.