mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-27 09:09:07 +01:00
3e40eaf0cb
Trunk commits r42507, r42545, r42556, r42557, r42612, r42630 plugin to support Active Directory to store email configuration (in proxyAddresses attribute, no Exchange schema and support!), also fully autodetecting plugins now in emailadmin/inc directory
188 lines
5.9 KiB
PHP
Executable File
188 lines
5.9 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* EGroupware EMailAdmin: Support for DBMail IMAP with dbmailUser LDAP schema
|
|
*
|
|
* @link http://www.stylite.de
|
|
* @package emailadmin
|
|
* @author Ralf Becker <rb@stylite.de>
|
|
* @author Klaus Leithoff <kl@stylite.de>
|
|
* @author Lars Kneschke
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @version $Id$
|
|
*/
|
|
|
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultimap.inc.php");
|
|
|
|
/**
|
|
* Support for DBMail IMAP with qmailUser LDAP schema
|
|
*
|
|
* @todo base this class on dbmailqmailuser or the other way around
|
|
*/
|
|
class dbmaildbmailuser extends defaultimap
|
|
{
|
|
/**
|
|
* Label shown in EMailAdmin
|
|
*/
|
|
const DESCRIPTION = 'dbmail (dbmailUser Schema)';
|
|
|
|
/**
|
|
* Capabilities of this class (pipe-separated): default, sieve, admin, logintypeemail
|
|
*/
|
|
const CAPABILITIES = 'default|sieve';
|
|
|
|
function addAccount($_hookValues) {
|
|
return $this->updateAccount($_hookValues);
|
|
}
|
|
|
|
#function deleteAccount($_hookValues) {
|
|
#}
|
|
function getUserData($_username) {
|
|
$userData = array();
|
|
|
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
|
);
|
|
|
|
if(!is_resource($ds)) {
|
|
return false;
|
|
}
|
|
|
|
$filter = '(&(objectclass=posixaccount)(uid='. $_username .')(dbmailGID='. sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])) .'))';
|
|
$justthese = array('dn', 'objectclass', 'mailQuota');
|
|
if($sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese)) {
|
|
|
|
if($info = ldap_get_entries($ds, $sri)) {
|
|
if(isset($info[0]['mailquota'][0])) {
|
|
$userData['quotaLimit'] = $info[0]['mailquota'][0] / 1048576;
|
|
}
|
|
}
|
|
}
|
|
return $userData;
|
|
}
|
|
|
|
function updateAccount($_hookValues) {
|
|
if(!$uidnumber = (int)$_hookValues['account_id']) {
|
|
return false;
|
|
}
|
|
|
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
|
);
|
|
|
|
if(!is_resource($ds)) {
|
|
return false;
|
|
}
|
|
|
|
$filter = '(&(objectclass=posixaccount)(uidnumber='. $uidnumber .'))';
|
|
$justthese = array('dn', 'objectclass', 'dbmailUID', 'dbmailGID', 'mail');
|
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese);
|
|
|
|
if($info = ldap_get_entries($ds, $sri)) {
|
|
if((!in_array('dbmailuser',$info[0]['objectclass']) && !in_array('dbmailUser',$info[0]['objectclass'])) && $info[0]['mail']) {
|
|
$newData['objectclass'] = $info[0]['objectclass'];
|
|
unset($newData['objectclass']['count']);
|
|
$newData['objectclass'][] = 'dbmailuser';
|
|
sort($newData['objectclass']);
|
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_hookValues['account_lid'] .'@'. $this->domainName : $_hookValues['account_lid'];
|
|
|
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
|
#print ldap_error($ds);
|
|
}
|
|
|
|
return true;
|
|
} else {
|
|
$newData = array();
|
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_hookValues['account_lid'] .'@'. $this->domainName : $_hookValues['account_lid'];
|
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
|
|
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
|
print ldap_error($ds);
|
|
_debug_array($newData);
|
|
exit;
|
|
#return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function setUserData($_username, $_quota) {
|
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
|
);
|
|
|
|
if(!is_resource($ds)) {
|
|
return false;
|
|
}
|
|
|
|
$filter = '(&(objectclass=posixaccount)(uid='. $_username .'))';
|
|
$justthese = array('dn', 'objectclass', 'dbmailGID', 'dbmailUID', 'mail');
|
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese);
|
|
|
|
if($info = ldap_get_entries($ds, $sri)) {
|
|
$validLDAPConfig = false;
|
|
if(in_array('dbmailuser',$info[0]['objectclass']) || in_array('dbmailUser',$info[0]['objectclass'])) {
|
|
$validLDAPConfig = true;
|
|
}
|
|
|
|
if(!in_array('dbmailuser',$info[0]['objectclass']) && !in_array('dbmailUser',$info[0]['objectclass']) && $info[0]['mail']) {
|
|
$newData['objectclass'] = $info[0]['objectclass'];
|
|
unset($newData['objectclass']['count']);
|
|
$newData['objectclass'][] = 'dbmailUser';
|
|
sort($newData['objectclass']);
|
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username;
|
|
|
|
if(ldap_modify($ds, $info[0]['dn'], $newData)) {
|
|
$validLDAPConfig = true;
|
|
}
|
|
} else {
|
|
if ((in_array('dbmailuser',$info[0]['objectclass']) || in_array('dbmailUser',$info[0]['objectclass'])) && !$info[0]['dbmailuid']) {
|
|
$newData = array();
|
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username;
|
|
|
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
|
#print ldap_error($ds);
|
|
#return false;
|
|
}
|
|
}
|
|
|
|
if ((in_array('dbmailuser',$info[0]['objectclass']) || in_array('dbmailUser',$info[0]['objectclass'])) && !$info[0]['dbmailgid']) {
|
|
$newData = array();
|
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
|
|
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
|
#print ldap_error($ds);
|
|
#return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if($validLDAPConfig) {
|
|
$newData = array();
|
|
|
|
if((int)$_quota >= 0) {
|
|
$newData['mailQuota'] = (int)$_quota * 1048576;
|
|
} else {
|
|
$newData['mailQuota'] = array();
|
|
}
|
|
|
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
|
#print ldap_error($ds);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|