Python LDAP Как преобразовать поисковую запись в строку

Эй, я относительно новичок в Python и LDAP в целом, поэтому я прошу прощения, если есть какие-либо ошибки. Я пытаюсь выполнить базовый поисковый запрос на открытом сервере LDAP, чтобы изучить основы работы с LDAP. Я пытаюсь получить один результат поиска, но он не позволяет мне преобразовать его в строку. Есть также куча дополнительной информации, от которой я хочу избавиться.

import ldap
from ldap.filter import escape_filter_chars

username = "cn=read-only-admin,dc=example,dc=com"
password = "password"
searchWord = "boyle"

server = ldap.initialize("ldap://ldap.forumsys.com")
server.simple_bind_s(username, password)

ldap_filter = "(cn=*%s*)" % (ldap.filter.escape_filter_chars(searchWord))
attribute = ['mail']
base = "dc=example,dc=com"
results = server.search_s(

    base,
    ldap.SCOPE_SUBTREE,
    ldap_filter,
    attribute,

)


resultPrint = str(results[0][attribute][0])

print(resultPrint)

Каждый раз, когда я запускаю это, я получаю ошибку "индексы кортежа должны быть целыми числами, а не списком". Кроме того, когда я просто печатаю результаты, он говорит: "[('uid=boyle,dc=example,dc=com', {'mail': ['boyle@ldap.forumsys.com']})]". Я просто хочу, чтобы он напечатал письмо в одиночку. Буду признателен за любую помощь. Спасибо

2 ответа

Решение

Результаты поиска представляют собой списки из 2-х кортежей.

2 кортежа состоят из (dn, entry) со строкой словаря со строковыми ключами, содержащей все атрибуты записи, которые сервер вернул в результате поиска.

С LDAP (на основе модели данных X.500) атрибуты могут быть многозначными, и, таким образом, даже одно значение атрибута возвращается в списке значений атрибута.

Итак, в вашем конкретном примере:

>>> result = [('uid=boyle,dc=example,dc=com', {'mail': ['boyle@ldap.forumsys.com']})]
>>> result[0][1]['mail'][0]
'boyle@ldap.forumsys.com'

Очевидно, что кто-то хочет перебрать список результатов поиска следующим образом:

for dn, entry in result:
    mail_addr = entry['mail'][0]

Вот фрагмент:

      if len(result_set) > 0:
    result = result_set[0]
    for dn, entry in result:
        # entry is a dictionary
        for x, y in entry.items():
            # x is a key
            ylist = list(y)
            for yy in ylist:
                print(x, yy.decode("utf-8", "ignore"))
Другие вопросы по тегам