From 895b035a57aecf36436a0e87307b27c544b7b39a Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Tue, 7 Jan 2020 22:13:53 +0100 Subject: [PATCH] lib-sieve: Add flag that determines whether result actions are logged as debug or info. Default is now debug logging, which is used for the IMAP plugins. The LDA Sieve plugin uses info logging. --- src/lib-sieve/sieve-result.c | 13 ++++++++++--- src/lib-sieve/sieve-types.h | 2 ++ src/plugins/lda-sieve/lda-sieve-plugin.c | 8 +++++--- src/sieve-tools/sieve-filter.c | 5 +++-- src/sieve-tools/sieve-test.c | 14 +++++++++----- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c index c88eaae4f..b5711524a 100644 --- a/src/lib-sieve/sieve-result.c +++ b/src/lib-sieve/sieve-result.c @@ -1743,8 +1743,11 @@ void sieve_result_log(const struct sieve_action_exec_env *aenv, const char *csrc_filename, unsigned int csrc_linenum, const char *fmt, ...) { + const struct sieve_execute_env *eenv = aenv->exec_env; struct sieve_error_params params = { - .log_type = LOG_TYPE_INFO, + .log_type = (HAS_ALL_BITS(eenv->flags, + SIEVE_EXECUTE_FLAG_LOG_RESULT) ? + LOG_TYPE_INFO : LOG_TYPE_DEBUG), .event = aenv->event, .csrc = { .filename = csrc_filename, @@ -1765,7 +1768,9 @@ void sieve_result_global_log(const struct sieve_action_exec_env *aenv, { const struct sieve_execute_env *eenv = aenv->exec_env; struct sieve_error_params params = { - .log_type = LOG_TYPE_INFO, + .log_type = (HAS_ALL_BITS(eenv->flags, + SIEVE_EXECUTE_FLAG_LOG_RESULT) ? + LOG_TYPE_INFO : LOG_TYPE_DEBUG), .event = aenv->event, .csrc = { .filename = csrc_filename, @@ -1833,7 +1838,9 @@ void sieve_result_event_log(const struct sieve_action_exec_env *aenv, { const struct sieve_execute_env *eenv = aenv->exec_env; struct sieve_error_params params = { - .log_type = LOG_TYPE_INFO, + .log_type = (HAS_ALL_BITS(eenv->flags, + SIEVE_EXECUTE_FLAG_LOG_RESULT) ? + LOG_TYPE_INFO : LOG_TYPE_DEBUG), .event = event, .csrc = { .filename = csrc_filename, diff --git a/src/lib-sieve/sieve-types.h b/src/lib-sieve/sieve-types.h index b4d9d840a..df8928c9a 100644 --- a/src/lib-sieve/sieve-types.h +++ b/src/lib-sieve/sieve-types.h @@ -160,6 +160,8 @@ enum sieve_execute_flags { SIEVE_EXECUTE_FLAG_NO_ENVELOPE = (1<<2), /* Skip sending responses */ SIEVE_EXECUTE_FLAG_SKIP_RESPONSES = (1<<3), + /* Log result as info (when absent, only debug logging is performed) */ + SIEVE_EXECUTE_FLAG_LOG_RESULT = (1<<4), }; /* diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c index 5d0481521..1435b1be5 100644 --- a/src/plugins/lda-sieve/lda-sieve-plugin.c +++ b/src/plugins/lda-sieve/lda-sieve-plugin.c @@ -487,7 +487,7 @@ lda_sieve_execute_script(struct lda_sieve_run_context *srctx, struct sieve_error_handler *exec_ehandler; struct sieve_binary *sbin = NULL; enum sieve_compile_flags cpflags = 0; - enum sieve_execute_flags exflags = 0; + enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT; bool user_script, more; *error_r = SIEVE_ERROR_NONE; @@ -580,6 +580,7 @@ static int lda_sieve_execute_scripts(struct lda_sieve_run_context *srctx) struct sieve_multiscript *mscript; struct sieve_error_handler *exec_ehandler; struct sieve_script *script, *last_script = NULL; + enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT; bool discard_script; enum sieve_error error; unsigned int i; @@ -645,9 +646,10 @@ static int lda_sieve_execute_scripts(struct lda_sieve_run_context *srctx) exec_ehandler = (srctx->user_ehandler != NULL ? srctx->user_ehandler : srctx->master_ehandler); if (error == SIEVE_ERROR_TEMP_FAILURE) { - ret = sieve_multiscript_tempfail(&mscript, exec_ehandler, 0); + ret = sieve_multiscript_tempfail(&mscript, exec_ehandler, + exflags); } else { - ret = sieve_multiscript_finish(&mscript, exec_ehandler, 0, + ret = sieve_multiscript_finish(&mscript, exec_ehandler, exflags, NULL); } diff --git a/src/sieve-tools/sieve-filter.c b/src/sieve-tools/sieve-filter.c index cf7eb5438..6ef92100f 100644 --- a/src/sieve-tools/sieve-filter.c +++ b/src/sieve-tools/sieve-filter.c @@ -89,6 +89,7 @@ result_amend_log_message(const struct sieve_script_env *senv, static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail) { struct sieve_error_handler *ehandler = sfctx->data->ehandler; + enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT; struct sieve_script_env *senv = sfctx->data->senv; struct sieve_exec_status estatus; struct sieve_binary *sbin; @@ -137,7 +138,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail) date, size, str_sanitize(subject, 40)); ret = sieve_execute(sbin, &msgdata, senv, ehandler, ehandler, - 0, NULL); + exflags, NULL); } else { o_stream_nsend_str( sfctx->teststream, @@ -151,7 +152,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail) str_sanitize(subject, 40))); ret = sieve_test(sbin, &msgdata, senv, ehandler, - sfctx->teststream, 0, NULL); + sfctx->teststream, exflags, NULL); } /* Handle message in source folder */ diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c index 5f04a23df..92793920b 100644 --- a/src/sieve-tools/sieve-test.c +++ b/src/sieve-tools/sieve-test.c @@ -162,6 +162,7 @@ int main(int argc, char **argv) struct sieve_message_data msgdata; struct sieve_script_env scriptenv; struct sieve_exec_status estatus; + enum sieve_execute_flags exflags = SIEVE_EXECUTE_FLAG_LOG_RESULT; struct sieve_error_handler *ehandler; struct ostream *teststream = NULL; struct sieve_trace_log *trace_log = NULL; @@ -361,11 +362,12 @@ int main(int argc, char **argv) /* Execute/Test script */ if (execute) { ret = sieve_execute(sbin, &msgdata, &scriptenv, - ehandler, ehandler, 0, + ehandler, ehandler, exflags, NULL); } else { ret = sieve_test(sbin, &msgdata, &scriptenv, - ehandler, teststream, 0, NULL); + ehandler, teststream, exflags, + NULL); } } else { /* Multiple scripts */ @@ -414,7 +416,8 @@ int main(int argc, char **argv) /* Execute/Test script */ more = sieve_multiscript_run( - mscript, sbin, ehandler, ehandler, 0); + mscript, sbin, ehandler, ehandler, + exflags); } /* Execute/Test main script */ @@ -434,11 +437,12 @@ int main(int argc, char **argv) main_sbin = NULL; (void)sieve_multiscript_run( - mscript, sbin, ehandler, ehandler, 0); + mscript, sbin, ehandler, ehandler, + exflags); } result = sieve_multiscript_finish( - &mscript, ehandler, 0, NULL); + &mscript, ehandler, exflags, NULL); ret = (ret > 0 ? result : ret); } -- GitLab