From 30b74cab0cc77c0eba8ad2f738a59568c3c6651e Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Wed, 16 Oct 2024 04:52:56 +0200
Subject: [PATCH] lib-sieve: sieve-extensions - Use int for load() func status
 result

---
 .../plugins/duplicate/ext-duplicate-common.c  |  4 +--
 .../plugins/duplicate/ext-duplicate-common.h  |  2 +-
 .../editheader/ext-editheader-common.c        |  4 +--
 .../editheader/ext-editheader-common.h        |  2 +-
 src/lib-sieve/plugins/enotify/ext-enotify.c   |  8 +++---
 .../plugins/imap4flags/ext-imap4flags.c       |  8 +++---
 .../plugins/include/ext-include-common.c      |  6 ++---
 .../plugins/include/ext-include-common.h      |  2 +-
 src/lib-sieve/plugins/mime/ext-extracttext.c  | 10 +++----
 .../spamvirustest/ext-spamvirustest-common.c  | 27 +++++++++----------
 .../spamvirustest/ext-spamvirustest-common.h  |  2 +-
 .../plugins/subaddress/ext-subaddress.c       |  6 ++---
 .../plugins/vacation/ext-vacation-common.c    |  4 +--
 .../plugins/vacation/ext-vacation-common.h    |  2 +-
 .../plugins/vacation/ext-vacation-seconds.c   |  8 +++---
 .../plugins/variables/ext-variables-common.c  |  4 +--
 .../plugins/variables/ext-variables-common.h  |  2 +-
 .../environment/ext-vnd-environment.c         | 10 +++----
 .../report/ext-vnd-report-common.c            |  4 +--
 .../report/ext-vnd-report-common.h            |  2 +-
 src/lib-sieve/sieve-extensions.c              | 11 ++++++--
 src/lib-sieve/sieve-extensions.h              |  2 +-
 src/plugins/imapsieve/ext-imapsieve.c         | 18 ++++++-------
 .../sieve-extprograms-common.c                | 10 +++----
 .../sieve-extprograms-common.h                |  4 +--
 25 files changed, 84 insertions(+), 78 deletions(-)

diff --git a/src/lib-sieve/plugins/duplicate/ext-duplicate-common.c b/src/lib-sieve/plugins/duplicate/ext-duplicate-common.c
index 25f16495d..48e244b71 100644
--- a/src/lib-sieve/plugins/duplicate/ext-duplicate-common.c
+++ b/src/lib-sieve/plugins/duplicate/ext-duplicate-common.c
@@ -28,7 +28,7 @@
 #define EXT_DUPLICATE_DEFAULT_PERIOD (12*60*60)
 #define EXT_DUPLICATE_DEFAULT_MAX_PERIOD (2*24*60*60)
 
-bool ext_duplicate_load(const struct sieve_extension *ext, void **context)
+int ext_duplicate_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	struct ext_duplicate_context *extctx;
@@ -52,7 +52,7 @@ bool ext_duplicate_load(const struct sieve_extension *ext, void **context)
 	extctx->max_period = max_period;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 void ext_duplicate_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/duplicate/ext-duplicate-common.h b/src/lib-sieve/plugins/duplicate/ext-duplicate-common.h
index 193d47b49..a5181f2c8 100644
--- a/src/lib-sieve/plugins/duplicate/ext-duplicate-common.h
+++ b/src/lib-sieve/plugins/duplicate/ext-duplicate-common.h
@@ -12,7 +12,7 @@ struct ext_duplicate_context {
 	unsigned int max_period;
 };
 
-bool ext_duplicate_load(const struct sieve_extension *ext, void **context);
+int ext_duplicate_load(const struct sieve_extension *ext, void **context);
 void ext_duplicate_unload(const struct sieve_extension *ext);
 
 extern const struct sieve_extension_def duplicate_extension;
diff --git a/src/lib-sieve/plugins/editheader/ext-editheader-common.c b/src/lib-sieve/plugins/editheader/ext-editheader-common.c
index d86712a6f..a28d25d19 100644
--- a/src/lib-sieve/plugins/editheader/ext-editheader-common.c
+++ b/src/lib-sieve/plugins/editheader/ext-editheader-common.c
@@ -93,7 +93,7 @@ ext_editheader_config_headers(struct sieve_instance *svinst,
 	}
 }
 
-bool ext_editheader_load(const struct sieve_extension *ext, void **context)
+int ext_editheader_load(const struct sieve_extension *ext, void **context)
 {
 	struct ext_editheader_context *extctx;
 	struct sieve_instance *svinst = ext->svinst;
@@ -140,7 +140,7 @@ bool ext_editheader_load(const struct sieve_extension *ext, void **context)
 	} T_END;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 void ext_editheader_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/editheader/ext-editheader-common.h b/src/lib-sieve/plugins/editheader/ext-editheader-common.h
index 8a6cc362f..161d03998 100644
--- a/src/lib-sieve/plugins/editheader/ext-editheader-common.h
+++ b/src/lib-sieve/plugins/editheader/ext-editheader-common.h
@@ -26,7 +26,7 @@ extern const struct sieve_operation_def deleteheader_operation;
 
 extern const struct sieve_extension_def editheader_extension;
 
-bool ext_editheader_load(const struct sieve_extension *ext, void **context);
+int ext_editheader_load(const struct sieve_extension *ext, void **context);
 void ext_editheader_unload(const struct sieve_extension *ext);
 
 /*
diff --git a/src/lib-sieve/plugins/enotify/ext-enotify.c b/src/lib-sieve/plugins/enotify/ext-enotify.c
index 47f95d2fb..c2fa3c5d5 100644
--- a/src/lib-sieve/plugins/enotify/ext-enotify.c
+++ b/src/lib-sieve/plugins/enotify/ext-enotify.c
@@ -40,7 +40,7 @@ const struct sieve_operation_def *ext_enotify_operations[] = {
  * Extension
  */
 
-static bool ext_enotify_load(const struct sieve_extension *ext, void **context);
+static int ext_enotify_load(const struct sieve_extension *ext, void **context);
 static void ext_enotify_unload(const struct sieve_extension *ext);
 static bool
 ext_enotify_validator_load(const struct sieve_extension *ext,
@@ -55,7 +55,7 @@ const struct sieve_extension_def enotify_extension = {
 	SIEVE_EXT_DEFINE_OPERAND(encodeurl_operand),
 };
 
-static bool ext_enotify_load(const struct sieve_extension *ext, void **context)
+static int ext_enotify_load(const struct sieve_extension *ext, void **context)
 {
 	const struct sieve_extension *var_ext;
 	struct ext_enotify_context *extctx;
@@ -66,7 +66,7 @@ static bool ext_enotify_load(const struct sieve_extension *ext, void **context)
 	}
 
 	if (sieve_ext_variables_get_extension(ext->svinst, &var_ext) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_enotify_context, 1);
 	extctx->var_ext = var_ext;
@@ -75,7 +75,7 @@ static bool ext_enotify_load(const struct sieve_extension *ext, void **context)
 	ext_enotify_methods_init(ext->svinst, extctx);
 
 	sieve_extension_capabilities_register(ext, &notify_capabilities);
-	return TRUE;
+	return 0;
 }
 
 static void ext_enotify_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/imap4flags/ext-imap4flags.c b/src/lib-sieve/plugins/imap4flags/ext-imap4flags.c
index 4582943a6..c4cea7fcc 100644
--- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags.c
+++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags.c
@@ -42,7 +42,7 @@ const struct sieve_operation_def *imap4flags_operations[] = {
  * Extension
  */
 
-static bool
+static int
 ext_imap4flags_load(const struct sieve_extension *ext, void **context);
 static void ext_imap4flags_unload(const struct sieve_extension *ext);
 
@@ -63,7 +63,7 @@ const struct sieve_extension_def imap4flags_extension = {
 	SIEVE_EXT_DEFINE_OPERAND(flags_side_effect_operand)
 };
 
-static bool
+static int
 ext_imap4flags_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
@@ -76,13 +76,13 @@ ext_imap4flags_load(const struct sieve_extension *ext, void **context)
 	}
 
 	if (sieve_ext_variables_get_extension(svinst, &var_ext) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_imap4flags_context, 1);
 	extctx->var_ext = var_ext;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 static void ext_imap4flags_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/include/ext-include-common.c b/src/lib-sieve/plugins/include/ext-include-common.c
index db20e2681..eb271d09a 100644
--- a/src/lib-sieve/plugins/include/ext-include-common.c
+++ b/src/lib-sieve/plugins/include/ext-include-common.c
@@ -73,7 +73,7 @@ struct ext_include_interpreter_context {
 
 /* Extension hooks */
 
-bool ext_include_load(const struct sieve_extension *ext, void **context)
+int ext_include_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	const struct sieve_extension *var_ext;
@@ -88,7 +88,7 @@ bool ext_include_load(const struct sieve_extension *ext, void **context)
 
 	/* Extension dependencies */
 	if (sieve_ext_variables_get_extension(ext->svinst, &var_ext) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_include_context, 1);
 	extctx->var_ext = var_ext;
@@ -116,7 +116,7 @@ bool ext_include_load(const struct sieve_extension *ext, void **context)
 		extctx->max_includes = (unsigned int)uint_setting;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 void ext_include_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/include/ext-include-common.h b/src/lib-sieve/plugins/include/ext-include-common.h
index bc806b318..cc98b7763 100644
--- a/src/lib-sieve/plugins/include/ext-include-common.h
+++ b/src/lib-sieve/plugins/include/ext-include-common.h
@@ -53,7 +53,7 @@ ext_include_script_location_name(enum ext_include_script_location location)
 extern const struct sieve_extension_def include_extension;
 extern const struct sieve_binary_extension include_binary_ext;
 
-bool ext_include_load(const struct sieve_extension *ext, void **context);
+int ext_include_load(const struct sieve_extension *ext, void **context);
 void ext_include_unload(const struct sieve_extension *ext);
 
 /*
diff --git a/src/lib-sieve/plugins/mime/ext-extracttext.c b/src/lib-sieve/plugins/mime/ext-extracttext.c
index 1c059c9ee..c2c3e218f 100644
--- a/src/lib-sieve/plugins/mime/ext-extracttext.c
+++ b/src/lib-sieve/plugins/mime/ext-extracttext.c
@@ -30,7 +30,7 @@
  * Extension
  */
 
-static bool
+static int
 ext_extracttext_load(const struct sieve_extension *ext, void **context);
 static void
 ext_extracttext_unload(const struct sieve_extension *ext);
@@ -46,7 +46,7 @@ const struct sieve_extension_def extracttext_extension = {
 	SIEVE_EXT_DEFINE_OPERATION(extracttext_operation),
 };
 
-static bool
+static int
 ext_extracttext_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
@@ -60,17 +60,17 @@ ext_extracttext_load(const struct sieve_extension *ext, void **context)
 	}
 
 	if (sieve_ext_variables_get_extension(ext->svinst, &var_ext) < 0)
-		return FALSE;
+		return -1;
 	if (sieve_extension_register(svinst, &foreverypart_extension, FALSE,
 				     &fep_ext) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_extracttext_context, 1);
 	extctx->var_ext = var_ext;
 	extctx->fep_ext = fep_ext;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 static void ext_extracttext_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.c b/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.c
index 2d0106175..48376fdfe 100644
--- a/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.c
+++ b/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.c
@@ -249,7 +249,7 @@ ext_spamvirustest_parse_decimal_value(const char *str_value,
  * Extension initialization
  */
 
-bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
+int ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	struct ext_spamvirustest_context *extctx = *context;
@@ -258,8 +258,7 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 	enum ext_spamvirustest_status_type type;
 	const char *error;
 	pool_t pool;
-	bool result = TRUE;
-	int reload = 0;
+	int reload = 0, ret = 0;
 
 	if (*context != NULL) {
 		reload = extctx->reload + 1;
@@ -293,7 +292,7 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 	/* Base configuration */
 
 	if (status_header == NULL)
-		return TRUE;
+		return 0;
 
 	if (status_type == NULL || strcmp(status_type, "score") == 0) {
 		type = EXT_SPAMVIRUSTEST_STATUS_TYPE_SCORE;
@@ -304,7 +303,7 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 	} else {
 		e_error(svinst->event, "%s: "
 			"invalid status type '%s'", ext_name, status_type);
-		return FALSE;
+		return -1;
 	}
 
 	/* Verify settings */
@@ -316,14 +315,14 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 				"sieve_%s_max_header and sieve_%s_max_value "
 				"cannot both be configured",
 				ext_name, ext_name, ext_name);
-			return TRUE;
+			return 0;
 		}
 
 		if (max_header == NULL && max_value == NULL) {
 			e_error(svinst->event, "%s: "
 				"none of sieve_%s_max_header or sieve_%s_max_value "
 				"is configured", ext_name, ext_name, ext_name);
-			return TRUE;
+			return 0;
 		}
 	} else {
 		if (max_header != NULL) {
@@ -353,10 +352,10 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 		e_error(svinst->event, "%s: "
 			"invalid status header specification '%s': %s",
 			ext_name, status_header, error);
-		result = FALSE;
+		ret = -1;
 	}
 
-	if (result) {
+	if (ret == 0) {
 		if (type != EXT_SPAMVIRUSTEST_STATUS_TYPE_TEXT) {
 			/* Parse max header */
 
@@ -368,19 +367,19 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 					"invalid max header specification "
 					"'%s': %s", ext_name, max_header,
 					error);
-				result = FALSE;
+				ret = -1;
 			}
 
 			/* Parse max value */
 
-			if (result && max_value != NULL) {
+			if (ret == 0 && max_value != NULL) {
 				if (!ext_spamvirustest_parse_decimal_value(
 					max_value, &extctx->max_value, &error)) {
 					e_error(svinst->event, "%s: "
 						"invalid max value specification "
 						"'%s': %s", ext_name, max_value,
 						error);
-					result = FALSE;
+					ret = -1;
 				}
 			}
 
@@ -407,7 +406,7 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 	}
 
 	*context = extctx;
-	if (!result) {
+	if (ret < 0) {
 		e_warning(svinst->event, "%s: "
 			  "extension not configured, "
 			  "tests will always match against \"0\"",
@@ -416,7 +415,7 @@ bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context)
 		*context = NULL;
 	}
 
-	return result;
+	return ret;
 }
 
 void ext_spamvirustest_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.h b/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.h
index 61e54a729..87d484460 100644
--- a/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.h
+++ b/src/lib-sieve/plugins/spamvirustest/ext-spamvirustest-common.h
@@ -11,7 +11,7 @@ extern const struct sieve_extension_def spamtest_extension;
 extern const struct sieve_extension_def spamtestplus_extension;
 extern const struct sieve_extension_def virustest_extension;
 
-bool ext_spamvirustest_load(const struct sieve_extension *ext, void **context);
+int ext_spamvirustest_load(const struct sieve_extension *ext, void **context);
 void ext_spamvirustest_unload(const struct sieve_extension *ext);
 
 /*
diff --git a/src/lib-sieve/plugins/subaddress/ext-subaddress.c b/src/lib-sieve/plugins/subaddress/ext-subaddress.c
index 9b5cf04a3..34a54c1f3 100644
--- a/src/lib-sieve/plugins/subaddress/ext-subaddress.c
+++ b/src/lib-sieve/plugins/subaddress/ext-subaddress.c
@@ -48,7 +48,7 @@ static struct sieve_operand_def subaddress_operand;
  * Extension
  */
 
-static bool
+static int
 ext_subaddress_load(const struct sieve_extension *ext, void **context);
 static void ext_subaddress_unload(const struct sieve_extension *ext);
 static bool
@@ -63,7 +63,7 @@ const struct sieve_extension_def subaddress_extension = {
 	SIEVE_EXT_DEFINE_OPERAND(subaddress_operand),
 };
 
-static bool
+static int
 ext_subaddress_load(const struct sieve_extension *ext, void **context)
 {
 	struct ext_subaddress_context *extctx;
@@ -83,7 +83,7 @@ ext_subaddress_load(const struct sieve_extension *ext, void **context)
 	extctx->delimiter = i_strdup(delim);
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 static void ext_subaddress_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/vacation/ext-vacation-common.c b/src/lib-sieve/plugins/vacation/ext-vacation-common.c
index aa78f3c3d..cb648ec38 100644
--- a/src/lib-sieve/plugins/vacation/ext-vacation-common.c
+++ b/src/lib-sieve/plugins/vacation/ext-vacation-common.c
@@ -10,7 +10,7 @@
 
 #include "ext-vacation-common.h"
 
-bool ext_vacation_load(const struct sieve_extension *ext, void **context)
+int ext_vacation_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	struct ext_vacation_context *extctx;
@@ -83,7 +83,7 @@ bool ext_vacation_load(const struct sieve_extension *ext, void **context)
 	extctx->to_header_ignore_envelope = to_header_ignore_envelope;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 void ext_vacation_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/vacation/ext-vacation-common.h b/src/lib-sieve/plugins/vacation/ext-vacation-common.h
index 053551495..3f5d0d8f4 100644
--- a/src/lib-sieve/plugins/vacation/ext-vacation-common.h
+++ b/src/lib-sieve/plugins/vacation/ext-vacation-common.h
@@ -43,7 +43,7 @@ extern const struct sieve_operation_def vacation_operation;
 
 extern const struct sieve_extension_def vacation_extension;
 
-bool ext_vacation_load(const struct sieve_extension *ext, void **context);
+int ext_vacation_load(const struct sieve_extension *ext, void **context);
 void ext_vacation_unload(const struct sieve_extension *ext);
 
 /* Vacation-seconds */
diff --git a/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c b/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c
index 1d52fc44f..0a8fba525 100644
--- a/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c
+++ b/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c
@@ -28,7 +28,7 @@ struct ext_vacation_seconds_context {
 	const struct sieve_extension *ext_vacation;
 };
 
-static bool
+static int
 ext_vacation_seconds_load(const struct sieve_extension *ext, void **context);
 static void ext_vacation_seconds_unload(const struct sieve_extension *ext);
 
@@ -43,7 +43,7 @@ const struct sieve_extension_def vacation_seconds_extension = {
 	.validator_load = ext_vacation_seconds_validator_load,
 };
 
-static bool
+static int
 ext_vacation_seconds_load(const struct sieve_extension *ext, void **context)
 {
 	const struct sieve_extension *ext_vac;
@@ -57,13 +57,13 @@ ext_vacation_seconds_load(const struct sieve_extension *ext, void **context)
 	/* Make sure vacation extension is registered */
 	if (sieve_extension_require(ext->svinst, &vacation_extension,
 				    TRUE, &ext_vac) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_vacation_seconds_context, 1);
 	extctx->ext_vacation = ext_vac;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 static void ext_vacation_seconds_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/variables/ext-variables-common.c b/src/lib-sieve/plugins/variables/ext-variables-common.c
index 20a4d164b..5aa411e82 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-common.c
+++ b/src/lib-sieve/plugins/variables/ext-variables-common.c
@@ -52,7 +52,7 @@ size_t sieve_variables_get_max_variable_size(
  * Extension configuration
  */
 
-bool ext_variables_load(const struct sieve_extension *ext, void **context)
+int ext_variables_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	struct ext_variables_context *extctx;
@@ -98,7 +98,7 @@ bool ext_variables_load(const struct sieve_extension *ext, void **context)
 	}
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 void ext_variables_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/variables/ext-variables-common.h b/src/lib-sieve/plugins/variables/ext-variables-common.h
index b1407cd1c..f0c1fef42 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-common.h
+++ b/src/lib-sieve/plugins/variables/ext-variables-common.h
@@ -19,7 +19,7 @@ struct ext_variables_context {
 
 extern const struct sieve_extension_def variables_extension;
 
-bool ext_variables_load(const struct sieve_extension *ext, void **context);
+int ext_variables_load(const struct sieve_extension *ext, void **context);
 void ext_variables_unload(const struct sieve_extension *ext);
 
 const struct ext_variables_context *
diff --git a/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c b/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c
index 8be2944d1..e3a81e932 100644
--- a/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c
+++ b/src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c
@@ -35,7 +35,7 @@
  * Extension
  */
 
-static bool
+static int
 ext_vnd_environment_load(const struct sieve_extension *ext, void **context);
 static void
 ext_vnd_environment_unload(const struct sieve_extension *ext);
@@ -56,7 +56,7 @@ const struct sieve_extension_def vnd_environment_extension = {
 	SIEVE_EXT_DEFINE_OPERAND(environment_namespace_operand),
 };
 
-static bool
+static int
 ext_vnd_environment_load(const struct sieve_extension *ext, void **context)
 {
 	const struct sieve_extension *ext_env;
@@ -69,16 +69,16 @@ ext_vnd_environment_load(const struct sieve_extension *ext, void **context)
 	}
 
 	if (sieve_ext_environment_require_extension(ext->svinst, &ext_env) < 0)
-		return FALSE;
+		return -1;
 	if (sieve_ext_variables_get_extension(ext->svinst, &ext_var) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_vnd_environment_context, 1);
 	extctx->env_ext = ext_env;
 	extctx->var_ext = ext_var;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 static void ext_vnd_environment_unload(const struct sieve_extension *ext)
diff --git a/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.c b/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.c
index c9677fbbc..f2d7668e9 100644
--- a/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.c
+++ b/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.c
@@ -10,7 +10,7 @@
 
 #include "ext-vnd-report-common.h"
 
-bool ext_report_load(const struct sieve_extension *ext, void **context)
+int ext_report_load(const struct sieve_extension *ext, void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	struct ext_report_context *extctx;
@@ -22,7 +22,7 @@ bool ext_report_load(const struct sieve_extension *ext, void **context)
 		&extctx->report_from);
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 const char *ext_vnd_report_parse_feedback_type(const char *feedback_type)
diff --git a/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.h b/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.h
index aa7e26fb3..09ea4d940 100644
--- a/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.h
+++ b/src/lib-sieve/plugins/vnd.dovecot/report/ext-vnd-report-common.h
@@ -15,7 +15,7 @@ struct ext_report_context {
 
 extern const struct sieve_extension_def vnd_report_extension;
 
-bool ext_report_load(const struct sieve_extension *ext, void **context);
+int ext_report_load(const struct sieve_extension *ext, void **context);
 
 /*
  * Commands
diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c
index fbe45cf57..ac033ac48 100644
--- a/src/lib-sieve/sieve-extensions.c
+++ b/src/lib-sieve/sieve-extensions.c
@@ -298,9 +298,16 @@ sieve_extensions_get_preloaded(struct sieve_instance *svinst,
 
 static int _sieve_extension_load(struct sieve_extension *ext)
 {
+	int ret;
+
 	/* Call load handler */
-	if (ext->def != NULL && ext->def->load != NULL &&
-	    !ext->def->load(ext, &ext->context)) {
+	if (ext->def == NULL || ext->def->load == NULL)
+		return 0;
+
+	ret = ext->def->load(ext, &ext->context);
+	i_assert(ret <= 0);
+
+	if (ret < 0) {
 		e_error(ext->svinst->event,
 			"failed to load '%s' extension support.",
 			ext->def->name);
diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h
index 21cdb473b..fa46859a1 100644
--- a/src/lib-sieve/sieve-extensions.h
+++ b/src/lib-sieve/sieve-extensions.h
@@ -24,7 +24,7 @@ struct sieve_extension_def {
 	unsigned int version;
 
 	/* Registration */
-	bool (*load)(const struct sieve_extension *ext, void **context);
+	int (*load)(const struct sieve_extension *ext, void **context);
 	void (*unload)(const struct sieve_extension *ext);
 
 	/* Compilation */
diff --git a/src/plugins/imapsieve/ext-imapsieve.c b/src/plugins/imapsieve/ext-imapsieve.c
index 92a3fb7f9..a19f5ed4c 100644
--- a/src/plugins/imapsieve/ext-imapsieve.c
+++ b/src/plugins/imapsieve/ext-imapsieve.c
@@ -28,9 +28,9 @@
  * Extension
  */
 
-static bool
+static int
 ext_imapsieve_load(const struct sieve_extension *ext, void **context);
-static bool
+static int
 ext_vnd_imapsieve_load(const struct sieve_extension *ext, void **context);
 static void ext_imapsieve_unload(const struct sieve_extension *ext);
 static void ext_vnd_imapsieve_unload(const struct sieve_extension *ext);
@@ -71,7 +71,7 @@ const struct sieve_extension_def vnd_imapsieve_extension = {
  * Context
  */
 
-static bool
+static int
 ext_imapsieve_load(const struct sieve_extension *ext, void **context)
 {
 	const struct sieve_extension *ext_environment;
@@ -84,16 +84,16 @@ ext_imapsieve_load(const struct sieve_extension *ext, void **context)
 
 	if (sieve_ext_environment_require_extension(ext->svinst,
 						    &ext_environment) < 0)
-		return FALSE;
+		return -1;
 
 	extctx = i_new(struct ext_imapsieve_context, 1);
 	extctx->ext_environment = ext_environment;
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
-static bool
+static int
 ext_vnd_imapsieve_load(const struct sieve_extension *ext, void **context)
 {
 	struct ext_vnd_imapsieve_context *extctx;
@@ -107,15 +107,15 @@ ext_vnd_imapsieve_load(const struct sieve_extension *ext, void **context)
 #ifdef __IMAPSIEVE_DUMMY
 	if (sieve_extension_require(ext->svinst, &imapsieve_extension_dummy,
 				    TRUE, &extctx->ext_imapsieve) < 0)
-		return FALSE;
+		return -1;
 #else
 	if (sieve_extension_require(ext->svinst, &imapsieve_extension,
 				    TRUE, &extctx->ext_imapsieve) < 0)
-		return FALSE;
+		return -1;
 #endif
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 static void ext_imapsieve_unload(const struct sieve_extension *ext)
diff --git a/src/plugins/sieve-extprograms/sieve-extprograms-common.c b/src/plugins/sieve-extprograms/sieve-extprograms-common.c
index 49188ffb8..e64e25f4d 100644
--- a/src/plugins/sieve-extprograms/sieve-extprograms-common.c
+++ b/src/plugins/sieve-extprograms/sieve-extprograms-common.c
@@ -56,8 +56,8 @@
  * Context
  */
 
-bool sieve_extprograms_ext_load(const struct sieve_extension *ext,
-				void **context)
+int sieve_extprograms_ext_load(const struct sieve_extension *ext,
+			       void **context)
 {
 	struct sieve_instance *svinst = ext->svinst;
 	const struct sieve_extension *copy_ext = NULL;
@@ -85,12 +85,12 @@ bool sieve_extprograms_ext_load(const struct sieve_extension *ext,
 
 	if (sieve_extension_is(ext, sieve_ext_vnd_pipe)) {
 		if (sieve_ext_copy_get_extension(ext->svinst, &copy_ext) < 0)
-			return FALSE;
+			return -1;
 	}
 	if (sieve_extension_is(ext, sieve_ext_vnd_execute)) {
 		if (sieve_ext_variables_get_extension(ext->svinst,
 						      &var_ext) < 0)
-			return FALSE;
+			return -1;
 	}
 
 	extctx = i_new(struct sieve_extprograms_ext_context, 1);
@@ -120,7 +120,7 @@ bool sieve_extprograms_ext_load(const struct sieve_extension *ext,
 	}
 
 	*context = extctx;
-	return TRUE;
+	return 0;
 }
 
 void sieve_extprograms_ext_unload(const struct sieve_extension *ext)
diff --git a/src/plugins/sieve-extprograms/sieve-extprograms-common.h b/src/plugins/sieve-extprograms/sieve-extprograms-common.h
index 9bb213906..c7f9719f3 100644
--- a/src/plugins/sieve-extprograms/sieve-extprograms-common.h
+++ b/src/plugins/sieve-extprograms/sieve-extprograms-common.h
@@ -24,8 +24,8 @@ struct sieve_extprograms_ext_context {
 	unsigned int execute_timeout;
 };
 
-bool sieve_extprograms_ext_load(const struct sieve_extension *ext,
-				void **context);
+int sieve_extprograms_ext_load(const struct sieve_extension *ext,
+			       void **context);
 void sieve_extprograms_ext_unload(const struct sieve_extension *ext);
 
 /*
-- 
GitLab