From dd1d1cf42936c9215c7a7952bea4e2cc97664c66 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Tue, 9 Jul 2024 00:31:04 +0200 Subject: [PATCH] lib-sieve: sieve-storage - Use int for sieve_storage_open_script() status result --- src/lib-sieve/sieve-script.c | 5 ++-- src/lib-sieve/sieve-storage.c | 30 +++++++++++-------- src/lib-sieve/sieve-storage.h | 6 ++-- src/managesieve/cmd-deletescript.c | 4 +-- src/managesieve/cmd-getscript.c | 5 ++-- src/managesieve/cmd-renamescript.c | 3 +- src/managesieve/cmd-setactive.c | 3 +- .../doveadm-sieve-cmd-activate.c | 4 +-- .../doveadm-sieve/doveadm-sieve-cmd-delete.c | 7 ++--- .../doveadm-sieve/doveadm-sieve-cmd-get.c | 5 ++-- .../doveadm-sieve/doveadm-sieve-cmd-put.c | 8 ++--- .../doveadm-sieve/doveadm-sieve-cmd-rename.c | 4 +-- .../doveadm-sieve/doveadm-sieve-sync.c | 14 ++++----- .../imap-filter-sieve/imap-filter-sieve.c | 16 ++++++---- src/plugins/imapsieve/imap-sieve.c | 7 ++--- 15 files changed, 61 insertions(+), 60 deletions(-) diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c index a9fcbc468..8b355a963 100644 --- a/src/lib-sieve/sieve-script.c +++ b/src/lib-sieve/sieve-script.c @@ -588,9 +588,8 @@ sieve_script_copy_from_default(struct sieve_script *script, const char *newname) struct sieve_script *newscript; enum sieve_error error_code; - newscript = sieve_storage_open_script(storage->default_for, - newname, &error_code); - if (newscript == NULL) { + if (sieve_storage_open_script(storage->default_for, newname, + &newscript, &error_code) < 0) { /* Somehow not actually saved */ ret = (error_code == SIEVE_ERROR_NOT_FOUND ? 0 : -1); } else if (sieve_script_activate(newscript, (time_t)-1) < 0) { diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 705195d47..2b243fc57 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -755,17 +755,21 @@ int sieve_storage_get_script(struct sieve_storage *storage, const char *name, return 0; } -struct sieve_script * -sieve_storage_open_script(struct sieve_storage *storage, const char *name, - enum sieve_error *error_code_r) +int sieve_storage_open_script(struct sieve_storage *storage, const char *name, + struct sieve_script **script_r, + enum sieve_error *error_code_r) { struct sieve_instance *svinst = storage->svinst; struct sieve_script *script; + *script_r = NULL; + if (sieve_storage_get_script(storage, name, &script, error_code_r) < 0) - return NULL; - if (sieve_script_open(script, error_code_r) >= 0) - return script; + return -1; + if (sieve_script_open(script, error_code_r) >= 0) { + *script_r = script; + return 0; + } /* Error */ sieve_script_unref(&script); @@ -784,13 +788,15 @@ sieve_storage_open_script(struct sieve_storage *storage, const char *name, if (sieve_script_create_open(svinst, storage->default_location, NULL, &script, error_code_r) < 0) - return NULL; + return -1; script->storage->is_default = TRUE; script->storage->default_for = storage; sieve_storage_ref(storage); } - return script; + + *script_r = script; + return 0; } static int @@ -824,8 +830,7 @@ int sieve_storage_check_script(struct sieve_storage *storage, const char *name, if (error_code_r == NULL) error_code_r = &error_code; - script = sieve_storage_open_script(storage, name, error_code_r); - if (script == NULL) + if (sieve_storage_open_script(storage, name, &script, error_code_r) < 0) return (*error_code_r == SIEVE_ERROR_NOT_FOUND ? 0 : -1); sieve_script_unref(&script); @@ -1268,9 +1273,8 @@ int sieve_storage_save_commit(struct sieve_storage_save_context **_sctx) struct sieve_script *script; enum sieve_error error_code; - script = sieve_storage_open_script(storage, scriptname, - &error_code); - if (script == NULL) { + if (sieve_storage_open_script(storage, scriptname, + &script, &error_code) < 0) { /* Somehow not actually saved */ ret = (error_code == SIEVE_ERROR_NOT_FOUND ? 0 : -1); } else if (sieve_script_activate(script, (time_t)-1) < 0) { diff --git a/src/lib-sieve/sieve-storage.h b/src/lib-sieve/sieve-storage.h index d6ce4e6ea..ed28e5cbc 100644 --- a/src/lib-sieve/sieve-storage.h +++ b/src/lib-sieve/sieve-storage.h @@ -45,9 +45,9 @@ void sieve_storage_unref(struct sieve_storage **_storage); int sieve_storage_get_script(struct sieve_storage *storage, const char *name, struct sieve_script **script_r, enum sieve_error *error_code_r); -struct sieve_script * -sieve_storage_open_script(struct sieve_storage *storage, const char *name, - enum sieve_error *error_code_r); +int sieve_storage_open_script(struct sieve_storage *storage, const char *name, + struct sieve_script **script_r, + enum sieve_error *error_code_r); int sieve_storage_check_script(struct sieve_storage *storage, const char *name, enum sieve_error *error_code_r); diff --git a/src/managesieve/cmd-deletescript.c b/src/managesieve/cmd-deletescript.c index d7a8ef094..361c5a639 100644 --- a/src/managesieve/cmd-deletescript.c +++ b/src/managesieve/cmd-deletescript.c @@ -23,8 +23,8 @@ bool cmd_deletescript(struct client_command_context *cmd) event_add_str(cmd->event, "script_name", scriptname); - script = sieve_storage_open_script(storage, scriptname, NULL); - if (script == NULL || sieve_script_delete(script, FALSE) < 0) { + if (sieve_storage_open_script(storage, scriptname, &script, NULL) < 0 || + sieve_script_delete(script, FALSE) < 0) { client_command_storage_error( cmd, "Failed to delete script '%s'", scriptname); sieve_script_unref(&script); diff --git a/src/managesieve/cmd-getscript.c b/src/managesieve/cmd-getscript.c index 16c690735..106ce5bfa 100644 --- a/src/managesieve/cmd-getscript.c +++ b/src/managesieve/cmd-getscript.c @@ -118,9 +118,8 @@ bool cmd_getscript(struct client_command_context *cmd) ctx->storage = client->storage; ctx->failed = FALSE; - ctx->script = sieve_storage_open_script(client->storage, scriptname, - NULL); - if (ctx->script == NULL) { + if (sieve_storage_open_script(client->storage, scriptname, + &ctx->script, NULL) < 0) { ctx->failed = TRUE; return cmd_getscript_finish(ctx); } diff --git a/src/managesieve/cmd-renamescript.c b/src/managesieve/cmd-renamescript.c index 5018d12a3..5eadeeed4 100644 --- a/src/managesieve/cmd-renamescript.c +++ b/src/managesieve/cmd-renamescript.c @@ -25,8 +25,7 @@ bool cmd_renamescript(struct client_command_context *cmd) event_add_str(cmd->event, "old_script_name", scriptname); event_add_str(cmd->event, "new_script_name", newname); - script = sieve_storage_open_script(storage, scriptname, NULL); - if (script == NULL) { + if (sieve_storage_open_script(storage, scriptname, &script, NULL) < 0) { client_command_storage_error( cmd, "Failed to open script '%s' for rename to '%s'", scriptname, newname); diff --git a/src/managesieve/cmd-setactive.c b/src/managesieve/cmd-setactive.c index a086977fe..e0da44a44 100644 --- a/src/managesieve/cmd-setactive.c +++ b/src/managesieve/cmd-setactive.c @@ -26,8 +26,7 @@ cmd_setactive_activate(struct client_command_context *cmd, event_add_str(cmd->event, "script_name", scriptname); - script = sieve_storage_open_script(storage, scriptname, NULL); - if (script == NULL) { + if (sieve_storage_open_script(storage, scriptname, &script, NULL) < 0) { client_command_storage_error( cmd, "Failed to open script '%s' for activation", scriptname); diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c index 2664bf269..3abe25d7b 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c @@ -27,8 +27,8 @@ static int cmd_sieve_activate_run(struct doveadm_sieve_cmd_context *_ctx) enum sieve_error error_code; int ret = 0; - script = sieve_storage_open_script(storage, ctx->scriptname, NULL); - if (script == NULL) { + if (sieve_storage_open_script(storage, ctx->scriptname, + &script, NULL) < 0) { e_error(event, "Failed to activate Sieve script: %s", sieve_storage_get_last_error(storage, &error_code)); doveadm_sieve_cmd_failed_error(_ctx, error_code); diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c index cde5d5142..9115746af 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-delete.c @@ -34,10 +34,9 @@ static int cmd_sieve_delete_run(struct doveadm_sieve_cmd_context *_ctx) array_foreach_elem(scriptnames, scriptname) { int sret = 0; - script = sieve_storage_open_script(storage, scriptname, NULL); - if (script == NULL) { - sret = -1; - } else { + sret = sieve_storage_open_script(storage, scriptname, + &script, NULL); + if (sret == 0) { if (sieve_script_delete(script, ctx->ignore_active) < 0) { (void)sieve_storage_get_last_error( diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c index 14220e53a..64ee1444f 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-get.c @@ -27,9 +27,8 @@ static int cmd_sieve_get_run(struct doveadm_sieve_cmd_context *_ctx) enum sieve_error error_code; int ret; - script = sieve_storage_open_script(_ctx->storage, ctx->scriptname, - &error_code); - if (script == NULL || + if (sieve_storage_open_script(_ctx->storage, ctx->scriptname, + &script, &error_code) < 0 || sieve_script_get_stream(script, &input, &error_code) < 0) { e_error(event, "Failed to open Sieve script: %s", sieve_storage_get_last_error(_ctx->storage, diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c index 2ce6c193e..c4529fd4d 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c @@ -124,10 +124,10 @@ static int cmd_sieve_put_run(struct doveadm_sieve_cmd_context *_ctx) sieve_storage_save_cancel(&save_ctx); if (ctx->activate && ret == 0) { - struct sieve_script *script = - sieve_storage_open_script(storage, ctx->scriptname, - NULL); - if (script == NULL || + struct sieve_script *script; + + if (sieve_storage_open_script(storage, ctx->scriptname, + &script, NULL) < 0 || sieve_script_activate(script, (time_t)-1) < 0) { e_error(event, "Failed to activate Sieve script: %s", sieve_storage_get_last_error(storage, diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c index 5b1b7c763..4812c9fc4 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-rename.c @@ -27,8 +27,8 @@ static int cmd_sieve_rename_run(struct doveadm_sieve_cmd_context *_ctx) enum sieve_error error_code; int ret = 0; - script = sieve_storage_open_script(storage, ctx->oldname, NULL); - if (script == NULL) { + if (sieve_storage_open_script(storage, ctx->oldname, + &script, NULL) < 0) { e_error(event, "Failed to rename Sieve script: %s", sieve_storage_get_last_error(storage, &error_code)); doveadm_sieve_cmd_failed_error(_ctx, error_code); diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c index 786b556ae..90085f664 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c @@ -127,10 +127,9 @@ static int sieve_attribute_unset_script(struct mail_storage *storage, enum sieve_error error_code; int ret = 0; - script = sieve_storage_open_script(svstorage, scriptname, NULL); - if (script == NULL) { - ret = -1; - } else { + ret = sieve_storage_open_script(svstorage, scriptname, + &script, NULL); + if (ret == 0) { ret = sieve_script_delete(script, TRUE); sieve_script_unref(&script); } @@ -186,8 +185,8 @@ sieve_attribute_set_active(struct mail_storage *storage, scriptname++; /* Activate specified script */ - script = sieve_storage_open_script(svstorage, scriptname, NULL); - ret = (script == NULL ? + ret = (sieve_storage_open_script(svstorage, scriptname, + &script, NULL) < 0 ? -1 : sieve_script_activate(script, last_change)); if (ret < 0) { mail_storage_set_critical( @@ -562,7 +561,8 @@ sieve_attribute_get_sieve(struct mail_storage *storage, const char *key, "Sieve attributes are available only as streams"); return -1; } - script = sieve_storage_open_script(svstorage, scriptname, NULL); + ret = sieve_storage_open_script(svstorage, scriptname, &script, NULL); + i_assert(ret == 0); ret = sieve_attribute_retrieve_script(storage, svstorage, script, FALSE, value_r, &error); if (ret < 0) { diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c index 67a2eac6f..35926a677 100644 --- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c +++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c @@ -517,11 +517,16 @@ int imap_filter_sieve_open_personal(struct imap_filter_sieve_context *sctx, error_code_r, error_r) < 0) return -1; - if (name == NULL) + int ret = 0; + + if (name == NULL) { script = sieve_storage_active_script_open(storage, NULL); - else - script = sieve_storage_open_script(storage, name, NULL); - if (script == NULL) { + if (script == NULL) + ret = -1; + } else { + ret = sieve_storage_open_script(storage, name, &script, NULL); + } + if (ret < 0) { *error_r = sieve_storage_get_last_error(storage, &error_code); switch (error_code) { @@ -557,8 +562,7 @@ int imap_filter_sieve_open_global(struct imap_filter_sieve_context *sctx, error_code_r, error_r) < 0) return -1; - script = sieve_storage_open_script(storage, name, NULL); - if (script == NULL) { + if (sieve_storage_open_script(storage, name, &script, NULL) < 0) { *error_r = sieve_storage_get_last_error(storage, &error_code); switch (error_code) { diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 1450e0d8f..9e624c180 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -432,10 +432,9 @@ imap_sieve_run_init_scripts(struct imap_sieve *isieve, user_script = NULL; if (storage != NULL) { i_assert(count < max_len); - scripts[count].script = - sieve_storage_open_script(storage, script_name, - &error_code); - if (scripts[count].script != NULL) { + if (sieve_storage_open_script(storage, script_name, + &scripts[count].script, + &error_code) == 0) { user_script = scripts[count].script; count++; } else if (error_code == SIEVE_ERROR_TEMP_FAILURE) { -- GitLab