Python: как настроить python-ldap для игнорирования рефералов?

как я могу избежать получения (недокументированного) исключения в следующем коде?

import ldap
import ldap.sasl

connection = ldap.initialize('ldaps://server:636', trace_level=0)
connection.set_option(ldap.OPT_REFERRALS, 0)
connection.protocol_version = 3
sasl_auth = ldap.sasl.external()
connection.sasl_interactive_bind_s('', sasl_auth)

baseDN = 'ou=org.com,ou=xx,dc=xxx,dc=com'
filter = 'objectclass=*'
try:
  result = connection.search_s(baseDN, ldap.SCOPE_SUBTREE, filter)
except ldap.REFERRAL, e:
  print "referral"
except ldap.LDAPError, e:
  print "Ldaperror"

Бывает, что указанный в примере baseDN является реферальным. Когда я запускаю этот код, я получаю referral в качестве вывода.

Чего бы я хотел, так это того, чтобы python-ldap просто пропускал его или игнорировал, не вызывая странного исключения (я не могу найти документацию об этом)?

(это может помочь или нет) Проблема возникла, когда я искал baseDN выше в дереве. Когда я искал «ou=xx,dc=xxx,dc=com», он начал зависать в моей производственной среде, тогда как в среде разработки все работает отлично. Когда я начал смотреть на него, я обнаружил, что он зависает на реферальных ветках. Как я могу сказать python-ldap игнорировать ссылки? Код выше не работает, как я хочу.


person sebast26    schedule 09.08.2013    source источник


Ответы (1)


Это рабочий пример, посмотрите, поможет ли он.

def ldap_initialize(remote, port, user, password, use_ssl=False, timeout=None):
    prefix = 'ldap'
    if use_ssl is True:
        prefix = 'ldaps'
        # ask ldap to ignore certificate errors
        ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)

    if timeout:
        ldap.set_option(ldap.OPT_NETWORK_TIMEOUT, timeout)

    ldap.set_option(ldap.OPT_REFERRALS, ldap.OPT_OFF)
    server = prefix + '://' + remote + ':' + '%s' % port
    l = ldap.initialize(server)
    l.simple_bind_s(user, password)
person navendu    schedule 07.02.2014