From c55f6e764abb7abe44bfc279cb7d98149be2a8b1 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 1 Feb 2022 14:57:16 +0100 Subject: [PATCH] lmtp: proxy - Add per-connection counter to session_id This way connections to two different backends don't try to use the same session_id. Add 'P' letter before the counter to clarify that it's the proxy connection counter. --- src/lmtp/lmtp-proxy.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lmtp/lmtp-proxy.c b/src/lmtp/lmtp-proxy.c index a2b37c466b..06d3031411 100644 --- a/src/lmtp/lmtp-proxy.c +++ b/src/lmtp/lmtp-proxy.c @@ -85,6 +85,7 @@ struct lmtp_proxy { unsigned int max_timeout_msecs; unsigned int initial_ttl; + unsigned int proxy_session_seq; bool finished:1; }; @@ -124,6 +125,8 @@ lmtp_proxy_init(struct client *client, &lmtp_set.proxy_data); lmtp_set.proxy_data.source_ip = client->remote_ip; lmtp_set.proxy_data.source_port = client->remote_port; + /* This initial session_id is used only locally by lib-smtp. Each LMTP + proxy connection gets a more specific updated session_id. */ lmtp_set.proxy_data.session = trans->id; if (lmtp_set.proxy_data.ttl_plus_1 == 0) lmtp_set.proxy_data.ttl_plus_1 = LMTP_PROXY_DEFAULT_TTL + 1; @@ -282,6 +285,11 @@ lmtp_proxy_get_connection(struct lmtp_proxy *proxy, conn->set.set.host, conn->set.set.port, ssl_mode, &lmtp_set); } + struct smtp_proxy_data proxy_data = { + .session = t_strdup_printf("%s:P%u", proxy->trans->id, + ++proxy->proxy_session_seq), + }; + smtp_client_connection_update_proxy_data(conn->lmtp_conn, &proxy_data); smtp_client_connection_accept_extra_capability(conn->lmtp_conn, &cap_rcpt_forward); smtp_client_connection_connect(conn->lmtp_conn, NULL, NULL); -- 2.47.3