Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 3 additions & 22 deletions apps/user_ldap/lib/Access.php
Original file line number Diff line number Diff line change
Expand Up @@ -847,12 +847,8 @@ private function createAltInternalOwnCloudName($name, $isUser) {
/**
* fetches a list of users according to a provided loginName and utilizing
* the login filter.
*
* @param string $loginName
* @param array $attributes optional, list of attributes to read
* @return array
*/
public function fetchUsersByLoginName($loginName, $attributes = ['dn']) {
public function fetchUsersByLoginName(string $loginName, array $attributes = ['dn']): array {
$loginName = $this->escapeFilterPart($loginName);
$filter = str_replace('%uid', $loginName, $this->connection->ldapLoginFilter);
return $this->fetchListOfUsers($filter, $attributes);
Expand All @@ -872,15 +868,9 @@ public function countUsersByLoginName($loginName) {
}

/**
* @param string $filter
* @param string|string[] $attr
* @param int $limit
* @param int $offset
* @param bool $forceApplyAttributes
* @return array
* @throws \Exception
*/
public function fetchListOfUsers($filter, $attr, $limit = null, $offset = null, $forceApplyAttributes = false) {
public function fetchListOfUsers(string $filter, array $attr, int $limit = null, int $offset = null, bool $forceApplyAttributes = false): array {
$ldapRecords = $this->searchUsers($filter, $attr, $limit, $offset);
$recordsToUpdate = $ldapRecords;
if (!$forceApplyAttributes) {
Expand Down Expand Up @@ -992,18 +982,9 @@ private function fetchList($list, $manyAttributes) {
}

/**
* executes an LDAP search, optimized for Users
*
* @param string $filter the LDAP filter for the search
* @param string|string[] $attr optional, when a certain attribute shall be filtered out
* @param integer $limit
* @param integer $offset
* @return array with the search result
*
* Executes an LDAP search
* @throws ServerNotAvailableException
*/
public function searchUsers($filter, $attr = null, $limit = null, $offset = null) {
public function searchUsers(string $filter, array $attr = null, int $limit = null, int $offset = null): array {
$result = [];
foreach ($this->connection->ldapBaseUsers as $base) {
$result = array_merge($result, $this->search($filter, $base, $attr, $limit, $offset));
Expand Down
7 changes: 4 additions & 3 deletions apps/user_ldap/lib/Group_LDAP.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ public function inGroup($uid, $gid) {

//extra work if we don't get back user DNs
if (strtolower($this->access->connection->ldapGroupMemberAssocAttr) === 'memberuid') {
$requestAttributes = $this->access->userManager->getAttributes(true);
$dns = [];
$filterParts = [];
$bytes = 0;
Expand All @@ -153,13 +154,13 @@ public function inGroup($uid, $gid) {
$filter = $this->access->combineFilterWithOr($filterParts);
$bytes = 0;
$filterParts = [];
$users = $this->access->fetchListOfUsers($filter, 'dn', count($filterParts));
$users = $this->access->fetchListOfUsers($filter, $requestAttributes, count($filterParts));
$dns = array_merge($dns, $users);
}
}
if (count($filterParts) > 0) {
$filter = $this->access->combineFilterWithOr($filterParts);
$users = $this->access->fetchListOfUsers($filter, 'dn', count($filterParts));
$users = $this->access->fetchListOfUsers($filter, $requestAttributes, count($filterParts));
$dns = array_merge($dns, $users);
}
$members = $dns;
Expand Down Expand Up @@ -989,7 +990,7 @@ public function countUsersInGroup($gid, $search = '') {
str_replace('%uid', $member, $this->access->connection->ldapLoginFilter),
$this->access->getFilterPartForUserSearch($search)
]);
$ldap_users = $this->access->fetchListOfUsers($filter, 'dn', 1);
$ldap_users = $this->access->fetchListOfUsers($filter, ['dn'], 1);
if (count($ldap_users) < 1) {
continue;
}
Expand Down
6 changes: 6 additions & 0 deletions apps/user_ldap/tests/Group_LDAPTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,9 @@ public function testUsersInGroupPrimaryMembersOnly() {
$access->expects($this->any())
->method('isDNPartOfBase')
->willReturn(true);
$access->expects($this->any())
->method('combineFilterWithAnd')
->willReturn('pseudo=filter');
$access->userManager = $this->createMock(Manager::class);

$groupBackend = new GroupLDAP($access, $pluginManager);
Expand Down Expand Up @@ -576,6 +579,9 @@ public function testUsersInGroupPrimaryAndUnixMembers() {
$access->expects($this->any())
->method('isDNPartOfBase')
->willReturn(true);
$access->expects($this->any())
->method('combineFilterWithAnd')
->willReturn('pseudo=filter');
$access->userManager = $this->createMock(Manager::class);

$groupBackend = new GroupLDAP($access, $pluginManager);
Expand Down
14 changes: 14 additions & 0 deletions apps/user_ldap/tests/Jobs/SyncTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -189,9 +189,16 @@ public function testMoreResults($pagingSize, $results, $expected) {
->with($connection)
->willReturn($access);

$this->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);

$access->expects($this->once())
->method('fetchListOfUsers')
->willReturn(array_pad([], $results, 'someUser'));
$access->expects($this->any())
->method('combineFilterWithAnd')
->willReturn('pseudo=filter');
$access->connection = $connection;
$access->userManager = $this->userManager;

Expand Down Expand Up @@ -356,9 +363,16 @@ public function testRun($runData) {
->with($connection)
->willReturn($access);

$this->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);

$access->expects($this->once())
->method('fetchListOfUsers')
->willReturn(array_pad([], $runData['usersThisCycle'], 'someUser'));
$access->expects($this->any())
->method('combineFilterWithAnd')
->willReturn('pseudo=filter');
$access->connection = $connection;
$access->userManager = $this->userManager;

Expand Down
18 changes: 18 additions & 0 deletions apps/user_ldap/tests/User_LDAPTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ private function prepareAccessForCheckPassword($noDisplayName = false) {
}
return false;
});

$this->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);
}

public function testCheckPasswordUidReturn() {
Expand Down Expand Up @@ -400,6 +404,10 @@ private function prepareAccessForGetUsers() {
->willReturnArgument(0);
$this->access->method('fetchUsersByLoginName')
->willReturn([]);

$this->access->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);
}

public function testGetUsersNoParam() {
Expand Down Expand Up @@ -1065,6 +1073,9 @@ public function testLoginName2UserNameSuccess() {
->method('get')
->with($dn)
->willReturn($user);
$this->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);

$name = $backend->loginName2UserName($loginName);
$this->assertSame($username, $name);
Expand Down Expand Up @@ -1093,6 +1104,10 @@ public function testLoginName2UserNameNoUsersOnLDAP() {
->method('writeToCache')
->with($this->equalTo('loginName2UserName-'.$loginName), false);

$this->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);

$backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager);
$name = $backend->loginName2UserName($loginName);
$this->assertSame(false, $name);
Expand Down Expand Up @@ -1126,6 +1141,9 @@ public function testLoginName2UserNameOfflineUser() {
->method('get')
->with($dn)
->willReturn($offlineUser);
$this->userManager->expects($this->any())
->method('getAttributes')
->willReturn(['dn', 'uid', 'mail', 'displayname']);

$backend = new UserLDAP($this->access, $this->config, $this->notificationManager, $this->session, $this->pluginManager);
$name = $backend->loginName2UserName($loginName);
Expand Down