0

我正在尝试使用 Python ldap3 从 ldap 检索用户。这是我的设置

from ldap3 import Server, Connection, ObjectDef, AttrDef, Reader, Writer, ALL
server = Server('ldap://ldapserver:389', get_info=ALL)
conn = Connection(server, 'eTGlobalUserName=user,eTGlobalUserContainerName=Global Users,eTNamespaceName=CommonObjects,dc=iam,dc=eta', 'pass123', auto_bind=True)

当我使用连接对象搜索时,我可以检索所有用户:

conn.search('eTGlobalUserContainerName=Global Users,eTNamespaceName=CommonObjects,dc=iam,dc=eta', '(objectclass=eTGlobalUser)')

但是当我尝试让所有用户使用阅读器时,我只得到一个项目,它甚至不包含用户,这就是我所做的:

obj_person = ObjectDef('eTGlobalUser',conn)
r = Reader(conn,obj_person,'eTGlobalUserContainerName=Global Users,eTNamespaceName=CommonObjects,dc=iam,dc=eta')
r.search()

我有什么遗漏吗?

编辑 1 这是 print(r) 的输出:

This is the output of print(r):
CURSOR : Reader
CONN   : ldap://ldapserver:389 - cleartext - user: eTGlobalUserName=user,eTGlobalUserContainerName=Global Users,eTNamespaceName=CommonObjects,dc=asusisv-iam,dc=eta - not 
lazy - bound - open - <local: 10.150.8.169:54196 - remote: 10.145.10.123:389> - tls not started - listening - SyncStrategy - internal decoder
DEFS   : eTGlobalUser
ATTRS  : ['eTAccessControlList', ... , 'eTGlobalUserName', ... , 'objectClass']
BASE   : 'eTGlobalUserContainerName=Global Users,eTNamespaceName=CommonObjects,dc=iam,dc=eta' [SUB]
FILTER : '(objectClass=eTGlobalUser)'
4

1 回答 1

0

您可以访问结果r.entries

一旦阅读器光标填充了条目,您就可以使用 List 对象的标准索引功能获取特定条目。

Cursor 对象也有一个快捷方式:使用r[0]r[1]等等来执行相同的操作。例如 :

for entry in r.entries:
    print(entry.entry_dn) 
    print(entry.<attribute_name>)

# or
for entry in r:
    ...

如果您获得 0 个条目,您可以print(r)查看阅读器光标的构建方式并检查CONN,BASEFILTER(用于构建r.search() queries的)是否从您提供的参数正确转换为ObjectDef()and Reader()

于 2019-10-22T09:46:31.550 回答