Skip to content

Commit e2d63b8

Browse files
committed
fix(UserPlugin): Don't return disabled users on user ID and mail match
Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: David Dreschner <david.dreschner@nextcloud.com>
1 parent 83bb29d commit e2d63b8

2 files changed

Lines changed: 54 additions & 2 deletions

File tree

build/integration/sharees_features/sharees.feature

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,24 @@ Feature: sharees
5151
And "exact remotes" sharees returned is empty
5252
And "remotes" sharees returned is empty
5353

54+
Scenario: Search without exact match does not return disabled users
55+
Given As an "admin"
56+
And assure user "Sharee1" is disabled
57+
And As an "test"
58+
When getting sharees for
59+
| search | Sharee |
60+
| itemType | file |
61+
Then the OCS status code should be "100"
62+
And the HTTP status code should be "200"
63+
And "exact users" sharees returned is empty
64+
And "users" sharees returned are
65+
| Sharee2 | 0 | Sharee2 | sharee2@system.com |
66+
And "exact groups" sharees returned is empty
67+
And "groups" sharees returned are
68+
| ShareeGroup | 1 | ShareeGroup |
69+
And "exact remotes" sharees returned is empty
70+
And "remotes" sharees returned is empty
71+
5472
Scenario: Search only with group members - denied
5573
Given As an "test"
5674
And parameter "shareapi_only_share_with_group_members" of app "core" is set to "yes"
@@ -254,6 +272,22 @@ Feature: sharees
254272
Then "exact remotes" sharees returned is empty
255273
Then "remotes" sharees returned is empty
256274

275+
Scenario: Search with exact match does not return disabled users
276+
Given As an "admin"
277+
And assure user "Sharee1" is disabled
278+
And As an "test"
279+
When getting sharees for
280+
| search | Sharee1 |
281+
| itemType | file |
282+
Then the OCS status code should be "100"
283+
And the HTTP status code should be "200"
284+
And "exact users" sharees returned is empty
285+
And "users" sharees returned is empty
286+
And "exact groups" sharees returned is empty
287+
And "groups" sharees returned is empty
288+
And "exact remotes" sharees returned is empty
289+
And "remotes" sharees returned is empty
290+
257291
Scenario: Search with exact match not-exact casing
258292
Given As an "test"
259293
When getting sharees for
@@ -364,6 +398,21 @@ Feature: sharees
364398
And "exact emails" sharees returned is empty
365399
And "emails" sharees returned is empty
366400

401+
Scenario: Search user by system e-mail address does not return disabled users
402+
Given As an "admin"
403+
And assure user "Sharee2" is disabled
404+
And As an "test"
405+
When getting sharees for
406+
| search | sharee2@system.com |
407+
| itemType | file |
408+
| shareType | 0 |
409+
Then the OCS status code should be "100"
410+
And the HTTP status code should be "200"
411+
And "exact users" sharees returned is empty
412+
And "users" sharees returned is empty
413+
And "exact emails" sharees returned is empty
414+
And "emails" sharees returned is empty
415+
367416
Scenario: Search user by system e-mail address without exact match
368417
Given As an "test"
369418
When getting sharees for

lib/private/Collaboration/Collaborators/UserPlugin.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public function search($search, $limit, $offset, ISearchResult $searchResult): b
102102
// User backends may also resolve email addresses or other login names here
103103
// (e.g. for login via email). Only an actual user id match counts as user id
104104
// full match, everything else is governed by the email setting below.
105-
if ($user !== null && mb_strtolower($user->getUID()) === $lowerSearch) {
105+
if ($user !== null && $user->isEnabled() && mb_strtolower($user->getUID()) === $lowerSearch) {
106106
$users[$user->getUID()] = ['exact', $user];
107107
}
108108
}
@@ -119,7 +119,10 @@ public function search($search, $limit, $offset, ISearchResult $searchResult): b
119119
$uid = $row['uid'];
120120
$email = $row['value'];
121121
$isAdditional = $row['name'] === 'additional_mail';
122-
$users[$uid] = ['exact', $this->userManager->get($uid), $isAdditional ? $email : null];
122+
$user = $this->userManager->get($uid);
123+
if ($user !== null && $user->isEnabled()) {
124+
$users[$uid] = ['exact', $user, $isAdditional ? $email : null];
125+
}
123126
}
124127
$result->closeCursor();
125128
}

0 commit comments

Comments
 (0)