如果我已有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)
答案 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搜索操作。