我能够使用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
>>>
以上行说
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个成员)。您实际上不需要这样做(您可以添加新成员而不查看当前成员资格)。我认为他们试图避免的是您尝试添加已经在组中的某人时遇到的错误。但是我认为有更好的方法来解决这个问题。如果您仅与小组一起工作,这对您可能并不重要。