Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2016-06-11 11:49:45 +0300
committerGitHub <noreply@github.com>2016-06-11 11:49:45 +0300
commit7cc37b08eda65f350981bfd055402eba03ee91ea (patch)
tree37b3315737e3868901daf19236a867cdc7e29fb3 /apps
parentbd8d50d125fb895fcdb2230349f38130d8ef293f (diff)
parent674e1d0205bff303b44a28b3a71904204150d415 (diff)
Merge pull request #37 from nextcloud/downstream-stable9-160610
Downstream stable9 16-06-10
Diffstat (limited to 'apps')
-rw-r--r--apps/files_versions/lib/storage.php10
-rw-r--r--apps/user_ldap/group_ldap.php20
-rw-r--r--apps/user_ldap/tests/group_ldap.php53
3 files changed, 70 insertions, 13 deletions
diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php
index 3c23f2f730a..a1069410e70 100644
--- a/apps/files_versions/lib/storage.php
+++ b/apps/files_versions/lib/storage.php
@@ -532,13 +532,15 @@ class Storage {
$files = $view->getDirectoryContent($dir);
foreach ($files as $file) {
+ $fileData = $file->getData();
+ $filePath = $dir . '/' . $fileData['name'];
if ($file['type'] === 'dir') {
- array_push($dirs, $file['path']);
+ array_push($dirs, $filePath);
} else {
- $versionsBegin = strrpos($file['path'], '.v');
+ $versionsBegin = strrpos($filePath, '.v');
$relPathStart = strlen(self::VERSIONS_ROOT);
- $version = substr($file['path'], $versionsBegin + 2);
- $relpath = substr($file['path'], $relPathStart, $versionsBegin - $relPathStart);
+ $version = substr($filePath, $versionsBegin + 2);
+ $relpath = substr($filePath, $relPathStart, $versionsBegin - $relPathStart);
$key = $version . '#' . $relpath;
$versions[$key] = array('path' => $relpath, 'timestamp' => $version);
}
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index 891c807cd74..5d0fb4c5acf 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -473,16 +473,17 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
// apply filter via ldap search to see if this user is in this
// dynamic group
$userMatch = $this->access->readAttribute(
- $uid,
+ $userDN,
$this->access->connection->ldapUserDisplayName,
$memberUrlFilter
);
if ($userMatch !== false) {
// match found so this user is in this group
- $pos = strpos($dynamicGroup['dn'][0], ',');
- if ($pos !== false) {
- $membershipGroup = substr($dynamicGroup['dn'][0],3,$pos-3);
- $groups[] = $membershipGroup;
+ $groupName = $this->access->dn2groupname($dynamicGroup['dn'][0]);
+ if(is_string($groupName)) {
+ // be sure to never return false if the dn could not be
+ // resolved to a name, for whatever reason.
+ $groups[] = $groupName;
}
}
} else {
@@ -534,11 +535,12 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
}
if(isset($this->cachedGroupsByMember[$uid])) {
- $groups = $this->cachedGroupsByMember[$uid];
+ $groups = array_merge($groups, $this->cachedGroupsByMember[$uid]);
} else {
- $groups = array_values($this->getGroupsByMember($uid));
- $groups = $this->access->ownCloudGroupNames($groups);
- $this->cachedGroupsByMember[$uid] = $groups;
+ $groupsByMember = array_values($this->getGroupsByMember($uid));
+ $groupsByMember = $this->access->ownCloudGroupNames($groupsByMember);
+ $this->cachedGroupsByMember[$uid] = $groupsByMember;
+ $groups = array_merge($groups, $groupsByMember);
}
if($primaryGroup !== false) {
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index 51bb1d84732..a81bf70f54a 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -455,4 +455,57 @@ class Test_Group_Ldap extends \Test\TestCase {
$groupBackend->getUserGroups('userX');
}
+ public function testGetGroupsByMember() {
+ $access = $this->getAccessMock();
+
+ $access->connection->expects($this->any())
+ ->method('__get')
+ ->will($this->returnCallback(function($name) {
+ if($name === 'useMemberOfToDetectMembership') {
+ return 0;
+ } else if($name === 'ldapDynamicGroupMemberURL') {
+ return '';
+ } else if($name === 'ldapNestedGroups') {
+ return false;
+ }
+ return 1;
+ }));
+
+ $dn = 'cn=userX,dc=foobar';
+
+ $access->connection->hasPrimaryGroups = false;
+
+ $access->expects($this->exactly(2))
+ ->method('username2dn')
+ ->will($this->returnValue($dn));
+
+ $access->expects($this->never())
+ ->method('readAttribute')
+ ->with($dn, 'memberOf');
+
+ $group1 = [
+ 'cn' => 'group1',
+ 'dn' => ['cn=group1,ou=groups,dc=domain,dc=com'],
+ ];
+ $group2 = [
+ 'cn' => 'group2',
+ 'dn' => ['cn=group2,ou=groups,dc=domain,dc=com'],
+ ];
+
+ $access->expects($this->once())
+ ->method('ownCloudGroupNames')
+ ->with([$group1, $group2])
+ ->will($this->returnValue(['group1', 'group2']));
+
+ $access->expects($this->once())
+ ->method('fetchListOfGroups')
+ ->will($this->returnValue([$group1, $group2]));
+
+ $groupBackend = new GroupLDAP($access);
+ $groups = $groupBackend->getUserGroups('userX');
+ $this->assertEquals(['group1', 'group2'], $groups);
+
+ $groupsAgain = $groupBackend->getUserGroups('userX');
+ $this->assertEquals(['group1', 'group2'], $groupsAgain);
+ }
}