我正在使用 Python 3.7 和 ldap3。我可以建立连接并检索我感兴趣的组列表。不过,我很难获得小组成员。
server = Server('ldaps.ad.company.com', use_ssl=True, get_info=ALL)
with Connection(server, 'mydomain\\ldapUser', '******', auto_bind=True) as conn:
base = "OU=AccountGroups,OU=UsersAndGroups,OU=WidgetDepartment," \
+ "OU=LocalLocation,DC=ad,DC=company,DC=com"
criteria = """(
&(objectClass=group)
(
|(sAMAccountName=grp-*widgets*)
(sAMAccountName=grp-oldWidgets)
)
)"""
attributes = ['sAMAccountName', 'distinguishedName']
conn.search(base, criteria, attributes=attributes)
groups = conn.entries
此时groups
包含我想要的所有组。我想遍历组以收集成员。
for group in groups:
# print(cn)
criteria = f"""
(&
(objectClass=person)
(memberof:1.2.840.113556.1.4.1941:={group.distinguishedName})
)
"""
# criteria = f"""
# (&
# (objectClass=person)
# (memberof={group.distinguishedName})
# )
# """
attributes = ['displayName', 'sAMAccountName', 'mail']
conn.search(base, criteria, attributes=attributes)
people = conn.entries
我知道组中有人,但people
总是一个空列表。我是否进行递归搜索并不重要。
我错过了什么?
编辑
这个问题有一个更长的背景故事,太长了,无法深入探讨。不过,我对这个特定问题有一个理论。我的时间不多了,并切换到了一个不同的 python LDAP 库——它正在工作。我认为这个问题的问题可能是我在多行上“格式化”了查询。新的 ldap lib ( python-ldap
) 抱怨了,我去掉了换行符,它就可以工作了。我没有时间回去用ldap3
.