From 3682b5f00333ff21740069bc6032c9570354a28e Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Fri, 21 Aug 2020 16:04:32 -0600 Subject: [PATCH 1/3] 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 From 478726a48cbb1e07746dead3d8699f094797eb6e Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Tue, 25 Aug 2020 16:28:18 -0600 Subject: [PATCH 2/3] sieve filter: allow 'Header' source for domain/localpart address tests --- .../plugins/mail_user_filter_plugin.inc.php | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php index 4c6d8235c7..45c32179f6 100644 --- a/interface/lib/plugins/mail_user_filter_plugin.inc.php +++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php @@ -137,8 +137,14 @@ class mail_user_filter_plugin { $content = ''; $content .= '### BEGIN FILTER_ID:'.$page_form->id."\n"; - //$content .= 'require ["fileinto", "regex", "vacation"];'."\n"; - + if($page_form->dataRecord["source"] == 'Header') { + $parts = explode(':',trim($page_form->dataRecord["searchterm"])); + $page_form->dataRecord["source"] = trim($parts[0]); + unset($parts[0]); + $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); + unset($parts); + } + if($page_form->dataRecord["op"] == 'domain') { $content .= 'if address :domain :is "'.strtolower($page_form->dataRecord["source"]).'" "'.$page_form->dataRecord["searchterm"].'" {'."\n"; } elseif ($page_form->dataRecord["op"] == 'localpart') { @@ -152,15 +158,7 @@ class mail_user_filter_plugin { $content .= 'if size :over '.intval($page_form->dataRecord["searchterm"]).$unit.' {'."\n"; } else { - if($page_form->dataRecord["source"] == 'Header') { - $parts = explode(':',trim($page_form->dataRecord["searchterm"])); - $page_form->dataRecord["source"] = trim($parts[0]); - unset($parts[0]); - $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); - unset($parts); - } - - $content .= 'if header :regex ["'.strtolower($page_form->dataRecord["source"]).'"] ["'; + $content .= 'if header :regex "'.strtolower($page_form->dataRecord["source"]).'" ["'; # special chars in sieve regex must be escaped with double-backslash if($page_form->dataRecord["op"] == 'regex') { -- GitLab From d12a7064ea342fa8de768d764b32aa7cda302873 Mon Sep 17 00:00:00 2001 From: Jesse Norell Date: Mon, 31 Aug 2020 14:32:41 -0600 Subject: [PATCH 3/3] changes from review feedback --- interface/lib/plugins/mail_user_filter_plugin.inc.php | 3 +-- security/ids.whitelist | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/lib/plugins/mail_user_filter_plugin.inc.php b/interface/lib/plugins/mail_user_filter_plugin.inc.php index 45c32179f6..4f24042b30 100644 --- a/interface/lib/plugins/mail_user_filter_plugin.inc.php +++ b/interface/lib/plugins/mail_user_filter_plugin.inc.php @@ -139,8 +139,7 @@ class mail_user_filter_plugin { if($page_form->dataRecord["source"] == 'Header') { $parts = explode(':',trim($page_form->dataRecord["searchterm"])); - $page_form->dataRecord["source"] = trim($parts[0]); - unset($parts[0]); + $page_form->dataRecord["source"] = trim(array_shift($parts)); $page_form->dataRecord["searchterm"] = trim(implode(':',$parts)); unset($parts); } diff --git a/security/ids.whitelist b/security/ids.whitelist index ab7ee504a3..d9b0ba70b5 100644 --- a/security/ids.whitelist +++ b/security/ids.whitelist @@ -55,7 +55,6 @@ 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 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