1

このフィルターは、python ldap がそれを取得しないため、私の 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内の何かのエスケープであると推測していますが、まだルートを見つけることができません.

4

1 に答える 1

6

検索フィルターの構文が正しくありません。を使用し(&(sn=*%s*)(!(objectClass=computer)))ます。検索フィルターは、R​​FC4511およびRFC4515で十分に文書化されています。

于 2012-10-08T10:47:31.563 に答える