From 7c35bedb0623ed00dde286b23071137c906de481 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Tue, 15 Oct 2024 22:54:21 +0200
Subject: [PATCH] lib-sieve: storage: ldap: Rely on username being available at
 runtime

---
 src/lib-sieve/storage/ldap/sieve-ldap-db.c      |  6 +++---
 src/lib-sieve/storage/ldap/sieve-ldap-storage.c | 12 ++++--------
 src/lib-sieve/storage/ldap/sieve-ldap-storage.h |  1 -
 3 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-db.c b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
index 791a1bb9c..0263ce0fd 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-db.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
@@ -1201,9 +1201,9 @@ db_ldap_get_var_expand_table(struct ldap_connection *conn, const char *name)
 	memcpy(tab, auth_request_var_expand_static_tab,
 	       auth_count * sizeof(*tab));
 
-	tab[0].value = ldap_escape(lstorage->username);
-	tab[1].value = ldap_escape(t_strcut(lstorage->username, '@'));
-	tab[2].value = strchr(lstorage->username, '@');
+	tab[0].value = ldap_escape(svinst->username);
+	tab[1].value = ldap_escape(t_strcut(svinst->username, '@'));
+	tab[2].value = strchr(svinst->username, '@');
 	if (tab[2].value != NULL)
 		tab[2].value = ldap_escape(tab[2].value+1);
 	tab[3].value = ldap_escape(svinst->home_dir);
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage.c b/src/lib-sieve/storage/ldap/sieve-ldap-storage.c
index ec08831d8..9f27b4d7e 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage.c
@@ -47,7 +47,7 @@ sieve_ldap_storage_init(struct sieve_storage *storage,
 	struct sieve_ldap_storage *lstorage =
 		container_of(storage, struct sieve_ldap_storage, storage);
 	struct sieve_instance *svinst = storage->svinst;
-	const char *value, *username = NULL;
+	const char *value;
 
 	if (options != NULL) {
 		while (*options != NULL) {
@@ -55,7 +55,7 @@ sieve_ldap_storage_init(struct sieve_storage *storage,
 
 			if (str_begins_icase(option, "user=", &value) &&
 			    *value != '\0') {
-				username = value;
+				/* Ignore */
 			} else {
 				sieve_storage_set_critical(
 					storage, "Invalid option '%s'", option);
@@ -67,22 +67,18 @@ sieve_ldap_storage_init(struct sieve_storage *storage,
 		}
 	}
 
-	if (username == NULL)
-		username = svinst->username;
-
 	e_debug(storage->event, "user=%s, config=%s",
-		username, storage->location);
+		svinst->username, storage->location);
 
 	if (sieve_ldap_storage_read_settings(lstorage, storage->location) < 0)
 		return -1;
 
-	lstorage->username = p_strdup(storage->pool, username);
 	lstorage->config_file = p_strdup(storage->pool, storage->location);
 	lstorage->conn = sieve_ldap_db_init(lstorage);
 
 	storage->location = p_strconcat(
 		storage->pool, SIEVE_LDAP_STORAGE_DRIVER_NAME, ":",
-		storage->location, ";user=", username, NULL);
+		storage->location, ";user=", svinst->username, NULL);
 
 	return 0;
 }
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage.h b/src/lib-sieve/storage/ldap/sieve-ldap-storage.h
index 0420f9266..2341900ee 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage.h
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage.h
@@ -66,7 +66,6 @@ struct sieve_ldap_storage {
 	time_t set_mtime;
 
 	const char *config_file;
-	const char *username; // FIXME: needed?
 
 	struct ldap_connection *conn;
 };
-- 
GitLab