2012-07-20 77 views
0

我正在嘗試使用ActiveLdap搜索具有特定屬性值的用戶,但它正在向服務器發送一些奇怪的查詢。我有它設置如下:ActiveLdap根據屬性查找用戶

class Ldapuser < ActiveLdap::Base 
    ldap_mapping :dn_attribute => 'uid', 
       :prefix => 'ou=People', 
       :classes => ['top', 'inetOrgPerson'] 
end 

,然後嘗試找同學與特定專業:

Ldapuser.all(
     :attribute => 'studentMajor', :value => 'CHEM', 
     :attribute => 'primaryAffiliation', :value => 'student', 
     :attribute => 'organizationalStatus', :value => 'active').each {|user| 
    # process the user... 
} 

當我運行它,它永遠不會到達內部塊哪裏會處理用戶,我必須殺死程序。 Tcpdump顯示執行了三次搜索:

  • searchRequest(1)「」baseObject - 它給出了0個結果。
  • searchRequest(2)「cn = schema」baseObject - 它給出了115個結果。
  • searchRequest(3)「ou = people,dc = myedu,dc = edu」wholeSubtree - 這需要太長時間纔會中斷它。

我的期望是,它會做一個查詢並迅速得到約20個結果,這是我得到使用命令行使用ldapsearch時:

ldapsearch -x '(&(studentMajor=CHEM)(primaryAffiliation=student) 
     (organizationalStatus=active))' 

回答

1

它不會從出現多個屬性名稱 - 值對由.all()識別的文檔,它是find(:all,...)的同義詞,並且您看到的行爲同意。它似乎只搜索第一對,或者可能是任何一對:因此搜索時間很長。您需要使用:過濾器選項,從我可以快速收集的內容中進行選擇。