python -ldap3 не может добавить пользователя в существующую группу LDAP - PullRequest
0 голосов
/ 05 марта 2020

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

from ldap3 import Server, Connection, ALL, SUBTREE
from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addMembersToGroups

>>> conn = Connection(Server('ldaps://ldap.****.com:***', get_info=ALL),check_names=False, auto_bind=False,user="ANT\*****",password="******", authentication="NTLM")
>>> 
>>> conn.open()
>>> conn.search('ou=Groups,o=****.com', '(&(cn=MY-LDAP-GROUP))', attributes=['cn', 'objectclass', 'memberuid'])
it returns True and I can see members by printing 
conn.entries
>>> 

В приведенной выше строке указано, что MY-LDAP-GROUP существует и возвращает TRUE во время поиска, но выдает группу LDAP не найдено при попытке пользователя в группе, как показано ниже

>>> addMembersToGroups(conn, ['myuser'], 'MY-LDAP-GROUP')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/****/anaconda3/lib/python3.7/site-packages/ldap3/extend/microsoft/addMembersToGroups.py", line 69, in ad_add_members_to_groups
    raise LDAPInvalidDnError(group + ' not found')
ldap3.core.exceptions.LDAPInvalidDnError: MY-LDAP-GROUP not found
>>>

1 Ответ

0 голосов
/ 05 марта 2020

В приведенной выше строке указано, что MY-LDAP-GROUP существует и возвращает TRUE

. Возвращение True просто означает, что поиск выполнен успешно. Это не значит, что что-то было найдено. Есть ли что-нибудь в conn.entries?

Но я подозреваю, что ваша настоящая проблема в чем-то другом. Если this является исходным кодом для ad_add_members_to_groups, то он ожидает distinguishedName группы (обратите внимание на имя параметра group_dn), но вы передаете cn (общее имя ). Например, ваш код должен выглядеть примерно так:

addMembersToGroups(conn, ['myuser'], 'CN=MY-LDAP-GROUP,OU=Groups,DC=example,DC=com')

Если вы не знаете DN, запросите атрибут distinguishedName из поиска.

Слово предупреждения : этот код для ad_add_members_to_groups извлекает всех текущих членов перед добавлением нового члена. Из-за этого у вас могут возникнуть проблемы с производительностью, если вы работаете с группами с большим количеством участников (например, если в группе 1000 участников, она загрузит все 1000, прежде чем добавлять кого-либо). На самом деле вам не нужно этого делать (вы можете добавить нового участника, не глядя на текущее членство). Я думаю, что они пытаются избежать ошибки, которую вы получаете, когда пытаетесь добавить кого-то, кто уже находится в группе. Но я думаю, что есть лучшие способы справиться с этим. Для вас может не иметь значения, работаете ли вы только с небольшими группами.

...