From eb7e58329c50aeae15962ae681db2226f7d6d7a1 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Sat, 28 Sep 2024 19:58:41 +0200 Subject: [PATCH] lib-sieve: sieve - Use int for sieve_compile_script() status result --- src/lib-sieve/sieve.c | 31 +++++++++---------- src/lib-sieve/sieve.h | 10 +++--- src/managesieve/cmd-putscript.c | 4 +-- src/managesieve/cmd-setactive.c | 5 ++- .../doveadm-sieve-cmd-activate.c | 5 ++- .../doveadm-sieve/doveadm-sieve-cmd-put.c | 5 ++- .../imap-filter-sieve/imap-filter-sieve.c | 5 +-- src/plugins/imapsieve/imap-sieve.c | 5 +-- src/plugins/lda-sieve/lda-sieve-plugin.c | 6 ++-- 9 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index 8a3f44086..3442dbd44 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -251,16 +251,17 @@ sieve_generate(struct sieve_ast *ast, struct sieve_error_handler *ehandler, * Sieve compilation */ -struct sieve_binary * -sieve_compile_script(struct sieve_script *script, - struct sieve_error_handler *ehandler, - enum sieve_compile_flags flags, - enum sieve_error *error_code_r) +int sieve_compile_script(struct sieve_script *script, + struct sieve_error_handler *ehandler, + enum sieve_compile_flags flags, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r) { struct sieve_ast *ast; struct sieve_binary *sbin; enum sieve_error error_code; + *sbin_r = NULL; if (error_code_r != NULL) *error_code_r = SIEVE_ERROR_NONE; else @@ -280,7 +281,7 @@ sieve_compile_script(struct sieve_script *script, sieve_error(ehandler, sieve_script_name(script), "parse failed"); } - return NULL; + return -1; } /* Validate */ @@ -289,7 +290,7 @@ sieve_compile_script(struct sieve_script *script, "validation failed"); sieve_ast_unref(&ast); - return NULL; + return -1; } /* Generate */ @@ -298,12 +299,13 @@ sieve_compile_script(struct sieve_script *script, sieve_error(ehandler, sieve_script_name(script), "code generation failed"); sieve_ast_unref(&ast); - return NULL; + return -1; } /* Cleanup */ sieve_ast_unref(&ast); - return sbin; + *sbin_r = sbin; + return 0; } int sieve_compile(struct sieve_instance *svinst, const char *script_location, @@ -312,7 +314,6 @@ int sieve_compile(struct sieve_instance *svinst, const char *script_location, enum sieve_error *error_code_r) { struct sieve_script *script; - struct sieve_binary *sbin; enum sieve_error error_code; *sbin_r = NULL; @@ -334,8 +335,8 @@ int sieve_compile(struct sieve_instance *svinst, const char *script_location, return -1; } - sbin = sieve_compile_script(script, ehandler, flags, error_code_r); - if (sbin == NULL) { + if (sieve_compile_script(script, ehandler, flags, + sbin_r, error_code_r) < 0) { sieve_script_unref(&script); return -1; } @@ -343,7 +344,6 @@ int sieve_compile(struct sieve_instance *svinst, const char *script_location, e_debug(svinst->event, "Script '%s' from %s successfully compiled", sieve_script_name(script), sieve_script_location(script)); - *sbin_r = sbin; sieve_script_unref(&script); return 0; } @@ -431,9 +431,8 @@ sieve_open_script_real(struct sieve_script *script, "Script binary %s successfully loaded", sieve_binary_path(sbin)); } else { - sbin = sieve_compile_script(script, ehandler, flags, - error_code_r); - if (sbin == NULL) + if (sieve_compile_script(script, ehandler, flags, + &sbin, error_code_r) < 0) return NULL; e_debug(svinst->event, diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h index df838958b..e207d9d13 100644 --- a/src/lib-sieve/sieve.h +++ b/src/lib-sieve/sieve.h @@ -38,11 +38,11 @@ void sieve_set_extensions(struct sieve_instance *svinst, /* Compile a Sieve script from a Sieve script object. Returns Sieve binary upon success and NULL upon failure. */ -struct sieve_binary * -sieve_compile_script(struct sieve_script *script, - struct sieve_error_handler *ehandler, - enum sieve_compile_flags flags, - enum sieve_error *error_code_r); +int sieve_compile_script(struct sieve_script *script, + struct sieve_error_handler *ehandler, + enum sieve_compile_flags flags, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r); /* Compile a Sieve script from a Sieve script location string. Returns Sieve binary upon success and NULL upon failure. The provided script_name is used diff --git a/src/managesieve/cmd-putscript.c b/src/managesieve/cmd-putscript.c index fe2c2a9c3..4b25a15a9 100644 --- a/src/managesieve/cmd-putscript.c +++ b/src/managesieve/cmd-putscript.c @@ -196,8 +196,8 @@ cmd_putscript_finish_script(struct cmd_putscript_context *ctx, client->set->managesieve_max_compile_errors); /* Compile */ - sbin = sieve_compile_script(script, ehandler, cpflags, &error_code); - if (sbin == NULL) { + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, &error_code) < 0) { const char *errormsg = NULL, *action; if (error_code != SIEVE_ERROR_NOT_VALID) { diff --git a/src/managesieve/cmd-setactive.c b/src/managesieve/cmd-setactive.c index e0da44a44..49fd9db67 100644 --- a/src/managesieve/cmd-setactive.c +++ b/src/managesieve/cmd-setactive.c @@ -50,9 +50,8 @@ cmd_setactive_activate(struct client_command_context *cmd, client->set->managesieve_max_compile_errors); /* Compile */ - sbin = sieve_compile_script(script, ehandler, cpflags, - &error_code); - if (sbin == NULL) { + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, &error_code) < 0) { if (error_code != SIEVE_ERROR_NOT_VALID) { errormsg = sieve_script_get_last_error( script, &error_code); diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c index 3abe25d7b..a87a9465e 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-activate.c @@ -48,9 +48,8 @@ static int cmd_sieve_activate_run(struct doveadm_sieve_cmd_context *_ctx) /* Compile */ ehandler = sieve_master_ehandler_create(ctx->ctx.svinst, 0); - sbin = sieve_compile_script(script, ehandler, cpflags, - &error_code); - if (sbin == NULL) { + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, &error_code) < 0) { doveadm_sieve_cmd_failed_error(_ctx, error_code); ret = -1; } else { diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c index c4529fd4d..3153e3695 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-put.c @@ -96,9 +96,8 @@ static int cmd_sieve_put_run(struct doveadm_sieve_cmd_context *_ctx) /* Compile */ ehandler = sieve_master_ehandler_create( ctx->ctx.svinst, 0); - sbin = sieve_compile_script(script, ehandler, cpflags, - &error_code); - if (sbin == NULL) { + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, &error_code) < 0) { doveadm_sieve_cmd_failed_error( _ctx, error_code); ret = -1; diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c index 47ba7d976..3b9cd5425 100644 --- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c +++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c @@ -382,8 +382,9 @@ imap_sieve_filter_open_script(struct imap_filter_sieve_context *sctx, /* Load or compile the sieve script */ if (recompile) { - sbin = sieve_compile_script(script, ehandler, cpflags, - error_code_r); + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, error_code_r) < 0) + sbin = NULL; } else { sbin = sieve_open_script(script, ehandler, cpflags, error_code_r); diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 9e624c180..82e4582ba 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -590,8 +590,9 @@ imap_sieve_run_open_script(struct imap_sieve_run *isrun, /* Load or compile the sieve script */ if (recompile) { - sbin = sieve_compile_script(script, ehandler, cpflags, - error_code_r); + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, error_code_r) < 0) + sbin = NULL; } else { sbin = sieve_open_script(script, ehandler, cpflags, error_code_r); diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c index 7e7a3bf43..569b84b48 100644 --- a/src/plugins/lda-sieve/lda-sieve-plugin.c +++ b/src/plugins/lda-sieve/lda-sieve-plugin.c @@ -369,8 +369,10 @@ sieve_binary *lda_sieve_open(struct lda_sieve_run_context *srctx, sieve_error_handler_reset(ehandler); if (recompile) { - sbin = sieve_compile_script(script, ehandler, cpflags, - error_code_r); + if (sieve_compile_script(script, ehandler, cpflags, + &sbin, error_code_r) < 0) + sbin = NULL; + } else { sbin = sieve_open_script(script, ehandler, cpflags, error_code_r); -- GitLab