summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2011-10-05 10:37:05 -0400
committerRob Crittenden <rcritten@redhat.com>2011-10-06 17:06:04 -0400
commitc5384f2f25503026fedf498733e9ab2d00e43073 (patch)
treed2816958396b809a77b0a032511c2420577f3b5a
parente2182d67aecd32903f30a3a0b67450158d6a8776 (diff)
downloadfreeipa.git-c5384f2f25503026fedf498733e9ab2d00e43073.tar.gz
freeipa.git-c5384f2f25503026fedf498733e9ab2d00e43073.tar.xz
freeipa.git-c5384f2f25503026fedf498733e9ab2d00e43073.zip
When calculating indirect membership don't test nesting on users and hosts.
Members are dereferenced when calculating indirect membership. We don't need to check hosts and users for members. This significantly reduces the number of queries required for large groups. https://fedorahosted.org/freeipa/ticket/1885
-rw-r--r--ipaserver/plugins/ldap2.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/ipaserver/plugins/ldap2.py b/ipaserver/plugins/ldap2.py
index b12403b9..fddfe0f5 100644
--- a/ipaserver/plugins/ldap2.py
+++ b/ipaserver/plugins/ldap2.py
@@ -42,6 +42,7 @@ import ldap.sasl as _ldap_sasl
from ldap.controls import LDAPControl
# for backward compatibility
from ldap.functions import explode_dn
+from ipalib.dn import DN
import krbV
@@ -987,6 +988,13 @@ class ldap2(CrudBackend, Encoder):
if membertype == MEMBERS_ALL or membertype == MEMBERS_INDIRECT:
checkmembers = copy.deepcopy(members)
for member in checkmembers:
+ # No need to check entry types that are not nested for
+ # additional members
+ dn = DN(member)
+ if dn.endswith(DN(api.env.container_user, api.env.basedn)) or \
+ dn.endswith(DN(api.env.container_host, api.env.basedn)):
+ results.append([member, {}])
+ continue
try:
(result, truncated) = self.find_entries(searchfilter,
attr_list, member, time_limit=time_limit,