[英]Python LDAP3 invalid class in objectClass attribute: group
首先,文檔和示例太糟糕了,請像我這樣簡單的人解釋一下。 吐槽一下。
我正在嘗試訪問我的組織 ldap 服務器。 我試過 python-ldap,但我遇到了問題,它解碼和編碼響應非常奇怪。 我正在測試 ldap3 lib atm。 但是我不能使用 ldap3 使用相同的東西。
def ldap3_connection_initalizer(username, password):
server = ldap3.Server('ldap.blaah.blaaah')
connection = ldap3.Connection(server, user=f'uid={username},ou=people,ou=users,dc=blaah,dc=blaah', password=f'{password}')
with ldap3.Connection(server, user=f'uid={username},ou=people,ou=users,dc=blaah,dc=blaaah', password=f'{password}', auto_bind = True) as c:
print(c)
base_dn='ou=people,ou=users,dc=blaaah,dc=blaaah'
status, result, response, _ = c.search(search_base=base_dn, search_filter='(objectClass=group)', search_scope='SUBTREE', attributes = ['member'])
print(status)
print(result)
print(response)
運行這個我得到: ldap3.core.exceptions.LDAPObjectClassError: invalid class in objectClass attribute: group
在此之前引發 LDAPObjectClassError('invalid class in objectClass 屬性:' + str(value))
誰能解釋為什么這不起作用,但互聯網上的示例使用類似的響應並且它有效?
編輯:更新,嘗試將組更改為人員並收到此錯誤 TypeError: cannot unpack non-iterable bool object
第一個錯誤表明該group
不是有效的 objectClass(實際上它存在但特定於某些 Active Directory 組 - 僅限 AD),因此您需要修復過濾器。 用於構造組條目(即具有成員屬性)的最通用的 objectClass 是groupOfNames
(參見LDAP Group )。
然后,您使用有效的(objectClass=person)
更改了過濾器(但對於用戶條目),因此您遇到第二個錯誤,該錯誤與如何從c.search()
解壓縮返回值有關。 默認情況下 ldap3' search() function 只返回狀態(只有當“策略”定義為線程安全時才會返回其他值,這一點都不明顯)。
運行搜索時,響應總是通過response
關鍵字添加到連接 object 中,因此為了獲得實際的 ldap 條目,無論線程模式如何,我們都可以迭代連接響應。
總結一下,你可以這樣做:
status = c.search(search_base=base_dn, search_filter='(objectClass=groupOfNames)', search_scope='SUBTREE', attributes = ['member'])
print(status)
for entry in c.response:
print(entry['dn'])
print(entry['attributes'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.