【问题标题】:Space in OU causing ldap search to failOU 中的空间导致 ldap 搜索失败
【发布时间】:2021-07-08 06:22:51
【问题描述】:

我在 python3.9 中使用 ldap3 库将所有​​成员和经理详细信息(包括经理的 displayName 和特定 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 中有空格,如下在经理的专有名称中:

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

我尝试使用 \ 或 \\ 甚至将空格替换为 20 来逃避这种情况,但无法使其正常工作。

谢谢。

【问题讨论】:

    标签: python python-3.x active-directory ldap ldap3


    【解决方案1】:

    由于您已经有一个 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']
                )
    

    【讨论】:

    • 谢谢。我今天了解到我可以将完整的 DN 用于 search_base。
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多