mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-27 18:33:39 +01:00
fd5489d458
- moved sieve support and configuration from cyrusimap to defaultimap, as there are other imap server supporting Sieve
183 lines
5.8 KiB
PHP
Executable File
183 lines
5.8 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
|
|
{
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|