[python-ldap] Reraising wrong exception in _ldap_call()

Aigars Grins aigars.grins at sentor.se
Tue Sep 26 03:00:08 EDT 2017


Hi,

In ldap.ldapobject theres a method called SimpleLDAPObject._ldap_call(). 
In it there's error handling code along the lines of (abbreviated here):

try:
     result = func(*args, **kwargs)
except LDAPError, e:
     try:
         if not e.args[0].has_key('info') and e.args[0].has_key('errno'):
             e.args[0]['info'] = strerror(e.args[0]['errno'])
     except IndexError:
         pass
     raise

This means that if the raised LDAPError was e.g. a TIMEOUT w/o any args, 
then the `e.args[0]` will raise an IndexError. That will be caught, 
which is fine. But then the reraise will reraise not the LDAPError but 
the IndexError.

So the `raise` should be replaced with `raise e`.

The way I found this was by running something along the lines of:

msgid = cnxn.search_ext(base, scope, ..., timeout = 0.00001)
cnxn.result(msgid, timeout = 0.00001)

The short timeouts triggers a TIMEOUT, but it doesn't have any args.

--
Aigars Grins


More information about the python-ldap mailing list