From 50bf96a8b248311d7e8449bcdf9d2b6fdaa6b44b Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Tue, 2 Mar 2021 14:06:04 -0700
Subject: [PATCH] rspamd: no priority collisions

---
 server/conf/rspamd_options.inc.master          |  4 ++--
 server/plugins-available/rspamd_plugin.inc.php | 11 +++++------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/server/conf/rspamd_options.inc.master b/server/conf/rspamd_options.inc.master
index c6a1603c20..537816c803 100644
--- a/server/conf/rspamd_options.inc.master
+++ b/server/conf/rspamd_options.inc.master
@@ -1,7 +1,7 @@
 # Addrs local to this server.
 local_addrs = [
-		"127.0.0.0/8",
-		"::1",
+	"127.0.0.0/8",
+	"::1",
 <tmpl_loop name="local_addrs">	<tmpl_var name='quoted_ip'></tmpl_loop>];
 
 # This list is generated by ISPConfig, place custom addresses/networks in local_networks.inc.
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 16cc9e598a..09ed09a436 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -224,11 +224,10 @@ class rspamd_plugin {
 				unlink($settings_file);
 			}
 		} else {
-			$settings_priority = 20;
 			if(isset($data[$use_data]['priority'])) {
-				$settings_priority = intval($data[$use_data]['priority']);
-			} elseif($is_domain === true) {
-				$settings_priority = 18;
+				$settings_priority = ($is_domain ? 10 : 20) + intval($data[$use_data]['priority']);
+			} else {
+				$settings_priority = ($is_domain ? 10 : 20) + 5;
 			}
 
 			// get policy for entry
@@ -405,8 +404,8 @@ class rspamd_plugin {
 					$tpl->newTemplate('rspamd_wblist.inc.conf.master');
 					$tpl->setVar('list_scope', ($global_filter ? 'global' : 'spamfilter'));
 					$tpl->setVar('record_id', $record_id);
-					// we need to add 10 to priority to avoid mailbox/domain spamfilter settings overriding white/blacklists
-					$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 10 : 20));
+					// add 30/40 to priority to avoid collisions and prefer white/blacklists above mailbox/domain spamfilter settings
+					$tpl->setVar('priority', intval($data['new']['priority']) + ($global_filter ? 30 : 40));
 					$tpl->setVar('from', $filter_from);
 					$tpl->setVar('recipient', $filter_rcpt);
 					$tpl->setVar('hostname', $filter['hostname']);
-- 
GitLab