You've already forked joomla_test
first commit
This commit is contained in:
1788
libraries/joomla/client/ftp.php
Normal file
1788
libraries/joomla/client/ftp.php
Normal file
File diff suppressed because it is too large
Load Diff
240
libraries/joomla/client/helper.php
Normal file
240
libraries/joomla/client/helper.php
Normal file
@ -0,0 +1,240 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Client
|
||||
*
|
||||
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* Client helper class
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Client
|
||||
* @since 11.1
|
||||
*/
|
||||
class JClientHelper
|
||||
{
|
||||
/**
|
||||
* Method to return the array of client layer configuration options
|
||||
*
|
||||
* @param string $client Client name, currently only 'ftp' is supported
|
||||
* @param boolean $force Forces re-creation of the login credentials. Set this to
|
||||
* true if login credentials in the session storage have changed
|
||||
*
|
||||
* @return array Client layer configuration options, consisting of at least
|
||||
* these fields: enabled, host, port, user, pass, root
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public static function getCredentials($client, $force = false)
|
||||
{
|
||||
static $credentials = array();
|
||||
|
||||
$client = strtolower($client);
|
||||
|
||||
if (!isset($credentials[$client]) || $force)
|
||||
{
|
||||
$config = JFactory::getConfig();
|
||||
|
||||
// Fetch the client layer configuration options for the specific client
|
||||
switch ($client)
|
||||
{
|
||||
case 'ftp':
|
||||
$options = array(
|
||||
'enabled' => $config->get('ftp_enable'),
|
||||
'host' => $config->get('ftp_host'),
|
||||
'port' => $config->get('ftp_port'),
|
||||
'user' => $config->get('ftp_user'),
|
||||
'pass' => $config->get('ftp_pass'),
|
||||
'root' => $config->get('ftp_root'));
|
||||
break;
|
||||
|
||||
default:
|
||||
$options = array('enabled' => false, 'host' => '', 'port' => '', 'user' => '', 'pass' => '', 'root' => '');
|
||||
break;
|
||||
}
|
||||
|
||||
// If user and pass are not set in global config lets see if they are in the session
|
||||
if ($options['enabled'] == true && ($options['user'] == '' || $options['pass'] == ''))
|
||||
{
|
||||
$session = JFactory::getSession();
|
||||
$options['user'] = $session->get($client . '.user', null, 'JClientHelper');
|
||||
$options['pass'] = $session->get($client . '.pass', null, 'JClientHelper');
|
||||
}
|
||||
|
||||
// If user or pass are missing, disable this client
|
||||
if ($options['user'] == '' || $options['pass'] == '')
|
||||
{
|
||||
$options['enabled'] = false;
|
||||
}
|
||||
|
||||
// Save the credentials for later use
|
||||
$credentials[$client] = $options;
|
||||
}
|
||||
|
||||
return $credentials[$client];
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to set client login credentials
|
||||
*
|
||||
* @param string $client Client name, currently only 'ftp' is supported
|
||||
* @param string $user Username
|
||||
* @param string $pass Password
|
||||
*
|
||||
* @return boolean True if the given login credentials have been set and are valid
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public static function setCredentials($client, $user, $pass)
|
||||
{
|
||||
$return = false;
|
||||
$client = strtolower($client);
|
||||
|
||||
// Test if the given credentials are valid
|
||||
switch ($client)
|
||||
{
|
||||
case 'ftp':
|
||||
$config = JFactory::getConfig();
|
||||
$options = array('enabled' => $config->get('ftp_enable'), 'host' => $config->get('ftp_host'), 'port' => $config->get('ftp_port'));
|
||||
|
||||
if ($options['enabled'])
|
||||
{
|
||||
$ftp = JClientFtp::getInstance($options['host'], $options['port']);
|
||||
|
||||
// Test the connection and try to log in
|
||||
if ($ftp->isConnected())
|
||||
{
|
||||
if ($ftp->login($user, $pass))
|
||||
{
|
||||
$return = true;
|
||||
}
|
||||
$ftp->quit();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ($return)
|
||||
{
|
||||
// Save valid credentials to the session
|
||||
$session = JFactory::getSession();
|
||||
$session->set($client . '.user', $user, 'JClientHelper');
|
||||
$session->set($client . '.pass', $pass, 'JClientHelper');
|
||||
|
||||
// Force re-creation of the data saved within JClientHelper::getCredentials()
|
||||
self::getCredentials($client, true);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to determine if client login credentials are present
|
||||
*
|
||||
* @param string $client Client name, currently only 'ftp' is supported
|
||||
*
|
||||
* @return boolean True if login credentials are available
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public static function hasCredentials($client)
|
||||
{
|
||||
$return = false;
|
||||
$client = strtolower($client);
|
||||
|
||||
// Get (unmodified) credentials for this client
|
||||
switch ($client)
|
||||
{
|
||||
case 'ftp':
|
||||
$config = JFactory::getConfig();
|
||||
$options = array('enabled' => $config->get('ftp_enable'), 'user' => $config->get('ftp_user'), 'pass' => $config->get('ftp_pass'));
|
||||
break;
|
||||
|
||||
default:
|
||||
$options = array('enabled' => false, 'user' => '', 'pass' => '');
|
||||
break;
|
||||
}
|
||||
|
||||
if ($options['enabled'] == false)
|
||||
{
|
||||
// The client is disabled in global config, so let's pretend we are OK
|
||||
$return = true;
|
||||
}
|
||||
elseif ($options['user'] != '' && $options['pass'] != '')
|
||||
{
|
||||
// Login credentials are available in global config
|
||||
$return = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Check if login credentials are available in the session
|
||||
$session = JFactory::getSession();
|
||||
$user = $session->get($client . '.user', null, 'JClientHelper');
|
||||
$pass = $session->get($client . '.pass', null, 'JClientHelper');
|
||||
|
||||
if ($user != '' && $pass != '')
|
||||
{
|
||||
$return = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether input fields for client settings need to be shown
|
||||
*
|
||||
* If valid credentials were passed along with the request, they are saved to the session.
|
||||
* This functions returns an exception if invalid credentials have been given or if the
|
||||
* connection to the server failed for some other reason.
|
||||
*
|
||||
* @param string $client The name of the client.
|
||||
*
|
||||
* @return mixed True, if FTP settings; JError if using legacy tree.
|
||||
*
|
||||
* @since 11.1
|
||||
* @throws InvalidArgumentException if credentials invalid
|
||||
*/
|
||||
public static function setCredentialsFromRequest($client)
|
||||
{
|
||||
// Determine whether FTP credentials have been passed along with the current request
|
||||
$input = JFactory::getApplication()->input;
|
||||
$user = $input->post->getString('username', null);
|
||||
$pass = $input->post->getString('password', null);
|
||||
|
||||
if ($user != '' && $pass != '')
|
||||
{
|
||||
// Add credentials to the session
|
||||
if (self::setCredentials($client, $user, $pass))
|
||||
{
|
||||
$return = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (class_exists('JError'))
|
||||
{
|
||||
$return = JError::raiseWarning('SOME_ERROR_CODE', JText::_('JLIB_CLIENT_ERROR_HELPER_SETCREDENTIALSFROMREQUEST_FAILED'));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidArgumentException('Invalid user credentials');
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Just determine if the FTP input fields need to be shown
|
||||
$return = !self::hasCredentials('ftp');
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
1
libraries/joomla/client/index.html
Normal file
1
libraries/joomla/client/index.html
Normal file
@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
683
libraries/joomla/client/ldap.php
Normal file
683
libraries/joomla/client/ldap.php
Normal file
@ -0,0 +1,683 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Client
|
||||
*
|
||||
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE
|
||||
*/
|
||||
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
/**
|
||||
* LDAP client class
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Client
|
||||
* @since 12.1
|
||||
*/
|
||||
class JClientLdap
|
||||
{
|
||||
/**
|
||||
* @var string Hostname of LDAP server
|
||||
* @since 12.1
|
||||
*/
|
||||
public $host = null;
|
||||
|
||||
/**
|
||||
* @var bool Authorization Method to use
|
||||
* @since 12.1
|
||||
*/
|
||||
public $auth_method = null;
|
||||
|
||||
/**
|
||||
* @var int Port of LDAP server
|
||||
* @since 12.1
|
||||
*/
|
||||
public $port = null;
|
||||
|
||||
/**
|
||||
* @var string Base DN (e.g. o=MyDir)
|
||||
* @since 12.1
|
||||
*/
|
||||
public $base_dn = null;
|
||||
|
||||
/**
|
||||
* @var string User DN (e.g. cn=Users,o=MyDir)
|
||||
* @since 12.1
|
||||
*/
|
||||
public $users_dn = null;
|
||||
|
||||
/**
|
||||
* @var string Search String
|
||||
* @since 12.1
|
||||
*/
|
||||
public $search_string = null;
|
||||
|
||||
/**
|
||||
* @var boolean Use LDAP Version 3
|
||||
* @since 12.1
|
||||
*/
|
||||
public $use_ldapV3 = null;
|
||||
|
||||
/**
|
||||
* @var boolean No referrals (server transfers)
|
||||
* @since 11.1
|
||||
*/
|
||||
public $no_referrals = null;
|
||||
|
||||
/**
|
||||
* @var boolean Negotiate TLS (encrypted communications)
|
||||
* @since 12.1
|
||||
*/
|
||||
public $negotiate_tls = null;
|
||||
|
||||
/**
|
||||
* @var string Username to connect to server
|
||||
* @since 12.1
|
||||
*/
|
||||
public $username = null;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var string Password to connect to server
|
||||
* @since 12.1
|
||||
*/
|
||||
public $password = null;
|
||||
|
||||
/**
|
||||
* @var mixed LDAP Resource Identifier
|
||||
* @since 12.1
|
||||
*/
|
||||
private $_resource = null;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var string Current DN
|
||||
* @since 12.1
|
||||
*/
|
||||
private $_dn = null;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param object $configObj An object of configuration variables
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function __construct($configObj = null)
|
||||
{
|
||||
if (is_object($configObj))
|
||||
{
|
||||
$vars = get_class_vars(get_class($this));
|
||||
|
||||
foreach (array_keys($vars) as $var)
|
||||
{
|
||||
if (substr($var, 0, 1) != '_')
|
||||
{
|
||||
$param = $configObj->get($var);
|
||||
|
||||
if ($param)
|
||||
{
|
||||
$this->$var = $param;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to server
|
||||
*
|
||||
* @return boolean True if successful
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function connect()
|
||||
{
|
||||
if ($this->host == '')
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->_resource = @ ldap_connect($this->host, $this->port);
|
||||
|
||||
if ($this->_resource)
|
||||
{
|
||||
if ($this->use_ldapV3)
|
||||
{
|
||||
if (!@ldap_set_option($this->_resource, LDAP_OPT_PROTOCOL_VERSION, 3))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!@ldap_set_option($this->_resource, LDAP_OPT_REFERRALS, (int) $this->no_referrals))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->negotiate_tls)
|
||||
{
|
||||
if (!@ldap_start_tls($this->_resource))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the connection
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
@ ldap_close($this->_resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the DN with some template replacements
|
||||
*
|
||||
* @param string $username The username
|
||||
* @param string $nosub ...
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function setDN($username, $nosub = 0)
|
||||
{
|
||||
if ($this->users_dn == '' || $nosub)
|
||||
{
|
||||
$this->_dn = $username;
|
||||
}
|
||||
elseif (strlen($username))
|
||||
{
|
||||
$this->_dn = str_replace('[username]', $username, $this->users_dn);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_dn = '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the DN
|
||||
*
|
||||
* @return string The current dn
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function getDN()
|
||||
{
|
||||
return $this->_dn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Anonymously binds to LDAP directory
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function anonymous_bind()
|
||||
{
|
||||
$bindResult = @ldap_bind($this->_resource);
|
||||
|
||||
return $bindResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Binds to the LDAP directory
|
||||
*
|
||||
* @param string $username The username
|
||||
* @param string $password The password
|
||||
* @param string $nosub ...
|
||||
*
|
||||
* @return boolean
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function bind($username = null, $password = null, $nosub = 0)
|
||||
{
|
||||
if (is_null($username))
|
||||
{
|
||||
$username = $this->username;
|
||||
}
|
||||
|
||||
if (is_null($password))
|
||||
{
|
||||
$password = $this->password;
|
||||
}
|
||||
|
||||
$this->setDN($username, $nosub);
|
||||
$bindResult = @ldap_bind($this->_resource, $this->getDN(), $password);
|
||||
|
||||
return $bindResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an LDAP search using comma separated search strings
|
||||
*
|
||||
* @param string $search search string of search values
|
||||
*
|
||||
* @return array Search results
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function simple_search($search)
|
||||
{
|
||||
$results = explode(';', $search);
|
||||
|
||||
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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function search(array $filters, $dnoverride = null, array $attributes = array())
|
||||
{
|
||||
$result = array();
|
||||
|
||||
if ($dnoverride)
|
||||
{
|
||||
$dn = $dnoverride;
|
||||
}
|
||||
else
|
||||
{
|
||||
$dn = $this->base_dn;
|
||||
}
|
||||
|
||||
$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++)
|
||||
{
|
||||
$result[$i] = array();
|
||||
|
||||
if (!$i)
|
||||
{
|
||||
$firstentry = @ldap_first_entry($resource, $search_result);
|
||||
}
|
||||
else
|
||||
{
|
||||
$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)
|
||||
{
|
||||
if (is_array($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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
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)
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
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)
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
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)
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function read($dn)
|
||||
{
|
||||
$base = substr($dn, strpos($dn, ',') + 1);
|
||||
$cn = substr($dn, 0, strpos($dn, ','));
|
||||
$result = @ldap_read($this->_resource, $base, $cn);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
return @ldap_get_entries($this->_resource, $result);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function delete($dn)
|
||||
{
|
||||
return @ldap_delete($this->_resource, $dn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new 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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function add($dn, array $entry)
|
||||
{
|
||||
return @ldap_mod_add($this->_resource, $dn, $entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename the 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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function rename($dn, $newdn, $newparent, $deleteolddn)
|
||||
{
|
||||
return @ldap_rename($this->_resource, $dn, $newdn, $newparent, $deleteolddn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the error message
|
||||
*
|
||||
* @return string error message
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public function getErrorMsg()
|
||||
{
|
||||
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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public static function ipToNetAddress($ip)
|
||||
{
|
||||
$parts = explode('.', $ip);
|
||||
$address = '1#';
|
||||
|
||||
foreach ($parts as $int)
|
||||
{
|
||||
$tmp = dechex($int);
|
||||
|
||||
if (strlen($tmp) != 2)
|
||||
{
|
||||
$tmp = '0' . $tmp;
|
||||
}
|
||||
|
||||
$address .= '\\' . $tmp;
|
||||
}
|
||||
|
||||
return $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
|
||||
* LDAP Format, String:
|
||||
* 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
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @author Jay Burrell, Systems & Networks, Mississippi State University
|
||||
* @since 12.1
|
||||
*/
|
||||
public static function LDAPNetAddr($networkaddress)
|
||||
{
|
||||
$addr = "";
|
||||
$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));
|
||||
}
|
||||
|
||||
$addrtypes = array(
|
||||
'IPX',
|
||||
'IP',
|
||||
'SDLC',
|
||||
'Token Ring',
|
||||
'OSI',
|
||||
'AppleTalk',
|
||||
'NetBEUI',
|
||||
'Socket',
|
||||
'UDP',
|
||||
'TCP',
|
||||
'UDP6',
|
||||
'TCP6',
|
||||
'Reserved (12)',
|
||||
'URL',
|
||||
'Count');
|
||||
$len = strlen($networkaddress);
|
||||
|
||||
if ($len > 0)
|
||||
{
|
||||
for ($i = 0; $i < $len; $i++)
|
||||
{
|
||||
$byte = substr($networkaddress, $i, 1);
|
||||
$addr .= ord($byte);
|
||||
|
||||
if (($addrtype == 1) || ($addrtype == 8) || ($addrtype = 9))
|
||||
{
|
||||
// Dot separate IP addresses...
|
||||
$addr .= ".";
|
||||
}
|
||||
}
|
||||
if (($addrtype == 1) || ($addrtype == 8) || ($addrtype = 9))
|
||||
{
|
||||
// Strip last period from end of $addr
|
||||
$addr = substr($addr, 0, strlen($addr) - 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$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
|
||||
*
|
||||
* @since 12.1
|
||||
*/
|
||||
public static function generatePassword($password, $type = 'md5')
|
||||
{
|
||||
switch (strtolower($type))
|
||||
{
|
||||
case 'sha':
|
||||
$userpassword = '{SHA}' . base64_encode(pack('H*', sha1($password)));
|
||||
break;
|
||||
case 'md5':
|
||||
default:
|
||||
$userpassword = '{MD5}' . base64_encode(pack('H*', md5($password)));
|
||||
break;
|
||||
}
|
||||
|
||||
return $userpassword;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deprecated class placeholder. You should use JClientLdap instead.
|
||||
*
|
||||
* @package Joomla.Platform
|
||||
* @subpackage Client
|
||||
* @since 11.1
|
||||
* @deprecated 12.3 (Platform) & 4.0 (CMS)
|
||||
*/
|
||||
class JLDAP extends JClientLdap
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param object $configObj An object of configuration variables
|
||||
*
|
||||
* @since 11.1
|
||||
*/
|
||||
public function __construct($configObj = null)
|
||||
{
|
||||
JLog::add('JLDAP is deprecated. Use JClientLdap instead.', JLog::WARNING, 'deprecated');
|
||||
parent::__construct($configObj);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user