Update functions.php

Since openLDAP >=2.1.2,ldap_explode_dn turns unprintable chars (in the ASCII sense, UTF8 encoded) into \<hexcode>.
This commit is contained in:
Michael 2018-07-17 19:59:11 +08:00 committed by GitHub
parent 733a10a1c5
commit 7569423f11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2487,6 +2487,30 @@ function draw_chooser_link($form,$element,$include_choose_text=true,$rdn='none')
printf('<span class="x-small"><a href="%s" title="%s">%s</a></span>',$href,$title,_('browse'));
}
/**
* http://php.net/manual/en/function.ldap-explode-dn.php#34724
* fixed for:
* Keep attention on UTF8 encoded DNs. Since openLDAP >=2.1.2
* ldap_explode_dn turns unprintable chars (in the ASCII sense, UTF8
* encoded) into \<hexcode>.
*/
function ldap_explode_dn_patch( $dn, $with_attrib ) {
$result = ldap_explode_dn( $dn, $with_attrib );
if (! $result ) return null;
# translate hex code into ascii again
foreach ( $result as $key => $value ) {
$result[ $key ] = preg_replace_callback(
"/\\\([0-9A-Fa-f]{2})/",
function ( $matches) {
return chr( hexdec( $matches[1] ) );
},
$value
);
}
return ( $result );
}
/**
* Explode a DN into an array of its RDN parts.
*
@ -2522,8 +2546,8 @@ function pla_explode_dn($dn,$with_attributes=0) {
$dn = addcslashes($dn,'<>+";');
# split the dn
$result[0] = ldap_explode_dn(dn_escape($dn),0);
$result[1] = ldap_explode_dn(dn_escape($dn),1);
$result[0] = ldap_explode_dn_patch(dn_escape($dn),0);
$result[1] = ldap_explode_dn_patch(dn_escape($dn),1);
if (! $result[$with_attributes]) {
if (DEBUG_ENABLED)
debug_log('Returning NULL - NO result.',1,0,__FILE__,__LINE__,__METHOD__);