#python #ldap #openldap
#питон #ldap #открытый доступ #python #openldap
Вопрос:
Я пытаюсь получить все группы, членом которых является определенный пользователь.
У меня есть следующие структуры в ldap:
o=myOrganization
ou=unit1
cn=admin
cn=guess
и
ou=users
cn=ann
cn=bob
cn=carla
myOrganization
является экземпляром Organizationunit1
является экземпляром OrganizationUnitadmin
иguess
являются именами групп, и в них каждый является участникомann
,bob
, иcarla
являются экземплярами Person
В настоящее время я использую модуль ldap на python, и это то, что у меня есть:
import ldap
l = ldap.initialize("ldap://my_host")
l.simple_bind_s("[my_dn]", "[my_pass]")
ldap_result = l.search("[BASE_DN]", ldap.SCOPE_SUBTREE, "(amp;(objectClass=Person)(cn=ann))", None)
res_type, data = l.result(ldap_result, 0)
print(data)
И я могу получить пользователя ann
; но как мне получить группы, к которым Ann
принадлежит?
Я попробовал следующее с этой страницы:
search_filter='(|(amp;(objectClass=*)(member=cn=ann)))'
results = l.search_s([BASE_DN], ldap.SCOPE_SUBTREE, search_filter, ['cn',])
Но у меня есть пустой список. Я также пробовал различные комбинации запросов, но все они возвращают пустое значение.
PS: Я использую OpenLDAP на компьютере с Linux
Комментарии:
1. Я попробовал следующее с этой страницы… Но безуспешно . Как именно указанный запрос оказался неудачным? Пустые результаты? Сообщение об ошибке?
2. Кроме того, вы ищете только группы, в которых ann является прямым участником? (Что, если ann является членом группы, которая сама является членом другой группы?)
3. Используете ли вы Windows / Active Directory? Если да, я бы предложил использовать
pyad
пакет. Я знаю, что это не особенно полезно для вашего конкретного вопроса, но я обнаружил, чтоpyad
интерфейс намного приятнее, чем python-ldap. Это было бы так же просто, какuser.get_membersOf()
что также позволяет вам указать область видимости и включать ли подгруппы рекурсивно.4. @JohnGordon Я получаю пустой список при запуске запроса с веб-сайта, и я ищу только прямых участников. Я обновлю свой вопрос, чтобы сделать его более понятным
5. @sytech Я использую openldap на компьютере с Linux
Ответ №1:
member=cn=ann
этого недостаточно. Вы должны использовать полное имя пользователя ann, возможно, что-то вроде этого:
member=cn=ann,ou=users,dc=company,dc=com
Комментарии:
1. Это сработало!, еще одна вещь, которую мне пришлось изменить, это
(objectClass=Person)
на(objectClass=groupOfNames)