diff options
Diffstat (limited to 'wiki/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php')
-rw-r--r-- | wiki/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/wiki/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php b/wiki/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php deleted file mode 100644 index d70aac7..0000000 --- a/wiki/lib/plugins/authad/adLDAP/classes/adLDAPExchange.php +++ /dev/null @@ -1,390 +0,0 @@ -<?php -/** - * PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY - * Version 4.0.4 - * - * PHP Version 5 with SSL and LDAP support - * - * Written by Scott Barnett, Richard Hyland - * email: scott@wiggumworld.com, adldap@richardhyland.com - * http://adldap.sourceforge.net/ - * - * Copyright (c) 2006-2012 Scott Barnett, Richard Hyland - * - * We'd appreciate any improvements or additions to be submitted back - * to benefit the entire community :) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * @category ToolsAndUtilities - * @package adLDAP - * @subpackage Exchange - * @author Scott Barnett, Richard Hyland - * @copyright (c) 2006-2012 Scott Barnett, Richard Hyland - * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1 - * @revision $Revision: 97 $ - * @version 4.0.4 - * @link http://adldap.sourceforge.net/ - */ -require_once(dirname(__FILE__) . '/../adLDAP.php'); - -/** -* MICROSOFT EXCHANGE FUNCTIONS -*/ -class adLDAPExchange { - /** - * The current adLDAP connection via dependency injection - * - * @var adLDAP - */ - protected $adldap; - - public function __construct(adLDAP $adldap) { - $this->adldap = $adldap; - } - - /** - * Create an Exchange account - * - * @param string $username The username of the user to add the Exchange account to - * @param array $storageGroup The mailbox, Exchange Storage Group, for the user account, this must be a full CN - * If the storage group has a different base_dn to the adLDAP configuration, set it using $base_dn - * @param string $emailAddress The primary email address to add to this user - * @param string $mailNickname The mail nick name. If mail nickname is blank, the username will be used - * @param bool $mdbUseDefaults Indicates whether the store should use the default quota, rather than the per-mailbox quota. - * @param string $baseDn Specify an alternative base_dn for the Exchange storage group - * @param bool $isGUID Is the username passed a GUID or a samAccountName - * @return bool - */ - public function createMailbox($username, $storageGroup, $emailAddress, $mailNickname=NULL, $useDefaults=TRUE, $baseDn=NULL, $isGUID=false) - { - if ($username === NULL){ return "Missing compulsory field [username]"; } - if ($storageGroup === NULL) { return "Missing compulsory array [storagegroup]"; } - if (!is_array($storageGroup)) { return "[storagegroup] must be an array"; } - if ($emailAddress === NULL) { return "Missing compulsory field [emailAddress]"; } - - if ($baseDn === NULL) { - $baseDn = $this->adldap->getBaseDn(); - } - - $container = "CN=" . implode(",CN=", $storageGroup); - - if ($mailNickname === NULL) { - $mailNickname = $username; - } - $mdbUseDefaults = $this->adldap->utilities()->boolToString($useDefaults); - - $attributes = array( - 'exchange_homemdb'=>$container.",".$baseDn, - 'exchange_proxyaddress'=>'SMTP:' . $emailAddress, - 'exchange_mailnickname'=>$mailNickname, - 'exchange_usedefaults'=>$mdbUseDefaults - ); - $result = $this->adldap->user()->modify($username, $attributes, $isGUID); - if ($result == false) { - return false; - } - return true; - } - - /** - * Add an X400 address to Exchange - * See http://tools.ietf.org/html/rfc1685 for more information. - * An X400 Address looks similar to this X400:c=US;a= ;p=Domain;o=Organization;s=Doe;g=John; - * - * @param string $username The username of the user to add the X400 to to - * @param string $country Country - * @param string $admd Administration Management Domain - * @param string $pdmd Private Management Domain (often your AD domain) - * @param string $org Organization - * @param string $surname Surname - * @param string $givenName Given name - * @param bool $isGUID Is the username passed a GUID or a samAccountName - * @return bool - */ - public function addX400($username, $country, $admd, $pdmd, $org, $surname, $givenName, $isGUID=false) - { - if ($username === NULL){ return "Missing compulsory field [username]"; } - - $proxyValue = 'X400:'; - - // Find the dn of the user - $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID); - if ($user[0]["dn"] === NULL) { return false; } - $userDn = $user[0]["dn"]; - - // We do not have to demote an email address from the default so we can just add the new proxy address - $attributes['exchange_proxyaddress'] = $proxyValue . 'c=' . $country . ';a=' . $admd . ';p=' . $pdmd . ';o=' . $org . ';s=' . $surname . ';g=' . $givenName . ';'; - - // Translate the update to the LDAP schema - $add = $this->adldap->adldap_schema($attributes); - - if (!$add) { return false; } - - // Do the update - // Take out the @ to see any errors, usually this error might occur because the address already - // exists in the list of proxyAddresses - $result = @ldap_mod_add($this->adldap->getLdapConnection(), $userDn, $add); - if ($result == false) { - return false; - } - - return true; - } - - /** - * Add an address to Exchange - * - * @param string $username The username of the user to add the Exchange account to - * @param string $emailAddress The email address to add to this user - * @param bool $default Make this email address the default address, this is a bit more intensive as we have to demote any existing default addresses - * @param bool $isGUID Is the username passed a GUID or a samAccountName - * @return bool - */ - public function addAddress($username, $emailAddress, $default = FALSE, $isGUID = false) - { - if ($username === NULL) { return "Missing compulsory field [username]"; } - if ($emailAddress === NULL) { return "Missing compulsory fields [emailAddress]"; } - - $proxyValue = 'smtp:'; - if ($default === true) { - $proxyValue = 'SMTP:'; - } - - // Find the dn of the user - $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID); - if ($user[0]["dn"] === NULL){ return false; } - $userDn = $user[0]["dn"]; - - // We need to scan existing proxy addresses and demote the default one - if (is_array($user[0]["proxyaddresses"]) && $default === true) { - $modAddresses = array(); - for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) { - if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false) { - $user[0]['proxyaddresses'][$i] = str_replace('SMTP:', 'smtp:', $user[0]['proxyaddresses'][$i]); - } - if ($user[0]['proxyaddresses'][$i] != '') { - $modAddresses['proxyAddresses'][$i] = $user[0]['proxyaddresses'][$i]; - } - } - $modAddresses['proxyAddresses'][(sizeof($user[0]['proxyaddresses'])-1)] = 'SMTP:' . $emailAddress; - - $result = @ldap_mod_replace($this->adldap->getLdapConnection(), $userDn, $modAddresses); - if ($result == false) { - return false; - } - - return true; - } - else { - // We do not have to demote an email address from the default so we can just add the new proxy address - $attributes['exchange_proxyaddress'] = $proxyValue . $emailAddress; - - // Translate the update to the LDAP schema - $add = $this->adldap->adldap_schema($attributes); - - if (!$add) { - return false; - } - - // Do the update - // Take out the @ to see any errors, usually this error might occur because the address already - // exists in the list of proxyAddresses - $result = @ldap_mod_add($this->adldap->getLdapConnection(), $userDn,$add); - if ($result == false) { - return false; - } - - return true; - } - } - - /** - * Remove an address to Exchange - * If you remove a default address the account will no longer have a default, - * we recommend changing the default address first - * - * @param string $username The username of the user to add the Exchange account to - * @param string $emailAddress The email address to add to this user - * @param bool $isGUID Is the username passed a GUID or a samAccountName - * @return bool - */ - public function deleteAddress($username, $emailAddress, $isGUID=false) - { - if ($username === NULL) { return "Missing compulsory field [username]"; } - if ($emailAddress === NULL) { return "Missing compulsory fields [emailAddress]"; } - - // Find the dn of the user - $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID); - if ($user[0]["dn"] === NULL) { return false; } - $userDn = $user[0]["dn"]; - - if (is_array($user[0]["proxyaddresses"])) { - $mod = array(); - for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) { - if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false && $user[0]['proxyaddresses'][$i] == 'SMTP:' . $emailAddress) { - $mod['proxyAddresses'][0] = 'SMTP:' . $emailAddress; - } - elseif (strstr($user[0]['proxyaddresses'][$i], 'smtp:') !== false && $user[0]['proxyaddresses'][$i] == 'smtp:' . $emailAddress) { - $mod['proxyAddresses'][0] = 'smtp:' . $emailAddress; - } - } - - $result = @ldap_mod_del($this->adldap->getLdapConnection(), $userDn,$mod); - if ($result == false) { - return false; - } - - return true; - } - else { - return false; - } - } - /** - * Change the default address - * - * @param string $username The username of the user to add the Exchange account to - * @param string $emailAddress The email address to make default - * @param bool $isGUID Is the username passed a GUID or a samAccountName - * @return bool - */ - public function primaryAddress($username, $emailAddress, $isGUID = false) - { - if ($username === NULL) { return "Missing compulsory field [username]"; } - if ($emailAddress === NULL) { return "Missing compulsory fields [emailAddress]"; } - - // Find the dn of the user - $user = $this->adldap->user()->info($username, array("cn","proxyaddresses"), $isGUID); - if ($user[0]["dn"] === NULL){ return false; } - $userDn = $user[0]["dn"]; - - if (is_array($user[0]["proxyaddresses"])) { - $modAddresses = array(); - for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) { - if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false) { - $user[0]['proxyaddresses'][$i] = str_replace('SMTP:', 'smtp:', $user[0]['proxyaddresses'][$i]); - } - if ($user[0]['proxyaddresses'][$i] == 'smtp:' . $emailAddress) { - $user[0]['proxyaddresses'][$i] = str_replace('smtp:', 'SMTP:', $user[0]['proxyaddresses'][$i]); - } - if ($user[0]['proxyaddresses'][$i] != '') { - $modAddresses['proxyAddresses'][$i] = $user[0]['proxyaddresses'][$i]; - } - } - - $result = @ldap_mod_replace($this->adldap->getLdapConnection(), $userDn, $modAddresses); - if ($result == false) { - return false; - } - - return true; - } - - } - - /** - * Mail enable a contact - * Allows email to be sent to them through Exchange - * - * @param string $distinguishedName The contact to mail enable - * @param string $emailAddress The email address to allow emails to be sent through - * @param string $mailNickname The mailnickname for the contact in Exchange. If NULL this will be set to the display name - * @return bool - */ - public function contactMailEnable($distinguishedName, $emailAddress, $mailNickname = NULL) - { - if ($distinguishedName === NULL) { return "Missing compulsory field [distinguishedName]"; } - if ($emailAddress === NULL) { return "Missing compulsory field [emailAddress]"; } - - if ($mailNickname !== NULL) { - // Find the dn of the user - $user = $this->adldap->contact()->info($distinguishedName, array("cn","displayname")); - if ($user[0]["displayname"] === NULL) { return false; } - $mailNickname = $user[0]['displayname'][0]; - } - - $attributes = array("email"=>$emailAddress,"contact_email"=>"SMTP:" . $emailAddress,"exchange_proxyaddress"=>"SMTP:" . $emailAddress,"exchange_mailnickname" => $mailNickname); - - // Translate the update to the LDAP schema - $mod = $this->adldap->adldap_schema($attributes); - - // Check to see if this is an enabled status update - if (!$mod) { return false; } - - // Do the update - $result = ldap_modify($this->adldap->getLdapConnection(), $distinguishedName, $mod); - if ($result == false) { return false; } - - return true; - } - - /** - * Returns a list of Exchange Servers in the ConfigurationNamingContext of the domain - * - * @param array $attributes An array of the AD attributes you wish to return - * @return array - */ - public function servers($attributes = array('cn','distinguishedname','serialnumber')) - { - if (!$this->adldap->getLdapBind()){ return false; } - - $configurationNamingContext = $this->adldap->getRootDse(array('configurationnamingcontext')); - $sr = @ldap_search($this->adldap->getLdapConnection(), $configurationNamingContext[0]['configurationnamingcontext'][0],'(&(objectCategory=msExchExchangeServer))', $attributes); - $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr); - return $entries; - } - - /** - * Returns a list of Storage Groups in Exchange for a given mail server - * - * @param string $exchangeServer The full DN of an Exchange server. You can use exchange_servers() to find the DN for your server - * @param array $attributes An array of the AD attributes you wish to return - * @param bool $recursive If enabled this will automatically query the databases within a storage group - * @return array - */ - public function storageGroups($exchangeServer, $attributes = array('cn','distinguishedname'), $recursive = NULL) - { - if (!$this->adldap->getLdapBind()){ return false; } - if ($exchangeServer === NULL) { return "Missing compulsory field [exchangeServer]"; } - if ($recursive === NULL) { $recursive = $this->adldap->getRecursiveGroups(); } - - $filter = '(&(objectCategory=msExchStorageGroup))'; - $sr = @ldap_search($this->adldap->getLdapConnection(), $exchangeServer, $filter, $attributes); - $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr); - - if ($recursive === true) { - for ($i=0; $i<$entries['count']; $i++) { - $entries[$i]['msexchprivatemdb'] = $this->storageDatabases($entries[$i]['distinguishedname'][0]); - } - } - - return $entries; - } - - /** - * Returns a list of Databases within any given storage group in Exchange for a given mail server - * - * @param string $storageGroup The full DN of an Storage Group. You can use exchange_storage_groups() to find the DN - * @param array $attributes An array of the AD attributes you wish to return - * @return array - */ - public function storageDatabases($storageGroup, $attributes = array('cn','distinguishedname','displayname')) { - if (!$this->adldap->getLdapBind()){ return false; } - if ($storageGroup === NULL) { return "Missing compulsory field [storageGroup]"; } - - $filter = '(&(objectCategory=msExchPrivateMDB))'; - $sr = @ldap_search($this->adldap->getLdapConnection(), $storageGroup, $filter, $attributes); - $entries = @ldap_get_entries($this->adldap->getLdapConnection(), $sr); - return $entries; - } -} -?> \ No newline at end of file |