Domainadmin patch
This commit is contained in:
@@ -70,6 +70,19 @@ class Auth {
|
||||
function isMailAdmin() {
|
||||
return (isset($_SESSION['sessionMailAdmin']) || isset($_SESSION['sessionAdmin']));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if user is a domain/site administrator
|
||||
* This function checks to see if the currently
|
||||
* logged in user is the administrator, granting
|
||||
* them special permissions
|
||||
* @param none
|
||||
* @return boolean whether the user is a d_admin
|
||||
*/
|
||||
function isDomainAdmin() {
|
||||
return (isset($_SESSION['sessionDomainAdmin']) || isset($_SESSION['sessionAdmin']));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check user login
|
||||
@@ -113,6 +126,7 @@ class Auth {
|
||||
$_SESSION['sessionMail'] = null;
|
||||
$_SESSION['sessionAdmin'] = null;
|
||||
$_SESSION['sessionMailAdmin'] = null;
|
||||
$_SESSION['sessionDomainAdmin'] = null;
|
||||
$_SESSION['sessionNav'] = null;
|
||||
|
||||
$login = stripslashes($login);
|
||||
@@ -271,7 +285,14 @@ class Auth {
|
||||
$_SESSION['sessionMailAdmin'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If it is the mail admin, set session variable
|
||||
foreach ($conf['auth']['d_admins'] as $d_admin) {
|
||||
if (strtolower($d_admin) == strtolower($_SESSION['sessionID'])) {
|
||||
$_SESSION['sessionDomainAdmin'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($lang != '') {
|
||||
set_language($lang);
|
||||
}
|
||||
|
||||
@@ -507,7 +507,7 @@ class CmnFns {
|
||||
$fields_array = array("f" => translate('From'),
|
||||
"s" => translate('Subject')
|
||||
);
|
||||
if (Auth::isMailAdmin() || $conf['app']['allowMailid']) {
|
||||
if ((Auth::isMailAdmin() || Auth::isDomainAdmin()) || $conf['app']['allowMailid']) {
|
||||
$fields_array = array_merge(array("m" => "Mail ID"), $fields_array);
|
||||
}
|
||||
if ($full_search) $fields_array = array_merge(array("t" => translate('To')), $fields_array);
|
||||
@@ -551,11 +551,11 @@ class CmnFns {
|
||||
<? echo translate('Spam'); ?></option>
|
||||
<option value="B" <? echo ($content_type == 'B' ? ' selected="true"':''); ?>>
|
||||
<? echo translate('Banned'); ?></option>
|
||||
<? if (Auth::isMailAdmin() || $conf['app']['allowViruses']) { ?>
|
||||
<? if ((Auth::isMailAdmin() || Auth::isDomainAdmin()) || $conf['app']['allowViruses']) { ?>
|
||||
<option value="V" <? echo ($content_type == 'V' ? ' selected="true"':''); ?>>
|
||||
<? echo translate('Virus'); ?></option>
|
||||
<? }
|
||||
if (Auth::isMailAdmin() || $conf['app']['allowBadHeaders']) { ?>
|
||||
if ((Auth::isMailAdmin() || Auth::isDomainAdmin()) || $conf['app']['allowBadHeaders']) { ?>
|
||||
<option value="H" <? echo ($content_type == 'H' ? ' selected="true"':''); ?>>
|
||||
<? echo translate('Bad Header'); ?></option>
|
||||
<? }
|
||||
|
||||
@@ -222,6 +222,8 @@ class DBEngine {
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// User methods -------------------------------------------
|
||||
|
||||
/**
|
||||
@@ -229,7 +231,7 @@ class DBEngine {
|
||||
* @param string full email address
|
||||
* @return array of the 5 counts
|
||||
*/
|
||||
function get_user_summary($emailaddresses) {
|
||||
function get_user_summary($emailaddresses,$domainsonly=false) {
|
||||
|
||||
global $conf;
|
||||
|
||||
@@ -237,7 +239,7 @@ class DBEngine {
|
||||
$total = array('spam' => 0, 'banned' => 0, 'virus' => 0, 'header' => 0, 'pending' => 0, 'total' => 0);
|
||||
|
||||
// Get where clause for recipient email address(es)
|
||||
$recipEmailClause = $this->convertEmailaddresses2SQL($emailaddresses);
|
||||
$recipEmailClause = $this->convertEmailaddresses2SQL($emailaddresses,$domainsonly);
|
||||
|
||||
# mysql seems to run faster with a left join
|
||||
if ($conf['db']['dbtype'] == 'mysql') {
|
||||
@@ -361,7 +363,7 @@ class DBEngine {
|
||||
* @param boolean $get_all, if true get all messages. False by default.
|
||||
* @return array of messages in quarantine
|
||||
*/
|
||||
function get_user_messages($content_type, $emailaddresses, $order = 'msgs.time_num', $vert = 'DESC', $search_array = '', $msgs_all = false, $rs_option = 0, $page = 0, $get_all = false) {
|
||||
function get_user_messages($content_type, $emailaddresses, $order = 'msgs.time_num', $vert = 'DESC', $search_array = '', $msgs_all = false, $rs_option = 0, $page = 0, $get_all = false, $domainsonly = false) {
|
||||
|
||||
global $conf;
|
||||
|
||||
@@ -385,10 +387,10 @@ class DBEngine {
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! $msgs_all ) {
|
||||
if ( ! $msgs_all) {
|
||||
// Get where clause for recipient email address(es)
|
||||
$emailaddr_clause = ( ! empty($emailaddresses) ?
|
||||
' AND ' . $this->convertEmailaddresses2SQL($emailaddresses) :
|
||||
' AND ' . $this->convertEmailaddresses2SQL($emailaddresses, $domainsonly) :
|
||||
'' );
|
||||
}
|
||||
|
||||
@@ -406,7 +408,7 @@ class DBEngine {
|
||||
$rs_clause = '';
|
||||
}
|
||||
|
||||
if ( Auth::isMailAdmin() ) {
|
||||
if ( Auth::isMailAdmin() || Auth::isDomainAdmin() ) {
|
||||
$type_clause = ($content_type == 'A' ? ' msgs.content in (\'S\', \'B\', \'V\', \'H\')'
|
||||
: ' msgs.content=?');
|
||||
} else {
|
||||
@@ -433,7 +435,6 @@ class DBEngine {
|
||||
$search_clause
|
||||
AND msgs.quar_type <> ''
|
||||
ORDER BY $order $vert ";
|
||||
|
||||
// Prepare query
|
||||
$q = $this->db->prepare($query);
|
||||
|
||||
@@ -737,7 +738,7 @@ class DBEngine {
|
||||
* @param array $emailaddresses list of email address(es)
|
||||
* @return string containing SQL code
|
||||
*/
|
||||
function convertEmailaddresses2SQL($emailaddresses) {
|
||||
function convertEmailaddresses2SQL($emailaddresses, $domainsonly=false) {
|
||||
|
||||
global $conf;
|
||||
$result = '';
|
||||
@@ -746,18 +747,23 @@ class DBEngine {
|
||||
if ( is_array($emailaddresses) && !empty($emailaddresses) ) {
|
||||
foreach ( $emailaddresses as $value ) {
|
||||
// Append an address to lookup
|
||||
$emailtuple .= ( $emailtuple != '' ? ", '$value'" : "'$value'" );
|
||||
}
|
||||
$result = " recip.email in ($emailtuple) ";
|
||||
|
||||
// Configured to support recipient delimiters?
|
||||
if(!empty($conf['recipient_delimiter']) ) {
|
||||
$delimiter = $conf['recipient_delimiter'];
|
||||
foreach ( $emailaddresses as $value ) {
|
||||
// separate localpart and domain
|
||||
if ($domainsonly) {
|
||||
list($localpart, $domain) = explode("@", $value);
|
||||
// Append any recipient delimited addresses
|
||||
$result .= "OR recip.email LIKE '$localpart$delimiter%@$domain' ";
|
||||
$value = "%@".$domain;
|
||||
}
|
||||
$emailtuple .= ( $emailtuple != '' ? " OR recip.email LIKE '$value'" : "'$value'" );
|
||||
}
|
||||
$result = " recip.email LIKE $emailtuple ";
|
||||
if (!$domainsonly) {
|
||||
// Configured to support recipient delimiters?
|
||||
if(!empty($conf['recipient_delimiter']) ) {
|
||||
$delimiter = $conf['recipient_delimiter'];
|
||||
foreach ( $emailaddresses as $value ) {
|
||||
// separate localpart and domain
|
||||
list($localpart, $domain) = explode("@", $value);
|
||||
// Append any recipient delimited addresses
|
||||
$result .= "OR recip.email LIKE '$localpart$delimiter%@$domain' ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ function releaseMessages($emailaddresses, $mail_id_array) {
|
||||
$recip_email = $temp[1];
|
||||
|
||||
// Check if logged in user is admin or logged in user is trying to release his own messages
|
||||
if ( Auth::isMailAdmin() || in_array($recip_email, $emailaddresses) )
|
||||
if ( Auth::isMailAdmin() || Auth::isDomainAdmin() || in_array($recip_email, $emailaddresses) )
|
||||
$result = $db->get_message($recip_email, $mail_id);
|
||||
else
|
||||
continue;
|
||||
@@ -79,7 +79,7 @@ function releaseMessages($emailaddresses, $mail_id_array) {
|
||||
|
||||
// if content type is 'B' or 'V' and the logged in user is not admin
|
||||
// add message to array of release request
|
||||
if ( in_array($rs['content'], array( 'B', 'V')) && ! Auth::isMailAdmin() ) {
|
||||
if ( in_array($rs['content'], array( 'B', 'V')) && (! Auth::isMailAdmin() && ! Auth::isDomainAdmin()) ) {
|
||||
$release_req_messages[ $j ] = array(
|
||||
"mail_id" => $mail_id,
|
||||
"from_addr" => $rs[ 'from_addr' ],
|
||||
@@ -234,7 +234,7 @@ function updateMessages($flag, $content_type, $emailaddresses, $mail_id_array, $
|
||||
for ($i = 0; is_array($res) && $i < count($res); $i++) {
|
||||
$rs = $res[$i];
|
||||
|
||||
if ( Auth::isMailAdmin() || in_array($rs['email'], $emailaddresses) ) {
|
||||
if ( Auth::isMailAdmin() || Auth::isDomainAdmin() || in_array($rs['email'], $emailaddresses) ) {
|
||||
if ( ! $db->update_msgrcpt_rs($rs['mail_id'], $rs['email'], $flag ) ) {
|
||||
$rs = $result[0];
|
||||
$result_array[ $i ] = array(
|
||||
@@ -263,7 +263,7 @@ function updateMessages($flag, $content_type, $emailaddresses, $mail_id_array, $
|
||||
$recip_email = $temp[1];
|
||||
|
||||
// Check if logged in user is admin or logged in user is trying to delete his own messages
|
||||
if ( Auth::isMailAdmin() || in_array($recip_email, $emailaddresses) ) {
|
||||
if ( Auth::isMailAdmin() || Auth::isDomainAdmin() || in_array($recip_email, $emailaddresses) ) {
|
||||
$result = $db->get_message($recip_email, $mail_id);
|
||||
} else {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user