From fe19bb7d94e8ef197c0979553086ee014ed815c3 Mon Sep 17 00:00:00 2001
From: Kristian Feldsam <feldsam@gmail.com>
Date: Tue, 14 Apr 2020 13:41:47 +0200
Subject: [PATCH] Quarantine notifications - exclude blacklisted sender (#3446)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Final version, fixed syntax

Signed-off-by: Kristián Feldsam <feldsam@gmail.com>
---
 data/Dockerfiles/dovecot/quarantine_notify.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/data/Dockerfiles/dovecot/quarantine_notify.py b/data/Dockerfiles/dovecot/quarantine_notify.py
index a4a67f91..a5cd8c84 100755
--- a/data/Dockerfiles/dovecot/quarantine_notify.py
+++ b/data/Dockerfiles/dovecot/quarantine_notify.py
@@ -97,7 +97,13 @@ def notify_rcpt(rcpt, msg_count, quarantine_acl):
       print('%s'  % (ex))
       time.sleep(3)
 
-records = query_mysql('SELECT IFNULL(user_acl.quarantine, 0) AS quarantine_acl, count(id) AS counter, rcpt FROM quarantine LEFT OUTER JOIN user_acl ON user_acl.username = rcpt WHERE notified = 0 AND rcpt in (SELECT username FROM mailbox) GROUP BY rcpt')
+records = query_mysql("""
+SELECT IFNULL(user_acl.quarantine, 0) AS quarantine_acl, count(id) AS counter, rcpt, sender FROM quarantine
+LEFT OUTER JOIN user_acl ON user_acl.username = rcpt
+WHERE notified = 0 AND rcpt in (SELECT username FROM mailbox)
+# dont send notifications for blacklisted senders
+AND (SELECT prefid FROM filterconf WHERE option = "blacklist_from" AND (object = rcpt OR object = SUBSTRING(rcpt, LOCATE("@", rcpt) + 1)) AND sender REGEXP(REPLACE(value, '*', '.+'))) IS NULL GROUP BY rcpt
+""")
 
 for record in records:
   attrs = ''