2012-10-08 49 views
1

該過濾器由蟒蛇LDAP工作得很好,在我的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內的東西,但無法找到根。

+0

我想這是'!' 'objectClass'之前,奇怪的東西 – abolotnov

+1

*虛構*的東西。沒有這樣的語法。 – EJP

+1

我在Microsoft Technet上發佈了AD過濾器的準確語法。一定要意識到,微軟喜歡以錯誤的方式做事。 –

回答

6

搜索過濾器語法不正確。使用(&(sn=*%s*)(!(objectClass=computer)))。搜索過濾器在RFC4511RFC4515中有詳細記錄。