Added escape_filter_chars() to filter the filter

master
nanu2 2014-09-23 15:13:25 +02:00
parent f6a3cb42ae
commit e74b09bb50
3 changed files with 10 additions and 6 deletions

View File

@ -4,6 +4,7 @@ Changelog
0.1.5 0.1.5
+++++ +++++
- Added escape_filter_chars() to filter the filter
- Override of cidicts __getitem__ so that user.attrs['nonexistent'] won't raise an exception, but instead returns an empty list - Override of cidicts __getitem__ so that user.attrs['nonexistent'] won't raise an exception, but instead returns an empty list
0.1.2 0.1.2
@ -14,9 +15,9 @@ Changelog
0.1.1 0.1.1
+++++ +++++
- fixed pretty print of binary attribute - Fixed pretty print of binary attribute
- fixed ldap.get sizelimit=1 exception for now - Fixed ldap.get sizelimit=1 exception for now
- added try catch to api - Added try catch to api
0.1 0.1
+++ +++

View File

@ -1,4 +1,5 @@
import ldap import ldap
import ldap.filter
from ldapprobject import LdapprObject from ldapprobject import LdapprObject
@ -19,11 +20,11 @@ class Connection(object):
raise raise
def search(self, search_filter): def search(self, search_filter):
# TODO: use the escape_filter_chars() and filter_format() functions
"""Get list of objects that match the search_filter """Get list of objects that match the search_filter
:param search_filter: filter to find the objects :param search_filter: filter to find the objects
:return: list of LdapperObjects (or empty list) :return: list of LdapperObjects (or empty list)
""" """
search_filter = ldap.filter.escape_filter_chars(search_filter)
result = self.conn.search_s(self.search_base, ldap.SCOPE_SUBTREE, result = self.conn.search_s(self.search_base, ldap.SCOPE_SUBTREE,
search_filter) search_filter)
return [LdapprObject(item, self.conn) for item in result] return [LdapprObject(item, self.conn) for item in result]
@ -35,6 +36,7 @@ class Connection(object):
:return: LdapprObject or None :return: LdapprObject or None
""" """
# TODO: use sizelimit=1 with proper exception handling # TODO: use sizelimit=1 with proper exception handling
search_filter = ldap.filter.escape_filter_chars(search_filter)
result = self.conn.search_ext_s(self.search_base, result = self.conn.search_ext_s(self.search_base,
ldap.SCOPE_SUBTREE, ldap.SCOPE_SUBTREE,
search_filter, sizelimit=0) search_filter, sizelimit=0)
@ -55,6 +57,7 @@ class Connection(object):
:param search_filter: filter to find the dn's :param search_filter: filter to find the dn's
:return: list of dn's :return: list of dn's
""" """
search_filter = ldap.filter.escape_filter_chars(search_filter)
result = self.conn.search_s(self.search_base, ldap.SCOPE_SUBTREE, result = self.conn.search_s(self.search_base, ldap.SCOPE_SUBTREE,
search_filter) search_filter)
return [dn for (dn, item) in result] return [dn for (dn, item) in result]

View File

@ -41,12 +41,12 @@ class TestLdappr(unittest.TestCase):
ldap = connect_to(self.server, port=self.ldap_port) ldap = connect_to(self.server, port=self.ldap_port)
ldap.close() ldap.close()
def test_get_attributes_from_ldapper_object(self): def test_get_attributes_from_ldappr_object(self):
user = self.ldap.get('cn=jdoe') user = self.ldap.get('cn=jdoe')
self.assertEqual(user.attrs['givenname'], ['John']) self.assertEqual(user.attrs['givenname'], ['John'])
self.assertEqual(user.attrs['gIvEnNaMe'], ['John']) self.assertEqual(user.attrs['gIvEnNaMe'], ['John'])
def test_get_nonexisting_attribute_ldapper_object(self): def test_get_nonexisting_attribute_from_ldappr_object(self):
user = self.ldap.get('cn=jdoe') user = self.ldap.get('cn=jdoe')
self.assertEqual(user.attrs['nonexisting'], []) self.assertEqual(user.attrs['nonexisting'], [])