Проблема с Python LDAP и Active Directory

Я постараюсь включить как можно больше подробностей, но рассмотрим эту ситуацию:

Из соображений конфиденциальности допустим, что у меня есть инфраструктура Active Directory, подобная следующей:

microsoft.com
и некоторые дочерние домены:
csharp.microsoft.com
vb.microsoft.com

Все учетные записи пользователей хранятся на microsoft.com.

Я начинаю свой код со следующего:

import ldap
ldap.set_option(ldap.OPT_REFERRALS,0)
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_NEVER)

(Я знаю, что, вероятно, у меня должен быть сертификат для домена, но что вы можете сделать)

Затем я устанавливаю соединение, подобное следующему:

conn = ldap.initialize("ldaps://microsoft.com:636")
conn.simple_bind_s("user","pass")

In мой скрипт Я ищу учетную запись пользователя и использую следующий поиск:

result_id = conn.search("DC=microsoft,DC=com",
                                ldap.SCOPE_SUBTREE,
                                "(&(CN=gates)(!(objectClass=contact)))",
                                None)
result_type,result_data = conn.result(result_id,0)

Хорошо, отлично, так что это работает .... большую часть времени.
Когда это действительно работает, я получаю что-то вроде:

[("CN=gates,OU=Users,DC=microsoft,DC=com", {'sAMAccountName':['gates']}])

Однако это кажется случайным, что я получу следующие результаты:

[(None, ['ldaps://csharp.microsoft.com/DC=csharp,DC=microsoft,DC=com'])]

Хотя результат имеет смысл - gates не существует на csharp.microsoft.com он существует на microsoft.com DC - это все еще вызывает недоумение, потому что у меня сложилось впечатление, что использование параметра OPT_REFERRALS, равного 0, укажет модулю Python LDAP НЕ использовать ссылки.Чтобы сделать вещи более интересными, я также иногда получаю такие результаты:

[(None, ['ldaps://ForestDnsZones.microsoft.com/DC=ForestDnsZones,DC=microsoft,DC=com'])]

Итак, мой вопрос - что я делаю не так?

Кроме того, было предложено использовать путь поиска, например "OU = Пользователи, DC = microsoft, DC = com "вместо того, чтобы просто искать в корне (" DC = microsoft, DC = com "), что клиентский модуль LDAP не будет пытаться использовать ссылки - это точно?

Изменить

] Проблема оказалась не в LDAP, а в неправильной настройке WSGI. Использование WSGIDaemonProcess решило проблему перекрестного заражения, с которой мы столкнулись.

5
задан Natalie Adams 31 March 2012 в 22:58
поделиться