From 3682b5f00333ff21740069bc6032c9570354a28e Mon Sep 17 00:00:00 2001
From: Jesse Norell <jesse@kci.net>
Date: Fri, 21 Aug 2020 16:04:32 -0600
Subject: [PATCH] allow matching regex in custom mail filter

---
 .../plugins/mail_user_filter_plugin.inc.php   | 49 ++++++++++++++-----
 .../web/mail/form/mail_user_filter.tform.php  |  3 +-
 .../web/mail/lib/lang/ar_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/bg_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/br_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/ca_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/cz_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/de_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/dk_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/el_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/en_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/es_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/fi_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/fr_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/hr_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/hu_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/id_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/it_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/ja_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/nl_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/pl_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/pt_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/ro_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/ru_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/se_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/sk_mail_user_filter.lng |  1 +
 .../web/mail/lib/lang/tr_mail_user_filter.lng |  1 +
 security/ids.whitelist                        |  5 +-
 28 files changed, 67 insertions(+), 15 deletions(-)

diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php
index ccf58b853c..4c6d8235c7 100644
--- a/interface/lib/plugins/mail_user_filter_plugin.inc.php
+++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php
@@ -162,23 +162,48 @@ class mail_user_filter_plugin {
 
 				$content .= 'if header :regex    ["'.strtolower($page_form->dataRecord["source"]).'"] ["';
 
-				$searchterm = preg_quote($page_form->dataRecord["searchterm"]);
-				$searchterm = str_replace(
-					array(
-						'"',
-						'\\[',
-						'\\]'
-					),
-					array(
-						'\\"',
-						'\\\\[',
-						'\\\\]'
-					), $searchterm);
+				# special chars in sieve regex must be escaped with double-backslash
+				if($page_form->dataRecord["op"] == 'regex') {
+					# if providing a regex, special chars must already be quoted as intended;
+					# we will simply try to check for an obviously unquoted double-quote and handle that.
+					$patterns = array( '/([^\\\\]{2})"/', '/([^\\\\])\\\\"/' );
+					$replace  = array( '${1}\\\\\\\\"', '${1}\\\\\\\\"' );
+					$searchterm = preg_replace( $patterns, $replace, $page_form->dataRecord["searchterm"] );
+				} else {
+					$sieve_regex_escape = array(
+						'\\' => '\\\\\\',
+						'+' => '\\\\+',
+						'*' => '\\\\*',
+						'?' => '\\\\?',
+						'[' => '\\\\[',
+						'^' => '\\\\^',
+						']' => '\\\\]',
+						'$' => '\\\\$',
+						'(' => '\\\\(',
+						')' => '\\\\)',
+						'{' => '\\\\{',
+						'}' => '\\\\}',
+						'|' => '\\\\|',
+						'.' => '\\\\.',
+						# these (from preg_quote) should not be needed
+						#'=' => '\\\\=',
+						#'!' => '\\\\!',
+						#'<' => '\\\\<',
+						#'>' => '\\\\>',
+						#':' => '\\\\:',
+						#'-' => '\\\\-',
+						#'#' => '\\\\#',
+						);
+					$searchterm = strtr( $page_form->dataRecord["searchterm"], $sieve_regex_escape );
+
+				}
 
 				if($page_form->dataRecord["op"] == 'contains') {
 					$content .= ".*".$searchterm;
 				} elseif ($page_form->dataRecord["op"] == 'is') {
 					$content .= "^".$searchterm."$";
+				} elseif ($page_form->dataRecord["op"] == 'regex') {
+					$content .= $searchterm;
 				} elseif ($page_form->dataRecord["op"] == 'begins') {
 					$content .= "^".$searchterm."";
 				} elseif ($page_form->dataRecord["op"] == 'ends') {
diff --git a/interface/web/mail/form/mail_user_filter.tform.php b/interface/web/mail/form/mail_user_filter.tform.php
index b1370ecaa1..0b10799163 100644
--- a/interface/web/mail/form/mail_user_filter.tform.php
+++ b/interface/web/mail/form/mail_user_filter.tform.php
@@ -94,8 +94,7 @@ $form["tabs"]['filter'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			//'value'  => array('contains'=>'contains_txt','is' => 'Is','begins'=>'Begins with','ends'=>'Ends with')
-			'value'  => array('contains'=>'contains_txt', 'is' => 'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt', 'localpart' => 'localpart_txt', 'domain' => 'domain_txt')
+			'value'  => array('contains'=>'contains_txt', 'is'=>'is_txt', 'begins'=>'begins_with_txt', 'ends'=>'ends_with_txt', 'regex'=>'regex_txt', 'localpart'=>'localpart_txt', 'domain'=>'domain_txt')
 		),
 		'searchterm' => array (
 			'datatype' => 'VARCHAR',
diff --git a/interface/web/mail/lib/lang/ar_mail_user_filter.lng b/interface/web/mail/lib/lang/ar_mail_user_filter.lng
index 9a15472e88..bed377b2f6 100644
--- a/interface/web/mail/lib/lang/ar_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ar_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/bg_mail_user_filter.lng b/interface/web/mail/lib/lang/bg_mail_user_filter.lng
index 6929752c5a..ed7d137db0 100644
--- a/interface/web/mail/lib/lang/bg_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/bg_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Описание';
 $wb['is_txt'] = 'е';
 $wb['begins_with_txt'] = 'Начало с';
 $wb['ends_with_txt'] = 'Край с';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Изтрий';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/br_mail_user_filter.lng b/interface/web/mail/lib/lang/br_mail_user_filter.lng
index 226b7e2722..560858c713 100644
--- a/interface/web/mail/lib/lang/br_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/br_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contêm';
 $wb['is_txt'] = 'é';
 $wb['begins_with_txt'] = 'Iniciando com';
 $wb['ends_with_txt'] = 'Terminando com';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['move_stop_txt'] = 'Mover para';
 $wb['delete_txt'] = 'Remover';
 $wb['header_txt'] = 'Cabeçalho';
diff --git a/interface/web/mail/lib/lang/ca_mail_user_filter.lng b/interface/web/mail/lib/lang/ca_mail_user_filter.lng
index 8744b2ab79..3aaa7f1665 100644
--- a/interface/web/mail/lib/lang/ca_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ca_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contient';
 $wb['is_txt'] = 'Est';
 $wb['begins_with_txt'] = 'Commence par';
 $wb['ends_with_txt'] = 'Fini par';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Supprimer';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/cz_mail_user_filter.lng b/interface/web/mail/lib/lang/cz_mail_user_filter.lng
index 3f5357f735..3d56a9b839 100644
--- a/interface/web/mail/lib/lang/cz_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/cz_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Obsahuje';
 $wb['is_txt'] = 'Je';
 $wb['begins_with_txt'] = 'Začíná na';
 $wb['ends_with_txt'] = 'Končí na';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Smazat';
 $wb['move_stop_txt'] = 'Přesunout';
 $wb['header_txt'] = 'Hlavička';
diff --git a/interface/web/mail/lib/lang/de_mail_user_filter.lng b/interface/web/mail/lib/lang/de_mail_user_filter.lng
index 345b9c4fbb..579a867e98 100644
--- a/interface/web/mail/lib/lang/de_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/de_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Enthält';
 $wb['is_txt'] = 'Ist';
 $wb['begins_with_txt'] = 'Beginnt mit';
 $wb['ends_with_txt'] = 'Endet mit';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['move_stop_txt'] = 'Verschieben nach';
 $wb['delete_txt'] = 'Löschen';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/dk_mail_user_filter.lng b/interface/web/mail/lib/lang/dk_mail_user_filter.lng
index ef8be2a0c9..8da1a24201 100644
--- a/interface/web/mail/lib/lang/dk_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/dk_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Indeholder';
 $wb['is_txt'] = 'Er';
 $wb['begins_with_txt'] = 'Begynder med';
 $wb['ends_with_txt'] = 'Slutter med';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['move_stop_txt'] = 'Flyt til';
 $wb['delete_txt'] = 'Slet';
 $wb['header_txt'] = 'Hoved';
diff --git a/interface/web/mail/lib/lang/el_mail_user_filter.lng b/interface/web/mail/lib/lang/el_mail_user_filter.lng
index 72710a9f7e..c3c232362e 100644
--- a/interface/web/mail/lib/lang/el_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/el_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Περιλαμβάνει';
 $wb['is_txt'] = 'είναι';
 $wb['begins_with_txt'] = 'Ξεκινά με';
 $wb['ends_with_txt'] = 'Τελειώνει σε';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Διαγραφή';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/en_mail_user_filter.lng b/interface/web/mail/lib/lang/en_mail_user_filter.lng
index 462ee6d936..7db2df5a72 100644
--- a/interface/web/mail/lib/lang/en_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/en_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['move_stop_txt'] = 'Move to';
 $wb['delete_txt'] = 'Delete';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/es_mail_user_filter.lng b/interface/web/mail/lib/lang/es_mail_user_filter.lng
index ed221d5cb3..4e50fbceff 100644
--- a/interface/web/mail/lib/lang/es_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/es_mail_user_filter.lng
@@ -6,6 +6,7 @@ $wb['contains_txt'] = 'Contiene';
 $wb['delete_txt'] = 'Borrar';
 $wb['domain_txt'] = 'Domain';
 $wb['ends_with_txt'] = 'Termina con';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['from_txt'] = 'De';
 $wb['header_txt'] = 'Cabecera';
 $wb['is_txt'] = 'Es';
diff --git a/interface/web/mail/lib/lang/fi_mail_user_filter.lng b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
index 1238dc86fd..5315bc6f1e 100644
--- a/interface/web/mail/lib/lang/fi_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/fi_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/fr_mail_user_filter.lng b/interface/web/mail/lib/lang/fr_mail_user_filter.lng
index b5cacf2e98..324d6f3c78 100644
--- a/interface/web/mail/lib/lang/fr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/fr_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contient';
 $wb['is_txt'] = 'Est';
 $wb['begins_with_txt'] = 'Commence par';
 $wb['ends_with_txt'] = 'Fini par';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Supprimer';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/hr_mail_user_filter.lng b/interface/web/mail/lib/lang/hr_mail_user_filter.lng
index 33fd0106a8..55e46fab91 100644
--- a/interface/web/mail/lib/lang/hr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/hr_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Sadrži';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Počinje sa';
 $wb['ends_with_txt'] = 'Završava sa';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Obriši';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/hu_mail_user_filter.lng b/interface/web/mail/lib/lang/hu_mail_user_filter.lng
index a3db584920..8b39c062a6 100644
--- a/interface/web/mail/lib/lang/hu_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/hu_mail_user_filter.lng
@@ -14,6 +14,7 @@ $wb['contains_txt'] = 'Tartalmazza';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['target_error_regex'] = 'The target may only contain these characters: a-z, 0-9, -, ., _, and {space}';
 $wb['limit_mailfilter_txt'] = 'The max. number of mailfilters is reached.';
 $wb['delete_txt'] = 'Delete';
diff --git a/interface/web/mail/lib/lang/id_mail_user_filter.lng b/interface/web/mail/lib/lang/id_mail_user_filter.lng
index 93f45979f3..2a8ec29b45 100644
--- a/interface/web/mail/lib/lang/id_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/id_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/it_mail_user_filter.lng b/interface/web/mail/lib/lang/it_mail_user_filter.lng
index 827f906345..131b7ff6b5 100644
--- a/interface/web/mail/lib/lang/it_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/it_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contiene';
 $wb['is_txt'] = 'è';
 $wb['begins_with_txt'] = 'Inizia con';
 $wb['ends_with_txt'] = 'Termina con';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Elimina';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/ja_mail_user_filter.lng b/interface/web/mail/lib/lang/ja_mail_user_filter.lng
index 8ee3801cc8..7354c40265 100644
--- a/interface/web/mail/lib/lang/ja_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ja_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/nl_mail_user_filter.lng b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
index 050d64aaf9..99dd91b58c 100644
--- a/interface/web/mail/lib/lang/nl_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/nl_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Bevat';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begint met';
 $wb['ends_with_txt'] = 'Eindigt in';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Verwijderen';
 $wb['move_stop_txt'] = 'Verplaatsen naar';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/pl_mail_user_filter.lng b/interface/web/mail/lib/lang/pl_mail_user_filter.lng
index d0bc6d6a28..6c86f3e52a 100644
--- a/interface/web/mail/lib/lang/pl_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/pl_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Zawiera';
 $wb['is_txt'] = 'Jest';
 $wb['begins_with_txt'] = 'Zaczyna siÄ™ od';
 $wb['ends_with_txt'] = 'Kończy się na';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Usuń';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/pt_mail_user_filter.lng b/interface/web/mail/lib/lang/pt_mail_user_filter.lng
index 906c27ecd2..41235591a7 100644
--- a/interface/web/mail/lib/lang/pt_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/pt_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/ro_mail_user_filter.lng b/interface/web/mail/lib/lang/ro_mail_user_filter.lng
index 22435d9e91..3ca08e982a 100644
--- a/interface/web/mail/lib/lang/ro_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ro_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/ru_mail_user_filter.lng b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
index 78fac01aee..07e767c245 100644
--- a/interface/web/mail/lib/lang/ru_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/ru_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Содержит';
 $wb['is_txt'] = 'Равно';
 $wb['begins_with_txt'] = 'Начинается с';
 $wb['ends_with_txt'] = 'Заканчивается на';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Удалить';
 $wb['move_stop_txt'] = 'Переместить в';
 $wb['header_txt'] = 'Заголовок';
diff --git a/interface/web/mail/lib/lang/se_mail_user_filter.lng b/interface/web/mail/lib/lang/se_mail_user_filter.lng
index 9830059195..f8c2a61546 100644
--- a/interface/web/mail/lib/lang/se_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/se_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Innehåller';
 $wb['is_txt'] = 'Är';
 $wb['begins_with_txt'] = 'Börjar med';
 $wb['ends_with_txt'] = 'Slutar med';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Radera';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/sk_mail_user_filter.lng b/interface/web/mail/lib/lang/sk_mail_user_filter.lng
index 7546cd6afa..966161ed3f 100644
--- a/interface/web/mail/lib/lang/sk_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/sk_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Contains';
 $wb['is_txt'] = 'Is';
 $wb['begins_with_txt'] = 'Begins with';
 $wb['ends_with_txt'] = 'Ends with';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['delete_txt'] = 'Delete';
 $wb['move_stop_txt'] = 'Move to';
 $wb['header_txt'] = 'Header';
diff --git a/interface/web/mail/lib/lang/tr_mail_user_filter.lng b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
index 6d4e0b8868..816174445b 100644
--- a/interface/web/mail/lib/lang/tr_mail_user_filter.lng
+++ b/interface/web/mail/lib/lang/tr_mail_user_filter.lng
@@ -16,6 +16,7 @@ $wb['contains_txt'] = 'Şunu içeren';
 $wb['is_txt'] = 'Şununla aynı';
 $wb['begins_with_txt'] = 'Åžununla baÅŸlayan';
 $wb['ends_with_txt'] = 'Åžununla biten';
+$wb['regex_txt'] = 'Matches Regex';
 $wb['move_stop_txt'] = 'Şuraya taşı';
 $wb['delete_txt'] = 'Sil';
 $wb['header_txt'] = 'Başlık';
diff --git a/security/ids.whitelist b/security/ids.whitelist
index 6a953f45cf..ab7ee504a3 100644
--- a/security/ids.whitelist
+++ b/security/ids.whitelist
@@ -55,4 +55,7 @@ user:/login/index.php:POST.password
 user:/mail/mail_domain_edit.php:POST.dkim_private
 user:/mail/mail_domain_edit.php:POST.dkim_public
 user:/mail/mail_domain_edit.php:POST.dns_record
-user:/sites/web_vhost_domain_edit.php:POST.fastcgi_php_version
\ No newline at end of file
+user:/sites/web_vhost_domain_edit.php:POST.fastcgi_php_version
+admin:/mail/mail_user_filter_edit.php:POST.searchterm
+user:/mail/mail_user_filter_edit.php:POST.searchterm
+admin:/mail/mail_user_edit.php:POST.custom_mailfilter
-- 
GitLab