我真的没有想法了。
我最近被指派改进我们在Python中的脚本,以便它可以获取其电子邮件与字符串匹配的所有用户(更确切地说,所有用户的电子邮件与从HTML的文本输入中获得的值匹配) )。
使用此过滤器效果很好("搜索"是从文本输入中获取的文本):
user_filter = '(mail=%s)' % search
但是电子邮件价值必须完全符合用户的电子邮件,我需要的是匹配任何记下的值(字符串)。
我使用的最后一个过滤器是这样的:
user_filter = '(mail=*%s*)' % search
也是这样的:
user_filter = '(mail=%s*)' % search
(请注意使用通配符)
但他们都没有工作。
任何想法我能做到这一点吗?你需要更多的背景吗?
我正在使用 ldap 和函数 search_s
这是代码的片段:
def ldap_query(query):
""" returns the members of an LDAP group """
try:
ldap_conn = ldap.initialize(LDAP_URL)
ldap_conn.timeout = LDAP_TIMEOUT
ldap_conn.simple_bind(LDAP_USERNAME, LDAP_PASSWORD)
if not ldap_conn.whoami_s():
raise Exception('503 Unable to authenticate to LDAP server with master user & password')
res = ldap_conn.search_s(LDAP_BASE_DN, ldap.SCOPE_SUBTREE, query)
if res == []:
raise Exception('Group not found in LDAP directory, using filter {}'.format(query))
print res
我正在使用它:
print ldap_query('(mail=my.name@mycompany.com)')
但如果我使用通配符,我最终得到了错误:
print ldap_query('(mail=a.name*)')
EDITED 刚刚开始工作,使用最后一个过滤器(这里就是上面的过滤器)。不知道为什么之前没有工作。
答案 0 :(得分:0)
只使用一个通配符就可以了:
'(mail=a.name*)
而不是两个:
'(mail=*a.name*)
我使用这种方法是因为我在使用MysQL时遇到的情况" LIKE"查询%string%,而使用LDAP过滤器似乎不是这种情况。