* [NOT IMPLEMENTED] DNs might also contain values, which are the bytes of
* the BER encoding of the X.500 AttributeValue rather than some LDAP
* string syntax. These values are hex-encoded and prefixed with a #. To
- * distinguish such BER values, ldap_explode_dn uses references to the
+ * distinguish such BER values, explodeDN uses references to the
* actual values, e.g. '1.3.6.1.4.1.1466.0=#04024869,DC=example,DC=com' is
* exploded to:
* <code>
*
* @return array Parts of the exploded DN.
*/
- public static function ldap_explode_dn($dn, array $options = array())
+ public static function explodeDN($dn, array $options = array())
{
if (!isset($options['onlyvalues'])) {
$options['onlyvalues'] = false;
}
// Escaping of DN and stripping of "OID.".
- $dn = self::canonical_dn($dn, array('casefold' => $options['casefold']));
+ $dn = self::canonicalDN($dn, array('casefold' => $options['casefold']));
// Splitting the DN.
$dn_array = preg_split('/(?<=[^\\\\]),/', $dn);
// Clear wrong splitting (possibly we have split too much).
// Not clear, if this is neccessary here:
- //$dn_array = self::_correct_dn_splitting($dn_array, ',');
+ //$dn_array = self::_correctDNSplitting($dn_array, ',');
// Construct subarrays for multivalued RDNs and unescape DN value, also
// convert to output format and apply casefolding.
foreach ($dn_array as $key => $value) {
- $value_u = self::unescape_dn_value($value);
- $rdns = self::split_rdn_multival($value_u[0]);
+ $value_u = self::unescapeDNValue($value);
+ $rdns = self::splitRDNMultivalue($value_u[0]);
// TODO: nuke code duplication
if (count($rdns) > 1) {
// Multivalued RDN!
preg_match('/(.+?)(?<!\\\\)=(.+)/', $subrdn_v, $matches);
$rdn_ocl = $matches[1];
$rdn_val = $matches[2];
- $unescaped = self::unescape_dn_value($rdn_val);
+ $unescaped = self::unescapeDNValue($rdn_val);
$rdns[$subrdn_k] = $unescaped[0];
} else {
- $unescaped = self::unescape_dn_value($subrdn_v);
+ $unescaped = self::unescapeDNValue($subrdn_v);
$rdns[$subrdn_k] = $unescaped[0];
}
}
preg_match('/(.+?)(?<!\\\\)=(.+)/', $value, $matches);
$dn_ocl = $matches[1];
$dn_val = $matches[2];
- $unescaped = self::unescape_dn_value($dn_val);
+ $unescaped = self::unescapeDNValue($dn_val);
$dn_array[$key] = $unescaped[0];
} else {
- $unescaped = self::unescape_dn_value($value);
+ $unescaped = self::unescapeDNValue($value);
$dn_array[$key] = $unescaped[0];
}
}
*
* @return array The escaped values.
*/
- public static function escape_dn_value($values)
+ public static function escapeDNValue($values)
{
// Parameter validation.
if (!is_array($values)) {
/**
* Unescapes DN values according to RFC 2253.
*
- * Reverts the conversion done by escape_dn_value().
+ * Reverts the conversion done by escapeDNValue().
*
* Any escape sequence starting with a baskslash - hexpair or special
* character - will be transformed back to the corresponding character.
*
* @return array Unescaped DN values.
*/
- public static function unescape_dn_value($values)
+ public static function unescapeDNValue($values)
{
// Parameter validation.
if (!is_array($values)) {
/**
* Converts a DN into a canonical form.
*
- * DN can either be a string or an array as returned by ldap_explode_dn(),
+ * DN can either be a string or an array as returned by explodeDN(),
* which is useful when constructing a DN. The DN array may have be
* indexed (each array value is a OCL=VALUE pair) or associative (array key
* is OCL and value is VALUE).
*
* @return boolean|string The canonical DN or false if the DN is not valid.
*/
- public static function canonical_dn($dn, $options = array())
+ public static function canonicalDN($dn, $options = array())
{
if ($dn === '') {
// Empty DN is valid.
$dn = preg_split('/(?<=[^\\\\])' . $options['separator'] . '/', $dn);
// Clear wrong splitting (possibly we have split too much).
- $dn = self::_correct_dn_splitting($dn, $options['separator']);
+ $dn = self::_correctDNSplitting($dn, $options['separator']);
} else {
// Is array, check if the array is indexed or associative.
$assoc = false;
if (!is_int($subkey)) {
$subval = $subkey . '=' . $subval;
}
- $subval_processed = self::canonical_dn($subval);
+ $subval_processed = self::canonicalDN($subval);
if (false === $subval_processed) {
return false;
}
$dn[$pos] = substr($dnval_new, 0, -1);
} else {
// Try to split multivalued RDNs into array.
- $rdns = self::split_rdn_multival($dnval);
+ $rdns = self::splitRDNMultivalue($dnval);
if (count($rdns) > 1) {
// Multivalued RDN was detected. The RDN value is expected
- // to be correctly split by split_rdn_multival(). It's time
+ // to be correctly split by splitRDNMultivalue(). It's time
// to sort the RDN and build the DN.
$rdn_string = '';
// Sort RDN keys alphabetically.
sort($rdns, SORT_STRING);
foreach ($rdns as $rdn) {
- $subval_processed = self::canonical_dn($rdn);
+ $subval_processed = self::canonicalDN($rdn);
if (false === $subval_processed) {
return false;
}
if ($options['casefold'] == 'lower') {
$ocl = strtolower($ocl);
}
- $ocl = self::escape_dn_value(array($ocl));
+ $ocl = self::escapeDNValue(array($ocl));
$ocl = $ocl[0];
}
// Escaping of DN value.
- $val = self::escape_dn_value(array($val));
+ $val = self::escapeDNValue(array($val));
$val = str_replace('/', '\/', $val[0]);
$dn[$pos] = $ocl . '=' . $val;
*
* @return array Escaped values.
*/
- public static function escape_filter_value($values)
+ public static function escapeFilterValue($values)
{
// Parameter validation.
if (!is_array($values)) {
/**
* Unescapes the given values according to RFC 2254.
*
- * Reverses the conversion done by {@link escape_filter_value()}.
+ * Reverses the conversion done by {@link escapeFilterValue()}.
*
* Converts any sequences of a backslash followed by two hex digits into
* the corresponding character.
*
* @return array Unescaped values.
*/
- public static function unescape_filter_value($values = array())
+ public static function unescapeFilterValue($values = array())
{
// Parameter validation.
if (!is_array($values)) {
*
* @return array The components of the multivalued RDN.
*/
- public static function split_rdn_multival($rdn)
+ public static function splitRDNMultivalue($rdn)
{
$rdns = preg_split('/(?<!\\\\)\+/', $rdn);
- $rdns = self::_correct_dn_splitting($rdns, '+');
+ $rdns = self::_correctDNSplitting($rdns, '+');
return array_values($rdns);
}
*
* @return array Indexed array: 0=attribute name, 1=attribute value.
*/
- public static function split_attribute_string($attr)
+ public static function splitAttributeString($attr)
{
return preg_split('/(?<!\\\\)=/', $attr, 2);
}
*
* @return array Corrected array.
*/
- protected static function _correct_dn_splitting($dn = array(),
+ protected static function _correctDNSplitting($dn = array(),
$separator = ',')
{
foreach ($dn as $key => $dn_value) {
class Horde_Ldap_UtilTest extends PHPUnit_Framework_TestCase
{
/**
- * Test escape_dn_value()
+ * Test escapeDNValue()
*/
public function testEscape_dn_value()
{
// String call.
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::escape_dn_value($dnval));
+ Horde_Ldap_Util::escapeDNValue($dnval));
// Array call.
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::escape_dn_value(array($dnval)));
+ Horde_Ldap_Util::escapeDNValue(array($dnval)));
// Multiple arrays.
$this->assertEquals(
array($expected, $expected, $expected),
- Horde_Ldap_Util::escape_dn_value(array($dnval, $dnval, $dnval)));
+ Horde_Ldap_Util::escapeDNValue(array($dnval, $dnval, $dnval)));
}
/**
- * Test unescape_dn_value()
+ * Test unescapeDNValue()
*/
- public function testUnescape_dn_value()
+ public function testUnescapeDNValue()
{
$dnval = '\\20\\20\\16\\20t\\,e\\+s \\"t\\,\\\\v\\<a\\>l\\;u\\#e\\=!\\20\\20\\20\\20';
$expected = ' ' . chr(22) . ' t,e+s "t,\\v<a>l;u#e=! ';
// String call.
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::unescape_dn_value($dnval));
+ Horde_Ldap_Util::unescapeDNValue($dnval));
// Array call.
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::unescape_dn_value(array($dnval)));
+ Horde_Ldap_Util::unescapeDNValue(array($dnval)));
// Multiple arrays.
$this->assertEquals(
array($expected, $expected, $expected),
- Horde_Ldap_Util::unescape_dn_value(array($dnval, $dnval, $dnval)));
+ Horde_Ldap_Util::unescapeDNValue(array($dnval, $dnval, $dnval)));
}
/**
// String call
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::escape_filter_value($filterval));
+ Horde_Ldap_Util::escapeFilterValue($filterval));
// Array call.
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::escape_filter_value(array($filterval)));
+ Horde_Ldap_Util::escapeFilterValue(array($filterval)));
// Multiple arrays.
$this->assertEquals(
array($expected, $expected, $expected),
- Horde_Ldap_Util::escape_filter_value(array($filterval, $filterval, $filterval)));
+ Horde_Ldap_Util::escapeFilterValue(array($filterval, $filterval, $filterval)));
}
/**
* Test unescaping of filter values.
*/
- public function testUnescape_filter_value()
+ public function testUnescapeFilterValue()
{
$expected = 't(e,s)t*v\\al' . chr(30) . 'ue';
$filterval = 't\28e,s\29t\2av\5cal\1eue';
// String call
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::unescape_filter_value($filterval));
+ Horde_Ldap_Util::unescapeFilterValue($filterval));
// Array call.
$this->assertEquals(
array($expected),
- Horde_Ldap_Util::unescape_filter_value(array($filterval)));
+ Horde_Ldap_Util::unescapeFilterValue(array($filterval)));
// Multiple arrays.
$this->assertEquals(
array($expected, $expected, $expected),
- Horde_Ldap_Util::unescape_filter_value(array($filterval, $filterval, $filterval)));
+ Horde_Ldap_Util::unescapeFilterValue(array($filterval, $filterval, $filterval)));
}
/**
}
/**
- * Tests split_rdn_multival()
+ * Tests splitRDNMultivalue()
*
* In addition to the above test of the basic split correction, we test
* here the functionality of multivalued RDNs.
// One value.
$rdn = 'CN=J. Smith';
$expected = array('CN=J. Smith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Two values.
$rdn = 'OU=Sales+CN=J. Smith';
$expected = array('OU=Sales', 'CN=J. Smith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Several multivals.
$rdn = 'OU=Sales+CN=J. Smith+L=London+C=England';
$expected = array('OU=Sales', 'CN=J. Smith', 'L=London', 'C=England');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Unescaped "+" in value.
$rdn = 'OU=Sa+les+CN=J. Smith';
$expected = array('OU=Sa+les', 'CN=J. Smith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Unescaped "+" in attr name.
$rdn = 'O+U=Sales+CN=J. Smith';
$expected = array('O+U=Sales', 'CN=J. Smith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Unescaped "+" in attr name + value.
$rdn = 'O+U=Sales+CN=J. Sm+ith';
$expected = array('O+U=Sales', 'CN=J. Sm+ith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Unescaped "+" in attribute name, but not first attribute. This
$rdn = 'OU=Sales+C+N=J. Smith';
// The "C+" is treaten as value of "OU".
$expected = array('OU=Sales+C', 'N=J. Smith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
// Escaped "+" in attribute name and value.
$rdn = 'O\+U=Sales+CN=J. Sm\+ith';
$expected = array('O\+U=Sales', 'CN=J. Sm\+ith');
- $split = Horde_Ldap_Util::split_rdn_multival($rdn);
+ $split = Horde_Ldap_Util::splitRDNMultivalue($rdn);
$this->assertEquals($expected, $split);
}
// Properly.
$expected = array('foo', 'bar');
- $split = Horde_Ldap_Util::split_attribute_string($attr_str);
+ $split = Horde_Ldap_Util::splitAttributeString($attr_str);
$this->assertEquals($expected, $split);
// Escaped "=".
$attr_str = "fo\=o=b\=ar";
$expected = array('fo\=o', 'b\=ar');
- $split = Horde_Ldap_Util::split_attribute_string($attr_str);
+ $split = Horde_Ldap_Util::splitAttributeString($attr_str);
$this->assertEquals($expected, $split);
// Escaped "=" and unescaped = later on.
$attr_str = "fo\=o=b=ar";
$expected = array('fo\=o', 'b=ar');
- $split = Horde_Ldap_Util::split_attribute_string($attr_str);
+ $split = Horde_Ldap_Util::splitAttributeString($attr_str);
$this->assertEquals($expected, $split);
}
$expected_reverse = array_reverse($expected_casefold_upper);
- $dn_exploded_cnone = Horde_Ldap_Util::ldap_explode_dn($dn, array('casefold' => 'none'));
+ $dn_exploded_cnone = Horde_Ldap_Util::explodeDN($dn, array('casefold' => 'none'));
$this->assertEquals($expected_casefold_none, $dn_exploded_cnone, 'Option casefold none failed');
- $dn_exploded_cupper = Horde_Ldap_Util::ldap_explode_dn($dn, array('casefold' => 'upper'));
+ $dn_exploded_cupper = Horde_Ldap_Util::explodeDN($dn, array('casefold' => 'upper'));
$this->assertEquals($expected_casefold_upper, $dn_exploded_cupper, 'Option casefold upper failed');
- $dn_exploded_clower = Horde_Ldap_Util::ldap_explode_dn($dn, array('casefold' => 'lower'));
+ $dn_exploded_clower = Horde_Ldap_Util::explodeDN($dn, array('casefold' => 'lower'));
$this->assertEquals($expected_casefold_lower, $dn_exploded_clower, 'Option casefold lower failed');
- $dn_exploded_onlyval = Horde_Ldap_Util::ldap_explode_dn($dn, array('onlyvalues' => true));
+ $dn_exploded_onlyval = Horde_Ldap_Util::explodeDN($dn, array('onlyvalues' => true));
$this->assertEquals($expected_onlyvalues, $dn_exploded_onlyval, 'Option onlyval failed');
- $dn_exploded_reverse = Horde_Ldap_Util::ldap_explode_dn($dn, array('reverse' => true));
+ $dn_exploded_reverse = Horde_Ldap_Util::explodeDN($dn, array('reverse' => true));
$this->assertEquals($expected_reverse, $dn_exploded_reverse, 'Option reverse failed');
}
/**
- * Tests if canonical_dn() works.
+ * Tests if canonicalDN() works.
*
- * Note: This tests depend on the default options of canonical_dn().
+ * Note: This tests depend on the default options of canonicalDN().
*/
public function testCanonical_dn()
{
// Test empty dn (is valid according to RFC).
- $this->assertEquals('', Horde_Ldap_Util::canonical_dn(''));
+ $this->assertEquals('', Horde_Ldap_Util::canonicalDN(''));
// Default options with common DN.
$testdn = 'cn=beni,DC=php,c=net';
$expected = 'CN=beni,DC=php,C=net';
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($testdn));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($testdn));
// Casefold tests with common DN.
$expected_up = 'CN=beni,DC=php,C=net';
$expected_lo = 'cn=beni,dc=php,c=net';
$expected_no = 'cn=beni,DC=php,c=net';
- $this->assertEquals($expected_up, Horde_Ldap_Util::canonical_dn($testdn, array('casefold' => 'upper')));
- $this->assertEquals($expected_lo, Horde_Ldap_Util::canonical_dn($testdn, array('casefold' => 'lower')));
- $this->assertEquals($expected_no, Horde_Ldap_Util::canonical_dn($testdn, array('casefold' => 'none')));
+ $this->assertEquals($expected_up, Horde_Ldap_Util::canonicalDN($testdn, array('casefold' => 'upper')));
+ $this->assertEquals($expected_lo, Horde_Ldap_Util::canonicalDN($testdn, array('casefold' => 'lower')));
+ $this->assertEquals($expected_no, Horde_Ldap_Util::canonicalDN($testdn, array('casefold' => 'none')));
// Reverse.
$expected_rev = 'C=net,DC=php,CN=beni';
- $this->assertEquals($expected_rev, Horde_Ldap_Util::canonical_dn($testdn, array('reverse' => true)), 'Option reverse failed');
+ $this->assertEquals($expected_rev, Horde_Ldap_Util::canonicalDN($testdn, array('reverse' => true)), 'Option reverse failed');
// DN as arrays.
$dn_index = array('cn=beni', 'dc=php', 'c=net');
$dn_assoc = array('cn' => 'beni', 'dc' => 'php', 'c' => 'net');
$expected = 'CN=beni,DC=php,C=net';
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($dn_index));
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($dn_assoc));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($dn_index));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($dn_assoc));
// DN with multiple RDN value.
$testdn = 'ou=dev+cn=beni,DC=php,c=net';
$testdn_index = array(array('ou=dev', 'cn=beni'), 'DC=php', 'c=net');
$testdn_assoc = array(array('ou' => 'dev', 'cn' => 'beni'), 'DC' => 'php', 'c' => 'net');
$expected = 'CN=beni+OU=dev,DC=php,C=net';
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($testdn));
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($testdn_assoc));
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($expected));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($testdn));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($testdn_assoc));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($expected));
// Test DN with OID.
$testdn = 'OID.2.5.4.3=beni,dc=php,c=net';
$expected = '2.5.4.3=beni,DC=php,C=net';
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($testdn));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($testdn));
// Test with leading and ending spaces.
$testdn = 'cn= beni ,DC=php,c=net';
$expected = 'CN=\20\20beni\20\20,DC=php,C=net';
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($testdn));
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($testdn));
// Test with to-be escaped characters in attribute value.
$specialchars = array(
$test_assoc = array('CN' => 'be' . $char . 'ni', 'DC' => 'ph' . $char . 'p', 'C' => 'net');
$expected = 'CN=be' . $escape . 'ni,DC=ph' . $escape . 'p,C=net';
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($test_string), 'String escaping test (' . $char . ') failed');
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($test_index), 'Indexed array escaping test (' . $char . ') failed');
- $this->assertEquals($expected, Horde_Ldap_Util::canonical_dn($test_assoc), 'Associative array encoding test (' . $char . ') failed');
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($test_string), 'String escaping test (' . $char . ') failed');
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($test_index), 'Indexed array escaping test (' . $char . ') failed');
+ $this->assertEquals($expected, Horde_Ldap_Util::canonicalDN($test_assoc), 'Associative array encoding test (' . $char . ') failed');
}
}
}