#include <sys/time.h> /* for struct timeval definition */ #include <ldap.h> int ldap_search(ld, base, scope, filter, attrs, attrsonly) LDAP *ld; char *base; int scope; char *filter, *attrs[]; int attrsonly; int ldap_search_s(ld, base, scope, filter, attrs, attrsonly, res) LDAP *ld; char *base; int scope; char *filter, *attrs[] int attrsonly; LDAPMessage **res; int ldap_search_st(ld, base, scope, filter, attrs, attrsonly, timeout, res) LDAP *ld; char *base; int scope; char *filter, *attrs[] int attrsonly; struct timeval *timeout; LDAPMessage **res;
引数 filter は、検索に適用するフィルタを表現する文字列です。 単純なフィルタは attributetype=attributevalue のように指定 できます。より複雑なフィルタは、次の BNF にしたがった前置記法を 用いて指定します。
<filter> ::= '(' <filtercomp> ')' <filtercomp> ::= <and> | <or> | <not> | <simple> <and> ::= '&' <filterlist> <or> ::= '|' <filterlist> <not> ::= '!' <filter> <filterlist> ::= <filter> | <filter> <filterlist> <simple> ::= <attributetype> <filtertype> <attributevalue> <filtertype> ::= '=' | '~=' | '<=' | '>='
構文要素 '~=' は、近似一致を指定するために使われます。 <attributetype> と <attributevalue> の記述方法は RFC 1778 に 説明されています。さらに <attributevalue> には属性の存在テスト のために単一の * を指定することもできますし、部分文字列一致 を行うためにテキストと * を組み合わせて指定することもできます。
たとえば、フィルタ "mail=*" は属性 mail を持つエントリを探します。 フィルタ "mail=*@terminator.rs.itd.umich.edu" は属性 mail が指定 の文字列で終っているエントリを探します。フィルタ中に括弧を置くには、 それをバックスラッシュ文字 '\' でエスケープしてください。 指定可能なフィルタについてより完全な説明は RFC 2254 を参照して ください。検索フィルタを自動的に構築するのを支援するルーチン ldap_getfilter(3) も参照してください。
引数 attrs は、filter に一致するエントリから返す属性型を 指定する配列です。配列の終りは NULL の要素で示します。 引数 attrs が NULL の場合にはすべての属性が返されます。 文字 "*" (LDAP_ALL_USER_ATTRIBUTES) は、すべてのユーザ属性を返すよう 要求するために使います。 文字 "+" (LDAP_ALL_OPERATIONAL_ATTRIBUTES) は、すべての運用属性を返すよう 要求するために使います。 属性を何も要求しないためには "1.1" (LDAP_NO_ATTRS)を指定します。
属性型だけが欲しい場合には引数 attrsonly に 1 を設定します。 属性型と属性値の両方を欲しい 場合には引数 attrsonly に 0 を指定します。
これらのルーチンは動的にメモリを確保します。 そのようなメモリを提供されている解放ルーチンを使って解放するのは 呼び出した側の責任です。戻り値については <ldap.h> に記述があります。