ActiveLdap按属性查找用户

时间:2012-07-20 19:21:41

标签: ruby ldap

我尝试使用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)&#34;&#34; baseObject - 得到0结果。
  • searchRequest(2)&#34; cn = schema&#34; baseObject - 得到了115个结果。
  • searchRequest(3)&#34; ou = people,dc = myedu,dc = edu&#34; wholeSubtree - 这需要太长时间,所以我打断它。

我的期望是它可以执行单个查询并快速获得大约20个结果,这是我从命令行使用ldapsearch时得到的结果:

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

1 个答案:

答案 0 :(得分:1)

从文档中看不出多个属性名称 - 值对被.all()识别,它是find(:all,...)的同义词,并且您看到的行为已经同意。它似乎只搜索第一对,或者可能是任何一对:因此搜索时间很长。您需要使用:filter选项,我可以快速收集。