2016-11-28 4 views
0

я следующий кодPython метод LDAP3 повторное связывание не вызывает ошибку

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

Docs:

# 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) 

Если учетные данные недействительны или если сервер не позволяет вам перегруппировать rver может резко закрыть соединение. Это условие проверяется методом rebind(), и исключение LDAPBindError будет поднято, если caugh. Link to this

Проблема заключается в том, что, хотя все, кажется, работает нормально, я могу проверить, что из печати result собственности.

На succeful пересвязывания: {'result': 0, 'description': 'success', 'type': 'bindResponse', 'message': '', 'dn': '', 'referrals': None, 'saslCreds': None}

На неудачном пересвязывании: {'type': 'bindResponse', 'dn': '', 'result': 49, 'description': 'invalidCredentials', 'message': '', 'referrals': None, 'saslCreds': None}

Хотя не удался пересвязать исключение не возникает. Я понял что-то неправильно и не должен вызывать ошибки? Иначе почему это не так, не так ли?

Спасибо за любую помощь.

ответ

2

Документы устарели. Метод rebind() ведет себя как bind(). Он возвращает True, если привязка успешна и ложна, если она не удалась. Если вы хотите, чтобы возникло исключение, когда учетные данные недействительны, вы должны использовать параметр raise_exceptions = True в определении Connection().

Исключение LdapBindError возникает только в том случае, если сервер закрывает соединение при попытке привязки снова. Имейте в виду, что сетевые ошибки всегда вызывают исключение, даже если для параметра raise_exceptions установлено значение False.

Скоро обновит документы (я являюсь автором ldap3).