0

我正在尝试使用 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))'
4

1 回答 1

1

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

于 2012-07-21T04:05:33.253 回答