From 5ee0d575f390253f2d7cc66b3516194729c69eee Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Tue, 27 Aug 2024 19:49:44 +0200
Subject: [PATCH] lib-sieve: Drop old settings infrastructure

---
 src/lib-sieve-tool/sieve-tool.c               |  19 --
 src/lib-sieve/Makefile.am                     |   2 -
 .../environment/ext-vnd-environment-items.c   |   1 -
 src/lib-sieve/sieve-actions.c                 |   1 -
 src/lib-sieve/sieve-address-source.c          |  19 --
 src/lib-sieve/sieve-address-source.h          |   3 -
 src/lib-sieve/sieve-common.h                  |  17 ++
 src/lib-sieve/sieve-script.c                  |   1 -
 src/lib-sieve/sieve-settings.old.c            | 191 ------------------
 src/lib-sieve/sieve-settings.old.h            |  51 -----
 src/lib-sieve/sieve-storage-sync.c            |   1 -
 src/lib-sieve/sieve-storage.c                 |   1 -
 src/lib-sieve/sieve-types.h                   |   3 -
 src/lib-sieve/sieve.c                         |   1 -
 .../storage/file/sieve-file-storage.c         |   1 -
 src/managesieve/managesieve-capabilities.c    |  58 +-----
 src/managesieve/managesieve-client.c          |  21 +-
 src/managesieve/managesieve-settings.c        |  17 --
 src/managesieve/managesieve-settings.h        |   6 -
 src/plugins/doveadm-sieve/doveadm-sieve-cmd.c |  19 +-
 .../doveadm-sieve/doveadm-sieve-sync.c        |  18 +-
 .../imap-filter-sieve/imap-filter-sieve.c     |  18 +-
 src/plugins/imapsieve/imap-sieve.c            |  18 +-
 src/plugins/lda-sieve/lda-sieve-plugin.c      |  33 +--
 .../sieve-extprograms-common.c                |   1 -
 src/testsuite/cmd-test-config.c               |   1 -
 src/testsuite/testsuite-settings.c            |  44 ----
 src/testsuite/testsuite-settings.h            |   2 -
 src/testsuite/testsuite.c                     |   3 -
 29 files changed, 27 insertions(+), 544 deletions(-)
 delete mode 100644 src/lib-sieve/sieve-settings.old.c
 delete mode 100644 src/lib-sieve/sieve-settings.old.h

diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 6937c9f3f..6765082c6 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -70,24 +70,6 @@ struct sieve_tool *sieve_tool;
  * Settings management
  */
 
-static const char *
-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(svinst,
-					      tool->setting_callback_context,
-					      identifier);
-	}
-
-	if (tool->mail_user_dovecot == NULL)
-		return NULL;
-
-	return mail_user_plugin_getenv(tool->mail_user_dovecot, identifier);
-}
-
 static const char *
 sieve_tool_sieve_get_homedir(struct sieve_instance *svinst ATTR_UNUSED,
 			     void *context)
@@ -99,7 +81,6 @@ sieve_tool_sieve_get_homedir(struct sieve_instance *svinst ATTR_UNUSED,
 
 const struct sieve_callbacks sieve_tool_callbacks = {
 	sieve_tool_sieve_get_homedir,
-	sieve_tool_sieve_get_setting,
 };
 
 /*
diff --git a/src/lib-sieve/Makefile.am b/src/lib-sieve/Makefile.am
index d697ee9d6..a0a1199b8 100644
--- a/src/lib-sieve/Makefile.am
+++ b/src/lib-sieve/Makefile.am
@@ -97,7 +97,6 @@ libdovecot_sieve_la_LIBADD = \
 	$(LIBDOVECOT)
 
 libdovecot_sieve_la_SOURCES = \
-	sieve-settings.old.c \
 	sieve-settings.c \
 	sieve-message.c \
 	sieve-smtp.c \
@@ -147,7 +146,6 @@ headers = \
 	sieve-common.h \
 	sieve-limits.h \
 	sieve-settings.h \
-	sieve-settings.old.h \
 	sieve-message.h \
 	sieve-smtp.h \
 	sieve-lexer.h \
diff --git a/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-items.c b/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-items.c
index f1113e37c..6f5dab8fc 100644
--- a/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-items.c
+++ b/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-items.c
@@ -4,7 +4,6 @@
 #include "lib.h"
 #include "array.h"
 
-#include "sieve-settings.old.h"
 #include "sieve-extensions.h"
 #include "sieve-commands.h"
 #include "sieve-comparators.h"
diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c
index f7e01ff8d..b2d3110dc 100644
--- a/src/lib-sieve/sieve-actions.c
+++ b/src/lib-sieve/sieve-actions.c
@@ -19,7 +19,6 @@
 #include "rfc2822.h"
 
 #include "sieve-code.h"
-#include "sieve-settings.old.h"
 #include "sieve-extensions.h"
 #include "sieve-binary.h"
 #include "sieve-interpreter.h"
diff --git a/src/lib-sieve/sieve-address-source.c b/src/lib-sieve/sieve-address-source.c
index db8979a2d..ce591d8c4 100644
--- a/src/lib-sieve/sieve-address-source.c
+++ b/src/lib-sieve/sieve-address-source.c
@@ -5,7 +5,6 @@
 
 #include "sieve-common.h"
 #include "sieve-error.h"
-#include "sieve-settings.old.h"
 #include "sieve-address.h"
 #include "sieve-message.h"
 
@@ -49,24 +48,6 @@ bool sieve_address_source_parse(pool_t pool, const char *value,
 	return TRUE;
 }
 
-bool sieve_address_source_parse_from_setting(struct sieve_instance *svinst,
-					     pool_t pool, const char *setting,
-					     struct sieve_address_source *asrc)
-{
-	const char *value;
-
-	value = sieve_setting_get(svinst, setting);
-	if (value == NULL)
-		return FALSE;
-
-	if (!sieve_address_source_parse(pool, value, asrc)) {
-		e_warning(svinst->event, "Invalid value for setting '%s': '%s'",
-			  setting, value);
-		return FALSE;
-	}
-	return TRUE;
-}
-
 int sieve_address_source_get_address(struct sieve_address_source *asrc,
 				     struct sieve_instance *svinst,
 				     const struct sieve_script_env *senv,
diff --git a/src/lib-sieve/sieve-address-source.h b/src/lib-sieve/sieve-address-source.h
index 5bfd5ff7d..7df6f2909 100644
--- a/src/lib-sieve/sieve-address-source.h
+++ b/src/lib-sieve/sieve-address-source.h
@@ -23,9 +23,6 @@ struct sieve_address_source {
 
 bool sieve_address_source_parse(pool_t pool, const char *value,
 				struct sieve_address_source *asrc);
-bool sieve_address_source_parse_from_setting(struct sieve_instance *svinst,
-					     pool_t pool, const char *setting,
-					     struct sieve_address_source *asrc);
 
 int sieve_address_source_get_address(struct sieve_address_source *asrc,
 				     struct sieve_instance *svinst,
diff --git a/src/lib-sieve/sieve-common.h b/src/lib-sieve/sieve-common.h
index d9f49b0a4..095b44780 100644
--- a/src/lib-sieve/sieve-common.h
+++ b/src/lib-sieve/sieve-common.h
@@ -242,4 +242,21 @@ const struct smtp_address *
 sieve_get_postmaster_smtp(const struct sieve_script_env *senv);
 const char *sieve_get_postmaster_address(const struct sieve_script_env *senv);
 
+/*
+ * Home directory
+ */
+
+static inline const char *
+sieve_environment_get_homedir(struct sieve_instance *svinst)
+{
+	const struct sieve_callbacks *callbacks = svinst->callbacks;
+
+	if (svinst->home_dir != NULL)
+		return svinst->home_dir;
+	if (callbacks == NULL || callbacks->get_homedir == NULL)
+		return NULL;
+
+	return callbacks->get_homedir(svinst, svinst->context);
+}
+
 #endif
diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c
index 1816eae58..c61458d06 100644
--- a/src/lib-sieve/sieve-script.c
+++ b/src/lib-sieve/sieve-script.c
@@ -14,7 +14,6 @@
 
 #include "sieve-common.h"
 #include "sieve-limits.h"
-#include "sieve-settings.old.h"
 #include "sieve-error.h"
 #include "sieve-dump.h"
 #include "sieve-binary.h"
diff --git a/src/lib-sieve/sieve-settings.old.c b/src/lib-sieve/sieve-settings.old.c
deleted file mode 100644
index adf2752c4..000000000
--- a/src/lib-sieve/sieve-settings.old.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Copyright (c) 2002-2018 Pigeonhole authors, see the included COPYING file
- */
-
-#include "lib.h"
-
-#include "sieve-common.h"
-#include "sieve-limits.h"
-#include "sieve-error.h"
-#include "sieve-address.h"
-#include "sieve-address-source.h"
-#include "sieve-settings.old.h"
-
-#include <ctype.h>
-
-/*
- * Access to settings
- */
-
-bool sieve_setting_get_uint_value(struct sieve_instance *svinst,
-				  const char *setting,
-				  unsigned long long int *value_r)
-{
-	const char *str_value;
-
-	str_value = sieve_setting_get(svinst, setting);
-
-	if (str_value == NULL || *str_value == '\0')
-		return FALSE;
-
-	if (str_to_ullong(str_value, value_r) < 0) {
-		e_warning(svinst->event,
-			  "invalid unsigned integer value for setting '%s': "
-			  "'%s'", setting, str_value);
-		return FALSE;
-	}
-	return TRUE;
-}
-
-bool sieve_setting_get_int_value(struct sieve_instance *svinst,
-				 const char *setting, long long int *value_r)
-{
-	const char *str_value;
-
-	str_value = sieve_setting_get(svinst, setting);
-	if (str_value == NULL || *str_value == '\0')
-		return FALSE;
-
-	if (str_to_llong(str_value, value_r) < 0) {
-		e_warning(svinst->event,
-			  "invalid integer value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-	return TRUE;
-}
-
-bool sieve_setting_get_size_value(struct sieve_instance *svinst,
-				  const char *setting, size_t *value_r)
-{
-	const char *str_value;
-	uintmax_t value, multiply = 1;
-	const char *endp;
-
-	str_value = sieve_setting_get(svinst, setting);
-	if (str_value == NULL || *str_value == '\0')
-		return FALSE;
-
-	if (str_parse_uintmax(str_value, &value, &endp) < 0) {
-		e_warning(svinst->event,
-			  "invalid size value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-	switch (i_toupper(*endp)) {
-	case '\0': /* default */
-	case 'B': /* byte (useless) */
-		multiply = 1;
-		break;
-	case 'K': /* kilobyte */
-		multiply = 1024;
-		break;
-	case 'M': /* megabyte */
-		multiply = 1024*1024;
-		break;
-	case 'G': /* gigabyte */
-		multiply = 1024*1024*1024;
-		break;
-	case 'T': /* terabyte */
-		multiply = 1024ULL*1024*1024*1024;
-		break;
-	default:
-		e_warning(svinst->event,
-			  "invalid size value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-
-	if (value > SSIZE_T_MAX / multiply) {
-		e_warning(svinst->event,
-			  "overflowing size value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-
-	*value_r = (size_t)(value * multiply);
-	return TRUE;
-}
-
-bool sieve_setting_get_bool_value(struct sieve_instance *svinst,
-				  const char *setting, bool *value_r)
-{
-	const char *str_value;
-
-	str_value = sieve_setting_get(svinst, setting);
-	if (str_value == NULL)
-		return FALSE;
-
-	str_value = t_str_trim(str_value, "\t ");
-	if (*str_value == '\0')
-		return FALSE;
-
- 	if (strcasecmp(str_value, "yes") == 0) {
-		*value_r = TRUE;
-		return TRUE;
-	}
-
- 	if (strcasecmp(str_value, "no") == 0) {
-		*value_r = FALSE;
-		return TRUE;
-	}
-
-	e_warning(svinst->event,
-		  "invalid boolean value for setting '%s': '%s'",
-		  setting, str_value);
-	return FALSE;
-}
-
-bool sieve_setting_get_duration_value(struct sieve_instance *svinst,
-				      const char *setting,
-				      sieve_number_t *value_r)
-{
-	const char *str_value;
-	uintmax_t value, multiply = 1;
-	const char *endp;
-
-	str_value = sieve_setting_get(svinst, setting);
-	if (str_value == NULL)
-		return FALSE;
-
-	str_value = t_str_trim(str_value, "\t ");
-	if (*str_value == '\0')
-		return FALSE;
-
-	if (str_parse_uintmax(str_value, &value, &endp) < 0) {
-		e_warning(svinst->event,
-			  "invalid duration value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-
-	switch (i_tolower(*endp)) {
-	case '\0': /* default */
-	case 's': /* seconds */
-		multiply = 1;
-		break;
-	case 'm': /* minutes */
-		multiply = 60;
-		break;
-	case 'h': /* hours */
-		multiply = 60*60;
-		break;
-	case 'd': /* days */
-		multiply = 24*60*60;
-		break;
-	default:
-		e_warning(svinst->event,
-			  "invalid duration value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-
-	if (value > SIEVE_MAX_NUMBER / multiply) {
-		e_warning(svinst->event,
-			  "overflowing duration value for setting '%s': '%s'",
-			  setting, str_value);
-		return FALSE;
-	}
-
-	*value_r = (unsigned int)(value * multiply);
-	return TRUE;
-}
diff --git a/src/lib-sieve/sieve-settings.old.h b/src/lib-sieve/sieve-settings.old.h
deleted file mode 100644
index 4038299ef..000000000
--- a/src/lib-sieve/sieve-settings.old.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef SIEVE_SETTINGS_OLD_H
-#define SIEVE_SETTINGS_OLD_H
-
-#include "sieve-common.h"
-
-/*
- * Access to settings
- */
-
-static inline const char *
-sieve_setting_get(struct sieve_instance *svinst, const char *identifier)
-{
-	const struct sieve_callbacks *callbacks = svinst->callbacks;
-
-	if (callbacks == NULL || callbacks->get_setting == NULL)
-		return NULL;
-
-	return callbacks->get_setting(svinst, svinst->context, identifier);
-}
-
-bool sieve_setting_get_uint_value(struct sieve_instance *svinst,
-				  const char *setting,
-				  unsigned long long int *value_r);
-bool sieve_setting_get_int_value(struct sieve_instance *svinst,
-				 const char *setting, long long int *value_r);
-bool sieve_setting_get_size_value(struct sieve_instance *svinst,
-				  const char *setting, size_t *value_r);
-bool sieve_setting_get_bool_value(struct sieve_instance *svinst,
-				  const char *setting, bool *value_r);
-bool sieve_setting_get_duration_value(struct sieve_instance *svinst,
-				      const char *setting,
-				      sieve_number_t *value_r);
-
-/*
- * Home directory
- */
-
-static inline const char *
-sieve_environment_get_homedir(struct sieve_instance *svinst)
-{
-	const struct sieve_callbacks *callbacks = svinst->callbacks;
-
-	if (svinst->home_dir != NULL)
-		return svinst->home_dir;
-	if (callbacks == NULL || callbacks->get_homedir == NULL)
-		return NULL;
-
-	return callbacks->get_homedir(svinst, svinst->context);
-}
-
-#endif
diff --git a/src/lib-sieve/sieve-storage-sync.c b/src/lib-sieve/sieve-storage-sync.c
index e9369b959..a3840f103 100644
--- a/src/lib-sieve/sieve-storage-sync.c
+++ b/src/lib-sieve/sieve-storage-sync.c
@@ -11,7 +11,6 @@
 #include "mail-storage-private.h"
 
 #include "sieve-common.h"
-#include "sieve-settings.old.h"
 #include "sieve-error-private.h"
 
 #include "sieve-script-private.h"
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 1020880f3..007d3e68d 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -13,7 +13,6 @@
 #include "settings.h"
 
 #include "sieve-common.h"
-#include "sieve-settings.old.h"
 #include "sieve-error-private.h"
 
 #include "sieve-script-private.h"
diff --git a/src/lib-sieve/sieve-types.h b/src/lib-sieve/sieve-types.h
index fbdf53397..2643a3877 100644
--- a/src/lib-sieve/sieve-types.h
+++ b/src/lib-sieve/sieve-types.h
@@ -81,9 +81,6 @@ struct sieve_environment {
 struct sieve_callbacks {
 	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/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index a0ba62f79..237d6a320 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -14,7 +14,6 @@
 #include "message-address.h"
 #include "mail-user.h"
 
-#include "sieve-settings.old.h"
 #include "sieve-extensions.h"
 #include "sieve-plugins.h"
 
diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c
index da6459cd8..c496a46e1 100644
--- a/src/lib-sieve/storage/file/sieve-file-storage.c
+++ b/src/lib-sieve/storage/file/sieve-file-storage.c
@@ -13,7 +13,6 @@
 
 #include "sieve.h"
 #include "sieve-common.h"
-#include "sieve-settings.old.h"
 #include "sieve-error-private.h"
 
 #include "sieve-file-storage.h"
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index 8558e1981..c274d9965 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -2,85 +2,30 @@
  */
 
 #include "lib.h"
-#include "array.h"
-#include "hostpid.h"
-#include "var-expand.h"
-#include "settings.h"
-#include "settings-parser.h"
-#include "master-service.h"
 
 #include "sieve.h"
 
-#include "managesieve-settings.h"
 #include "managesieve-capabilities.h"
 
 #include <stddef.h>
 #include <unistd.h>
 
-/*
- * Global plugin settings
- */
-
-
-static const char *
-plugin_settings_get(const struct plugin_settings *set, const char *identifier)
-{
-	const char *const *envs;
-	unsigned int i, count;
-
-	if ( !array_is_created(&set->plugin_envs) )
-		return NULL;
-
-	envs = array_get(&set->plugin_envs, &count);
-	for ( i = 0; i < count; i += 2 ) {
-		if ( strcmp(envs[i], identifier) == 0 )
-			return envs[i+1];
-	}
-	return NULL;
-}
-
-/*
- * Sieve environment
- */
-
-static const char *
-sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED, void *context,
-		  const char *identifier)
-{
-	const struct plugin_settings *set = context;
-
-	return plugin_settings_get(set, identifier);
-}
-
-static const struct sieve_callbacks sieve_callbacks = {
-	NULL,
-	sieve_get_setting,
-};
-
 /*
  * Capability dumping
  */
 
 void managesieve_capabilities_dump(void)
 {
-	const struct plugin_settings *global_plugin_settings;
 	struct sieve_environment svenv;
 	struct sieve_instance *svinst;
 	const char *sieve_cap, *notify_cap;
 
-	/* Read plugin settings */
-
-	global_plugin_settings = settings_get_or_fatal(
-		master_service_get_event(master_service),
-		&managesieve_plugin_setting_parser_info);
-
 	/* Initialize Sieve engine */
 
 	i_zero(&svenv);
 	svenv.home_dir = "/tmp";
 
-	if (sieve_init(&svenv, &sieve_callbacks, (void *)global_plugin_settings,
-		       FALSE, &svinst) < 0)
+	if (sieve_init(&svenv, NULL, NULL, FALSE, &svinst) < 0)
 		i_fatal("Failed to initialize Sieve");
 
 	/* Dump capabilities */
@@ -93,6 +38,5 @@ void managesieve_capabilities_dump(void)
 	else
 		printf("SIEVE: %s, NOTIFY: %s\n", sieve_cap, notify_cap);
 
-	settings_free(global_plugin_settings);
 	sieve_deinit(&svinst);
 }
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index 09e204edd..7f30acc1a 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -34,23 +34,6 @@ struct managesieve_module_register managesieve_module_register = { 0 };
 struct client *managesieve_clients = NULL;
 unsigned int managesieve_client_count = 0;
 
-static const char *
-managesieve_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED,
-			      void *context, const char *identifier)
-{
-	struct mail_user *mail_user = (struct mail_user *) context;
-
-	if (mail_user == NULL)
-		return NULL;
-
-	return mail_user_plugin_getenv(mail_user, identifier);
-}
-
-static const struct sieve_callbacks managesieve_sieve_callbacks = {
-	NULL,
-	managesieve_sieve_get_setting
-};
-
 static void client_idle_timeout(struct client *client)
 {
 	if (client->cmd.func != NULL) {
@@ -128,8 +111,8 @@ int client_create(int fd_in, int fd_out, const char *session_id,
 	svenv.event_parent = event;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	if (sieve_init(&svenv, &managesieve_sieve_callbacks, user,
-		       user->set->mail_debug, &svinst) < 0) {
+	if (sieve_init(&svenv, NULL, user, user->set->mail_debug,
+		       &svinst) < 0) {
 		*error_r = "Failed to initialize Sieve interpreter";
 		return -1;
 	}
diff --git a/src/managesieve/managesieve-settings.c b/src/managesieve/managesieve-settings.c
index 818c56614..ff8e0d4a4 100644
--- a/src/managesieve/managesieve-settings.c
+++ b/src/managesieve/managesieve-settings.c
@@ -94,25 +94,8 @@ const struct setting_parser_info managesieve_setting_parser_info = {
 	.check_func = managesieve_settings_verify,
 };
 
-static const struct setting_define plugin_setting_defines[] = {
-	{ .type = SET_STRLIST, .key = "plugin",
-	  .offset = offsetof(struct plugin_settings, plugin_envs) },
-
-	SETTING_DEFINE_LIST_END
-};
-
-const struct setting_parser_info managesieve_plugin_setting_parser_info = {
-	.name = "managesieve_plugin",
-
-	.defines = plugin_setting_defines,
-
-	.struct_size = sizeof(struct plugin_settings),
-	.pool_offset1 = 1 + offsetof(struct plugin_settings, pool),
-};
-
 const struct setting_parser_info *managesieve_settings_set_infos[] = {
 	&managesieve_setting_parser_info,
-	&managesieve_plugin_setting_parser_info,
 	NULL
 };
 
diff --git a/src/managesieve/managesieve-settings.h b/src/managesieve/managesieve-settings.h
index 976e18e3e..ad474769a 100644
--- a/src/managesieve/managesieve-settings.h
+++ b/src/managesieve/managesieve-settings.h
@@ -24,12 +24,6 @@ struct managesieve_settings {
 	enum managesieve_client_workarounds parsed_workarounds;
 };
 
-struct plugin_settings {
-	pool_t pool;
-	ARRAY(const char *) plugin_envs;
-};
-
 extern const struct setting_parser_info managesieve_setting_parser_info;
-extern const struct setting_parser_info managesieve_plugin_setting_parser_info;
 
 #endif
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
index be3915c7f..2bead92dc 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
@@ -61,21 +61,6 @@ void doveadm_sieve_cmd_failed_storage(struct doveadm_sieve_cmd_context *ctx,
 	doveadm_sieve_cmd_failed_error(ctx, error_code);
 }
 
-static const char *
-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;
-
-	return mail_user_plugin_getenv(ctx->ctx.cur_mail_user, identifier);
-}
-
-static const struct sieve_callbacks sieve_callbacks = {
-	NULL,
-	doveadm_sieve_cmd_get_setting,
-};
-
 void doveadm_sieve_cmd_scriptname_check(const char *arg)
 {
 	if (!uni_utf8_str_is_valid(arg))
@@ -113,8 +98,8 @@ doveadm_sieve_cmd_run(struct doveadm_mail_cmd_context *_ctx,
 	svenv.base_dir = user->set->base_dir;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	if (sieve_init(&svenv, &sieve_callbacks, ctx,
-		       user->set->mail_debug, &ctx->svinst) < 0)
+	if (sieve_init(&svenv, NULL, ctx, user->set->mail_debug,
+		       &ctx->svinst) < 0)
 		return -1;
 
 	if (sieve_storage_create_personal(ctx->svinst, user,
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
index baec83ebf..9e2f096e6 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
@@ -44,20 +44,6 @@ static MODULE_CONTEXT_DEFINE_INIT(sieve_storage_module,
 static MODULE_CONTEXT_DEFINE_INIT(sieve_user_module,
 				  &mail_user_module_register);
 
-static const char *
-mail_sieve_get_setting(struct sieve_instance *svinst ATTR_UNUSED, void *context,
-		       const char *identifier)
-{
-	struct mail_user *mail_user = context;
-
-	return mail_user_plugin_getenv(mail_user, identifier);
-}
-
-static const struct sieve_callbacks mail_sieve_callbacks = {
-	NULL,
-	mail_sieve_get_setting
-};
-
 static void mail_sieve_user_deinit(struct mail_user *user)
 {
 	struct sieve_mail_user *suser = SIEVE_USER_CONTEXT(user);
@@ -95,8 +81,8 @@ mail_sieve_user_init(struct mail_user *user, struct sieve_storage **svstorage_r)
 	svenv.base_dir = user->set->base_dir;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	if (sieve_init(&svenv, &mail_sieve_callbacks, user,
-		       user->set->mail_debug, &suser->svinst) < 0)
+	if (sieve_init(&svenv, NULL, user, user->set->mail_debug,
+		       &suser->svinst) < 0)
 		return -1;
 
 	if (sieve_storage_create_personal(suser->svinst, user,
diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index 0057dcd79..3525b4939 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -57,21 +57,6 @@ static MODULE_CONTEXT_DEFINE_INIT(imap_filter_sieve_user_module,
  *
  */
 
-static const char *
-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;
-
-	return mail_user_plugin_getenv(user, identifier);
-}
-
-static const struct sieve_callbacks imap_filter_sieve_callbacks = {
-	NULL,
-	imap_filter_sieve_get_setting
-};
-
 static struct sieve_instance *
 imap_filter_sieve_get_svinst(struct imap_filter_sieve_context *sctx)
 {
@@ -96,8 +81,7 @@ imap_filter_sieve_get_svinst(struct imap_filter_sieve_context *sctx)
 	svenv.location = SIEVE_ENV_LOCATION_MS;
 	svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST;
 
-	if (sieve_init(&svenv, &imap_filter_sieve_callbacks, ifsuser, debug,
-		       &ifsuser->svinst) < 0)
+	if (sieve_init(&svenv, NULL, ifsuser, debug, &ifsuser->svinst) < 0)
 		return NULL;
 
 	ifsuser->master_ehandler =
diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c
index bb1a7e0a8..8bfa139f4 100644
--- a/src/plugins/imapsieve/imap-sieve.c
+++ b/src/plugins/imapsieve/imap-sieve.c
@@ -47,21 +47,6 @@ struct imap_sieve {
 	struct sieve_error_handler *master_ehandler;
 };
 
-static const char *
-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;
-
-	return mail_user_plugin_getenv(user, identifier);
-}
-
-static const struct sieve_callbacks mail_sieve_callbacks = {
-	NULL,
-	mail_sieve_get_setting
-};
-
 struct imap_sieve *imap_sieve_init(struct client *client)
 {
 	struct sieve_environment svenv;
@@ -89,8 +74,7 @@ struct imap_sieve *imap_sieve_init(struct client *client)
 
 	isieve->home_dir = p_strdup(pool, svenv.home_dir);
 
-	if (sieve_init(&svenv, &mail_sieve_callbacks, isieve,
-		       debug, &isieve->svinst) < 0)
+	if (sieve_init(&svenv, NULL, isieve, debug, &isieve->svinst) < 0)
 		return isieve;
 
 	if (sieve_extension_replace(isieve->svinst, &imapsieve_extension,
diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index fd5e0a47c..def4fdec7 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -40,36 +40,6 @@
 
 static deliver_mail_func_t *next_deliver_mail;
 
-/*
- * Settings handling
- */
-
-static const char *
-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;
-	const char *value = NULL;
-
-	if (mdctx == NULL)
-		return NULL;
-
-	if (mdctx->rcpt_user == NULL ||
-	    (value = mail_user_plugin_getenv(
-		mdctx->rcpt_user, identifier)) == NULL) {
-		if (strcmp(identifier, "recipient_delimiter") == 0)
-			value = mdctx->set->recipient_delimiter;
-	}
-
-	return value;
-}
-
-static const struct sieve_callbacks lda_sieve_callbacks = {
-	NULL,
-	lda_sieve_get_setting
-};
-
 /*
  * Mail transmission
  */
@@ -1029,8 +999,7 @@ lda_sieve_deliver_mail(struct mail_deliver_context *mdctx,
 	svenv.location = SIEVE_ENV_LOCATION_MDA;
 	svenv.delivery_phase = SIEVE_DELIVERY_PHASE_DURING;
 
-	if (sieve_init(&svenv, &lda_sieve_callbacks, mdctx, debug,
-		       &srctx.svinst) < 0)
+	if (sieve_init(&svenv, NULL, mdctx, debug, &srctx.svinst) < 0)
 		return -1;
 
 	/* Initialize master error handler */
diff --git a/src/plugins/sieve-extprograms/sieve-extprograms-common.c b/src/plugins/sieve-extprograms/sieve-extprograms-common.c
index a4f7b33c7..57f6a0445 100644
--- a/src/plugins/sieve-extprograms/sieve-extprograms-common.c
+++ b/src/plugins/sieve-extprograms/sieve-extprograms-common.c
@@ -21,7 +21,6 @@
 #include "program-client.h"
 
 #include "sieve-common.h"
-#include "sieve-settings.old.h"
 #include "sieve-error.h"
 #include "sieve-extensions.h"
 #include "sieve-ast.h"
diff --git a/src/testsuite/cmd-test-config.c b/src/testsuite/cmd-test-config.c
index 8392f34d5..8a720a3a6 100644
--- a/src/testsuite/cmd-test-config.c
+++ b/src/testsuite/cmd-test-config.c
@@ -2,7 +2,6 @@
  */
 
 #include "sieve-common.h"
-#include "sieve-settings.old.h"
 #include "sieve-extensions.h"
 #include "sieve-commands.h"
 #include "sieve-validator.h"
diff --git a/src/testsuite/testsuite-settings.c b/src/testsuite/testsuite-settings.c
index 025b4dbdb..411c899f3 100644
--- a/src/testsuite/testsuite-settings.c
+++ b/src/testsuite/testsuite-settings.c
@@ -3,56 +3,12 @@
 
 #include "lib.h"
 #include "settings.h"
-#include "mail-user.h"
 
 #include "sieve-common.h"
-#include "sieve-settings.h"
-#include "sieve-tool.h"
 
 #include "testsuite-common.h"
-#include "testsuite-mailstore.h"
 #include "testsuite-settings.h"
 
-static const char *
-testsuite_setting_get(struct sieve_instance *svinst, void *context,
-		      const char *identifier);
-
-void testsuite_settings_init(void)
-{
-	sieve_tool_set_setting_callback(sieve_tool,
-					testsuite_setting_get, NULL);
-}
-
-static const char *
-testsuite_setting_get(struct sieve_instance *svinst, void *context ATTR_UNUSED,
-		      const char *identifier)
-{
-	const struct sieve_settings *svset = svinst->set;
-	struct mail_user *user;
-
-	if (strcmp(identifier, "sieve_max_script_size") == 0)
-		return t_strdup_printf("%zu", svset->max_script_size);
-	else if (strcmp(identifier, "sieve_max_actions") == 0)
-		return t_strdup_printf("%u", svset->max_actions);
-	else if (strcmp(identifier, "sieve_max_redirects") == 0)
-		return t_strdup_printf("%u", svset->max_redirects);
-	else if (strcmp(identifier, "sieve_max_cpu_time") == 0)
-		return t_strdup_printf("%u", svset->max_cpu_time);
-	else if (strcmp(identifier, "sieve_resource_usage_timeout") == 0)
-		return t_strdup_printf("%u", svset->resource_usage_timeout);
-	else if (strcmp(identifier, "sieve_redirect_envelope_from") == 0)
-		return svset->redirect_envelope_from;
-	else if (strcmp(identifier, "sieve_redirect_duplicate_period") == 0)
-		return t_strdup_printf("%u", svset->redirect_duplicate_period);
-	else if (strcmp(identifier, "sieve_user_email") == 0)
-		return svset->user_email;
-
-	user = testsuite_mailstore_get_user();
-	if (user == NULL)
-		return NULL;
-	return mail_user_plugin_getenv(user, identifier);
-}
-
 void testsuite_setting_set(const char *identifier, const char *value)
 {
 	struct sieve_instance *svinst = testsuite_sieve_instance;
diff --git a/src/testsuite/testsuite-settings.h b/src/testsuite/testsuite-settings.h
index 1a205ce6b..34adfd451 100644
--- a/src/testsuite/testsuite-settings.h
+++ b/src/testsuite/testsuite-settings.h
@@ -3,8 +3,6 @@
 
 #include "sieve-common.h"
 
-void testsuite_settings_init(void);
-
 void testsuite_setting_set(const char *identifier, const char *value);
 void testsuite_setting_unset(const char *identifier);
 
diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index 5e3ad78ec..75db234bc 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -145,9 +145,6 @@ int main(int argc, char **argv)
 		i_fatal("Failed to get working directory: %s", error);
 	sieve_tool_set_homedir(sieve_tool, cwd);
 
-	/* Initialize settings environment */
-	testsuite_settings_init();
-
 	/* Manually setup the absolute sieve storage path for the executed
 	   test script. */
 	if (t_abspath(scriptfile, &abspath, &error) < 0)
-- 
GitLab