]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-lda: Made smtp-submit standalone.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 5 May 2017 11:21:16 +0000 (13:21 +0200)
committerTimo Sirainen <tss@dovecot.fi>
Fri, 8 Sep 2017 15:16:36 +0000 (18:16 +0300)
Removed dependencies on LDA.

src/lib-lda/mail-send.c
src/lib-lda/smtp-client.c
src/lib-lda/smtp-submit.c
src/lib-lda/smtp-submit.h
src/lib-lda/test-smtp-submit.c

index 9314f8ecbf7e93982a5b0bf3bc39d586dfb49357..5527afcefc4db1878e6564ad63beca8dffe488fd 100644 (file)
@@ -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);
 
index f17d8f0a09aef6ec23dc51e7e63cd5a84304ac7d..6f8d8d7a5fd1207ef0ca7cb5fa42606879161e1d 100644 (file)
@@ -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;
 }
 
index d284742d0c6170978aed00b80bddbb1825bb2ad1..749c8f08313828887317f1dfa438ab7f8c25fffb 100644 (file)
@@ -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 <unistd.h>
@@ -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 {
index 51c877ef8a84674949e00d2c361d9863c724c6b4..25d255bdf2d2bafc564495d6560a62d5b1695d4a 100644 (file)
@@ -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
index c305687d719d5617c05e57a7b8257ddcf61e3fe3..6a683af7199140cfe9fd78ff1778815869106e2a 100644 (file)
@@ -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)