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;$iadldap->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;$iadldap->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;$iadldap->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; } } ?>