Space 在 OU 中导致 ldap 搜索失败

Space in OU causing ldap search to fail

我在 python3.9 中使用 ldap3 库来获取所有成员和经理的详细信息,包括经理的显示名称和特定 AD 组的电子邮件到一个循环列表中。

conn.search(search_base='OU=Groups,OU=US,DC=local,DC=test,DC=org',
    search_filter='(&(objectClass=group)(cn=AD-GROUP-NAME))',
    attributes=['managedBy','member'],
    search_scope='SUBTREE'
    )

我将上述结果中每个成员的结果传递到新的搜索中:

for entry in conn.entries:
    for member in entry.managedBy:
        conn.search(
            search_base=member.split(",",2)[2], # Removes Fname & LName from distinguishedName
            search_filter=f'(distinguishedName={member})',
            attributes=['sAMAccountName','mail','displayName']
            )

第二个搜索适用于 大多数 的成员,除非 OU 中有一个 space,如下面的经理的专有名称:

CN=LName, FName,OU=管理员帐户,OU=管理,OU=US,DC=local,DC=test,DC=org

我曾尝试使用 \ 或 \\ 甚至将 space 替换为 20 来避免此问题,但无法使其正常工作。

谢谢。

由于您已经有一个 DN,直接读取此对象可能问题较少且性能更高,如下所示:

for entry in conn.entries:
    for member in entry.managedBy:
        conn.search(
            search_base=member,
            search_filter='(objectClass=*)',
            search_scope=BASE,
            attributes=['sAMAccountName','mail','displayName']
            )