簡體   English   中英

Python LDAP3 在 objectClass 屬性中無效 class:組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM