【问题标题】:python ldap "Bad search filter" errorpython ldap“错误的搜索过滤器”错误
【发布时间】:2023-07-31 02:35:02
【问题描述】:

这个过滤器在我的 LDAP 浏览器中工作得很好,python ldap 不会选择它:

(&(!objectClass=computer)(sn=*%s*))

导致:

Request Method: GET Request
URL: http://localhost:8000/ldap_find/%D0%B1%D0%BE%D0%BB%D0%BE%D1%82/
Django Version: 1.4
Exception Type: FILTER_ERROR
Exception Value: {'desc': 'Bad search filter'}

这是执行此操作的代码:

try:
    LDAPClient.connect()
    base = AUTH_LDAP_SEARCH_BASE
    scope = ldap.SCOPE_SUBTREE
    filter = '(&(!objectClass=computer)(sn=*%s*))' % search_string
    result_set = list()
    result = LDAPClient.client.search(base.encode(encoding='utf-8'), scope, filter.encode(encoding='utf-8'),['cn','mail'])
    res_type, res_data = LDAPClient.client.result(result)
    for data in res_data:
        if data[0]:
            result_set.append(data)
    return json.dumps(result_set)
except Exception, e:
    raise e
finally:
    LDAPClient.unconnect()

它适用于简单的过滤器,例如

filter = 'sn=*%s*' % search_string

所以我猜这是对 & 或 ldap lib 内部的某种转义,但还找不到根目录。

【问题讨论】:

  • 我认为这是“!”在'objectClass'之前,奇怪的东西
  • 虚构的东西。没有这样的语法。
  • 我在 Microsoft Technet 发布的 AD 过滤器帖子中准确找到了这种虚构的语法。请始终注意,Microsoft 喜欢以错误的方式做事。
  • 我遇到的问题是过滤器的括号之间有一个逗号,如下所示: (&(objectClass=*) , (sn=*%s*)) # remove comma in middle跨度>

标签: ldap


【解决方案1】:

搜索过滤器语法不正确。使用(&(sn=*%s*)(!(objectClass=computer)))。搜索过滤器在 RFC4511RFC4515 中有详细记录。

【讨论】:

    最近更新 更多