diff options
author | Martin Kosek <mkosek@redhat.com> | 2011-10-12 09:36:24 +0200 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2011-10-12 06:31:16 -0400 |
commit | e5389ffd5193fcb7edf3b0c5fa887e46cff986fe (patch) | |
tree | c454f42fb77109d6ce21476abc72a554fe3715d2 /ipaserver | |
parent | 17f247d6c2aef177c40a690f886b0773a88a6dfa (diff) | |
download | freeipa-e5389ffd5193fcb7edf3b0c5fa887e46cff986fe.tar.gz freeipa-e5389ffd5193fcb7edf3b0c5fa887e46cff986fe.tar.xz freeipa-e5389ffd5193fcb7edf3b0c5fa887e46cff986fe.zip |
Optimize member/memberof searches in LDAP
When investigating if member/memberof attribute is direct/indirect
we do a lot of LDAP SCOPE_SUBTREE searches when we actually search
just for one item. Make sure we search only with SCOPE_BASE to improve
the performance.
One not so efficient iteration was also changed to list comprehension
to speed things up a tiny bit.
https://fedorahosted.org/freeipa/ticket/1885
Diffstat (limited to 'ipaserver')
-rw-r--r-- | ipaserver/plugins/ldap2.py | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/ipaserver/plugins/ldap2.py b/ipaserver/plugins/ldap2.py index 382cc5760..6eeab56a8 100644 --- a/ipaserver/plugins/ldap2.py +++ b/ipaserver/plugins/ldap2.py @@ -1001,7 +1001,8 @@ class ldap2(CrudBackend, Encoder): try: (result, truncated) = self.find_entries(searchfilter, attr_list, member, time_limit=time_limit, - size_limit=size_limit, normalize=normalize) + size_limit=size_limit, scope=_ldap.SCOPE_BASE, + normalize=normalize) results.append(list(result[0])) for m in result[0][1].get('member', []): # This member may contain other members, add it to our @@ -1066,18 +1067,16 @@ class ldap2(CrudBackend, Encoder): try: (result, truncated) = self.find_entries(searchfilter, attr_list, group, time_limit=time_limit,size_limit=size_limit, - normalize=normalize) + scope=_ldap.SCOPE_BASE, normalize=normalize) results.extend(list(result)) except errors.NotFound: pass direct = [] - indirect = [] # If there is an exception here, it is likely due to a failure in # referential integrity. All members should have corresponding # memberOf entries. - for m in memberof: - indirect.append(m.lower()) + indirect = [ m.lower() for m in memberof ] for r in results: direct.append(r[0]) try: |