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