From 07ef39ee46bedf74f5eb1460a9da489f44af8a8e Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sat, 17 Sep 2011 00:00:03 +0200
Subject: [PATCH] lda-sieve: fall back to global recipient_delimiter setting if
 plugin/recipient_delimiter is not set.

---
 src/plugins/lda-sieve/lda-sieve-plugin.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index 60b401298..6b61ffefa 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -42,13 +42,13 @@ static deliver_mail_func_t *next_deliver_mail;
 static const char *lda_sieve_get_homedir
 (void *context)
 {
-	struct mail_user *mail_user = (struct mail_user *) context;
+	struct mail_deliver_context *mdctx = (struct mail_deliver_context *)context;
 	const char *home = NULL;
 
-	if ( mail_user == NULL )
+	if ( mdctx == NULL || mdctx->dest_user == NULL )
 		return NULL;
 
-	if ( mail_user_get_home(mail_user, &home) <= 0 )
+	if ( mail_user_get_home(mdctx->dest_user, &home) <= 0 )
 		return NULL;
 
 	return home;
@@ -57,12 +57,19 @@ static const char *lda_sieve_get_homedir
 static const char *lda_sieve_get_setting
 (void *context, const char *identifier)
 {
-	struct mail_user *mail_user = (struct mail_user *) context;
+	struct mail_deliver_context *mdctx = (struct mail_deliver_context *)context;
+	const char *value = NULL;
 
-	if ( mail_user == NULL )
+	if ( mdctx == NULL )
 		return NULL;
 
-	return mail_user_plugin_getenv(mail_user, identifier);	
+	if ( mdxtx->dest_user == NULL ||
+		(value=mail_user_plugin_getenv(mail_user, identifier)) == NULL ) {
+		if ( strcmp(identifier, "recipient_delimiter") == 0 )
+			value = mdctx->set->recipient_delimiter;
+	}
+
+	return value;
 }
 
 static const struct sieve_environment lda_sieve_env = {
@@ -665,7 +672,7 @@ static int lda_sieve_deliver_mail
 
 	/* Initialize Sieve engine */
 
-	svinst = sieve_init(&lda_sieve_env, mdctx->dest_user, debug);
+	svinst = sieve_init(&lda_sieve_env, mdctx, debug);
 
 	/* Initialize master error handler */
 
-- 
GitLab