From 9739bef8cacbe39a52fd300da229e7a7672e22e0 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 21 Mar 2019 12:27:35 +0100 Subject: [PATCH 1/2] Fix string formatting in compare_ext_s Pass ``(ldap_res,)`` tuple to string formatting instead of ``ldap_res``. This changes fixes ``TypeError: not all arguments converted during string formatting``. Fixes: https://github.com/python-ldap/python-ldap/issues/270 Signed-off-by: Christian Heimes --- Lib/ldap/ldapobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/ldap/ldapobject.py b/Lib/ldap/ldapobject.py index e4e6841a..f7443fad 100644 --- a/Lib/ldap/ldapobject.py +++ b/Lib/ldap/ldapobject.py @@ -526,7 +526,7 @@ def compare_ext_s(self,dn,attr,value,serverctrls=None,clientctrls=None): except ldap.COMPARE_FALSE: return False raise ldap.PROTOCOL_ERROR( - 'Compare operation returned wrong result: %r' % (ldap_res) + 'Compare operation returned wrong result: %r' % (ldap_res,) ) def compare(self,dn,attr,value): From a9bb1ddadc18f129844498b3fefbf0c55c081714 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 21 Mar 2019 12:29:22 +0100 Subject: [PATCH 2/2] Test and document compare_s error cases compare_s() may fail with an exception in case the DN is not found or the user searches for an unspecified attribute. Signed-off-by: Christian Heimes --- Doc/reference/ldap.rst | 4 +++- Tests/t_ldapobject.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Doc/reference/ldap.rst b/Doc/reference/ldap.rst index b13aa6f0..69e24629 100644 --- a/Doc/reference/ldap.rst +++ b/Doc/reference/ldap.rst @@ -699,7 +699,9 @@ and wait for and return with the server's result, or with and the value *value*. The synchronous forms returns ``True`` or ``False``. The asynchronous forms returns the message ID of the initiated request, and the result of the asynchronous compare can be obtained using - :py:meth:`result()`. + :py:meth:`result()`. The operation can fail with an exception, e.g. + :py:exc:`ldap.NO_SUCH_OBJECT` when *dn* does not exist or + :py:exc:`ldap.UNDEFINED_TYPE` for an invalid attribute. Note that the asynchronous technique yields the answer by raising the exception objects :py:exc:`ldap.COMPARE_TRUE` or diff --git a/Tests/t_ldapobject.py b/Tests/t_ldapobject.py index 0619d514..67adeb25 100644 --- a/Tests/t_ldapobject.py +++ b/Tests/t_ldapobject.py @@ -661,6 +661,18 @@ def test_compare_s_false(self): result = l.compare_s('cn=Foo1,%s' % base, 'cn', b'Foo2') self.assertIs(result, False) + def test_compare_s_notfound(self): + base = self.server.suffix + l = self._ldap_conn + with self.assertRaises(ldap.NO_SUCH_OBJECT): + result = l.compare_s('cn=invalid,%s' % base, 'cn', b'Foo2') + + def test_compare_s_invalidattr(self): + base = self.server.suffix + l = self._ldap_conn + with self.assertRaises(ldap.UNDEFINED_TYPE): + result = l.compare_s('cn=Foo1,%s' % base, 'invalidattr', b'invalid') + class Test01_ReconnectLDAPObject(Test00_SimpleLDAPObject): """ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy