From 8bb24a98665bc45969ccc23a5e7bf025cf2db0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9?= <andre.peters@servercow.de> Date: Sat, 23 Jun 2018 23:48:06 +0200 Subject: [PATCH] [Rspamd] Load additional settings defined in web ui --- data/conf/rspamd/dynmaps/settings.php | 317 ++++++++++++++------------ 1 file changed, 166 insertions(+), 151 deletions(-) diff --git a/data/conf/rspamd/dynmaps/settings.php b/data/conf/rspamd/dynmaps/settings.php index edd069d5..e6a7923b 100644 --- a/data/conf/rspamd/dynmaps/settings.php +++ b/data/conf/rspamd/dynmaps/settings.php @@ -80,15 +80,15 @@ function ucl_rcpts($object, $type) { } elseif ($type == 'domain') { // Domain self - $rcpt[] = '/.*@' . $object . '/i'; - $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` - WHERE `target_domain` = :object"); - $stmt->execute(array(':object' => $object)); - $alias_domains = $stmt->fetchAll(PDO::FETCH_ASSOC); - array_filter($alias_domains); - while ($row = array_shift($alias_domains)) { + $rcpt[] = '/.*@' . $object . '/i'; + $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` + WHERE `target_domain` = :object"); + $stmt->execute(array(':object' => $object)); + $alias_domains = $stmt->fetchAll(PDO::FETCH_ASSOC); + array_filter($alias_domains); + while ($row = array_shift($alias_domains)) { $rcpt[] = '/.*@' . $row['alias_domain'] . '/i'; - } + } } if (!empty($rcpt)) { return $rcpt; @@ -97,18 +97,18 @@ function ucl_rcpts($object, $type) { } ?> settings { - watchdog { - priority = 10; - rcpt = "/null@localhost/i"; - from = "/watchdog@localhost/i"; - apply "default" { - actions { - reject = 9999.0; - greylist = 9998.0; - "add header" = 9997.0; - } - } - } + watchdog { + priority = 10; + rcpt = "/null@localhost/i"; + from = "/watchdog@localhost/i"; + apply "default" { + actions { + reject = 9999.0; + greylist = 9998.0; + "add header" = 9997.0; + } + } + } <?php /* @@ -119,30 +119,30 @@ $stmt = $pdo->query("SELECT DISTINCT `object` FROM `filterconf` WHERE `option` = $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while ($row = array_shift($rows)) { - $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['object']); + $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['object']); ?> - score_<?=$username_sane;?> { - priority = 4; + score_<?=$username_sane;?> { + priority = 4; <?php foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php } - $stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf` - WHERE (`option` = 'highspamlevel' OR `option` = 'lowspamlevel') - AND `object`= :object"); - $stmt->execute(array(':object' => $row['object'])); - $spamscore = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP); + $stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf` + WHERE (`option` = 'highspamlevel' OR `option` = 'lowspamlevel') + AND `object`= :object"); + $stmt->execute(array(':object' => $row['object'])); + $spamscore = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP); ?> - apply "default" { - actions { - reject = <?=$spamscore['highspamlevel'][0];?>; - greylist = <?=$spamscore['lowspamlevel'][0] - 1;?>; - "add header" = <?=$spamscore['lowspamlevel'][0];?>; - } - } - } + apply "default" { + actions { + reject = <?=$spamscore['highspamlevel'][0];?>; + greylist = <?=$spamscore['lowspamlevel'][0] - 1;?>; + "add header" = <?=$spamscore['lowspamlevel'][0];?>; + } + } + } <?php } @@ -153,88 +153,88 @@ while ($row = array_shift($rows)) { $stmt = $pdo->query("SELECT DISTINCT `object` FROM `filterconf` WHERE `option` = 'whitelist_from'"); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while ($row = array_shift($rows)) { - $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['object']); + $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['object']); ?> - whitelist_<?=$username_sane;?> { + whitelist_<?=$username_sane;?> { <?php - $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('^', `value`, '$'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` - WHERE `object`= :object - AND `option` = 'whitelist_from'"); - $stmt->execute(array(':object' => $row['object'])); - $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); - $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); + $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('^', `value`, '$'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` + WHERE `object`= :object + AND `option` = 'whitelist_from'"); + $stmt->execute(array(':object' => $row['object'])); + $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); + $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); ?> - from = "/(<?=$value_sane;?>)/i"; + from = "/(<?=$value_sane;?>)/i"; <?php - if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { + if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { ?> - priority = 5; + priority = 5; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } - else { + } + } + else { ?> - priority = 6; + priority = 6; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } + } + } ?> - apply "default" { - MAILCOW_WHITE = -999.0; - } - symbols [ - "MAILCOW_WHITE" - ] - } - whitelist_header_<?=$username_sane;?> { + apply "default" { + MAILCOW_WHITE = -999.0; + } + symbols [ + "MAILCOW_WHITE" + ] + } + whitelist_header_<?=$username_sane;?> { <?php - $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('\<', `value`, '\>'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` - WHERE `object`= :object - AND `option` = 'whitelist_from'"); - $stmt->execute(array(':object' => $row['object'])); - $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); - $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); + $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('\<', `value`, '\>'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` + WHERE `object`= :object + AND `option` = 'whitelist_from'"); + $stmt->execute(array(':object' => $row['object'])); + $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); + $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); ?> - header = { - "From" = "/(<?=$value_sane;?>)/i"; - } + header = { + "From" = "/(<?=$value_sane;?>)/i"; + } <?php - if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { + if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { ?> - priority = 5; + priority = 5; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } - else { + } + } + else { ?> - priority = 6; + priority = 6; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } + } + } ?> - apply "default" { - MAILCOW_WHITE = -999.0; - } - symbols [ - "MAILCOW_WHITE" - ] - } + apply "default" { + MAILCOW_WHITE = -999.0; + } + symbols [ + "MAILCOW_WHITE" + ] + } <?php } @@ -245,89 +245,104 @@ while ($row = array_shift($rows)) { $stmt = $pdo->query("SELECT DISTINCT `object` FROM `filterconf` WHERE `option` = 'blacklist_from'"); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while ($row = array_shift($rows)) { - $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['object']); + $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['object']); ?> - blacklist_<?=$username_sane;?> { + blacklist_<?=$username_sane;?> { <?php - $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('^', `value`, '$'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` - WHERE `object`= :object - AND `option` = 'blacklist_from'"); - $stmt->execute(array(':object' => $row['object'])); - $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); - $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); + $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('^', `value`, '$'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` + WHERE `object`= :object + AND `option` = 'blacklist_from'"); + $stmt->execute(array(':object' => $row['object'])); + $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); + $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); ?> - from = "/(<?=$value_sane;?>)/i"; + from = "/(<?=$value_sane;?>)/i"; <?php - if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { + if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { ?> - priority = 5; + priority = 5; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } - else { + } + } + else { ?> - priority = 6; + priority = 6; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } + } + } ?> - apply "default" { - MAILCOW_BLACK = 999.0; - } - symbols [ - "MAILCOW_BLACK" - ] - } - blacklist_header_<?=$username_sane;?> { + apply "default" { + MAILCOW_BLACK = 999.0; + } + symbols [ + "MAILCOW_BLACK" + ] + } + blacklist_header_<?=$username_sane;?> { <?php - $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('\<', `value`, '\>'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` - WHERE `object`= :object - AND `option` = 'blacklist_from'"); - $stmt->execute(array(':object' => $row['object'])); - $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); - $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); + $stmt = $pdo->prepare("SELECT GROUP_CONCAT(REPLACE(CONCAT('\<', `value`, '\>'), '*', '.*') SEPARATOR '|') AS `value` FROM `filterconf` + WHERE `object`= :object + AND `option` = 'blacklist_from'"); + $stmt->execute(array(':object' => $row['object'])); + $grouped_lists = $stmt->fetchAll(PDO::FETCH_COLUMN); + $value_sane = preg_replace("/\.\./", ".", (preg_replace("/\*/", ".*", $grouped_lists[0]))); ?> - header = { - "From" = "/(<?=$value_sane;?>)/i"; - } + header = { + "From" = "/(<?=$value_sane;?>)/i"; + } <?php - if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { + if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) { ?> - priority = 5; + priority = 5; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } - else { + } + } + else { ?> - priority = 6; + priority = 6; <?php - foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { + foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { ?> - rcpt = <?=json_encode($rcpt);?>; + rcpt = <?=json_encode($rcpt);?>; <?php - } - } + } + } ?> - apply "default" { - MAILCOW_BLACK = 999.0; - } - symbols [ - "MAILCOW_BLACK" - ] - } + apply "default" { + MAILCOW_BLACK = 999.0; + } + symbols [ + "MAILCOW_BLACK" + ] + } <?php } + +// Start additional content + +$stmt = $pdo->query("SELECT `id`, `content` FROM `settingsmap` WHERE `active` = '1'"); +$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); +while ($row = array_shift($rows)) { + $username_sane = preg_replace("/[^a-zA-Z0-9]+/", "", $row['id']); +?> + additional_settings_<?=intval($row['id']);?> { +<?php + $content = preg_split('/\r\n|\r|\n/', $row['content']); + foreach ($content as $line) { + echo ' ' . $line . PHP_EOL; + } +} ?> }