Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python LDAP3 objectClass属性中的类无效:组_Python_Ldap_Ldap3 - Fatal编程技术网

Python LDAP3 objectClass属性中的类无效:组

Python LDAP3 objectClass属性中的类无效:组,python,ldap,ldap3,Python,Ldap,Ldap3,首先,文档和示例都很糟糕,请向像我这样的普通人解释。大声喊叫 我正在尝试访问我的组织ldap服务器。我尝试过python ldap,但遇到了一些问题,它对响应进行解码和编码的方式非常奇怪。我正在测试ldap3 lib atm。但是我不能用ldap3使用相同的东西 def ldap3_connection_initalizer(username, password): server = ldap3.Server('ldap.blaah.blaaah') connection = l

首先,文档和示例都很糟糕,请向像我这样的普通人解释。大声喊叫

我正在尝试访问我的组织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:objectClass属性中的类无效:组

在此之前,引发LDAPObjectClassError('objectClass属性中的类无效:'+str(值))

有人能解释一下为什么这不起作用,但互联网上的例子使用了类似的反应,而且它起作用了吗


编辑:更新,尝试将组更改为个人,但出现以下错误类型错误错误:无法解包不可编辑的布尔对象第一个错误表示
不是有效的objectClass(实际上它存在,但特定于某些Active Directory组-仅AD),因此需要修复筛选器。用于构造组条目(即具有成员属性)的最通用对象类是
groupOfNames
(cf.)

然后,您使用有效的
(objectClass=person)
更改了过滤器(但对于用户条目),因此您遇到了第二个错误,该错误与如何从
c.search()
解包返回值有关。默认情况下,ldap3'search()函数仅返回状态(其他值仅在“策略”定义为线程安全时返回,这一点并不明显)

当运行搜索时,响应总是通过
response
关键字添加到连接对象中,因此无论线程模式如何,为了获得实际的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'])