return conn
- def _query(self, query, attrlist=None, limit=0, search_base=None, scope=None):
+ def _query(self, query, attrlist=None, limit=0, search_base=None):
logging.debug("Performing LDAP query: %s" % query)
t = time.time()
results = self.ldap.search_ext_s(search_base or self.search_base,
- scope or ldap.SCOPE_SUBTREE, query, attrlist=attrlist, sizelimit=limit)
+ ldap.SCOPE_SUBTREE, query, attrlist=attrlist, sizelimit=limit)
# Log time it took to perform the query
logging.debug("Query took %.2fms" % ((time.time() - t) * 1000.0))
return results
def _search(self, query, attrlist=None, limit=0):
- dns = self._search_dns(query, limit=limit)
+ accounts = []
+ for dn, attrs in self._query(query, attrlist=["dn"], limit=limit):
+ account = self.get_by_dn(dn)
+ accounts.append(account)
- accounts = self._get_accounts_from_dns(dns)
+ return accounts
- return list(accounts)
-
- def _search_dns(self, query, limit=0):
- # Query cache
- dns = self.memcache.get("accounts:search:%s" % query)
- if dns is None:
- # Return DNs only for this search query
- dns = []
- for dn, attrs in self._query(query, attrlist=["dn"], limit=limit):
- dns.append(dn)
-
- # Cache for 10 min
- self.memcache.set("accounts:search:%s" % query, dns, 600)
-
- return dns
+ def _get_attrs(self, dn):
+ """
+ Fetches all attributes for the given distinguished name
+ """
+ results = self._query("(objectClass=*)", search_base=dn, limit=1)
- def _get_accounts_from_dns(self, dns):
- for dn in dns:
- yield self.get_by_dn(dn)
+ for dn, attrs in results:
+ return attrs
def get_by_dn(self, dn):
attrs = self.memcache.get("accounts:%s:attrs" % dn)
return Account(self.backend, dn, attrs)
- def _get_attrs(self, dn):
- """
- Fetches all attributes for the given distinguished name
- """
- results = self._query("(objectClass=*)", search_base=dn, limit=1)
-
- for dn, attrs in results:
- return attrs
-
def search(self, query):
# Search for exact matches
accounts = self._search(