Python ldap3 Reader возвращает только одно значение - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь использовать 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)')

Но когда я пытаюсь получить всех пользователей с помощью Reader, я получаю толькоодин элемент, и он даже не содержит пользователя, вот что я сделал:

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

Есть ли что-то, что я пропускаю?

Редактировать 1 Этовывод на печать (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)'

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете получить доступ к результатам с помощью r.entries

Когда курсор Reader заполнен записями, вы можете получить конкретную запись с помощью стандартной функции индекса объекта 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, BASE и FILTER (которые используютсядля сборки r.search() queries) правильно конвертируются из параметров, которые вы задаете в ObjectDef() и Reader().

...