3

如果我已经有一个 LDAP DN,我如何获取该 DN 的属性ldap3.Connection.search()?没有其他搜索条件,我已经有了 DN...

我尝试搜索 dn 属性,但没有返回任何对象。我也尝试过强制search_filter,或者它们都返回了格式错误的过滤器字符串。'''()'None

我也找不到使用抽象阅读器执行此操作的方法...

如果ldapsearch您正在执行 baseDN 查找,则无需指定搜索过滤器...

import ldap3

ldap_conn = ldap3.Connection('ldapserver', raise_exceptions=True, 
    auto_bind=True, user='me', password='mypassword')

my_dn = "attrib1=blahblah, ou=org1, dc=dc1, dc=dcroot"

ldap_conn.search(
    search_base=my_dn,
    search_filter= '(????)', # required
    search_scope=ldap3.BASE,
    attributes='*'
)

print(ldap_conn.response)
4

1 回答 1

6

我刚刚意识到objectClass它将始终存在,因此将其设置为通配符应该填充 search_filter 以返回与基本 DN 关联的 1 条目:

ldap_conn.search(
    search_base=my_dn,
    search_filter= '(objectClass=*)', # required
    search_scope=ldap3.BASE,
    attributes='*'
)

然而,对于在 ldap3 中给定 DN 的连接,LOOKUP 操作没有特殊情况似乎很愚蠢。

编辑:@cannatag 提到这是协议的限制,所以我决定检查 RFC: (RFC 4511)。显然, Active Directory 通过设置存在过滤器ldapsearch来模拟 x.500 样式的 LIST 或 READ :objectClass

请注意,X.500 类似“列表”的操作可以通过客户端请求单层搜索操作来模拟,该操作使用过滤器检查“objectClass”属性的存在,并且 X.500 类似“读取”的操作可以由具有相同过滤器的 baseObject 搜索操作模拟。提供 X.500 网关的服务器不需要使用 Read 或 List 操作,尽管它可以选择这样做,如果这样做,它必须提供与 X.500 Search 操作相同的语义。

于 2017-12-06T01:18:22.420 回答