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

时间:2018-07-30 19:02:12

标签: python ldap ldap-query 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 个答案:

答案 0 :(得分:0)

搜索结果是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]

答案 1 :(得分: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"))