[英]how to read attributes for given DN in ldap3 (how to search with ldap3 if no filter)
如果我已有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)
我剛剛意識到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:
請注意,客戶端可以通過過濾器檢查是否存在“objectClass”屬性來模擬X.500“類似列表”的操作,並且X.500“類似”操作可以使用相同的過濾器通過baseObject搜索操作進行模擬。 提供到X.500的網關的服務器不需要使用讀取或列表操作,盡管它可以選擇這樣做,如果確實如此,它必須提供與X.500搜索操作相同的語義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.