Как найти все группы, членом которых является пользователь? (LDAP)

#python #ldap #openldap

#питон #ldap #открытый доступ #python #openldap

Вопрос:

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

У меня есть следующие структуры в ldap:

 o=myOrganization
     ou=unit1
         cn=admin
         cn=guess
  

и

 ou=users
    cn=ann
    cn=bob
    cn=carla
  
  • myOrganization является экземпляром Organization
  • unit1 является экземпляром OrganizationUnit
  • admin и 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)