@@ -2823,7 +2823,7 @@ PHP_FUNCTION(ldap_set_rebind_proc)
2823
2823
/* }}} */
2824
2824
#endif
2825
2825
2826
- static zend_string * php_ldap_do_escape (const zend_bool * map , const char * value , size_t valuelen )
2826
+ static zend_string * php_ldap_do_escape (const zend_bool * map , const char * value , size_t valuelen , zend_long flags )
2827
2827
{
2828
2828
char hex [] = "0123456789abcdef" ;
2829
2829
size_t i , p = 0 ;
@@ -2833,13 +2833,20 @@ static zend_string* php_ldap_do_escape(const zend_bool *map, const char *value,
2833
2833
for (i = 0 ; i < valuelen ; i ++ ) {
2834
2834
len += (map [(unsigned char ) value [i ]]) ? 3 : 1 ;
2835
2835
}
2836
+ /* Per RFC 4514, a leading and trailing space must be escaped */
2837
+ if (flags & PHP_LDAP_ESCAPE_DN && value [0 ] == ' ' ) {
2838
+ len += 2 ;
2839
+ }
2840
+ if (flags & PHP_LDAP_ESCAPE_DN && valuelen && value [valuelen ] == ' ' ) {
2841
+ len += 2 ;
2842
+ }
2836
2843
2837
2844
ret = zend_string_alloc (len , 0 );
2838
2845
2839
2846
for (i = 0 ; i < valuelen ; i ++ ) {
2840
2847
unsigned char v = (unsigned char ) value [i ];
2841
2848
2842
- if (map [v ]) {
2849
+ if (map [v ] || ( flags & PHP_LDAP_ESCAPE_DN && ( i == 0 || i + 1 == valuelen ) && v == ' ' ) ) {
2843
2850
ZSTR_VAL (ret )[p ++ ] = '\\' ;
2844
2851
ZSTR_VAL (ret )[p ++ ] = hex [v >> 4 ];
2845
2852
ZSTR_VAL (ret )[p ++ ] = hex [v & 0x0f ];
@@ -2884,7 +2891,7 @@ PHP_FUNCTION(ldap_escape)
2884
2891
2885
2892
if (flags & PHP_LDAP_ESCAPE_DN ) {
2886
2893
havecharlist = 1 ;
2887
- php_ldap_escape_map_set_chars (map , "\\,=+<>;\"#" , sizeof ("\\,=+<>;\"#" ) - 1 , 1 );
2894
+ php_ldap_escape_map_set_chars (map , "\\,=+<>;\"#\r " , sizeof ("\\,=+<>;\"#\r " ) - 1 , 1 );
2888
2895
}
2889
2896
2890
2897
if (!havecharlist ) {
@@ -2897,7 +2904,7 @@ PHP_FUNCTION(ldap_escape)
2897
2904
php_ldap_escape_map_set_chars (map , ignores , ignoreslen , 0 );
2898
2905
}
2899
2906
2900
- RETURN_NEW_STR (php_ldap_do_escape (map , value , valuelen ));
2907
+ RETURN_NEW_STR (php_ldap_do_escape (map , value , valuelen , flags ));
2901
2908
}
2902
2909
2903
2910
#ifdef STR_TRANSLATION
0 commit comments