summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@owncloud.com>2012-05-10 12:59:05 +0200
committerArthur Schiwon <blizzz@owncloud.com>2012-05-10 12:59:20 +0200
commit7a5028317dca5e46c7d3eb0f2a3c479b31357948 (patch)
tree2ba7c5eec688646abedfb5e30be06bc1475f5f1b /apps/user_ldap
parenta9d7c67bf2e906fceea40b41f4780e623226fdff (diff)
downloadnextcloud-server-7a5028317dca5e46c7d3eb0f2a3c479b31357948.tar.gz
nextcloud-server-7a5028317dca5e46c7d3eb0f2a3c479b31357948.zip
LDAP: don't fall over case insensitive LDAP attribute name
Diffstat (limited to 'apps/user_ldap')
-rwxr-xr-xapps/user_ldap/group_ldap.php21
1 files changed, 19 insertions, 2 deletions
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 591ba41253c..34141e51f40 100755
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -46,7 +46,12 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
if(!$dn_group || !$dn_user) {
return false;
}
- $members = OC_LDAP::readAttribute($dn_group, $this->ldapGroupMemberAssocAttr);
+ //usually, LDAP attributes are said to be case insensitive. But there are exceptions of course.
+ $read = ($members = OC_LDAP::readAttribute($dn_group, $this->ldapGroupMemberAssocAttr))
+ || ($members = OC_LDAP::readAttribute($dn_group, strtolower($this->ldapGroupMemberAssocAttr)));
+ if(!$read) {
+ return false;
+ }
//extra work if we don't get back user DNs
//TODO: this can be done with one LDAP query
@@ -96,6 +101,11 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
$this->ldapGroupMemberAssocAttr.'='.$uid
));
$groups = OC_LDAP::fetchListOfGroups($filter, array(OC_LDAP::conf('ldapGroupDisplayName'),'dn'));
+ if(count($groups) == 0) {
+ //usually, LDAP attributes are said to be case insensitive. But there are exceptions... So we try it once more
+ $filter = str_replace($this->ldapGroupMemberAssocAttr, strtolower($this->ldapGroupMemberAssocAttr), $filter);
+ $groups = OC_LDAP::fetchListOfGroups($filter, array(OC_LDAP::conf('ldapGroupDisplayName'),'dn'));
+ }
$userGroups = OC_LDAP::ownCloudGroupNames($groups);
return array_unique($userGroups, SORT_LOCALE_STRING);
@@ -110,7 +120,14 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
if(!$groupDN) {
return array();
}
- $members = OC_LDAP::readAttribute($groupDN, $this->ldapGroupMemberAssocAttr);
+
+ //usually, LDAP attributes are said to be case insensitive. But there are exceptions of course.
+ $read = ($members = OC_LDAP::readAttribute($groupDN, $this->ldapGroupMemberAssocAttr))
+ || ($members = OC_LDAP::readAttribute($groupDN, strtolower($this->ldapGroupMemberAssocAttr)));
+ if(!$read) {
+ return array();
+ }
+
$result = array();
foreach($members as $member) {
if(strtolower($this->ldapGroupMemberAssocAttr) == 'memberuid') {