From 9c308beefb5011962bc09c4ae2236c367b5e4adb Mon Sep 17 00:00:00 2001
From: Aki Tuomi <aki.tuomi@open-xchange.com>
Date: Mon, 3 Apr 2023 12:16:41 +0300
Subject: [PATCH] managesieve-login: Send local_name to next hop

---
 src/managesieve-login/managesieve-proxy.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/managesieve-login/managesieve-proxy.c b/src/managesieve-login/managesieve-proxy.c
index 386601d91..8f93c2821 100644
--- a/src/managesieve-login/managesieve-proxy.c
+++ b/src/managesieve-login/managesieve-proxy.c
@@ -3,6 +3,7 @@
 
 #include <string.h>
 #include "login-common.h"
+#include "connection.h"
 #include "ioloop.h"
 #include "istream.h"
 #include "ostream.h"
@@ -61,6 +62,11 @@ proxy_compose_xclient_forward(struct managesieve_client *client)
 static void
 proxy_write_xclient(struct managesieve_client *client, string_t *str)
 {
+	/* Already checked in login_proxy_connect() that the local_name
+	   won't have any characters that would require escaping. */
+	i_assert(client->common.local_name == NULL ||
+		 connection_is_valid_dns_name(client->common.local_name));
+
 	string_t *fwd = proxy_compose_xclient_forward(client);
 
 	str_printfa(str, "XCLIENT ADDR=%s PORT=%u SESSION=%s TTL=%u "
@@ -70,6 +76,10 @@ proxy_write_xclient(struct managesieve_client *client, string_t *str)
 		    client->common.proxy_ttl - 1,
 		    client->common.end_client_tls_secured ?
 		    CLIENT_TRANSPORT_TLS : CLIENT_TRANSPORT_INSECURE);
+	if (client->common.local_name != NULL) {
+		str_append(str, " DESTNAME=");
+		str_append(str, client->common.local_name);
+	}
 	if (fwd != NULL) {
 		str_append(str, " FORWARD=");
 		base64_encode(str_data(fwd), str_len(fwd), str);
-- 
GitLab