如何在ldap3中读取给定DN的属性(如果没有过滤器,如何使用ldap3进行搜索)

时间:2017-12-06 01:13:40

标签: python ldap ldap3

如果我已有LDAP DN,如何使用ldap3.Connection.search()获取该DN的属性?没有其他搜索条件,我已经有了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)

1 个答案:

答案 0 :(得分:3)

我刚刚意识到objectClass将始终存在,因此将其设置为通配符应该shim 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)。显然,ldapsearch和Active Directory通过设置objectClass状态过滤器来模拟x.500样式的LIST或READ:

  

请注意,X.500"列表"类似的操作可以被模拟      客户端使用过滤器请求单级搜索操作      检查' objectClass'是否存在属性,那个      X.500"读取"类操作可以通过baseObject搜索模拟      使用相同的过滤器操作。提供网关的服务器      尽管如此,X.500不需要使用读取或列表操作      可以选择这样做,如果确实如此,它必须提供相同的      语义作为X.500搜索操作。