diff --git a/src/lib-sieve/plugins/include/cmd-include.c b/src/lib-sieve/plugins/include/cmd-include.c index 395ac98fb213ed2d325928192f9bbefbfeb62dd1..2eead0b2778913065adee73ccce9747e15b93c28 100644 --- a/src/lib-sieve/plugins/include/cmd-include.c +++ b/src/lib-sieve/plugins/include/cmd-include.c @@ -6,7 +6,6 @@ #include "sieve-common.h" #include "sieve-script.h" -#include "sieve-storage.h" #include "sieve-ast.h" #include "sieve-code.h" #include "sieve-extensions.h" @@ -224,7 +223,6 @@ cmd_include_validate(struct sieve_validator *valdtr, struct sieve_ast_argument *arg = cmd->first_positional; struct cmd_include_context_data *ctx_data = (struct cmd_include_context_data *)cmd->data; - struct sieve_storage *storage; struct sieve_script *script; const char *script_name; enum sieve_error error_code = SIEVE_ERROR_NONE; @@ -259,21 +257,19 @@ cmd_include_validate(struct sieve_validator *valdtr, return FALSE; } - storage = ext_include_get_script_storage(this_ext, ctx_data->location, - script_name, &error_code); - if (storage == NULL) { + if (ext_include_get_script(this_ext, ctx_data->location, + script_name, &script, &error_code) < 0) { // FIXME: handle ':optional' in this case if (error_code == SIEVE_ERROR_NOT_FOUND) { sieve_argument_validate_error( valdtr, arg, "include: " - "%s location for included script '%s' is unavailable " - "(contact system administrator for more information)", + "included %s script '%s' not found ", ext_include_script_location_name(ctx_data->location), str_sanitize(script_name, 80)); } else { sieve_argument_validate_error( valdtr, arg, "include: " - "failed to access %s location for included script '%s' " + "failed to access included %s script '%s' " "(contact system administrator for more information)", ext_include_script_location_name(ctx_data->location), str_sanitize(script_name, 80)); @@ -281,11 +277,7 @@ cmd_include_validate(struct sieve_validator *valdtr, return FALSE; } - /* Create script object */ - if (sieve_storage_get_script(storage, script_name, - &script, &error_code) < 0) - return FALSE; - + /* Open script */ ret = sieve_script_open(script, &error_code); if (ret < 0) { if (error_code != SIEVE_ERROR_NOT_FOUND) { diff --git a/src/lib-sieve/plugins/include/ext-include-binary.c b/src/lib-sieve/plugins/include/ext-include-binary.c index 8f9547def5ecdd0b57e384c0c123614cc1286fc4..2fe64086e2fa6bbe4667720ee213cd8f1dde6b3d 100644 --- a/src/lib-sieve/plugins/include/ext-include-binary.c +++ b/src/lib-sieve/plugins/include/ext-include-binary.c @@ -7,7 +7,6 @@ #include "sieve-common.h" #include "sieve-error.h" #include "sieve-script.h" -#include "sieve-storage.h" #include "sieve-binary.h" #include "sieve-generator.h" #include "sieve-interpreter.h" @@ -330,7 +329,6 @@ ext_include_binary_open(const struct sieve_extension *ext, struct sieve_binary_block *inc_block = NULL; unsigned int location, flags; string_t *script_name; - struct sieve_storage *storage; struct sieve_script *script; enum sieve_error error_code; int ret; @@ -369,21 +367,14 @@ ext_include_binary_open(const struct sieve_extension *ext, } /* Can we find the script dependency ? */ - storage = ext_include_get_script_storage(ext, location, - str_c(script_name), - &error_code); - if (storage == NULL) { + if (ext_include_get_script(ext, location, str_c(script_name), + &script, &error_code) < 0) { /* No, recompile */ // FIXME: handle ':optional' in this case return FALSE; } /* Can we open the script dependency ? */ - if (sieve_storage_get_script(storage, str_c(script_name), - &script, &error_code) < 0) { - /* No, recompile */ - return FALSE; - } if (sieve_script_open(script, &error_code) < 0) { if (error_code != SIEVE_ERROR_NOT_FOUND) { /* No, recompile */ diff --git a/src/lib-sieve/plugins/include/ext-include-common.c b/src/lib-sieve/plugins/include/ext-include-common.c index 911a1a72c245be11886bff47e827e2a359120347..bd191bc6e3160f32f56e7bc468f68e389ae0322d 100644 --- a/src/lib-sieve/plugins/include/ext-include-common.c +++ b/src/lib-sieve/plugins/include/ext-include-common.c @@ -129,14 +129,15 @@ void ext_include_unload(const struct sieve_extension *ext) * Script access */ -struct sieve_storage * -ext_include_get_script_storage(const struct sieve_extension *ext, - enum ext_include_script_location location, - const char *script_name, - enum sieve_error *error_code_r) +int ext_include_get_script(const struct sieve_extension *ext, + enum ext_include_script_location location, + const char *script_name, + struct sieve_script **script_r, + enum sieve_error *error_code_r) { struct sieve_instance *svinst = ext->svinst; struct ext_include_context *extctx = ext->context; + struct sieve_storage *storage = NULL; switch (location) { case EXT_INCLUDE_LOCATION_PERSONAL: @@ -144,8 +145,9 @@ ext_include_get_script_storage(const struct sieve_extension *ext, sieve_storage_create_personal(svinst, NULL, 0, &extctx->personal_storage, error_code_r) < 0) - return NULL; - return extctx->personal_storage; + break; + storage = extctx->personal_storage; + break; case EXT_INCLUDE_LOCATION_GLOBAL: if (extctx->global_location == NULL) { e_info(svinst->event, "include: " @@ -154,22 +156,25 @@ ext_include_get_script_storage(const struct sieve_extension *ext, str_sanitize(script_name, 80)); if (error_code_r != NULL) *error_code_r = SIEVE_ERROR_NOT_FOUND; - return NULL; + break; } if (extctx->global_storage == NULL) { if (sieve_storage_create(svinst, extctx->global_location, 0, &extctx->global_storage, error_code_r) < 0) - return NULL; + break; } - return extctx->global_storage; - default: + storage = extctx->global_storage; break; + default: + i_unreached(); } - i_unreached(); - return NULL; + if (storage == NULL) + return -1; + return sieve_storage_get_script(storage, script_name, + script_r, error_code_r); } /* diff --git a/src/lib-sieve/plugins/include/ext-include-common.h b/src/lib-sieve/plugins/include/ext-include-common.h index 9b9ca7c63507d142a6f2e204eb831cdf85baec52..4357ce19296cb69649885fa3500de51e909da9cf 100644 --- a/src/lib-sieve/plugins/include/ext-include-common.h +++ b/src/lib-sieve/plugins/include/ext-include-common.h @@ -82,11 +82,12 @@ extern const struct sieve_operation_def global_operation; * Script access */ -struct sieve_storage * -ext_include_get_script_storage(const struct sieve_extension *ext, - enum ext_include_script_location location, - const char *script_name, - enum sieve_error *error_code_r); +int ext_include_get_script(const struct sieve_extension *ext, + enum ext_include_script_location location, + const char *script_name, + struct sieve_script **script_r, + enum sieve_error *error_code_r); + /* * Context */