我正在使用Python LDAP模块并试图对登录用户进行查询。用户名将传递到查询中。当我简单地输入用户名作为字符串时,我的结果就会正确地显示出来。
但是如果我试图传递(username)变量,它将返回
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)
你试过给你的字符串编码吗?
在“WORKS”情况下,筛选字符串包含一个没有域的简单名称:
在“不起作用”的情况下,您使用一个带有域的名称:
除非转义,否则筛选器字符串中不允许使用字符
\
。如何解决此问题取决于ldap服务器中的数据。或许是这样:
或许是这样:
我需要使用ldap.filter.filter_格式来进行正确的字符转义。
相关问题 更多 >
编程相关推荐