Python ldap3重新绑定方法不会引发错误

时间:2016-11-28 19:07:30

标签: python authentication ldap python-ldap

我有以下代码

requestWhenInUseAuthorization()

根据from ldap3 import Server, Connection, SUBTREE, ALL_ATTRIBUTES, LDAPBindError ... ... def search(self, id): if not self._connect.bind(): print('error in bind', self._connect.result) else: self._connect.search( search_base=self._base_dn, search_filter='(uid='+id+')', search_scope=SUBTREE ) userdn = self._connect.response[0]['dn'] try: self._connect.rebind(user=userdn, password='password') print(self._connect.result) except LDAPBindError: print('error in rebind', self._connect.result) self._connect.unbind() pass 文档,python-ldap3方法应该引发rebind

文档:

LDAPBindError
  

如果凭据无效或服务器不允许您重新绑定服务器,则可能会突然关闭连接。 rebind()方法检查此条件,如果caugh,将引发LDAPBindError异常。 Link to this

问题在于,虽然一切似乎都运行良好,但我可以通过打印# import class and constants from ldap3 import Server, Connection, ALL, LDAPBindError # define the server s = Server('servername', get_info=ALL) # define an unsecure LDAP server, requesting info on DSE and schema # define the connection c = Connection(s, user='user_dn', password='user_password') # perform the Bind operation if not c.bind(): print('error in bind', c.result) try: c.rebind(user='different_user_dn', password='different_user_password') except LDAPBindError: print('error in rebind', c.result) 属性来验证。

成功重新绑定: result

失败的重新绑定: {'result': 0, 'description': 'success', 'type': 'bindResponse', 'message': '', 'dn': '', 'referrals': None, 'saslCreds': None}

虽然在重新绑定失败时没有引发异常。我明白了什么不对,不应该提出错误吗?否则为什么它没有,我有错吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

文档已过时。 rebind()方法的行为类似于bind()。如果bind成功则返回True,如果不成功则返回false。如果要在凭据无效时引发异常,则必须在Connection()定义中使用raise_exceptions = True参数。

仅当服务器在尝试再次绑定时关闭连接时,才会引发LdapBindError异常。请记住,即使raise_exceptions设置为False,网络错误也会引发异常。

很快就会更新文档(我是ldap3的作者)。