From c945989a70b278ddb038d194a5c9b84572ab201b Mon Sep 17 00:00:00 2001 From: Insanemal Date: Tue, 22 Nov 2011 11:08:27 +1000 Subject: [PATCH] Total rewite of fix. This now re-looks up the username and returns that for use. Signed-off-by: Insanemal --- apps/user_ldap/settings.php | 23 +++++++++++++---------- apps/user_ldap/templates/settings.php | 2 +- apps/user_ldap/user_ldap.php | 24 ++++++++++++++++-------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php index 4be36b04440..1f2d8ed9af3 100644 --- a/apps/user_ldap/settings.php +++ b/apps/user_ldap/settings.php @@ -22,16 +22,19 @@ */ $params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_password', 'ldap_base', 'ldap_filter', 'ldap_display_name', 'ldap_tls', 'ldap_nocase'); -foreach($params as $param){ - if(isset($_POST[$param])){ - OC_Appconfig::setValue('user_ldap', $param, $_POST[$param]); - } - elseif('ldap_tls' == $param) { - // unchecked checkboxes are not included in the post paramters - OC_Appconfig::setValue('user_ldap', $param, 0); - } - elseif('ldap_nocase' == $param) { - OC_Appconfig::setValue('user_ldap', $param, 0); +if ($_POST) { + foreach($params as $param){ + if(isset($_POST[$param])){ + OC_Appconfig::setValue('user_ldap', $param, $_POST[$param]); + } + elseif('ldap_tls' == $param) { + // unchecked checkboxes are not included in the post paramters + OC_Appconfig::setValue('user_ldap', $param, 0); + } + elseif('ldap_nocase' == $param) { + OC_Appconfig::setValue('user_ldap', $param, 0); + } + } } diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 587e94e013a..2abb0b47291 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -11,7 +11,7 @@

t('Currently the display name field needs to be the same you matched %%uid against in the filter above, because ownCloud doesn\'t distinguish between user id and user name.');?>

>

-

>

+

>

diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index d35cefcaae1..106240e74b8 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -117,7 +117,21 @@ class OC_USER_LDAP extends OC_User_Backend { return false; if($this->ldap_nocase) { - return strtolower($uid); + $filter = str_replace('%uid', $uid, $this->ldap_filter); + $sr = ldap_search( $this->getDs(), $this->ldap_base, $filter ); + $entries = ldap_get_entries( $this->getDs(), $sr ); + if( $entries['count'] == 1 ) { + foreach($entries as $row) { + $ldap_display_name = strtolower($this->ldap_display_name); + if(isset($row[$ldap_display_name])) { + return $row[$ldap_display_name][0]; + } + } + } + else { + return $uid; + } + } else { return $uid; @@ -155,13 +169,7 @@ class OC_USER_LDAP extends OC_User_Backend { // TODO ldap_get_entries() seems to lower all keys => needs review $ldap_display_name = strtolower($this->ldap_display_name); if(isset($row[$ldap_display_name])) { - if($this->ldap_nocase) { - $users[] = strtolower($row[$ldap_display_name][0]); - } - else - { - $users[] = $row[$ldap_display_name][0]; - } + $users[] = $row[$ldap_display_name][0]; } } // TODO language specific sorting of user names -- 2.39.5