diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index 62be63bc02..64ee172a8b 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -345,7 +345,7 @@ class Access extends LDAPUtility { } return []; } - + /** * Set password for an LDAP user identified by a DN * @@ -646,6 +646,8 @@ class Access extends LDAPUtility { if ($this->ncUserManager instanceof PublicEmitter && $isUser) { $this->cacheUserExists($name); $this->ncUserManager->emit('\OC\User', 'assignedUserId', [$name]); + } elseif (!$isUser) { + $this->cacheGroupExists($name); } return true; } @@ -749,6 +751,13 @@ class Access extends LDAPUtility { $this->connection->writeToCache('userExists'.$ocName, true); } + /** + * caches a group as existing + */ + public function cacheGroupExists(string $gid): void { + $this->connection->writeToCache('groupExists'.$gid, true); + } + /** * caches the user display name * @param string $ocName the internal Nextcloud username @@ -938,7 +947,15 @@ class Access extends LDAPUtility { * @return array */ public function fetchListOfGroups($filter, $attr, $limit = null, $offset = null) { - return $this->fetchList($this->searchGroups($filter, $attr, $limit, $offset), $this->manyAttributes($attr)); + $groupRecords = $this->searchGroups($filter, $attr, $limit, $offset); + array_walk($groupRecords, function($record) { + $newlyMapped = false; + $gid = $this->dn2ocname($record['dn'][0], null, false, $newlyMapped, $record); + if(!$newlyMapped && is_string($gid)) { + $this->cacheGroupExists($gid); + } + }); + return $this->fetchList($groupRecords, $this->manyAttributes($attr)); } /** diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index c7b8528df6..924466e600 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -1146,7 +1146,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface, IGroupLD $uuid, false ); - $this->access->connection->writeToCache("groupExists" . $gid, true); + $this->access->cacheGroupExists($gid); } } return $dn != null;