我们有一个python应用程序,它从ldap读取条目并更新其他数据库中的用户。现在我遇到的问题是,当我跑步的时候
ldapsearch 'sAMAccountName=myID`
我能够成功地获取属性employeeID
但是从python代码中,我无法打印employeeID
属性
我的python代码如下所示:
import ldap
import datetime
conn = ldap.initialize('ldap://url:port')
conn.simple_bind_s('CN=ABC,OU=XYZ,OU=AAA,DC=users,DC=net', 'password')
from ldap.controls import SimplePagedResultsControl
LDAP_ATTRS = ['*']
LDAP_FILTER = (
'(&(sAMAccountName=myId))'
)
pager = SimplePagedResultsControl(
criticality=True,
size=1500000,
cookie=''
)
msgid = conn.search_ext(
'DC=users,DC=net', ldap.SCOPE_SUBTREE,
LDAP_FILTER.format(''),
LDAP_ATTRS, serverctrls=[pager]
)
rtype, rdata, rmsgid, serverctrls = conn.result3(msgid)
for dn, entry in rdata:
for ent in entry:
print(ent)
我不知道为什么我不能打印属性(employeeID
)中的一个。它由ldapsearch命令提供
编辑
首先,我怀疑一些假设,比如用户应该有读取属性的权限。但我不确定我的假设是否正确
由于我不熟悉python和ldap,所以我阅读了关于ldap模式的内容,并根据模式阅读了关于result的结果。如果有人解释他们的理解,这将有助于分析和理解
您是否尝试过在属性列表(LDAP_ATTRS)中指定“employeeID”,而不是在search_ext调用中指定“*”,以查看是否返回employeeID
或者尝试不将属性列表指定为https://www.python-ldap.org/en/latest/reference/ldap.html#ldap.LDAPObject.search中的文档 表示“检索到的属性可以使用attrlist参数进行限制。如果attrlist为None,则返回每个条目的所有属性。”
问题是employeeID位于不同的端口,而所有其他属性位于不同的端口。我不知道ldapsearch命令是如何工作的,但ldapsearch能够获取所有属性,但不能从python库中获取,因为我获取的连接对象来自不同的端口,其中employeeID属性不存在
使用strace查找ldapsearch,尝试从哪个端口获取所有属性
我更喜欢使用
ldap3
而不是ldap
。 https://ldap3.readthedocs.io/这是因为sAMAccountName是条目的一个属性
你能试试这个代码吗
相关问题 更多 >
编程相关推荐