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, ¬ify_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, ©_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