Python LDAP Search - PullRequest
       2

Python LDAP Search

4 голосов
/ 17 ноября 2011

Я читал о том, как искать серверы LDAP с помощью Python, но я застрял в течение нескольких часов, и я не уверен, почему. Я впервые пытаюсь использовать такого рода API.

Вот как я открываю соединение и пытаюсь искать:

aims_server = '#####.com'
base_dn = 'cn=EMPLOYEES,cn=portal,cn=Groups,dc=Company,dc=com'
username = 'cn=admin,cn=users,dc=Company,dc=com'
password='#####'
directory=ldap.open(aims_server)
directory.simple_bind_s(username, password)

#retrieve the current members from group
old = {'uniquemember':attr['uniquemember']}

Затем я намеренно нарушаю код, чтобы я мог использовать отладчик и искать, используя это:

>>> searchFilter = "cn=*"
>>> directory.search_s(base_dn,ldap.SCOPE_SUBTREE,searchFilter, retrieveAttributes)

Результаты:

[('cn=EMPLOYEES,cn=portal,cn=groups,dc=Company,dc=com', {'displayname': ['Employees'], 'description': ['Members of this group are employees. '], 'objectclass': ['top', 'groupOfUniqueNames', 'orclGroup'], 'orclisvisible': ['true'], 'owner': ['cn=portal_admin ,cn=users,dc=Company,dc=com', 'cn=portal,cn=users, dc=Company,dc=com'], 'uniquemember': ['cn=alan,cn=users,dc=Company,dc=com', 'cn=alan_r,cn=users,dc=Company,dc=com', ....

Если у меня есть фильтр "cn=*", он вернет словарь выше, но если я на самом деле что-то добавлю в searchFilter, он не вернет никаких результатов.

У кого-нибудь есть понимание? Мне интересно, если я не ищу достаточно глубоко в каталогах?

EDIT

Лучшее, что я могу из этого извлечь, это изменить настройки на:

searchFilter = "cn=*"
retrieveAttributes = ["uniquemember"]

Тогда:

(cn, attr) = searcher.pop()

Возвращает:

{'uniquemember': ['cn=alan_t,cn=users,dc=company,dc=com','cn=alan_r,cn=users,dc=company....

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

Я просто хочу найти их имена!

Ответы [ 2 ]

9 голосов
/ 18 ноября 2011

Я наконец сделал это, и это заняло у меня более 5 часов.

Каждый раз, когда я возился с конфигурацией, я узнавал немного больше, но мне приходилось пробовать каждую комбинацию, чтобы заставить ее работать.

Оказывается, я, вероятно, был слишком конкретен с base_dn, поэтому я изменил его на более высокий уровень

base_dn = 'cn=users,dc=company,dc=com'

Затем я понял, что не могу искать ниже уникального члена , так что это должен был быть атрибут, который я возвращал

retrieveAttributes = ["uniquemember"]

Таким образом, фильтр работает

searchFilter = "cn=aaron*"

Затем он вернется:

[('cn=Aaron_A@company.com,cn=Users,dc=company,dc=com', {})]

Хотя в конце он содержит пустой объект, он все равно дает мне результат, который я ищу.

Я надеюсь, что это поможет кому-то еще, когда они впервые в LDAP

0 голосов
/ 18 ноября 2011

Вместо ...

directory=ldap.open(aims_server)

Я использовал ...

directory=ldap.initialize(aims_server)

Кроме того, если у вас есть ...

searchFilter = "cn=alan"
retrieveAttributes = ['cn']
results = directory.search_s( ... )
print results

это все равно не даст вам то, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...