繁体   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