From 0e936fd05b33d1d53dadce0ace18a59cfa482a20 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Wed, 6 Mar 2024 02:37:08 +0100
Subject: [PATCH] lib-sieve: sieve - Add sieve instance parameter to callbacks

---
 src/lib-sieve-tool/sieve-tool.c                   | 10 +++++++---
 src/lib-sieve-tool/sieve-tool.h                   |  3 ++-
 src/lib-sieve/sieve-settings.old.h                |  4 ++--
 src/lib-sieve/sieve-types.h                       |  7 +++++--
 src/managesieve/managesieve-capabilities.c        |  4 +++-
 src/managesieve/managesieve-client.c              |  3 ++-
 src/plugins/doveadm-sieve/doveadm-sieve-cmd.c     |  3 ++-
 src/plugins/doveadm-sieve/doveadm-sieve-sync.c    |  3 ++-
 src/plugins/imap-filter-sieve/imap-filter-sieve.c |  3 ++-
 src/plugins/imapsieve/imap-sieve.c                |  3 ++-
 src/plugins/lda-sieve/lda-sieve-plugin.c          |  3 ++-
 src/testsuite/testsuite-settings.c                |  7 +++++--
 12 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 286a68e1f..37be1cc44 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -68,12 +68,14 @@ struct sieve_tool *sieve_tool;
  */
 
 static const char *
-sieve_tool_sieve_get_setting(void *context, const char *identifier)
+sieve_tool_sieve_get_setting(struct sieve_instance *svinst, void *context,
+			     const char *identifier)
 {
 	struct sieve_tool *tool = (struct sieve_tool *)context;
 
 	if (tool->setting_callback != NULL) {
-		return tool->setting_callback(tool->setting_callback_context,
+		return tool->setting_callback(svinst,
+					      tool->setting_callback_context,
 					      identifier);
 	}
 
@@ -83,7 +85,9 @@ sieve_tool_sieve_get_setting(void *context, const char *identifier)
 	return mail_user_plugin_getenv(tool->mail_user_dovecot, identifier);
 }
 
-static const char *sieve_tool_sieve_get_homedir(void *context)
+static const char *
+sieve_tool_sieve_get_homedir(struct sieve_instance *svinst ATTR_UNUSED,
+			     void *context)
 {
 	struct sieve_tool *tool = (struct sieve_tool *)context;
 
diff --git a/src/lib-sieve-tool/sieve-tool.h b/src/lib-sieve-tool/sieve-tool.h
index 49241ea4f..bf2f96557 100644
--- a/src/lib-sieve-tool/sieve-tool.h
+++ b/src/lib-sieve-tool/sieve-tool.h
@@ -8,7 +8,8 @@
  */
 
 typedef const char *
-(*sieve_tool_setting_callback_t)(void *context, const char *identifier);
+(*sieve_tool_setting_callback_t)(struct sieve_instance *svinst,
+				 void *context, const char *identifier);
 
 /*
  * Global variables
diff --git a/src/lib-sieve/sieve-settings.old.h b/src/lib-sieve/sieve-settings.old.h
index 371e9676a..a5457ec93 100644
--- a/src/lib-sieve/sieve-settings.old.h
+++ b/src/lib-sieve/sieve-settings.old.h
@@ -15,7 +15,7 @@ sieve_setting_get(struct sieve_instance *svinst, const char *identifier)
 	if (callbacks == NULL || callbacks->get_setting == NULL)
 		return NULL;
 
-	return callbacks->get_setting(svinst->context, identifier);
+	return callbacks->get_setting(svinst, svinst->context, identifier);
 }
 
 bool sieve_setting_get_uint_value(struct sieve_instance *svinst,
@@ -51,7 +51,7 @@ sieve_environment_get_homedir(struct sieve_instance *svinst)
 	if (callbacks == NULL || callbacks->get_homedir == NULL)
 		return NULL;
 
-	return callbacks->get_homedir(svinst->context);
+	return callbacks->get_homedir(svinst, svinst->context);
 }
 
 #endif
diff --git a/src/lib-sieve/sieve-types.h b/src/lib-sieve/sieve-types.h
index 7bc21d7a4..bb1cb8571 100644
--- a/src/lib-sieve/sieve-types.h
+++ b/src/lib-sieve/sieve-types.h
@@ -77,8 +77,11 @@ struct sieve_environment {
  */
 
 struct sieve_callbacks {
-	const char *(*get_homedir)(void *context);
-	const char *(*get_setting)(void *context, const char *identifier);
+	const char *
+	(*get_homedir)(struct sieve_instance *svinst, void *context);
+	const char *
+	(*get_setting)(struct sieve_instance *svinst, void *context,
+		       const char *identifier);
 };
 
 /*
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index cc70e521a..8558e1981 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -43,7 +43,9 @@ plugin_settings_get(const struct plugin_settings *set, const char *identifier)
  * Sieve environment
  */
 
-static const char *sieve_get_setting(void *context, const char *identifier)
+static const char *
+sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED, void *context,
+		  const char *identifier)
 {
 	const struct plugin_settings *set = context;
 
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index 8676a8b51..725946108 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -35,7 +35,8 @@ struct client *managesieve_clients = NULL;
 unsigned int managesieve_client_count = 0;
 
 static const char *
-managesieve_sieve_get_setting(void *context, const char *identifier)
+managesieve_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED,
+			      void *context, const char *identifier)
 {
 	struct mail_user *mail_user = (struct mail_user *) context;
 
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
index 7d98d1e02..53127b90b 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
@@ -62,7 +62,8 @@ void doveadm_sieve_cmd_failed_storage(struct doveadm_sieve_cmd_context *ctx,
 }
 
 static const char *
-doveadm_sieve_cmd_get_setting(void *context, const char *identifier)
+doveadm_sieve_cmd_get_setting(struct sieve_instance *svinst ATTR_UNUSED,
+			      void *context, const char *identifier)
 {
 	struct doveadm_sieve_cmd_context *ctx =
 		(struct doveadm_sieve_cmd_context *)context;
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
index 2bf277a7f..2b1cae32f 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
@@ -45,7 +45,8 @@ static MODULE_CONTEXT_DEFINE_INIT(sieve_user_module,
 				  &mail_user_module_register);
 
 static const char *
-mail_sieve_get_setting(void *context, const char *identifier)
+mail_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED, void *context,
+		       const char *identifier)
 {
 	struct mail_user *mail_user = context;
 
diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index eb2c9caa0..cc3cb51ab 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -59,7 +59,8 @@ static MODULE_CONTEXT_DEFINE_INIT(imap_filter_sieve_user_module,
  */
 
 static const char *
-imap_filter_sieve_get_setting(void *context, const char *identifier)
+imap_filter_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED,
+			      void *context, const char *identifier)
 {
 	struct imap_filter_sieve_user *ifsuser = context;
 	struct mail_user *user = ifsuser->client->user;
diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c
index 8bb20c33c..da669675c 100644
--- a/src/plugins/imapsieve/imap-sieve.c
+++ b/src/plugins/imapsieve/imap-sieve.c
@@ -48,7 +48,8 @@ struct imap_sieve {
 };
 
 static const char *
-mail_sieve_get_setting(void *context, const char *identifier)
+mail_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED, void *context,
+		       const char *identifier)
 {
 	struct imap_sieve *isieve = context;
 	struct mail_user *user = isieve->client->user;
diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index 804d5baaf..0868badee 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -45,7 +45,8 @@ static deliver_mail_func_t *next_deliver_mail;
  */
 
 static const char *
-lda_sieve_get_setting(void *context, const char *identifier)
+lda_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED, void *context,
+		      const char *identifier)
 {
 	struct mail_deliver_context *mdctx =
 		(struct mail_deliver_context *)context;
diff --git a/src/testsuite/testsuite-settings.c b/src/testsuite/testsuite-settings.c
index 5f2625f10..51d7d3eeb 100644
--- a/src/testsuite/testsuite-settings.c
+++ b/src/testsuite/testsuite-settings.c
@@ -20,7 +20,9 @@ struct testsuite_setting {
 
 static HASH_TABLE(const char *, struct testsuite_setting *) settings;
 
-static const char *testsuite_setting_get(void *context, const char *identifier);
+static const char *
+testsuite_setting_get(struct sieve_instance *svinst, void *context,
+		      const char *identifier);
 
 void testsuite_settings_init(void)
 {
@@ -49,7 +51,8 @@ void testsuite_settings_deinit(void)
 }
 
 static const char *
-testsuite_setting_get(void *context ATTR_UNUSED, const char *identifier)
+testsuite_setting_get(struct sieve_instance *svinst ATTR_UNUSED,
+		      void *context ATTR_UNUSED, const char *identifier)
 {
 	struct testsuite_setting *setting;
 	struct mail_user *user;
-- 
GitLab