サンプル ディレクトリ アプリケーションで使用される構造

目次
casso126jjp
目次
サンプル ディレクトリ API アプリケーションは以下に存在します。
<install_path>\sdk\samples\smdirapi\smdirapi.cpp
ディレクトリ API にはディレクトリ インスタンス ハンドル、ディレクトリ プロバイダ ハンドルおよびディレクトリ エントリ(ユーザ)インスタンス ハンドルが含まれます。これらのハンドルは、「初期化および解放関数」にリストされた初期化関数から返されます。
サンプル コードは、これらのハンドルを管理するために以下の構造を使用します。
ハンドル タイプ
データ構造
ディレクトリ インスタンス
DirHandle_t
ディレクトリ プロバイダ
ProviderHandle_t
ディレクトリ エントリ(ユーザ)インスタンス
UserHandle_t
ディレクトリ インスタンス ハンドル
SmDirInitDirInstance() が呼び出されるとき、サンプルは DirHandle_t をインスタンス化します。その後、ハンドルはディレクトリ操作関数に渡されます。
全プロセスを通して同じ値を使用する必要はありません。値は変更することが許可されています。
DirHandle_t の定義は以下のとおりです。
typedef struct DirHandle_s
{
   char nTag;
   bool bValid;
   char szErrMsg[ERRMSG_SIZE];
   char* pszUniqueKey;
   char* pszParameter;
   char* pszUsername;
   char* pszPassword;
   int bRequireCredentials;
   int bSecureConnection;
   int nSearchResults;
   int nSearchTimeout;
} DirHandle_t;
SmDirReleaseInstance() が呼び出されるとき、サンプルは DirHandle_t を解放します。ディレクトリ インスタンス ハンドルとユーザ インスタンス ハンドルを区別するために
nTag
の値が使用されます。
ディレクトリ プロバイダ ハンドル
サンプルは、
CA Single Sign-on
ポリシー サーバとディレクトリ API の間の橋渡しをするためにプロバイダ ハンドル構造 ProviderHandle_t を定義します。プロバイダ ハンドルは、
CA Single Sign-on
がライブラリをロードするときからのデータを
CA Single Sign-on
ポリシー サーバがシャットダウンするまで保存するために使用できます。
SmDirInit() が呼び出される場合、サンプルは ProviderHandle_t をインスタンス化します。その後、このハンドルはほぼすべての後続の関数に渡されます。全プロセスを通して同じ値を使用する必要はありません。値は変更することが許可されています。
SmDirRelease() が呼び出されるとき、サンプルは ProviderHandle_t を解放します。
ProviderHandle_t の例については、サンプル コードで関数 SmDirInit() を参照してください。この例に従うことができますが、必須ではありません。ProviderHandle_t には、ユーザのパスワードなど、プロセスの始めに設定し、使用したい情報を含めることができます。
ディレクトリ エントリ(ユーザ)インスタンス ハンドル
サンプルは、SmDirInitUserInstance() が呼び出される場合に UserHandle_t をインスタンス化します。その後、このハンドルはディレクトリ エントリ(ユーザ)操作関数に渡されます。これらの関数のリストについては、「ディレクトリ エントリ(ユーザ)」上の「操作」を参照してください。
全プロセスを通して同じ値を使用する必要はありません。値は変更することが許可されています。
UserHandle_t の定義は以下のとおりです。
typedef struct UserHandle_s
{
   char nTag;
   bool bValid;
   char szErrMsg[ERRMSG_SIZE];
   DirHandle_t* phDir;
   char* pszUserDn;
} UserHandle_t;
SmDirReleaseInstance() が呼び出されるとき、サンプルは UserHandle_t を解放します。
ハンドル タイプを区別する方法
SmDirReleaseInstance() などの一部の関数は、ディレクトリ インスタンス ハンドルまたはディレクトリ エントリ(ユーザ)インスタンス ハンドルのいずれかを渡される場合があります。サンプル コードは、ディレクトリ インスタンス ハンドルとディレクトリ エントリ(ユーザ)インスタンス ハンドルを区別する方法を提供します。
nTag
が[DirHandle_t]および[UserHandle_t]の両方の最初のフィールドであることに注目してください。SmDirInitDirInstance() が呼び出される場合、
nTag
は DirHandle_t で 0 に設定されます。SmDirInitUserInstance が呼び出される場合、
nTag
は UserHandle_t で 1 に設定されます。
いずれかのタイプのハンドルを受け入れる関数が呼び出される場合、どのタイプのハンドルが渡されたかを判断するために
nTag
の値が確認されます。