A hint: This file contains one or more very long lines, so maybe it is better readable using the pure text view mode that shows the contents as wrapped lines within the browser window.
1 adLDAP - PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY 2 3 Written by Scott Barnett, Richard Hyland 4 email: scott@wiggumworld.com, adldap@richardhyland.com 5 http://adldap.sourceforge.net/ 6 7 8 CHANGELOG 9 ------------------------------------------------------------------------------------------- 10 11 Version 4.0.4 12 ------------- 13 [+] New Feature: Ability to delete a group $adldap->group()->delete($groupName); 14 [+] New Feature: #30 Add magic __isset method to adLDAPCollection 15 [-] Feature Change: #34 A better recursiveGroups() implementation 16 [-] Feature Change: Changed $adldap->user()->getLastLogon from using the lastLogin attribute to lastLogonTimestamp. The difference between the two is detailed here http://blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it-works.aspx 17 [-] Bug Fix: $adldap->user()->getLastLogon('mySAMAccountName') produced a PHP error 'Non-static method adLDAPUtils::convertWindowsTimeToUnixTime() should not be called statically' 18 [-] Bug Fix: #29 $includeDescription broken in adLDAPContacts->all() 19 [-] Bug Fix: #25 exchange->createMailbox typo in $storageGroup variable null checking 20 [-] Bug Fix: #25 exchange->createMailbox Call to undefined method adLDAPExchange::utilities() 21 [-] Bug Fix: #27 Case mismatch on an array key in the folder()->create() 22 [-] Bug Fix: Typo in $adldap->contact()->contactMailEnable() for email address so that the function wouldn't work as intended 23 [-] Bug Fix: $adldap->folder->create() typo would have failed to create the folder correctly 24 [-] Bug Fix: Some uninitialized variable warnings quashed for PHP Strict Mode 25 [-] Bug Fix: Ensure a connection is established before calling ldap_close in __destruct() 26 [-] Bug Fix: #32 undefined offset in getPrimaryGroup() 27 [-] Bug Fix: #31 Non-recursive group()->members method sometimes does not work 28 29 Version 4.0.3 30 ------------- 31 [+] New feature: Added support for homephone attribute to the adLDAP schema 32 [+] New feature: Added getLastLogon($username) to the user model to return a Unix timestamp for the last logon of a user 33 [-] Bug fix: Change strGuidToHex to public function to prevent errors when used with $isGUID = true 34 [-] Bug fix: user()->find() function would cause an undefined array error if full error reporting was enabled 35 [-] Bug fix: #11 If the array "$this->info[0][strtolower($attribute)]" contains a key with 0 (zero), it does not add to the array 36 [-] Bug fix: #22 Typo in adLDAPFolders for listings 37 38 Version 4.0.2 39 ------------- 40 [-] Bug fix: #16 Typo Error in adLDAPGroups.php could cause an error when PHP strict mode error reporting enabled 41 [-] Bug fix: #18 Typo in adLDAPContacts.php affecting info and infoCollection functions failing 42 43 Version 4.0.1 44 ------------- 45 [+] New feature: #13 allow binding over SASL where supported 46 [+] New feature: #12 new $adldap->user()->find() function to find users by searching specific fields 47 [+] New feature: exchange_altrecipient and exchange_deliverandredirect added to adldap_schema 48 [-] Bug fix: $adldap->user()->usernameToGuid() function had invalid parameter in ldap_search function 49 [-] Bug fix: #9 When a password change is attempted but fails due to the configured Active Directory Password Policy. Instead of the error an Exception is thrown. 50 [-] Bug fix: #10 PHP Warning issued for missing array element. Assumes that element ["count"] exists which does not when the login only has one AD group. 51 [-] Bug fix: #8 The ou_create function was giving naming violation errors 52 [-] Bug fix: adldap_schema errors from the version 4.0 changes 53 54 Version 4.0.0 55 ------------- 56 [+] New feature: Version 4 is a complete re-write of the class and is backwards incompatible with version 3 and below. Groups, users, contacts, etc have been seperated into seperate classes and can be called like this $adldap->user()->modify(); or $adldap->group()->create(); 57 58 Version 3.3.2 59 ------------- 60 [+] New feature: Move the user to a new OU using user_move() function 61 [-] Bug fix: Prevent an 'undefined index' error in recursive_groups() when full PHP E_ALL logging is enabled 62 [-] Bug fix: user_groups() does not return primary group when objectsid is not given (Tracker ID:2931213) 63 [-] Bug fix: Undefined index in function user_info for non-existent users (Tracker ID:2922729) 64 [-] Bug fix: Force user_info to find objectCategory of person as if a sAMAccountName also exists in a group it will return that group. (Tracker ID:3006096) 65 [-] Bug fix: Return false for user_info if the user does not exist 66 [-] Bug fix: user_info, checks for for a "count" value that not exist in $entries array if "memberof" isn't passed in $fields array. (Tracker ID:2993172) 67 [-] Bug fix: In authenticate() if user authentication fails function returns and does not rebind with admin credentials - so the other funcions don't work anymore as $this->_bind === false. (Tracker ID:2987887) 68 [-] Bug fix: When calling $ldap->user_modify('user', array("expires"=>0)) the function fails due to the value being 0. Changed to isset (Tracker ID:3036726) 69 [-] Bug fix: When calling user_info allow the username to be either a sAMAccountName or userPrincipalName attribute 70 71 72 Version 3.3.1 73 ------------- 74 [-] Bug fix: Prevent empty $username and $password in authenticate from falling through to the default administrator login 75 76 Version 3.3 77 ----------- 78 79 [+] New feature: Calling adLDAP without LDAP support in PHP will now throw an adLDAPException 80 [+] New feature: Specifying a NULL $_base_dn will now automatically attempt to detect the base_dn from your domain controller 81 [+] New feature: Most user objects can now be queried using a user's GUID as well as their username (samAccountName). Set the $isGUID optional parameter to true. To obtain a user's GUID either use the username2guid() function or decodeGuid() 82 [+] New function: username2guid($username) will return a string representation of the GUID for a given username 83 [+] New function: decodeGuid($binaryGuid) will convert a binary GUID to a string 84 [+] New function: find_base_dn() will return the base_dn from your domain controller 85 [+] New function: get_root_dse($attributes) will return root domain controller configuration attributes such as the default naming context, current DC time, etc 86 [+] New function: exchange_servers($attributes) will return a list of Exchange servers in your domain 87 [+] New function: exchange_storage_groups($exchangeServer, $attributes, $recursive) will return a list of Storage groups on any given Exchange server. Setting $recursive to true (or inheriting from the $_recursive_groups setting will automatically query the databases within a storage group) 88 [+] New function: exchange_storage_databases($storageGroup, $attributes) will return a list of Databases in any given storage group on any given Exchange server 89 [+] New function: exchange_add_X400($username, $country, $admd, $pdmd, $org, $surname, $givenname, $isGUID=false) will add an X400 address to the Exchange server 90 [-] Bug fix: Null comparison error in contact_mailenable() 91 92 Version 3.2 93 ----------- 94 95 [+] New function: user_password_expiry($username) which will return the timestamp and formatted time of when a user's password expires based both on domain policy and user password expiry policy 96 [+] New function: groups_in_group($group, $recursive = NULL) returns a list of groups within a group 97 [+] New function: all_groups() function to list ALL types of group rather than just security groups alone 98 [+] New function: folder_list($folder_name = NULL, $dn_type = ADLDAP_FOLDER, $recursive = NULL, $type = NULL) allows you to navigate the AD folder structure 99 [+] New function: computer_ingroup() 100 [+] New function: computer_groups() 101 [+] New function: connect() 102 [+] New function: disconnect() 103 [+] New feature: Added recursive group lookups to group_members() to recursively get the username of users in a group 104 [+] New feature: TLS support 105 [+] New feature: Added getters and setters for core variables 106 [-] Change: Renamed all_groups() to all_security_groups() 107 [-] Change: Re-written ldap_slashes() function based on a port from Per's Net::LDAP::Util escape_filter_value 108 [-] Bug fix: Attempt to deal with special char + in group_info() 109 [-] Bug fix: user_ingroup() would not allow recursion to be disabled using the $recursive parameter and would only inherit from $_recursive_groups variable 110 [-] Bug fix: Runtime overriding of $recursive group lookups failed due to changes in PHP 5.2 111 112 113 Version 3.1 114 ----------- 115 116 [+] New function: get_last_error() returns the last error returned by your domain controller 117 [+] New feature: Automatically detect and encode 8bit characters when being added to an AD object 118 [+] New feature: Exception handing added for connections or attempting methods that require SSL where it is not set 119 [+] New feature: Added pager to the schema 120 [+] New feature: New method to obtain a user's or contacts primary group that is far less intensive using get_primary_group(). The old group_cn() is now deprecated 121 [-] Change: Only return primary group memberof if a user or contact is returned 122 [-] Bug fix: Contact could not be added to a group 123 [-] Bug fix: bool2str() function caused exchange mailbox creation to fail 124 125 126 Version 3.0 127 ----------- 128 129 [+] New function: user_delete() 130 [+] New feature: Source code comments totally overhauled 131 [+] New feature: Configuration options and functions now have their visibility defined. adLDAP is now PHP 5 compatible only. 132 [+] New feature: Exchange mailbox creation for users 133 [+] New feature: Add new SMTP addresses to a user 134 [+] New feature: Change the default SMTP address for a user 135 [+] New feature: Remove an SMTP address for a user 136 [+] New feature: Mail enable a contact 137 [+] New feature: Create, query, delete contacts 138 [+] New feature: Enable or disable a user with user_enable() or user_disable() 139 [-] Bug fix: Disabling a user did not work