diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c index 1a0ea993e7779cbdd5a200a23b035e7a23f240e1..39e935e7dedf1ea7736fee329ee2ee7868f31bfa 100644 --- a/src/sieve-tools/sieve-test.c +++ b/src/sieve-tools/sieve-test.c @@ -126,6 +126,29 @@ static void duplicate_mark i_info("marked duplicate for user %s.\n", senv->user->username); } +/* + * Result logging + */ + +static const char * +result_amend_log_message(const struct sieve_script_env *senv, + enum log_type log_type, const char *message) +{ + const struct sieve_message_data *msgdata = senv->script_context; + string_t *str; + + if (log_type == LOG_TYPE_DEBUG) + return message; + + str = t_str_new(256); + str_printfa(str, "msgid=%s", (msgdata->id == NULL ? + "unspecified" : msgdata->id)); + str_append(str, ": "); + str_append(str, message); + + return str_c(str); +} + /* * Tool implementation */ @@ -143,7 +166,7 @@ int main(int argc, char **argv) struct sieve_message_data msgdata; struct sieve_script_env scriptenv; struct sieve_exec_status estatus; - struct sieve_error_handler *ehandler, *action_ehandler; + struct sieve_error_handler *ehandler; struct ostream *teststream = NULL; struct sieve_trace_log *trace_log = NULL; bool force_compile = FALSE, execute = FALSE; @@ -153,7 +176,7 @@ int main(int argc, char **argv) sieve_tool = sieve_tool_init ("sieve-test", &argc, &argv, "r:a:f:m:d:l:s:eCt:T:DP:x:u:", FALSE); - ehandler = action_ehandler = NULL; + ehandler = NULL; t_array_init(&scriptfiles, 16); /* Parse arguments */ @@ -299,13 +322,8 @@ int main(int argc, char **argv) /* Create streams for test and trace output */ if ( !execute ) { - action_ehandler = NULL; teststream = o_stream_create_fd(1, 0); o_stream_set_no_error_handling(teststream, TRUE); - } else { - action_ehandler = sieve_prefix_ehandler_create - (ehandler, NULL, t_strdup_printf("msgid=%s", - ( msgdata.id == NULL ? "unspecified" : msgdata.id ))); } if ( tracefile != NULL ) { @@ -327,8 +345,10 @@ int main(int argc, char **argv) scriptenv.smtp_finish = sieve_smtp_finish; scriptenv.duplicate_mark = duplicate_mark; scriptenv.duplicate_check = duplicate_check; + scriptenv.result_amend_log_message = result_amend_log_message; scriptenv.trace_log = trace_log; scriptenv.trace_config = trace_config; + scriptenv.script_context = &msgdata; i_zero(&estatus); scriptenv.exec_status = &estatus; @@ -343,7 +363,7 @@ int main(int argc, char **argv) /* Execute/Test script */ if ( execute ) { ret = sieve_execute(sbin, &msgdata, &scriptenv, - ehandler, action_ehandler, 0, NULL); + ehandler, ehandler, 0, NULL); } else { ret = sieve_test(sbin, &msgdata, &scriptenv, ehandler, teststream, 0, NULL); @@ -390,7 +410,7 @@ int main(int argc, char **argv) /* Execute/Test script */ more = sieve_multiscript_run(mscript, sbin, - ehandler, action_ehandler, 0); + ehandler, ehandler, 0); } /* Execute/Test main script */ @@ -451,8 +471,6 @@ int main(int argc, char **argv) } /* Cleanup error handler */ - if (action_ehandler != NULL) - sieve_error_handler_unref(&action_ehandler); sieve_error_handler_unref(&ehandler); sieve_tool_deinit(&sieve_tool);