Skip to content

Commit

Permalink
Fix TypeError in compare_s, test and document error behavior
Browse files Browse the repository at this point in the history
Pass ``(ldap_res,)`` tuple to string formatting instead of ``ldap_res``.
This changes fixes ``TypeError: not all arguments converted during string
formatting``.

https://github.com/python-ldap/python-ldap/pull/271

Fixes: https://github.com/python-ldap/python-ldap/issues/270
Signed-off-by: Christian Heimes <cheimes@redhat.com>
  • Loading branch information
Christian Heimes authored and Petr Viktorin committed May 24, 2019
1 parent 95e1d1a commit 1d373da
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
4 changes: 3 additions & 1 deletion Doc/reference/ldap.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion Lib/ldap/ldapobject.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
12 changes: 12 additions & 0 deletions Tests/t_ldapobject.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
"""
Expand Down

0 comments on commit 1d373da

Please sign in to comment.