annotate src/lmtp/lmtp-proxy.c @ 22545:425ee3581927

lmtp proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 08 Sep 2017 11:02:07 +0300
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21389
diff changeset
1 /* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "ioloop.h"
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "istream.h"
17523
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
7 #include "istream-sized.h"
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "ostream.h"
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
9 #include "str.h"
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
10 #include "time-util.h"
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include "lmtp-client.h"
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include "lmtp-proxy.h"
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #define LMTP_MAX_LINE_LEN 1024
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 struct lmtp_proxy_recipient {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 struct lmtp_proxy_connection *conn;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 const char *address;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 const char *reply;
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
20 unsigned int idx;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 unsigned int rcpt_to_failed:1;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 unsigned int data_reply_received:1;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 };
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 struct lmtp_proxy_connection {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 struct lmtp_proxy *proxy;
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
28 struct lmtp_proxy_rcpt_settings set;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 struct lmtp_client *client;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 struct istream *data_input;
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
32 struct timeout *to;
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
33
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
34 unsigned int finished:1;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 unsigned int failed:1;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 };
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 struct lmtp_proxy {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 pool_t pool;
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
40 const char *mail_from;
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
41 struct lmtp_proxy_settings set;
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
42
14920
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14840
diff changeset
43 ARRAY(struct lmtp_proxy_connection *) connections;
a097ef0a9d6d Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents: 14840
diff changeset
44 ARRAY(struct lmtp_proxy_recipient *) rcpt_to;
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
45 unsigned int next_data_reply_idx;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
47 struct timeout *to_finish;
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
48 struct istream *data_input;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 struct ostream *client_output;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50
9900
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
51 unsigned int max_timeout_msecs;
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
52
10400
96152031f5d9 lmtp proxy: More error handling fixes.
Timo Sirainen <tss@iki.fi>
parents: 10399
diff changeset
53 lmtp_proxy_finish_callback_t *finish_callback;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 void *finish_context;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 unsigned int finished:1;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 };
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
59 static void lmtp_conn_finish(void *context);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 struct lmtp_proxy *
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
62 lmtp_proxy_init(const struct lmtp_proxy_settings *set,
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
63 struct ostream *client_output)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 struct lmtp_proxy *proxy;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 pool_t pool;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
15887
48c1c58948f5 proxying cleanup: Send TTL=1 (instead of TTL=0) as "no more proxying".
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
68 i_assert(set->proxy_ttl > 0);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 o_stream_ref(client_output);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 pool = pool_alloconly_create("lmtp proxy", 1024);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 proxy = p_new(pool, struct lmtp_proxy, 1);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 proxy->pool = pool;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 proxy->client_output = client_output;
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
75 proxy->set.my_hostname = p_strdup(pool, set->my_hostname);
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
76 proxy->set.dns_client_socket_path =
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
77 p_strdup(pool, set->dns_client_socket_path);
15005
1f95d4fe29c7 Merged changes from v2.1 tree.
Timo Sirainen <tss@iki.fi>
parents: 14960 15000
diff changeset
78 proxy->set.session_id = p_strdup(pool, set->session_id);
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
79 proxy->set.source_ip = set->source_ip;
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
80 proxy->set.source_port = set->source_port;
14162
ba06ea38c722 imap/pop3/lmtp proxy: Implemented detection of proxy loops with TTL.
Timo Sirainen <tss@iki.fi>
parents: 14151
diff changeset
81 proxy->set.proxy_ttl = set->proxy_ttl;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 i_array_init(&proxy->rcpt_to, 32);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 i_array_init(&proxy->connections, 32);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 return proxy;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 static void lmtp_proxy_connections_deinit(struct lmtp_proxy *proxy)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 struct lmtp_proxy_connection *const *conns;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
91 array_foreach(&proxy->connections, conns) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
92 struct lmtp_proxy_connection *conn = *conns;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
93
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
94 lmtp_client_deinit(&conn->client);
10397
9500cfbe5dbf lmtp proxy: Error handling fix.
Timo Sirainen <tss@iki.fi>
parents: 10396
diff changeset
95 }
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 void lmtp_proxy_deinit(struct lmtp_proxy **_proxy)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 struct lmtp_proxy *proxy = *_proxy;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 *_proxy = NULL;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 lmtp_proxy_connections_deinit(proxy);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 if (proxy->data_input != NULL)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 i_stream_unref(&proxy->data_input);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 if (proxy->client_output != NULL)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 o_stream_unref(&proxy->client_output);
10824
bd28e6f29711 lmtp proxy: Crashfix.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
109 if (proxy->to_finish != NULL)
bd28e6f29711 lmtp proxy: Crashfix.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
110 timeout_remove(&proxy->to_finish);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 array_free(&proxy->rcpt_to);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 array_free(&proxy->connections);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 pool_unref(&proxy->pool);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 void lmtp_proxy_mail_from(struct lmtp_proxy *proxy, const char *value)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 proxy->mail_from = p_strdup(proxy->pool, value);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 static struct lmtp_proxy_connection *
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 lmtp_proxy_get_connection(struct lmtp_proxy *proxy,
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
123 const struct lmtp_proxy_rcpt_settings *set)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 struct lmtp_proxy_connection *const *conns, *conn;
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
126 struct lmtp_client_settings client_set;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127
9900
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
128 i_assert(set->timeout_msecs > 0);
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
129
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
130 array_foreach(&proxy->connections, conns) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
131 conn = *conns;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
132
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
133 if (conn->set.port == set->port &&
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
134 strcmp(conn->set.host, set->host) == 0)
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
135 return conn;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137
21389
59437f8764c6 global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
138 i_zero(&client_set);
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
139 client_set.mail_from = proxy->mail_from;
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
140 client_set.my_hostname = proxy->set.my_hostname;
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
141 client_set.dns_client_socket_path = proxy->set.dns_client_socket_path;
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
142 client_set.source_ip = proxy->set.source_ip;
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
143 client_set.source_port = proxy->set.source_port;
15887
48c1c58948f5 proxying cleanup: Send TTL=1 (instead of TTL=0) as "no more proxying".
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
144 client_set.proxy_ttl = proxy->set.proxy_ttl;
14960
6d2a439a10a6 lmtp proxy: Forward proxy_timeout to backend and set mail_max_lock_timeout based on it.
Timo Sirainen <tss@iki.fi>
parents: 14920
diff changeset
145 client_set.proxy_timeout_secs = set->timeout_msecs/1000;
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
146
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 conn = p_new(proxy->pool, struct lmtp_proxy_connection, 1);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 conn->proxy = proxy;
22545
425ee3581927 lmtp proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
149 if (set->hostip.family == 0)
425ee3581927 lmtp proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
150 conn->set.host = p_strdup(proxy->pool, set->host);
425ee3581927 lmtp proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
151 else
425ee3581927 lmtp proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
152 conn->set.host = p_strdup(proxy->pool, net_ip2addr(&set->hostip));
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 conn->set.port = set->port;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 conn->set.timeout_msecs = set->timeout_msecs;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155 array_append(&proxy->connections, &conn, 1);
10825
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
156
cc3f6adc1e0b lmtp proxy: Added support for DNS lookups.
Timo Sirainen <tss@iki.fi>
parents: 10824
diff changeset
157 conn->client = lmtp_client_init(&client_set, lmtp_conn_finish, conn);
9900
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
158 if (lmtp_client_connect_tcp(conn->client, set->protocol,
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 conn->set.host, conn->set.port) < 0)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 conn->failed = TRUE;
9900
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
161
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
162 if (proxy->max_timeout_msecs < set->timeout_msecs)
22d27318bb18 lmtp client, proxy: Several bugfixes.
Timo Sirainen <tss@iki.fi>
parents: 9832
diff changeset
163 proxy->max_timeout_msecs = set->timeout_msecs;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 return conn;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
167 static bool lmtp_proxy_send_data_replies(struct lmtp_proxy *proxy)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 {
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
169 struct lmtp_proxy_recipient *const *rcpt;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 unsigned int i, count;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 o_stream_cork(proxy->client_output);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 rcpt = array_get(&proxy->rcpt_to, &count);
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
174 for (i = proxy->next_data_reply_idx; i < count; i++) {
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
175 if (!(rcpt[i]->rcpt_to_failed || rcpt[i]->data_reply_received))
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 break;
14681
ca37d1577291 Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents: 14162
diff changeset
177 o_stream_nsend_str(proxy->client_output,
ca37d1577291 Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents: 14162
diff changeset
178 t_strconcat(rcpt[i]->reply, "\r\n", NULL));
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 o_stream_uncork(proxy->client_output);
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
181 proxy->next_data_reply_idx = i;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 return i == count;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
186 static void lmtp_proxy_finish_timeout(struct lmtp_proxy *proxy)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188 i_assert(!proxy->finished);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
190 timeout_remove(&proxy->to_finish);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
191 proxy->finished = TRUE;
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
192 proxy->finish_callback(proxy->finish_context);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
194
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
195 static void lmtp_proxy_try_finish(struct lmtp_proxy *proxy)
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
196 {
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
197 if (proxy->finish_callback == NULL) {
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
198 /* DATA command hasn't been sent yet */
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
199 return;
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
200 }
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
201 if (!lmtp_proxy_send_data_replies(proxy)) {
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
202 /* we can't received reply from all clients yet */
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
203 return;
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
204 }
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
205 /* do the actual finishing in a timeout handler, since the finish
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
206 callback causes the proxy to be destroyed and the code leading up
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
207 to this function can be called from many different places. it's
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
208 easier this way rather than having all the callers check if the
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
209 proxy was already destroyed. */
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
210 if (proxy->to_finish == NULL) {
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
211 proxy->to_finish = timeout_add(0, lmtp_proxy_finish_timeout,
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
212 proxy);
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
213 }
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
214 }
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
215
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
216 static void lmtp_conn_finish(void *context)
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
217 {
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
218 struct lmtp_proxy_connection *conn = context;
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
219
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
220 conn->finished = TRUE;
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
221 if (conn->to != NULL)
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
222 timeout_remove(&conn->to);
10399
8f6995923fbd lmtp proxy: Don't crash if all RCPT TOs fail to a remote.
Timo Sirainen <tss@iki.fi>
parents: 10398
diff changeset
223 if (conn->data_input != NULL)
8f6995923fbd lmtp proxy: Don't crash if all RCPT TOs fail to a remote.
Timo Sirainen <tss@iki.fi>
parents: 10398
diff changeset
224 i_stream_unref(&conn->data_input);
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
225 lmtp_proxy_try_finish(conn->proxy);
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
226 }
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
227
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228 static void
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
229 lmtp_proxy_conn_rcpt_to(enum lmtp_client_result result,
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
230 const char *reply, void *context)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 {
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
232 struct lmtp_proxy_recipient *rcpt = context;
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
233 struct lmtp_proxy_connection *conn = rcpt->conn;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
234
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
235 i_assert(rcpt->reply == NULL);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
236
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
237 rcpt->reply = p_strdup(conn->proxy->pool, reply);
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
238 rcpt->rcpt_to_failed = result != LMTP_CLIENT_RESULT_OK;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
239 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
240
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
241 static void
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
242 lmtp_proxy_conn_data(enum lmtp_client_result result,
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
243 const char *reply, void *context)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 {
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
245 struct lmtp_proxy_recipient *rcpt = context;
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
246 struct lmtp_proxy_connection *conn = rcpt->conn;
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
247 const struct lmtp_client_times *times =
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
248 lmtp_client_get_times(conn->client);
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
249 string_t *msg;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
250
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
251 i_assert(!rcpt->rcpt_to_failed);
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
252 i_assert(rcpt->reply != NULL);
10396
6ab1e2f4ca55 lmtp: Error handling fixes.
Timo Sirainen <tss@iki.fi>
parents: 10394
diff changeset
253
14764
27dccff46fe9 lmtp proxy: Reset timeout each time receiving a reply lin for DATA.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
254 /* reset timeout in case there are a lot of RCPT TOs */
14766
569588ff7ef0 lmtp: Fixed previous change to make sure it doesn't crash on error handling.
Timo Sirainen <tss@iki.fi>
parents: 14764
diff changeset
255 if (conn->to != NULL)
569588ff7ef0 lmtp: Fixed previous change to make sure it doesn't crash on error handling.
Timo Sirainen <tss@iki.fi>
parents: 14764
diff changeset
256 timeout_reset(conn->to);
14764
27dccff46fe9 lmtp proxy: Reset timeout each time receiving a reply lin for DATA.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
257
10398
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
258 rcpt->reply = p_strdup(conn->proxy->pool, reply);
a144e918938c LMTP client API changes. Should be easier to use now.
Timo Sirainen <tss@iki.fi>
parents: 10397
diff changeset
259 rcpt->data_reply_received = TRUE;
11496
2d6cf78982dc lmtp proxy: Fixed 30 second delay after finishing DATA.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
260
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
261 msg = t_str_new(128);
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
262 str_printfa(msg, "%s: ", conn->proxy->set.session_id);
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
263 switch (result) {
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
264 case LMTP_CLIENT_RESULT_OK:
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
265 str_append(msg, "Sent message to");
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
266 break;
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
267 case LMTP_CLIENT_RESULT_REMOTE_ERROR:
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
268 case LMTP_CLIENT_RESULT_INTERNAL_ERROR:
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
269 str_append(msg, "Failed to send message to");
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
270 break;
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
271 }
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
272 str_printfa(msg, " <%s> at %s:%u: %s (%u/%u at %u ms)",
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
273 rcpt->address, conn->set.host, conn->set.port, reply,
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
274 rcpt->idx + 1, array_count(&conn->proxy->rcpt_to),
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
275 timeval_diff_msecs(&ioloop_timeval, &times->connect_started));
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
276 switch (result) {
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
277 case LMTP_CLIENT_RESULT_OK:
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
278 case LMTP_CLIENT_RESULT_REMOTE_ERROR:
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
279 /* the problem isn't with the proxy, it's with the remote side.
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
280 so the remote side will log an error, while for us this is
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
281 just an info event */
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
282 i_info("%s", str_c(msg));
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
283 break;
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
284 case LMTP_CLIENT_RESULT_INTERNAL_ERROR:
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
285 i_error("%s", str_c(msg));
17866
f21d82a32ca8 lib-lda, lmtp: Separate internal errors from remote errors.
Timo Sirainen <tss@iki.fi>
parents: 17523
diff changeset
286 break;
17494
20e8ed98357b lmtp: Proxying now logs successful and failed deliveries after DATA.
Timo Sirainen <tss@iki.fi>
parents: 17493
diff changeset
287 }
11496
2d6cf78982dc lmtp proxy: Fixed 30 second delay after finishing DATA.
Timo Sirainen <tss@iki.fi>
parents: 10825
diff changeset
288 lmtp_proxy_try_finish(conn->proxy);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
289 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
290
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
291 int lmtp_proxy_add_rcpt(struct lmtp_proxy *proxy, const char *address,
14151
1bc56eec3f8e lmtp proxy: Send client's IP/port to destination server via XCLIENT if possible.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
292 const struct lmtp_proxy_rcpt_settings *set)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
293 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
294 struct lmtp_proxy_connection *conn;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
295 struct lmtp_proxy_recipient *rcpt;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
296
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
297 conn = lmtp_proxy_get_connection(proxy, set);
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
298 if (conn->failed)
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
299 return -1;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
300
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
301 rcpt = p_new(proxy->pool, struct lmtp_proxy_recipient, 1);
18438
b64bcee2ffa0 lmtp proxy: Include in log messages how long it took to deliver the mail.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
302 rcpt->idx = array_count(&proxy->rcpt_to);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
303 rcpt->conn = conn;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
304 rcpt->address = p_strdup(proxy->pool, address);
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
305 array_append(&proxy->rcpt_to, &rcpt, 1);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
306
18074
3db5fbb216d3 lmtp: Added support for DSN ORCPT parameter.
Timo Sirainen <tss@iki.fi>
parents: 17866
diff changeset
307 lmtp_client_add_rcpt_params(conn->client, address, &set->params,
3db5fbb216d3 lmtp: Added support for DSN ORCPT parameter.
Timo Sirainen <tss@iki.fi>
parents: 17866
diff changeset
308 lmtp_proxy_conn_rcpt_to,
3db5fbb216d3 lmtp: Added support for DSN ORCPT parameter.
Timo Sirainen <tss@iki.fi>
parents: 17866
diff changeset
309 lmtp_proxy_conn_data, rcpt);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
310 return 0;
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
311 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
312
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
313 static void lmtp_proxy_conn_timeout(struct lmtp_proxy_connection *conn)
12240
1f784904111b lmtp proxy: Avoid hanging at the end of message input.
Timo Sirainen <tss@iki.fi>
parents: 11496
diff changeset
314 {
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
315 const char *line;
10284
2ad1ad1e1083 lmtp proxy: Added data input timeout.
Timo Sirainen <tss@iki.fi>
parents: 10278
diff changeset
316
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
317 line = t_strdup_printf(ERRSTR_TEMP_REMOTE_FAILURE
15000
bde62f77c65a lmtp proxy: Include session ID string in timeout reply text.
Timo Sirainen <tss@iki.fi>
parents: 14766
diff changeset
318 " (timeout while waiting for reply to %s) <%s>",
bde62f77c65a lmtp proxy: Include session ID string in timeout reply text.
Timo Sirainen <tss@iki.fi>
parents: 14766
diff changeset
319 lmtp_client_state_to_string(conn->client),
15005
1f95d4fe29c7 Merged changes from v2.1 tree.
Timo Sirainen <tss@iki.fi>
parents: 14960 15000
diff changeset
320 conn->proxy->set.session_id);
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
321 lmtp_client_fail(conn->client, line);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
322 }
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
323
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
324 void lmtp_proxy_start(struct lmtp_proxy *proxy, struct istream *data_input,
10400
96152031f5d9 lmtp proxy: More error handling fixes.
Timo Sirainen <tss@iki.fi>
parents: 10399
diff changeset
325 lmtp_proxy_finish_callback_t *callback, void *context)
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
326 {
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
327 struct lmtp_proxy_connection *const *conns;
17523
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
328 uoff_t size;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
329
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
330 i_assert(data_input->seekable);
17513
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
331 i_assert(proxy->data_input == NULL);
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
332
10400
96152031f5d9 lmtp proxy: More error handling fixes.
Timo Sirainen <tss@iki.fi>
parents: 10399
diff changeset
333 proxy->finish_callback = callback;
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
334 proxy->finish_context = context;
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
335 proxy->data_input = data_input;
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
336 i_stream_ref(proxy->data_input);
17523
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
337 if (i_stream_get_size(proxy->data_input, TRUE, &size) < 0) {
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
338 i_error("i_stream_get_size(data_input) failed: %s",
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
339 i_stream_get_error(proxy->data_input));
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
340 size = (uoff_t)-1;
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
341 }
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
342
17513
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
343 /* create the data_input streams first */
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
344 array_foreach(&proxy->connections, conns) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
345 struct lmtp_proxy_connection *conn = *conns;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10402
diff changeset
346
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
347 if (conn->finished) {
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
348 /* this connection had already failed */
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
349 continue;
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
350 }
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
351
13846
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
352 conn->to = timeout_add(proxy->max_timeout_msecs,
51d87deb5c26 lmtp: Simplify LMTP proxying by first reading the whole input to memory/disk.
Timo Sirainen <tss@iki.fi>
parents: 13477
diff changeset
353 lmtp_proxy_conn_timeout, conn);
17523
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
354 if (size == (uoff_t)-1)
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
355 conn->data_input = i_stream_create_limit(data_input, (uoff_t)-1);
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
356 else
1b9356dbfca2 lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen <tss@iki.fi>
parents: 17513
diff changeset
357 conn->data_input = i_stream_create_sized(data_input, size);
17513
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
358 }
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
359 /* now that all the streams are created, start reading them
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
360 (reading them earlier could have caused the data_input parent's
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
361 offset to change) */
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
362 array_foreach(&proxy->connections, conns) {
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
363 struct lmtp_proxy_connection *conn = *conns;
10415
3662241f75f2 lmtp proxy fixes.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
364
17513
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
365 if (conn->data_input != NULL) {
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
366 lmtp_client_send(conn->client, conn->data_input);
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
367 lmtp_client_send_more(conn->client);
119adb7d2479 lmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen <tss@iki.fi>
parents: 17494
diff changeset
368 }
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
369 }
15287
38727d3e90ec lmtp: Fixed hanging on proxying if remote server was down.
Timo Sirainen <tss@iki.fi>
parents: 15000
diff changeset
370 /* finish if all of the connections have already failed */
38727d3e90ec lmtp: Fixed hanging on proxying if remote server was down.
Timo Sirainen <tss@iki.fi>
parents: 15000
diff changeset
371 lmtp_proxy_try_finish(proxy);
9832
3a16bec9c961 lmtp: Added initial support for proxying mails to other LMTP/SMTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
372 }