From: Timo Sirainen Date: Mon, 2 Feb 2026 11:25:10 +0000 (+0200) Subject: submission-login: proxy - Add support for XCLIENT DESTIP and DESTPORT X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa98ad5c307df595c52969dd0a60f3bbbd48ac36;p=thirdparty%2Fdovecot%2Fcore.git submission-login: proxy - Add support for XCLIENT DESTIP and DESTPORT --- diff --git a/src/submission-login/client.c b/src/submission-login/client.c index 789dc5ded5..1309deaed8 100644 --- a/src/submission-login/client.c +++ b/src/submission-login/client.c @@ -218,6 +218,10 @@ client_connection_cmd_xclient(void *context, client->common.ip = data->source_ip; if (data->source_port != 0) client->common.remote_port = data->source_port; + if (data->dest_ip.family != 0) + client->common.local_ip = data->dest_ip; + if (data->dest_port != 0) + client->common.local_port = data->dest_port; if (data->ttl_plus_1 > 0) client->common.proxy_ttl = data->ttl_plus_1 - 1; if (data->session != NULL) { diff --git a/src/submission-login/submission-proxy.c b/src/submission-login/submission-proxy.c index 47e4994e16..d82c59b715 100644 --- a/src/submission-login/submission-proxy.c +++ b/src/submission-login/submission-proxy.c @@ -184,6 +184,17 @@ proxy_send_xclient(struct submission_client *client, struct ostream *output) addr = t_strconcat("IPV6:", addr, NULL); proxy_send_xclient_more(client, output, str, "ADDR", addr); } + if (str_array_icase_find(client->proxy_xclient, "DESTPORT")) { + proxy_send_xclient_more( + client, output, str, "DESTPORT", + t_strdup_printf("%u", client->common.local_port)); + } + if (str_array_icase_find(client->proxy_xclient, "DESTADDR")) { + const char *addr = net_ip2addr(&client->common.local_ip); + if (client->common.local_ip.family == AF_INET6) + addr = t_strconcat("IPV6:", addr, NULL); + proxy_send_xclient_more(client, output, str, "DESTADDR", addr); + } if (str_array_icase_find(client->proxy_xclient, "SESSION")) { proxy_send_xclient_more(client, output, str, "SESSION", client_get_session_id(&client->common));