Source for file ldap.php
Documentation is available at ldap.php
* @package Joomla.Platform
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @package Joomla.Platform
* @var string Hostname of LDAP server
* @var bool Authorization Method to use
* @var int Port of LDAP server
* @var string Base DN (e.g. o=MyDir)
* @var string User DN (e.g. cn=Users,o=MyDir)
* @var string Search String
* @var boolean Use LDAP Version 3
* @var boolean No referrals (server transfers)
* @var boolean Negotiate TLS (encrypted communications)
* @var string Username to connect to server
* @var string Password to connect to server
* @var mixed LDAP Resource Identifier
private $_resource =
null;
* @param object $configObj An object of configuration variables
if (substr($var, 0, 1) !=
'_')
$param =
$configObj->get($var);
* @return boolean True if successful
$this->_resource =
@ ldap_connect($this->host, $this->port);
if (!@ldap_set_option($this->_resource, LDAP_OPT_PROTOCOL_VERSION, 3))
if (!@ldap_set_option($this->_resource, LDAP_OPT_REFERRALS, (int)
$this->no_referrals))
if (!@ldap_start_tls($this->_resource))
@ ldap_close($this->_resource);
* Sets the DN with some template replacements
* @param string $username The username
* @param string $nosub ...
public function setDN($username, $nosub =
0)
* @return string The current dn
* Anonymously binds to LDAP directory
$bindResult =
@ldap_bind($this->_resource);
* Binds to the LDAP directory
* @param string $username The username
* @param string $password The password
* @param string $nosub ...
public function bind($username =
null, $password =
null, $nosub =
0)
$this->setDN($username, $nosub);
$bindResult =
@ldap_bind($this->_resource, $this->getDN(), $password);
* Perform an LDAP search using comma separated search strings
* @param string $search search string of search values
* @return array Search results
foreach ($results as $key =>
$result)
$results[$key] =
'(' .
$result .
')';
return $this->search($results);
* Performs an LDAP search
* @param array $filters Search Filters (array of strings)
* @param string $dnoverride DN Override
* @param array $attributes An array of attributes to return (if empty, all fields are returned).
* @return array Multidimensional array of results
public function search(array $filters, $dnoverride =
null, array $attributes =
array())
$resource =
$this->_resource;
foreach ($filters as $search_filter)
$search_result =
@ldap_search($resource, $dn, $search_filter, $attributes);
if ($search_result &&
($count =
@ldap_count_entries($resource, $search_result)) >
0)
for ($i =
0; $i <
$count; $i++
)
$firstentry =
@ldap_first_entry($resource, $search_result);
$firstentry =
@ldap_next_entry($resource, $firstentry);
// Load user-specified attributes
$result_array =
@ldap_get_attributes($resource, $firstentry);
// LDAP returns an array of arrays, fit this into attributes result array
foreach ($result_array as $ki =>
$ai)
$subcount =
$ai['count'];
$result[$i][$ki] =
array();
for ($k =
0; $k <
$subcount; $k++
)
$result[$i][$ki][$k] =
$ai[$k];
$result[$i]['dn'] =
@ldap_get_dn($resource, $firstentry);
* Replace an entry and return a true or false result
* @param string $dn The DN which contains the attribute you want to replace
* @param string $attribute The attribute values you want to replace
* @return mixed result of comparison (true, false, -1 on error)
public function replace($dn, $attribute)
return @ldap_mod_replace($this->_resource, $dn, $attribute);
* Modifies an entry and return a true or false result
* @param string $dn The DN which contains the attribute you want to modify
* @param string $attribute The attribute values you want to modify
* @return mixed result of comparison (true, false, -1 on error)
public function modify($dn, $attribute)
return @ldap_modify($this->_resource, $dn, $attribute);
* Removes attribute value from given dn and return a true or false result
* @param string $dn The DN which contains the attribute you want to remove
* @param string $attribute The attribute values you want to remove
* @return mixed result of comparison (true, false, -1 on error)
public function remove($dn, $attribute)
$resource =
$this->_resource;
return @ldap_mod_del($resource, $dn, $attribute);
* Compare an entry and return a true or false result
* @param string $dn The DN which contains the attribute you want to compare
* @param string $attribute The attribute whose value you want to compare
* @param string $value The value you want to check against the LDAP attribute
* @return mixed result of comparison (true, false, -1 on error)
public function compare($dn, $attribute, $value)
return @ldap_compare($this->_resource, $dn, $attribute, $value);
* Read all or specified attributes of given dn
* @param string $dn The DN of the object you want to read
* @return mixed array of attributes or -1 on error
public function read($dn)
$result =
@ldap_read($this->_resource, $base, $cn);
return @ldap_get_entries($this->_resource, $result);
* Deletes a given DN from the tree
* @param string $dn The DN of the object you want to delete
* @return boolean Result of operation
return @ldap_delete($this->_resource, $dn);
* @param string $dn The DN where you want to put the object
* @param array $entries An array of arrays describing the object to add
* @return boolean Result of operation
public function create($dn, array $entries)
return @ldap_add($this->_resource, $dn, $entries);
* Add an attribute to the given DN
* Note: DN has to exist already
* @param string $dn The DN of the entry to add the attribute
* @param array $entry An array of arrays with attributes to add
* @return boolean Result of operation
public function add($dn, array $entry)
return @ldap_mod_add($this->_resource, $dn, $entry);
* @param string $dn The DN of the entry at the moment
* @param string $newdn The DN of the entry should be (only cn=newvalue)
* @param string $newparent The full DN of the parent (null by default)
* @param boolean $deleteolddn Delete the old values (default)
* @return boolean Result of operation
public function rename($dn, $newdn, $newparent, $deleteolddn)
return @ldap_rename($this->_resource, $dn, $newdn, $newparent, $deleteolddn);
* Returns the error message
* @return string error message
return @ldap_error($this->_resource);
* Converts a dot notation IP address to net address (e.g. for Netware, etc)
* @param string $ip IP Address (e.g. xxx.xxx.xxx.xxx)
* @return string Net address
* Extract readable network address from the LDAP encoded networkAddress attribute.
* Please keep this document block and author attribution in place.
* Novell Docs, see: http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5624.html#sdk5624
* for Address types: http://developer.novell.com/ndk/doc/ndslib/index.html?page=/ndk/doc/ndslib/schm_enu/data/sdk4170.html
* taggedData = uint32String "#" octetstring
* byte 0 = uint32String = Address Type: 0= IPX Address; 1 = IP Address
* byte 1 = char = "#" - separator
* byte 2+ = octetstring - the ordinal value of the address
* Note: with eDirectory 8.6.2, the IP address (type 1) returns
* correctly, however, an IPX address does not seem to. eDir 8.7 may correct this.
* Enhancement made by Merijn van de Schoot:
* If addresstype is 8 (UDP) or 9 (TCP) do some additional parsing like still returning the IP address
* @param string $networkaddress The network address
* @author Jay Burrell, Systems & Networks, Mississippi State University
$addrtype = (int)
substr($networkaddress, 0, 1);
// Throw away bytes 0 and 1 which should be the addrtype and the "#" separator
$networkaddress =
substr($networkaddress, 2);
if (($addrtype ==
8) ||
($addrtype =
9))
// TODO 1.6: If UDP or TCP, (TODO fill addrport and) strip portnumber information from address
$networkaddress =
substr($networkaddress, (strlen($networkaddress) -
4));
$len =
strlen($networkaddress);
for ($i =
0; $i <
$len; $i++
)
$byte =
substr($networkaddress, $i, 1);
if (($addrtype ==
1) ||
($addrtype ==
8) ||
($addrtype =
9))
// Dot separate IP addresses...
if (($addrtype ==
1) ||
($addrtype ==
8) ||
($addrtype =
9))
// Strip last period from end of $addr
$addr .=
JText::_('JLIB_CLIENT_ERROR_LDAP_ADDRESS_NOT_AVAILABLE');
return array('protocol' =>
$addrtypes[$addrtype], 'address' =>
$addr);
* Generates a LDAP compatible password
* @param string $password Clear text password to encrypt
* @param string $type Type of password hash, either md5 or SHA
* @return string Encrypted password
* Deprecated class placeholder. You should use JClientLdap instead.
* @package Joomla.Platform
* @deprecated 12.3 (Platform) & 4.0 (CMS)
* @param object $configObj An object of configuration variables
JLog::add('JLDAP is deprecated. Use JClientLdap instead.', JLog::WARNING, 'deprecated');
Documentation generated on Tue, 19 Nov 2013 15:06:44 +0100 by phpDocumentor 1.4.3