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"))