5

会社の LDAP サーバーに対して複雑なクエリを実行できません。次の Perl スクリプトを使用しています。

use Data::Dumper;
use Net::LDAP;

die "Can't connect to LDAP-Server: $@\n" 
    unless $ldap = Net::LDAP->new( 'xLDAPx' );


foreach my $filter ( 'ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com' )
{ 
    $mesg = $ldap->search( base => "o=FOO,dc=foo,dc=com", filter => $filter );
    print Dumper($mesg), "\n\n";
}

最初の 2 つのフィルターは機能しますが (期待値を返すように)、最後の複雑なフィルターは機能しません。空の配列を返します。本当に困惑しているのは、Softerra LDAP Browser のようなツールを使用すると、まったく同じクエリ文字列が機能することです。

ldap_searchPHPの& coを使用して同じクエリも試しましたが、役に立ちませんでした。

誰かがこれに光を当てることができますか?

読んでくれてありがとう

ホリ

編集:これはサーバーの構造です:

Server
    ou=FOO
        ou=...
        ou=Personal
            uid=something

uid のリストが必要です。

4

3 に答える 3

5

もっと似てほしいと思います(&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com))。しかし、あなたはあなたが何を望んでいるかについてまったく明確ではないので、私はあなたのためにフィルターを作ることができません.

追加するために編集:これがあなたがやりたいことだと思います:(|(ou=Personal)(ou=FOO))

于 2008-10-28T10:23:17.977 に答える
4

その理由は、構文的に正しいフィルター文字列ではなく、DN の一部を提供しているためです。これが Ldap ブラウザーで機能するとは想像できません。

最初の 2 つは正しいフィルター文字列です。「({attribute}={value})」方式で単一のオブジェクト属性をフィルタリングします。最初の ("ou=Personal") は、検索ベース内の "Personal" という名前の OU を返します。

何を見つけようとしているのかを詳しく説明していただければ、必要なフィルター式を教えていただけると思います。

于 2008-10-28T09:31:34.400 に答える
2

RFC 2254に準拠するフィルターを作成し、 何が起こるかを確認してください。複雑なクエリは必要ありません。1 つの分岐の下のすべてのエントリに 1 つの属性が必要です。search メソッドの attrs 引数を見てください。

于 2008-10-28T11:23:15.563 に答える