diff options
author | Christoph Wurst <ChristophWurst@users.noreply.github.com> | 2021-01-29 10:57:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-29 10:57:31 +0100 |
commit | 6a3321cefeacb977e2832e26e28d72a6223d6b48 (patch) | |
tree | 49123980281bcdd9967908ca122542124d2a2632 /apps | |
parent | 395826b81afd148bdd45588892f6614225f38d14 (diff) | |
parent | 02b703193a9575b3ee742d9b1b851924bc617319 (diff) | |
download | nextcloud-server-6a3321cefeacb977e2832e26e28d72a6223d6b48.tar.gz nextcloud-server-6a3321cefeacb977e2832e26e28d72a6223d6b48.zip |
Merge pull request #25101 from nextcloud/fix/noid/ldap-known-groups
LDAP: make actually use of batch read known groups
Diffstat (limited to 'apps')
-rw-r--r-- | apps/user_ldap/lib/Access.php | 2 | ||||
-rw-r--r-- | apps/user_ldap/tests/AccessTest.php | 44 |
2 files changed, 45 insertions, 1 deletions
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index 0ce727f8bcb..d11ca98ece9 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -945,7 +945,7 @@ class Access extends LDAPUtility { array_walk($groupRecords, function ($record) use ($idsByDn) { $newlyMapped = false; - $gid = $uidsByDn[$record['dn'][0]] ?? null; + $gid = $idsByDn[$record['dn'][0]] ?? null; if ($gid === null) { $gid = $this->dn2ocname($record['dn'][0], null, false, $newlyMapped, $record); } diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php index cc62a2a19ce..a532bd6fd7a 100644 --- a/apps/user_ldap/tests/AccessTest.php +++ b/apps/user_ldap/tests/AccessTest.php @@ -42,6 +42,7 @@ use OCA\User_LDAP\Helper; use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\LDAP; use OCA\User_LDAP\LogWrapper; +use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; @@ -66,6 +67,8 @@ class AccessTest extends TestCase { protected $userMapper; /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ protected $shareManager; + /** @var GroupMapping|\PHPUnit\Framework\MockObject\MockObject */ + protected $groupMapper; /** @var Connection|\PHPUnit\Framework\MockObject\MockObject */ private $connection; /** @var LDAP|\PHPUnit\Framework\MockObject\MockObject */ @@ -88,6 +91,7 @@ class AccessTest extends TestCase { $this->helper = $this->createMock(Helper::class); $this->config = $this->createMock(IConfig::class); $this->userMapper = $this->createMock(UserMapping::class); + $this->groupMapper = $this->createMock(GroupMapping::class); $this->ncUserManager = $this->createMock(IUserManager::class); $this->shareManager = $this->createMock(IManager::class); @@ -100,6 +104,7 @@ class AccessTest extends TestCase { $this->ncUserManager ); $this->access->setUserMapper($this->userMapper); + $this->access->setGroupMapper($this->groupMapper); } private function getConnectorAndLdapMock() { @@ -641,6 +646,45 @@ class AccessTest extends TestCase { $this->assertSame($expected, $list); } + public function testFetchListOfGroupsKnown() { + $filter = 'objectClass=nextcloudGroup'; + $attributes = ['cn', 'gidNumber', 'dn']; + $base = 'ou=SomeGroups,dc=my,dc=directory'; + + $fakeConnection = ldap_connect(); + $fakeSearchResultResource = ldap_connect(); + $fakeLdapEntries = [ + 'count' => 2, + [ + 'dn' => 'cn=Good Team,' . $base, + 'cn' => ['Good Team'], + ], + [ + 'dn' => 'cn=Another Good Team,' . $base, + 'cn' => ['Another Good Team'], + ] + ]; + + $this->prepareMocksForSearchTests($base, $fakeConnection, $fakeSearchResultResource, $fakeLdapEntries); + + $this->groupMapper->expects($this->any()) + ->method('getListOfIdsByDn') + ->willReturn([ + 'cn=Good Team,' . $base => 'Good_Team', + 'cn=Another Good Team,' . $base => 'Another_Good_Team', + ]); + $this->groupMapper->expects($this->never()) + ->method('getNameByDN'); + + $this->connection->expects($this->exactly(2)) + ->method('writeToCache'); + + $groups = $this->access->fetchListOfGroups($filter, $attributes); + $this->assertSame(2, count($groups)); + $this->assertSame('Good Team', $groups[0]['cn'][0]); + $this->assertSame('Another Good Team', $groups[1]['cn'][0]); + } + public function intUsernameProvider() { // system dependent :-/ $translitExpected = @iconv('UTF-8', 'ASCII//TRANSLIT', 'fränk') ? 'frank' : 'frnk'; |