Метод повторной привязки 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

Документы:

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

В случае, если учетные данные недействительны или если сервер не позволяет вам выполнить повторную привязку, сервер может внезапно закрыть соединение. Это условие проверяется методом rebind(), и в случае обнаружения будет возбуждено исключение LDAPBindError. Ссылка на это< /а>

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

При успешном повторном связывании: {'result': 0, 'description': 'success', 'type': 'bindResponse', 'message': '', 'dn': '', 'referrals': None, 'saslCreds': None}

При неудачной повторной привязке: {'type': 'bindResponse', 'dn': '', 'result': 49, 'description': 'invalidCredentials', 'message': '', 'referrals': None, 'saslCreds': None}

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

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


person zochamx    schedule 28.11.2016    source источник


Ответы (1)


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

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

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

person cannatag    schedule 29.11.2016