summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
authorChristoph Wurst <ChristophWurst@users.noreply.github.com>2021-01-29 10:57:31 +0100
committerGitHub <noreply@github.com>2021-01-29 10:57:31 +0100
commit6a3321cefeacb977e2832e26e28d72a6223d6b48 (patch)
tree49123980281bcdd9967908ca122542124d2a2632 /apps/user_ldap
parent395826b81afd148bdd45588892f6614225f38d14 (diff)
parent02b703193a9575b3ee742d9b1b851924bc617319 (diff)
downloadnextcloud-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/user_ldap')
-rw-r--r--apps/user_ldap/lib/Access.php2
-rw-r--r--apps/user_ldap/tests/AccessTest.php44
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';