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 は、実行された 3 つの検索を示しています。

  • 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() によって認識されるようには見えません。最初のペア、またはおそらくいずれかのペアのみを検索しているようです。したがって、検索時間が長くなります。私がすぐに収集できるものから、:filter オプションを使用する必要があります。

于 2012-07-21T04:05:33.253 に答える