Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
3791de64
Commit
3791de64
authored
Oct 09, 2014
by
Vincent Petry
Browse files
Merge pull request #11161 from owncloud/fix-ldap-ingroup-for-9225
fix retrieval of group members and cache group members
parents
b11cf6f8
3b3ad0bc
Changes
1
Hide whitespace changes
Inline
Side-by-side
apps/user_ldap/group_ldap.php
View file @
3791de64
...
...
@@ -29,6 +29,11 @@ use OCA\user_ldap\lib\BackendUtility;
class
GROUP_LDAP
extends
BackendUtility
implements
\
OCP\GroupInterface
{
protected
$enabled
=
false
;
/**
* @var string[] $cachedGroupMembers array of users with gid as key
*/
protected
$cachedGroupMembers
=
array
();
public
function
__construct
(
Access
$access
)
{
parent
::
__construct
(
$access
);
$filter
=
$this
->
access
->
connection
->
ldapGroupFilter
;
...
...
@@ -56,6 +61,21 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
}
$userDN
=
$this
->
access
->
username2dn
(
$uid
);
if
(
isset
(
$this
->
cachedGroupMembers
[
$gid
]))
{
$isInGroup
=
in_array
(
$userDN
,
$this
->
cachedGroupMembers
[
$gid
]);
return
$isInGroup
;
}
$cacheKeyMembers
=
'inGroup-members:'
.
$gid
;
if
(
$this
->
access
->
connection
->
isCached
(
$cacheKeyMembers
))
{
$members
=
$this
->
access
->
connection
->
getFromCache
(
$cacheKeyMembers
);
$this
->
cachedGroupMembers
[
$gid
]
=
$members
;
$isInGroup
=
in_array
(
$userDN
,
$members
);
$this
->
access
->
connection
->
writeToCache
(
$cacheKey
,
$isInGroup
);
return
$isInGroup
;
}
$groupDN
=
$this
->
access
->
groupname2dn
(
$gid
);
// just in case
if
(
!
$groupDN
||
!
$userDN
)
{
...
...
@@ -70,8 +90,9 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
}
//usually, LDAP attributes are said to be case insensitive. But there are exceptions of course.
$members
=
array_keys
(
$this
->
_groupMembers
(
$groupDN
));
if
(
!
$members
)
{
$members
=
$this
->
_groupMembers
(
$groupDN
);
$members
=
array_keys
(
$members
);
// uids are returned as keys
if
(
!
is_array
(
$members
)
||
count
(
$members
)
===
0
)
{
$this
->
access
->
connection
->
writeToCache
(
$cacheKey
,
false
);
return
false
;
}
...
...
@@ -93,6 +114,8 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface {
$isInGroup
=
in_array
(
$userDN
,
$members
);
$this
->
access
->
connection
->
writeToCache
(
$cacheKey
,
$isInGroup
);
$this
->
access
->
connection
->
writeToCache
(
$cacheKeyMembers
,
$members
);
$this
->
cachedGroupMembers
[
$gid
]
=
$members
;
return
$isInGroup
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment