1<?php 2/** 3 * EGroupware Api: Support for DBMail IMAP with qmailUser LDAP schema 4 * 5 * @link http://www.stylite.de 6 * @package api 7 * @subpackage mail 8 * @author Ralf Becker <rb@stylite.de> 9 * @author Klaus Leithoff <kl@stylite.de> 10 * @author Lars Kneschke 11 * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License 12 * @version $Id$ 13 */ 14 15namespace EGroupware\Api\Mail\Imap; 16 17use EGroupware\Api\Mail; 18use EGroupware\Api\Ldap; 19 20/** 21 * Support for DBMail IMAP with qmailUser LDAP schema 22 * 23 * @todo base this class on dbmaildbmailuser or the other way around 24 */ 25class Dbmailqmailuser extends Mail\Imap 26{ 27 /** 28 * Label shown in EMailAdmin 29 */ 30 const DESCRIPTION = 'DBMail (qmailUser Schema)'; 31 32 /** 33 * Capabilities of this class (pipe-separated): default, sieve, admin, logintypeemail 34 */ 35 const CAPABILITIES = 'default|sieve'; 36 37 function addAccount($_hookValues) 38 { 39 return $this->updateAccount($_hookValues); 40 } 41 42 #function deleteAccount($_hookValues) { 43 #} 44 function getUserData($_username) 45 { 46 $userData = array(); 47 48 $ds = Ldap::factory(); 49 50 if(!is_resource($ds)) { 51 return false; 52 } 53 54 $filter = '(&(objectclass=posixaccount)(uid='. $_username .')(qmailGID='. sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])) .'))'; 55 $justthese = array('dn', 'objectclass', 'mailQuota'); 56 if(($sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese))) { 57 58 if(($info = ldap_get_entries($ds, $sri))) { 59 if(isset($info[0]['mailquota'][0])) { 60 $userData['quotaLimit'] = $info[0]['mailquota'][0] / 1048576; 61 } 62 } 63 } 64 return $userData; 65 } 66 67 function updateAccount($_hookValues) { 68 if(!$uidnumber = (int)$_hookValues['account_id']) { 69 return false; 70 } 71 72 $ds = Ldap::factory(); 73 74 if(!is_resource($ds)) { 75 return false; 76 } 77 78 $filter = '(&(objectclass=posixaccount)(uidnumber='. $uidnumber .'))'; 79 $justthese = array('dn', 'objectclass', 'qmailUID', 'qmailGID', 'mail'); 80 $sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese); 81 82 if(($info = ldap_get_entries($ds, $sri))) { 83 if(!in_array('qmailuser',$info[0]['objectclass']) && $info[0]['email']) { 84 $newData['objectclass'] = $info[0]['objectclass']; 85 unset($newData['objectclass']['count']); 86 $newData['objectclass'][] = 'qmailuser'; 87 sort($newData['objectclass']); 88 $newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])); 89 #$newData['qmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username; 90 91 ldap_modify($ds, $info[0]['dn'], $newData); 92 93 return true; 94 } else { 95 $newData = array(); 96 $newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])); 97 #$newData['qmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username; 98 99 if(!ldap_modify($ds, $info[0]['dn'], $newData)) { 100 #print ldap_error($ds); 101 #return false; 102 } 103 } 104 } 105 106 return false; 107 } 108 109 function setUserData($_username, $_quota) { 110 $ds = Ldap::factory(); 111 112 if(!is_resource($ds)) { 113 return false; 114 } 115 116 $filter = '(&(objectclass=posixaccount)(uid='. $_username .'))'; 117 $justthese = array('dn', 'objectclass', 'qmailGID', 'mail'); 118 $sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese); 119 120 if(($info = ldap_get_entries($ds, $sri))) { 121 #_debug_array($info); 122 if(!in_array('qmailuser',$info[0]['objectclass']) && $info[0]['email']) { 123 $newData['objectclass'] = $info[0]['objectclass']; 124 unset($newData['objectclass']['count']); 125 $newData['objectclass'][] = 'qmailuser'; 126 sort($newData['objectclass']); 127 $newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])); 128 129 ldap_modify($ds, $info[0]['dn'], $newData); 130 } else { 131 if (in_array('qmailuser',$info[0]['objectclass']) && !$info[0]['qmailgid']) { 132 $newData = array(); 133 $newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])); 134 135 if(!ldap_modify($ds, $info[0]['dn'], $newData)) { 136 #print ldap_error($ds); 137 #return false; 138 } 139 } 140 } 141 142 $newData = array(); 143 144 if((int)$_quota >= 0) { 145 $newData['mailQuota'] = (int)$_quota * 1048576; 146 } else { 147 $newData['mailQuota'] = array(); 148 } 149 150 if(!ldap_modify($ds, $info[0]['dn'], $newData)) { 151 #print ldap_error($ds); 152 return false; 153 } 154 155 return true; 156 } 157 158 return false; 159 } 160} 161