Python LDAP 如何将搜索条目转换为字符串

Python LDAP How to convert search entry into string

嘿,我对 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)

每次我 运行 这个,我都会得到错误 "tuple indices must be integers, not list"。另外,当我只打印结果时,它说“[('uid=boyle,dc=example,dc=com', {'mail': ['boyle@ldap.forumsys.com']})]”。我只想让它单独打印电子邮件。我将不胜感激任何帮助。谢谢

搜索结果是二元组列表。

二元组由 (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"))