LDAP查询无效

时间:2017-05-04 20:54:47

标签: python email filter ldap

我真的没有想法了。

我最近被指派改进我们在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 刚刚开始工作,使用最后一个过滤器(这里就是上面的过滤器)。不知道为什么之前没有工作。

1 个答案:

答案 0 :(得分:0)

只使用一个通配符就可以了:

'(mail=a.name*)

而不是两个:

'(mail=*a.name*)

我使用这种方法是因为我在使用MysQL时遇到的情况" LIKE"查询%string%,而使用LDAP过滤器似乎不是这种情况。