Created
July 20, 2012 19:25
-
-
Save renoirb/3152719 to your computer and use it in GitHub Desktop.
parseLdapDn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I had to work that out in PHP. | |
Since a LDAP string can sometimes be lengthy and have many attributes, I thought of contributing how I am using it in a project. | |
I wanted to use: | |
CN=username,OU=UNITNAME,OU=Region,OU=Country,DC=subdomain,DC=domain,DC=com | |
And turn it into: | |
array ( | |
[CN] => array( username ) | |
[OU] => array( UNITNAME, Region, Country ) | |
[DC] => array ( subdomain, domain, com ) | |
) | |
Here is how I built my method. | |
/** | |
* Read a LDAP DN, and return what is needed | |
* | |
* Takes care of the character escape and unescape | |
* | |
* Using: | |
* CN=username,OU=UNITNAME,OU=Region,OU=Country,DC=subdomain,DC=domain,DC=com | |
* | |
* Would normally return: | |
* Array ( | |
* [count] => 9 | |
* [0] => CN=username | |
* [1] => OU=UNITNAME | |
* [2] => OU=Region | |
* [5] => OU=Country | |
* [6] => DC=subdomain | |
* [7] => DC=domain | |
* [8] => DC=com | |
* ) | |
* | |
* Returns instead a manageable array: | |
* array ( | |
* [CN] => array( username ) | |
* [OU] => array( UNITNAME, Region, Country ) | |
* [DC] => array ( subdomain, domain, com ) | |
* ) | |
* | |
* | |
* @author gabriel at hrz dot uni-marburg dot de 05-Aug-2003 02:27 (part of the character replacement) | |
* @author Renoir Boulanger | |
* | |
* @param string $dn The DN | |
* @return array | |
*/ | |
function parseLdapDn($dn) | |
{ | |
$parsr=ldap_explode_dn($dn, 0); | |
//$parsr[] = 'EE=Sôme Krazï string'; | |
//$parsr[] = 'AndBogusOne'; | |
$out = array(); | |
foreach($parsr as $key=>$value){ | |
if(FALSE !== strstr($value, '=')){ | |
list($prefix,$data) = explode("=",$value); | |
$data=preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $data); | |
if(isset($current_prefix) && $prefix == $current_prefix){ | |
$out[$prefix][] = $data; | |
} else { | |
$current_prefix = $prefix; | |
$out[$prefix][] = $data; | |
} | |
} | |
} | |
return $out; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment