【发布时间】:2016-11-07 22:57:03
【问题描述】:
我正在使用 Python-LDAP 模块并尝试对已登录的用户进行查询。用户名将被传递到查询中。当我简单地将用户名作为字符串输入时,我的结果会正确显示。
但是如果我尝试传递它返回的(用户名)变量
LDAPError - FILTER_ERROR: {'desc': u'Bad search filter'} 我尝试了许多不同的组合,但仍然返回相同的错误。这里的任何见解都会很棒!
针对最小、完整和可验证的示例进行了编辑:
import ldap
LDAP_SERVER = "ldap://myldapserver.domain.ad:389"
username = r"domain\serviceAccount"
password = "Password"
l = ldap.initialize(LDAP_SERVER)
def login(username, password):
try:
l.simple_bind_s(username, password)
base = "OU=Users,OU=Group,DC=domain,DC=ad"
criteria = "(&(objectClass=user)(sAMAccountName=anActualUsername))" #WORKS
criteria = '(&(objectClass=user)(sAMAccountName=%s))' % username #DOESNT WORK
criteria = "(&(objectClass=user)" + "(sAMAccountName=" + username + "))" #DOESNT WORK
attributes = ['displayName']
result = l.search_s(base, ldap.SCOPE_SUBTREE, criteria, attributes)
print result
except ldap.INVALID_CREDENTIALS:
return False
return True
login(username,password)
【问题讨论】:
-
我建议你
print criteria和print repr(criteria)在每种情况下。 -
刚刚在我的编辑中添加了结果
-
@Robᵩ 还有其他想法吗?我觉得我什么都试过了。
-
我建议您将您的原始程序缩减为能够证明问题的最小完整程序。将该程序完整复制粘贴到您的问题中,仅编辑任何敏感信息或凭据。请参阅minimal reproducible example 了解更多信息。
-
好的,现在用最小的例子彻底清理了。
标签: python active-directory ldap python-ldap