Interstage ディレクトリサービスのクライアントで使用できる検索フィルタ(RFC1558準拠)とその使用例を次に示します。
使用できる検索フィルタ
検索フィルタには、以下の5つを指定することができます。
フィルタ | 内容 |
---|---|
指定した値と同じ属性値がある場合に、取り出します。 | |
指定した部分文字列を含む属性値がある場合に、取り出します。 | |
指定した値以上の属性値がある場合に、取り出します。 | |
指定した値以下の属性値がある場合に、取り出します。 | |
属性値がある場合に、取り出します。 |
また、上記の各フィルタを組み合わせることで、より詳細に指定することができます。以下に組み合わせに使用する論理演算を示します。
論理演算 | 内容 |
---|---|
複数のフィルタを論理積(AND)条件で結びます。 | |
複数のフィルタを論理和(OR)条件で結びます。 | |
(RDBを使用する場合にだけ有効です。) | 指定した条件が偽の場合に、有効です。以下のどちらかの方法で指定できます。
例:
(!(cn=Fujitsu)(uid=0123))という使い方はできません。 |
検索フィルタの文法
検索フィルタの文法は、以下のRFC文書に記述されています。
RFC1960 : “A String Representation of LDAP Search Filters”
RFC2254 : “The String Representation of LDAP Search Filters”
同値(=)
cnがUser001であるエントリを検索します。
(cn=User001) |
部分文字列(文字列*)
cnがFujitsuで始まるエントリだけを検索します。
(cn=Fujitsu*) |
以上(>=)、以下(<=)
dnQualifierが「abc」以上のエントリを検索します。
(dnQualifier>=abc) |
存在(=*)
cnを含む全エントリを検索します。
(cn=*) |
論理積(&)
cnがUser001で、かつsnがFujitsuであるエントリを検索します。
(&(cn=User001)(sn=Fujitsu)) |
論理和(|)
givenNameがUser001、またはUser002であるエントリを検索します。
(|(givenName=User001)(givenName=User002)) |
否定(!)(RDBを使用する場合にだけ有効です。)
cnがFujitsuで始まらないエントリだけを検索します。
(!(cn=Fujitsu*)) |
検索フィルタを指定する場合は、検索フィルタを引用符で囲んで指定してください。ldapsearchコマンドで検索フィルタを指定するときには、使用するコマンドラインに応じて、シングル引用符とダブル引用符のどちらかで囲んでください。
標準データベースを使用する場合に、論理和を指定して、検索条件を指定できるのは、2つまでです。
以下のような指定は不正な検索フィルタです。
(|(givenName=User001)(givenName=User002)(mail=*)) |
特殊文字の指定方法
検索フィルタの値に、検索する値として以下の特殊文字を指定する場合、その特殊文字を「\」(エンマーク)でエスケープします。
ldapsearchコマンドでは、1つのエスケープ文字「\」に続けて、16進数として指定する必要があります。
C APIでは、2つのエスケープ文字「\\」に続けて、16進数として指定する必要があります。
JNDIでは、16進数にする必要はありません。以下のように指定します。
特殊文字 | ldapsearchコマンド | C API | JNDI |
---|---|---|---|
* | \2a | \\2a | \\* |
( | \28 | \\28 | \\( |
) | \29 | \\29 | \\) |
\ | \5c | \\5c | \\\\ |
検索フィルタの値に「富士通(株)」を指定する場合、以下のように指定します。
ldapsearchコマンド
"o=富士通\28株\29" |
C API
(o=富士通\\28株\\29) |
JNDI
(o=富士通\\(株\\)) |