Make it possible to construct partial match filters using make_filter_* methods. Add missing _sasl_auth variable.

This commit is contained in:
Pavel Zuna 2009-04-22 10:50:20 +02:00 committed by Rob Crittenden
parent af82879009
commit 58c10898c7

View File

@ -40,6 +40,7 @@ import string
import krbV import krbV
import ldap as _ldap import ldap as _ldap
import ldap.filter as _ldap_filter import ldap.filter as _ldap_filter
import ldap.sasl as _ldap_sasl
from ldap.controls import LDAPControl from ldap.controls import LDAPControl
from ldap.ldapobject import SimpleLDAPObject from ldap.ldapobject import SimpleLDAPObject
@ -68,6 +69,9 @@ _syntax_mapping = {
# used to identify the Uniqueness plugin error message # used to identify the Uniqueness plugin error message
_uniqueness_plugin_error = 'Another entry with the same attribute value already exists' _uniqueness_plugin_error = 'Another entry with the same attribute value already exists'
# SASL authentication mechanism
_sasl_auth = _ldap_sasl.sasl({}, 'GSSAPI')
# utility function, builds LDAP URL string # utility function, builds LDAP URL string
def _get_url(host, port, using_cacert=False): def _get_url(host, port, using_cacert=False):
@ -371,31 +375,37 @@ class ldap2(CrudBackend):
flt = '%s)' % flt flt = '%s)' % flt
return flt return flt
def make_filter_from_attr(self, attr, value, rules='|'): def make_filter_from_attr(self, attr, value, rules='|', exact=True):
""" """
Make filter for ldap2.find_entries from attribute. Make filter for ldap2.find_entries from attribute.
Keyword arguments: Keyword arguments:
rules -- see ldap2.make_filter rules -- see ldap2.make_filter
exact -- boolean, True - make filter as (attr=value)
False - make filter as (attr=*value*)
""" """
if isinstance(value, (list, tuple)): if isinstance(value, (list, tuple)):
flts = [] flts = []
for v in value: for v in value:
flts.append(self.make_filter_from_attr(attr, v, rules)) flts.append(self.make_filter_from_attr(attr, v, rules, exact))
return self.combine_filters(flts, rules) return self.combine_filters(flts, rules)
else: else:
value = _ldap_filter.escape_filter_chars(value) value = _ldap_filter.escape_filter_chars(value)
attr = self._encode_value(attr) attr = self._encode_value(attr)
value = self._encode_value(value) value = self._encode_value(value)
if exact:
return '(%s=%s)' % (attr, value) return '(%s=%s)' % (attr, value)
return '(%s=*%s*)' % (attr, value)
def make_filter(self, entry_attrs, attrs_list=None, rules='|'): def make_filter(self, entry_attrs, attrs_list=None, rules='|', exact=True):
""" """
Make filter for ldap2.find_entries from entry attributes. Make filter for ldap2.find_entries from entry attributes.
Keyword arguments: Keyword arguments:
attrs_list -- list of attributes to use, all if None (default None) attrs_list -- list of attributes to use, all if None (default None)
rules -- specifies how to determine a match (default ldap2.MATCH_ANY) rules -- specifies how to determine a match (default ldap2.MATCH_ANY)
exact -- boolean, True - make filter as (attr=value)
False - make filter as (attr=*value*)
rules can be one of the following: rules can be one of the following:
ldap2.MATCH_NONE - match entries that do not match any attribute ldap2.MATCH_NONE - match entries that do not match any attribute
@ -405,12 +415,16 @@ class ldap2(CrudBackend):
flts = [] flts = []
if attrs_list is None: if attrs_list is None:
for (k, v) in entry_attrs.iteritems(): for (k, v) in entry_attrs.iteritems():
flts.append(self.make_filter_from_attr(k, v, rules)) flts.append(
self.make_filter_from_attr(k, v, rules, exact)
)
else: else:
for a in attrs_list: for a in attrs_list:
value = entry_attrs.get(a, None) value = entry_attrs.get(a, None)
if value is not None: if value is not None:
flts.append(self.make_filter_from_attr(a, value, rules)) flts.append(
self.make_filter_from_attr(a, value, rules, exact)
)
return self.combine_filters(flts, rules) return self.combine_filters(flts, rules)
def find_entries(self, filter, attrs_list=None, base_dn='', def find_entries(self, filter, attrs_list=None, base_dn='',