python-ldap3无法将用户添加到现有LDAP组中

问题描述 投票:0回答:1

我能够使用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
>>>
python active-directory openldap python-ldap ldap3
1个回答
0
投票

以上行说MY-LDAP-GROUP存在并返回TRUE

返回True仅表示搜索成功。这并不意味着发现了任何东西。 conn.entries中有什么吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.