嘿,我一般来说对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']})]”。我只希望它仅打印电子邮件。我将不胜感激任何帮助。谢谢
答案 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"))