From 2a39311d439e7ce99545b69fb95dc656c3a9bed6 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@dovecot.fi>
Date: Mon, 7 May 2018 11:03:01 +0200
Subject: [PATCH] lib-sieve: Add SIEVE_EXECUTE_FLAG_SKIP_RESPONSES execute
 flag.

This causes the reject and vacation response actions to be skipped without
error.
---
 src/lib-sieve/ext-reject.c                    | 6 ++++++
 src/lib-sieve/plugins/vacation/cmd-vacation.c | 6 ++++++
 src/lib-sieve/sieve-types.h                   | 4 +++-
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/lib-sieve/ext-reject.c b/src/lib-sieve/ext-reject.c
index 22dd0c410..9519f4118 100644
--- a/src/lib-sieve/ext-reject.c
+++ b/src/lib-sieve/ext-reject.c
@@ -488,6 +488,12 @@ static int act_reject_commit
 	sender = sieve_message_get_sender(aenv->msgctx);
 	recipient = sieve_message_get_orig_recipient(aenv->msgctx);
 
+	if ((aenv->flags & SIEVE_EXECUTE_FLAG_SKIP_RESPONSES) != 0) {
+		sieve_result_global_log(aenv,
+			"not sending reject message (skipped)");
+		return SIEVE_EXEC_OK;
+	}
+
 	if ( smtp_address_isnull(recipient) ) {
 		sieve_result_global_warning(aenv,
 			"reject action aborted: envelope recipient is <>");
diff --git a/src/lib-sieve/plugins/vacation/cmd-vacation.c b/src/lib-sieve/plugins/vacation/cmd-vacation.c
index 501296ce8..048bc61b3 100644
--- a/src/lib-sieve/plugins/vacation/cmd-vacation.c
+++ b/src/lib-sieve/plugins/vacation/cmd-vacation.c
@@ -1127,6 +1127,12 @@ static int act_vacation_commit
 	const char *const *hdsp, *const *headers;
 	int ret;
 
+	if ((aenv->flags & SIEVE_EXECUTE_FLAG_SKIP_RESPONSES) != 0) {
+		sieve_result_global_log(aenv,
+			"not sending vacation reply (skipped)");
+		return SIEVE_EXEC_OK;
+	}
+
 	sender = sieve_message_get_sender(aenv->msgctx);
 	recipient = sieve_message_get_final_recipient(aenv->msgctx);
 
diff --git a/src/lib-sieve/sieve-types.h b/src/lib-sieve/sieve-types.h
index b5cbbf4d1..05514b947 100644
--- a/src/lib-sieve/sieve-types.h
+++ b/src/lib-sieve/sieve-types.h
@@ -155,7 +155,9 @@ enum sieve_execute_flags {
 	/* Do not execute (implicit keep) at the end */
 	SIEVE_EXECUTE_FLAG_DEFER_KEEP = (1<<1),
 	/* There is no envelope */
-	SIEVE_EXECUTE_FLAG_NO_ENVELOPE = (1<<2)
+	SIEVE_EXECUTE_FLAG_NO_ENVELOPE = (1<<2),
+	/* Skip sending responses */
+	SIEVE_EXECUTE_FLAG_SKIP_RESPONSES = (1<<3),
 };
 
 /*
-- 
GitLab