From: Stephan Bosch Date: Fri, 5 May 2017 11:21:16 +0000 (+0200) Subject: lib-lda: Made smtp-submit standalone. X-Git-Tag: 2.3.0.rc1~1048 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7fbbd3bf536e8698e79e7d5c93c8f6f650bed929;p=thirdparty%2Fdovecot%2Fcore.git lib-lda: Made smtp-submit standalone. Removed dependencies on LDA. --- diff --git a/src/lib-lda/mail-send.c b/src/lib-lda/mail-send.c index 9314f8ecbf..5527afcefc 100644 --- a/src/lib-lda/mail-send.c +++ b/src/lib-lda/mail-send.c @@ -47,6 +47,7 @@ int mail_send_rejection(struct mail_deliver_context *ctx, const char *recipient, { struct mail *mail = ctx->src_mail; struct istream *input; + struct smtp_submit_settings smtp_set; struct smtp_submit *smtp_submit; struct ostream *output; const char *return_addr, *hdr; @@ -81,7 +82,12 @@ int mail_send_rejection(struct mail_deliver_context *ctx, const char *recipient, vtable = get_var_expand_table(mail, reason, recipient); - smtp_submit = smtp_submit_init(ctx->set, NULL); + i_zero(&smtp_set); + smtp_set.hostname = ctx->set->hostname; + smtp_set.submission_host = ctx->set->submission_host; + smtp_set.sendmail_path = ctx->set->sendmail_path; + + smtp_submit = smtp_submit_init(&smtp_set, NULL); smtp_submit_add_rcpt(smtp_submit, return_addr); output = smtp_submit_send(smtp_submit); diff --git a/src/lib-lda/smtp-client.c b/src/lib-lda/smtp-client.c index f17d8f0a09..6f8d8d7a5f 100644 --- a/src/lib-lda/smtp-client.c +++ b/src/lib-lda/smtp-client.c @@ -12,10 +12,16 @@ struct smtp_client { struct smtp_client * smtp_client_init(const struct lda_settings *set, const char *return_path) { + struct smtp_submit_settings smtp_set; struct smtp_client *client; + i_zero(&smtp_set); + smtp_set.hostname = set->hostname; + smtp_set.submission_host = set->submission_host; + smtp_set.sendmail_path = set->sendmail_path; + client = i_new(struct smtp_client, 1); - client->submit = smtp_submit_init(set, return_path); + client->submit = smtp_submit_init(&smtp_set, return_path); return client; } diff --git a/src/lib-lda/smtp-submit.c b/src/lib-lda/smtp-submit.c index d284742d0c..749c8f0831 100644 --- a/src/lib-lda/smtp-submit.c +++ b/src/lib-lda/smtp-submit.c @@ -8,10 +8,8 @@ #include "ostream.h" #include "iostream-temp.h" #include "master-service.h" -#include "lmtp-client.h" -#include "lda-settings.h" -#include "mail-deliver.h" #include "program-client.h" +#include "lmtp-client.h" #include "smtp-submit.h" #include @@ -26,7 +24,7 @@ struct smtp_submit { struct ostream *output; struct istream *input; - const struct lda_settings *set; + struct smtp_submit_settings set; ARRAY_TYPE(const_string) destinations; const char *return_path; const char *error; @@ -37,7 +35,7 @@ struct smtp_submit { }; struct smtp_submit * -smtp_submit_init(const struct lda_settings *set, const char *return_path) +smtp_submit_init(const struct smtp_submit_settings *set, const char *return_path) { struct smtp_submit *subm; pool_t pool; @@ -45,7 +43,11 @@ smtp_submit_init(const struct lda_settings *set, const char *return_path) pool = pool_alloconly_create("smtp submit", 256); subm = p_new(pool, struct smtp_submit, 1); subm->pool = pool; - subm->set = set; + + subm->set.hostname = p_strdup_empty(pool, set->hostname); + subm->set.submission_host = p_strdup_empty(pool, set->submission_host); + subm->set.sendmail_path = p_strdup_empty(pool, set->sendmail_path); + subm->return_path = p_strdup(pool, return_path); p_array_init(&subm->destinations, pool, 2); return subm; @@ -87,7 +89,7 @@ smtp_submit_error(struct smtp_submit *subm, subm->tempfail = tempfail; subm->error = p_strdup_printf(subm->pool, "smtp(%s): %s", - subm->set->submission_host, error); + subm->set.submission_host, error); } } @@ -127,7 +129,7 @@ smtp_submit_send_host(struct smtp_submit *subm, const char *host, *const *destp; in_port_t port; - if (net_str2hostport(subm->set->submission_host, + if (net_str2hostport(subm->set.submission_host, DEFAULT_SUBMISSION_PORT, &host, &port) < 0) { *error_r = t_strdup_printf( "Invalid submission_host: %s", host); @@ -137,7 +139,7 @@ smtp_submit_send_host(struct smtp_submit *subm, i_zero(&client_set); client_set.mail_from = subm->return_path == NULL ? "<>" : t_strconcat("<", subm->return_path, ">", NULL); - client_set.my_hostname = subm->set->hostname; + client_set.my_hostname = subm->set.hostname; client_set.timeout_secs = timeout_secs; ioloop = io_loop_create(); @@ -190,7 +192,7 @@ smtp_submit_send_sendmail(struct smtp_submit *subm, struct program_client *pc; int ret; - sendmail_args = t_strsplit(subm->set->sendmail_path, " "); + sendmail_args = t_strsplit(subm->set.sendmail_path, " "); t_array_init(&args, 16); i_assert(sendmail_args[0] != NULL); sendmail_bin = sendmail_args[0]; @@ -262,7 +264,7 @@ int smtp_submit_deinit_timeout(struct smtp_submit *subm, subm->input = iostream_temp_finish (&subm->output, IO_BLOCK_SIZE); - if (*subm->set->submission_host != '\0') { + if (subm->set.submission_host != NULL) { ret = smtp_submit_send_host (subm, timeout_secs, error_r); } else { diff --git a/src/lib-lda/smtp-submit.h b/src/lib-lda/smtp-submit.h index 51c877ef8a..25d255bdf2 100644 --- a/src/lib-lda/smtp-submit.h +++ b/src/lib-lda/smtp-submit.h @@ -1,8 +1,15 @@ #ifndef SMTP_SUBMIT_H #define SMTP_SUBMIT_H +struct smtp_submit_settings { + const char *hostname; + const char *submission_host; + const char *sendmail_path; +}; + struct smtp_submit * ATTR_NULL(3) -smtp_submit_init(const struct lda_settings *set, const char *return_path); +smtp_submit_init(const struct smtp_submit_settings *set, + const char *return_path); /* Add a new recipient */ void smtp_submit_add_rcpt(struct smtp_submit *subm, const char *address); /* Get an output stream where the message can be written to. The recipients diff --git a/src/lib-lda/test-smtp-submit.c b/src/lib-lda/test-smtp-submit.c index c305687d71..6a683af719 100644 --- a/src/lib-lda/test-smtp-submit.c +++ b/src/lib-lda/test-smtp-submit.c @@ -46,7 +46,7 @@ struct server_connection { typedef void (*test_server_init_t)(unsigned int index); typedef bool (*test_client_init_t) - (const struct lda_settings *submit_set); + (const struct smtp_submit_settings *submit_set); /* * State @@ -84,15 +84,15 @@ server_connection_deinit(struct server_connection **_conn); /* client */ static void -test_client_defaults(struct lda_settings *smtp_set); +test_client_defaults(struct smtp_submit_settings *smtp_set); static void test_client_deinit(void); static int -test_client_smtp_send_simple(const struct lda_settings *smtp_set, +test_client_smtp_send_simple(const struct smtp_submit_settings *smtp_set, const char *message, const char *host, unsigned int timeout_secs, const char **error_r); static int -test_client_smtp_send_simple_port(const struct lda_settings *smtp_set, +test_client_smtp_send_simple_port(const struct smtp_submit_settings *smtp_set, const char *message, unsigned int port, unsigned int timeout_secs, const char **error_r); @@ -103,7 +103,7 @@ static void test_message_delivery(const char *message, const char *file); static void test_run_client_server( - const struct lda_settings *submit_set, + const struct smtp_submit_settings *submit_set, test_client_init_t client_test, test_server_init_t server_test, unsigned int server_tests_count) @@ -116,7 +116,7 @@ static void test_run_client_server( /* client */ static bool -test_client_host_lookup_failed(const struct lda_settings *submit_set) +test_client_host_lookup_failed(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -132,7 +132,7 @@ test_client_host_lookup_failed(const struct lda_settings *submit_set) static void test_host_lookup_failed(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -159,7 +159,7 @@ test_server_connection_refused(unsigned int index ATTR_UNUSED) /* client */ static bool -test_client_connection_refused(const struct lda_settings *submit_set) +test_client_connection_refused(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -175,7 +175,7 @@ test_client_connection_refused(const struct lda_settings *submit_set) static void test_connection_refused(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -208,7 +208,7 @@ static void test_server_connection_timed_out(unsigned int index) /* client */ static bool -test_client_connection_timed_out(const struct lda_settings *submit_set) +test_client_connection_timed_out(const struct smtp_submit_settings *submit_set) { time_t time; const char *error = NULL; @@ -230,7 +230,7 @@ test_client_connection_timed_out(const struct lda_settings *submit_set) static void test_connection_timed_out(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -271,7 +271,7 @@ static void test_server_bad_greeting(unsigned int index) /* client */ static bool -test_client_bad_greeting(const struct lda_settings *submit_set) +test_client_bad_greeting(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -289,7 +289,7 @@ test_client_bad_greeting(const struct lda_settings *submit_set) static void test_bad_greeting(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -341,7 +341,7 @@ static void test_server_denied_helo(unsigned int index) /* client */ static bool -test_client_denied_helo(const struct lda_settings *submit_set) +test_client_denied_helo(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -359,7 +359,7 @@ test_client_denied_helo(const struct lda_settings *submit_set) static void test_denied_helo(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -409,7 +409,7 @@ static void test_server_disconnect_helo(unsigned int index) /* client */ static bool -test_client_disconnect_helo(const struct lda_settings *submit_set) +test_client_disconnect_helo(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -427,7 +427,7 @@ test_client_disconnect_helo(const struct lda_settings *submit_set) static void test_disconnect_helo(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -513,7 +513,7 @@ static void test_server_denied_mail(unsigned int index) /* client */ static bool -test_client_denied_mail(const struct lda_settings *submit_set) +test_client_denied_mail(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -531,7 +531,7 @@ test_client_denied_mail(const struct lda_settings *submit_set) static void test_denied_mail(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -623,7 +623,7 @@ static void test_server_denied_rcpt(unsigned int index) /* client */ static bool -test_client_denied_rcpt(const struct lda_settings *submit_set) +test_client_denied_rcpt(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -639,7 +639,7 @@ test_client_denied_rcpt(const struct lda_settings *submit_set) static void test_denied_rcpt(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -737,10 +737,10 @@ static void test_server_denied_second_rcpt(unsigned int index) /* client */ static bool -test_client_denied_second_rcpt(const struct lda_settings *submit_set) +test_client_denied_second_rcpt(const struct smtp_submit_settings *submit_set) { struct smtp_submit *smtp_submit; - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; struct ostream *output; const char *error = NULL; int ret; @@ -766,7 +766,7 @@ test_client_denied_second_rcpt(const struct lda_settings *submit_set) static void test_denied_second_rcpt(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -864,7 +864,7 @@ static void test_server_denied_data(unsigned int index) /* client */ static bool -test_client_denied_data(const struct lda_settings *submit_set) +test_client_denied_data(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -880,7 +880,7 @@ test_client_denied_data(const struct lda_settings *submit_set) static void test_denied_data(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -987,7 +987,7 @@ static void test_server_data_failure(unsigned int index) /* client */ static bool -test_client_data_failure(const struct lda_settings *submit_set) +test_client_data_failure(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -1003,7 +1003,7 @@ test_client_data_failure(const struct lda_settings *submit_set) static void test_data_failure(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -1105,7 +1105,7 @@ static void test_server_data_disconnect(unsigned int index) /* client */ static bool -test_client_data_disconnect(const struct lda_settings *submit_set) +test_client_data_disconnect(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -1121,7 +1121,7 @@ test_client_data_disconnect(const struct lda_settings *submit_set) static void test_data_disconnect(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -1224,7 +1224,7 @@ static void test_server_data_timout(unsigned int index) /* client */ static bool -test_client_data_timout(const struct lda_settings *submit_set) +test_client_data_timout(const struct smtp_submit_settings *submit_set) { time_t time; const char *error = NULL; @@ -1246,7 +1246,7 @@ test_client_data_timout(const struct lda_settings *submit_set) static void test_data_timeout(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -1406,7 +1406,7 @@ static void test_server_successful_delivery(unsigned int index) /* client */ static bool -test_client_successful_delivery(const struct lda_settings *submit_set) +test_client_successful_delivery(const struct smtp_submit_settings *submit_set) { const char *error = NULL; int ret; @@ -1428,7 +1428,7 @@ test_client_successful_delivery(const struct lda_settings *submit_set) static void test_successful_delivery(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -1447,9 +1447,9 @@ static void test_successful_delivery(void) /* client */ static bool -test_client_failed_sendmail(const struct lda_settings *submit_set) +test_client_failed_sendmail(const struct smtp_submit_settings *submit_set) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; struct smtp_submit *smtp_submit; struct ostream *output; const char *sendmail_path, *error = NULL; @@ -1476,7 +1476,7 @@ test_client_failed_sendmail(const struct lda_settings *submit_set) static void test_failed_sendmail(void) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; test_client_defaults(&smtp_submit_set); @@ -1494,9 +1494,9 @@ static void test_failed_sendmail(void) /* client */ static bool -test_client_successful_sendmail(const struct lda_settings *submit_set) +test_client_successful_sendmail(const struct smtp_submit_settings *submit_set) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; struct smtp_submit *smtp_submit; struct ostream *output; const char *sendmail_path, *msg_path, *error = NULL; @@ -1529,13 +1529,13 @@ test_client_successful_sendmail(const struct lda_settings *submit_set) static void test_successful_sendmail(void) { - struct lda_settings smtp_client_set; + struct smtp_submit_settings smtp_submit_set; - test_client_defaults(&smtp_client_set); + test_client_defaults(&smtp_submit_set); test_begin("successful sendmail"); test_expect_errors(0); - test_run_client_server(&smtp_client_set, + test_run_client_server(&smtp_submit_set, test_client_successful_sendmail, NULL, 0); test_end(); } @@ -1569,7 +1569,7 @@ static void (*const test_functions[])(void) = { */ static void -test_client_defaults(struct lda_settings *smtp_set) +test_client_defaults(struct smtp_submit_settings *smtp_set) { i_zero(smtp_set); smtp_set->hostname = "test"; @@ -1582,11 +1582,11 @@ static void test_client_deinit(void) } static int -test_client_smtp_send_simple(const struct lda_settings *smtp_set, +test_client_smtp_send_simple(const struct smtp_submit_settings *smtp_set, const char *message, const char *host, unsigned int timeout_secs, const char **error_r) { - struct lda_settings smtp_submit_set; + struct smtp_submit_settings smtp_submit_set; struct smtp_submit *smtp_submit; struct ostream *output; @@ -1605,7 +1605,7 @@ test_client_smtp_send_simple(const struct lda_settings *smtp_set, } static int -test_client_smtp_send_simple_port(const struct lda_settings *smtp_set, +test_client_smtp_send_simple_port(const struct smtp_submit_settings *smtp_set, const char *message, unsigned int port, unsigned int timeout_secs, const char **error_r) { @@ -1815,7 +1815,7 @@ test_message_delivery(const char *message, const char *file) } static void test_run_client_server( - const struct lda_settings *submit_set, + const struct smtp_submit_settings *submit_set, test_client_init_t client_test, test_server_init_t server_test, unsigned int server_tests_count)