diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index 121d43a0c..baa92faa3 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -3988,6 +3988,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $stmt->execute(array(':goto' => '(^|,)'.preg_quote($_data, '/').'($|,)')); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while ($row = array_shift($rows)) { + if (!hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['address'])) { + continue; + } // Keep old array for backward compatibility $data['fixed_sender_aliases'][] = $row['address']; // Split into allowed/blocked for proper display @@ -4977,7 +4980,16 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $stmt->execute(array(':username' => $_data)); $sender_acl_rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($sender_acl_rows as $sender_acl_row) { - $mailboxdata['sender_acl'][] = $sender_acl_row['send_as']; + $send_as = $sender_acl_row['send_as']; + if ($_SESSION['mailcow_cc_role'] == 'domainadmin' && $send_as != '*') { + $in_scope = (substr($send_as, 0, 1) == '@') + ? hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], substr($send_as, 1)) + : hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $send_as); + if (!$in_scope) { + continue; + } + } + $mailboxdata['sender_acl'][] = $send_as; } } $stmt = $pdo->prepare("SELECT `tag_name` diff --git a/data/web/json_api.php b/data/web/json_api.php index b059ae8be..ec1a67f50 100644 --- a/data/web/json_api.php +++ b/data/web/json_api.php @@ -1087,10 +1087,14 @@ if (isset($_GET['query'])) { $data['mailboxes'][$mailbox][] = $mailbox; $user_alias_details = user_get_alias_details($mailbox); foreach ($user_alias_details['direct_aliases'] as $k => $v) { - $data['mailboxes'][$mailbox][] = $k; + if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], substr(strrchr($k, '@'), 1))) { + $data['mailboxes'][$mailbox][] = $k; + } } foreach ($user_alias_details['shared_aliases'] as $k => $v) { - $data['mailboxes'][$mailbox][] = $k; + if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], substr(strrchr($k, '@'), 1))) { + $data['mailboxes'][$mailbox][] = $k; + } } } } diff --git a/data/web/templates/edit/mailbox.twig b/data/web/templates/edit/mailbox.twig index 9f56ac56c..35d9866dc 100644 --- a/data/web/templates/edit/mailbox.twig +++ b/data/web/templates/edit/mailbox.twig @@ -97,9 +97,11 @@