From cac0ac7a4a2a9e39b6d160ca3b7c4a5abb566d76 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Wed, 27 Aug 2014 00:19:40 +0200 Subject: [PATCH] Fixed handling of SMTP errors. Logging was mixed up; it logged permanent SMTP failures as errors rather than mere info. Redirect now handles temporary failure as a separate error condition, causing LDA to return a temporary failure if no other (storage) actions were performed. --- src/lib-sieve/cmd-redirect.c | 14 +++++++------- src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c | 4 ++-- src/lib-sieve/plugins/notify/cmd-notify.c | 4 ++-- src/lib-sieve/plugins/vacation/cmd-vacation.c | 4 ++-- src/lib-sieve/sieve-actions.c | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib-sieve/cmd-redirect.c b/src/lib-sieve/cmd-redirect.c index ae5c28934..c90d5f839 100644 --- a/src/lib-sieve/cmd-redirect.c +++ b/src/lib-sieve/cmd-redirect.c @@ -357,17 +357,17 @@ static int act_redirect_send /* Close SMTP transport */ if ( (ret=sieve_smtp_finish(sctx, &error)) <= 0 ) { if ( ret < 0 ) { - sieve_result_global_log_error(aenv, - "failed to redirect message to <%s>: %s " - "(temporary failure)", - str_sanitize(ctx->to_address, 256), str_sanitize(error, 512)); - } else { sieve_result_global_error(aenv, "failed to redirect message to <%s>: %s " - "(permanent failure)", + "(temporary failure)", str_sanitize(ctx->to_address, 256), str_sanitize(error, 512)); - + return SIEVE_EXEC_TEMP_FAILURE; } + + sieve_result_global_log_error(aenv, + "failed to redirect message to <%s>: %s " + "(permanent failure)", + str_sanitize(ctx->to_address, 256), str_sanitize(error, 512)); return SIEVE_EXEC_FAILURE; } diff --git a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c index 1272ee7e3..d38e867dd 100644 --- a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c +++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c @@ -555,11 +555,11 @@ static bool ntfy_mailto_send if ( (ret=sieve_smtp_finish(sctx, &error)) <= 0 ) { if (ret < 0) { - sieve_enotify_global_log_error(nenv, + sieve_enotify_global_error(nenv, "failed to send mail notification to %s: %s (temporary failure)", str_c(all), str_sanitize(error, 512)); } else { - sieve_enotify_global_error(nenv, + sieve_enotify_global_log_error(nenv, "failed to send mail notification to %s: %s (permanent failure)", str_c(all), str_sanitize(error, 512)); } diff --git a/src/lib-sieve/plugins/notify/cmd-notify.c b/src/lib-sieve/plugins/notify/cmd-notify.c index 5f368cbec..fb632f930 100644 --- a/src/lib-sieve/plugins/notify/cmd-notify.c +++ b/src/lib-sieve/plugins/notify/cmd-notify.c @@ -784,11 +784,11 @@ static bool act_notify_send if ( (ret=sieve_smtp_finish(sctx, &error)) <= 0 ) { if (ret < 0) { - sieve_result_global_log_error(aenv, + sieve_result_global_error(aenv, "failed to send mail notification to %s: %s (temporary failure)", str_c(all), str_sanitize(error, 512)); } else { - sieve_result_global_error(aenv, + sieve_result_global_log_error(aenv, "failed to send mail notification to %s: %s (permanent failure)", str_c(all), str_sanitize(error, 512)); } diff --git a/src/lib-sieve/plugins/vacation/cmd-vacation.c b/src/lib-sieve/plugins/vacation/cmd-vacation.c index 1b026e811..04b4958a5 100644 --- a/src/lib-sieve/plugins/vacation/cmd-vacation.c +++ b/src/lib-sieve/plugins/vacation/cmd-vacation.c @@ -992,11 +992,11 @@ static bool act_vacation_send /* Close smtp session */ if ( (ret=sieve_smtp_finish(sctx, &error)) <= 0 ) { if ( ret < 0 ) { - sieve_result_global_log_error(aenv, + sieve_result_global_error(aenv, "failed to send vacation response to <%s>: %s (temporary error)", str_sanitize(reply_to, 256), str_sanitize(error, 512)); } else { - sieve_result_global_error(aenv, + sieve_result_global_log_error(aenv, "failed to send vacation response to <%s>: %s (permanent error)", str_sanitize(reply_to, 256), str_sanitize(error, 512)); } diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c index 91ccec003..33f7aaf20 100644 --- a/src/lib-sieve/sieve-actions.c +++ b/src/lib-sieve/sieve-actions.c @@ -873,12 +873,12 @@ static bool sieve_action_do_reject_mail if ( (ret=sieve_smtp_finish(sctx, &error)) <= 0 ) { if ( ret < 0 ) { - sieve_result_global_log_error(aenv, + sieve_result_global_error(aenv, "failed to send rejection message to <%s>: %s " "(temporary failure)", str_sanitize(sender, 256), str_sanitize(error, 512)); } else { - sieve_result_global_error(aenv, + sieve_result_global_log_error(aenv, "failed to send rejection message to <%s>: %s " "(permanent failure)", str_sanitize(sender, 256), str_sanitize(error, 512)); -- GitLab