ページの先頭行へ戻る
Interstage Application Server ディレクトリサービス運用ガイド

9.2 アプリケーション作成の前に

  C APIを使ってアプリケーションを作成する際には、以下の点に注意してください。

マルチバイト文字を含むDN、属性値、および検索フィルタの指定

  DN、属性値、および検索フィルタにはマルチバイト文字を指定することができます。マルチバイト文字を使用する場合は、UTF-8形式に変換する必要があります。また、検索結果もUTF-8形式で返却されるため、アプリケーションで使用するコード形式に変換する必要があります。
  詳細は、“9.3.13 コード変換インタフェース”、“リファレンスマニュアル(API編)”の“コード変換インタフェース”を参照してください。

記号を含むDNの指定

  DNに、記号を指定する場合、いくつかの記号は特殊文字として扱われます。特殊文字を指定するには、その特殊文字の前に「\」(エンマーク)を置いてエスケープするか、または「"」(ダブル引用符)で囲む必要があります。
  エスケープが必要な記号を以下に示します。

  • “,”(カンマ)

  • “+”(プラス)

  • “"”(ダブル引用符)

  • “<”(小なり)

  • “>”(大なり)

  • “;”(セミコロン)

  • “#”(シャープ)(DNの先頭文字に指定する場合のみ)

エスケープが必要な記号を含むDNを指定する場合の例を以下に示します。

cn=a\b,o=Fujitsu, Inc.,c=jp

  LDAP、C言語それぞれで、「\」(エンマーク(バックスラッシュ))文字を特殊文字と扱います。いくつか例を示します。

  「\」を含むcn属性を指定するとします。

a\b

  LDAPの規約により「\」をエスケープする必要があります。

cn=a\\b

  C言語の仕様により、この名前を指定するために、それぞれの「\」をエスケープする必要があります。

char *name1 = "cn=a\\\\b";

  同様に、「,」(カンマ)、「"」(ダブル引用符)の場合はそれぞれ次のようになります。

char *name2 = "cn=a\\,b";
char *name3 = "cn=a\\\"b";

  最初の例をC言語で使用する場合は、次のように記述します。

char *name = "cn=a\\\\b,o=Fujitsu\\, Inc.,c=jp";

記号を含む検索フィルタの指定

  検索フィルタの値に、検索する値として記号を指定する場合、いくつかの記号は特殊文字として扱う必要があります。特殊文字を指定するには、「\\」(エンマーク(バックスラッシュ))に続けて、特殊文字を16進数として指定する必要があります。
  エスケープが必要な記号を以下に示します。

  • 「*」(アスタリスク)

  • 「(」(開き括弧)

  • 「)」(閉じ括弧)

  • 「\」(エンマーク)

検索フィルタ"o=富士通(株)"をC言語で表現すると、以下のようになります。

"o=富士通\\28株\\29"

  検索フィルタの詳細については、“7.1.2 検索フィルタ”を参照してください。


複数のスレッドがInterstageディレクトリサービスと通信する場合

  C言語のLDAPクライアントAPI関数はスレッドセーフです。ただし、1つのセションを複数のスレッドで共有することはできません。複数のスレッドがInterstage ディレクトリサービスと通信する場合は、スレッドごとにセションをオープンする必要があります。