|
@@ -169,6 +169,7 @@ function quarantine($_action, $_data = null) {
|
|
|
}
|
|
|
}
|
|
|
elseif ($release_format == 'raw') {
|
|
|
+ $detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $detail_row['msg']);
|
|
|
$postfix_talk = array(
|
|
|
array('220', 'HELO quarantine' . chr(10)),
|
|
|
array('250', 'MAIL FROM: ' . $sender . chr(10)),
|
|
@@ -375,12 +376,13 @@ function quarantine($_action, $_data = null) {
|
|
|
);
|
|
|
continue;
|
|
|
}
|
|
|
- $stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
|
|
|
+ $stmt = $pdo->prepare('SELECT `msg`, `action`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
|
|
|
$stmt->execute(array(':id' => $id));
|
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
- if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin') {
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {
|
|
|
$_SESSION['return'][] = array(
|
|
|
'type' => 'danger',
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
|
|
|
'msg' => 'access_denied'
|
|
|
);
|
|
|
continue;
|
|
@@ -462,6 +464,7 @@ function quarantine($_action, $_data = null) {
|
|
|
}
|
|
|
}
|
|
|
elseif ($release_format == 'raw') {
|
|
|
+ $row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $row['msg']);
|
|
|
$postfix_talk = array(
|
|
|
array('220', 'HELO quarantine' . chr(10)),
|
|
|
array('250', 'MAIL FROM: ' . $sender . chr(10)),
|
|
@@ -633,12 +636,13 @@ function quarantine($_action, $_data = null) {
|
|
|
);
|
|
|
continue;
|
|
|
}
|
|
|
- $stmt = $pdo->prepare('SELECT `msg`, `rcpt` FROM `quarantine` WHERE `id` = :id');
|
|
|
+ $stmt = $pdo->prepare('SELECT `msg`, `rcpt`, `action` FROM `quarantine` WHERE `id` = :id');
|
|
|
$stmt->execute(array(':id' => $id));
|
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
- if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin') {
|
|
|
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {
|
|
|
$_SESSION['return'][] = array(
|
|
|
'type' => 'danger',
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
|
|
|
'msg' => 'access_denied'
|
|
|
);
|
|
|
continue;
|
|
@@ -658,7 +662,7 @@ function quarantine($_action, $_data = null) {
|
|
|
if (stripos($response['error'], 'already learned') === false) {
|
|
|
$_SESSION['return'][] = array(
|
|
|
'type' => 'danger',
|
|
|
- 'log' => array(__FUNCTION__),
|
|
|
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
|
|
|
'msg' => array('spam_learn_error', $response['error'])
|
|
|
);
|
|
|
continue;
|
|
@@ -768,7 +772,7 @@ function quarantine($_action, $_data = null) {
|
|
|
break;
|
|
|
case 'get':
|
|
|
if ($_SESSION['mailcow_cc_role'] == "user") {
|
|
|
- $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox');
|
|
|
+ $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox');
|
|
|
$stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username']));
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
while($row = array_shift($rows)) {
|
|
@@ -776,7 +780,7 @@ function quarantine($_action, $_data = null) {
|
|
|
}
|
|
|
}
|
|
|
elseif ($_SESSION['mailcow_cc_role'] == "admin") {
|
|
|
- $stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`');
|
|
|
+ $stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`');
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
while($row = array_shift($rows)) {
|
|
|
$q_meta[] = $row;
|
|
@@ -785,7 +789,7 @@ function quarantine($_action, $_data = null) {
|
|
|
else {
|
|
|
$domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
|
|
|
foreach ($domains as $domain) {
|
|
|
- $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain');
|
|
|
+ $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain');
|
|
|
$stmt->execute(array(':domain' => '@' . $domain . '$'));
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
while($row = array_shift($rows)) {
|