2017-05-04 211 views
0

我真的用完了想​​法。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[email protected])') 

但是如果我使用通配符,我最後出現了錯誤:

print ldap_query('(mail=a.name*)') 

EDITED 只是現在它開始工作,用最後一個過濾器(一個略高於此)。不知道爲什麼它以前沒有工作。

+0

請提供演示錯誤的最短可能的完整程序。有關更多信息,請參見[mcve]。 –

回答

0

它運作良好只用一個通配符:

'(mail=a.name*) 

,而不是兩個:

'(mail=*a.name*) 

我使用,因爲使用MySQL「LIKE」查詢,而我所看到的做法%string%,而LDAP過濾器似乎並非如此。

+0

它應該同時工作,但是前導通配符會很慢,因爲它需要完全搜索,就像LIKE一樣。儘量不要使用它。 – EJP

+0

將再次嘗試使用兩個通配符來確保它可以正常工作(或至少使其工作),也許還有一些缺失(在我的代碼上)。 – DanielYoshua