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