Oracle® Fusion Middleware Oracle Directory Server Enterprise Edition開発者ガイド

11g リリース1 (11.1.1.7.0)

B72440-01(原本部品番号:E28970-01)

目次

例一覧

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- このドキュメントをお読みになる前に

- このドキュメントの構成

- このドキュメントで使用する例

- Oracle Directory Server Enterprise Editionドキュメント・セット

- 関連ドキュメント

- 再配布可能ファイル

- デフォルト・パスとコマンドの場所

- 表記規則

- コマンド例でのシェル・プロンプト

- 記号の表記規則

- ドキュメント、サポートおよびトレーニング

- Oracleソフトウェア・リソース

- ドキュメントのアクセシビリティについて

第I部 プラグインAPIガイド

1 プラグインの作成を開始する前に

- 1.1 サーバー・プラグインを実装する状況

- 1.1.1 プラグインのメンテナンス

- 1.2 プラグインとサーバーとの相互作用

- 1.3 使用例

- 1.4 次に実行すること

- 1.4.1 開発環境の準備

- 1.4.2 プラグイン開発の概要

- 1.4.3 既存のプラグインのアップグレード

- 1.4.4 サンプル・プラグインの試用

- 1.4.5 詳細

2 Directory Server 5.2以上のプラグインAPIへの変更

- 2.1 Directory Server 5.2以上で非推奨になった機能と変更された機能

- 2.1.1 変更を処理する属性値

- 2.1.2 constコレクトネスに関するコード変更

- 2.2 Directory Server 5.2以上の新機能

- 2.2.1 新しい識別名関数

- 2.2.2 新しいエントリ処理関数

- 2.2.3 新しい変更処理関数

- 2.2.4 新しいプラグイン・コール順序付けメカニズム

- 2.2.5 新しいスキーマ・チェック関数

- 2.2.6 新しいサフィックス関数

- 2.2.7 新しい構文チェック関数

- 2.2.8 新しい仮想属性関数

- 2.2.9 属性リストを要求するための新しいattrsの実装

3 Directory Serverプラグインのスタート・ガイド

- 3.1 Hello Worldプラグイン

- 3.1.1 コードの場所

- 3.1.2 プラグインの確認

- 3.1.3 プラグインの構築

- 3.1.4 プラグインのプラグイン

- 3.1.4.1 Directory Server構成の更新

- 3.1.4.2 Directory Serverの再起動

- 3.1.4.3 ログの確認

- 3.2 Directory Serverプラグインの作成

- 3.2.1 slapi-plugin.hヘッダー・ファイルの組込み

- 3.2.2 プラグイン関数の作成

- 3.2.3 適切なリターン・コードの使用

- 3.2.4 初期化関数の作成

- 3.2.5 パラメータ・ブロックを使用した構成情報の設定

- 3.2.5.1 互換性の指定

- 3.2.5.2 プラグインの説明の指定

- 3.2.6 パラメータ・ブロックを使用した関数へのポインタの設定

- 3.2.7 サンプルの場所

- 3.3 Directory Serverプラグインの構築

- 3.3.1 プラグインAPIのヘッダー・ファイルの組込み

- 3.3.2 共有オブジェクトまたは動的リンク・ライブラリとしてのプラグインのリンク

- 3.3.3 サンプル・ビルド・ルールの場所

- 3.4 Directory Serverへのライブラリのプラグイン

- 3.4.1 プラグイン構成設定の指定

- 3.4.1.1 プラグイン・タイプおよび依存関係の理解

- 3.4.1.2 プラグイン・コールの順序付け

- 3.4.1.3 プラグインに渡される引数の取得

- 3.4.1.4 プラグイン・ライブラリの検索

- 3.4.2 Directory Server構成の変更

- 3.4.3 Directory Serverの再起動

- 3.5 プラグイン・メッセージのロギング

- 3.5.1 3つのレベルのメッセージ重大度のロギング

- 3.5.1.1 致命的エラー・メッセージ

- 3.5.1.2 警告メッセージ

- 3.5.1.3 情報メッセージ

- 3.5.2 Directory Server構成での適切なログ・レベルの設定

- 3.5.3 ログ内のメッセージの検索

4 プラグインを使用したエントリの処理

- 4.1 エントリの作成

- 4.1.1 新規エントリの作成

- 4.1.2 エントリのコピーの作成

- 4.2 LDIF表現との変換

- 4.2.1 LDIF文字列のSlapi_Entry構造体への変換

- 4.2.2 Slapi_Entry構造体のLDIF文字列への変換

- 4.3 エントリ属性および属性値の取得

- 4.4 属性値の追加および削除

- 4.4.1 属性値の追加

- 4.4.2 属性値の削除

- 4.5 エントリのスキーマ準拠の検証

- 4.6 エントリ識別名の処理

- 4.6.1 親DNおよびサフィックスDNの取得

- 4.6.2 サフィックスがローカルで提供されているかどうかの判断

- 4.6.3 エントリDNの取得および設定

- 4.6.4 DNの正規化

- 4.6.5 ユーザーはディレクトリ・マネージャかどうか

5 プラグインを使用したクライアント・リクエスト処理の拡張

- 5.1 事前操作プラグインと事後操作プラグイン

- 5.1.1 事前操作プラグイン

- 5.1.2 事後操作プラグイン

- 5.1.3 登録識別子

- 5.1.4 プラグインの例の場所

- 5.2 バインド操作の拡張

- 5.2.1 サンプル・サフィックスを設定するには

- 5.2.2 認証方式のロギング

- 5.2.2.1 プラグインを登録するには

- 5.2.2.2 バインド・ログ・メッセージを生成するには

- 5.2.3 Directory Serverでのバインド処理のバイパス

- 5.2.4 通常のDirectory Serverのバインド動作

- 5.3 検索操作の拡張

- 5.3.1 検索を要求したユーザーのロギング

- 5.3.2 検索フィルタの分類

- 5.3.2.1 コンパクトなコードのLOGマクロ

- 5.3.2.2 パラメータ・ブロック・コンテンツ

- 5.3.2.3 検索フィルタ情報

- 5.3.2.4 フィルタ情報の構築

- 5.3.2.5 通常のDirectory Serverの検索動作

- 5.4 比較操作の拡張

- 5.5 追加操作の拡張

- 5.5.1 属性の前への文字列の追加

- 5.5.2 追加するエントリのロギング

- 5.6 変更操作の拡張

- 5.7 名前の変更操作の拡張

- 5.8 削除操作の拡張

- 5.9 クライアントに送信される情報の捕捉

6 プラグインを使用した認証処理

- 6.1 認証の仕組み

- 6.1.1 標準方式のサポート

- 6.1.2 バインド時のクライアント識別

- 6.1.3 Directory Serverでのバインド処理

- 6.1.3.1 Directory Serverによるバインドの処理方法

- 6.2 プラグインによる認証の変更方法

- 6.2.1 認証のバイパス

- 6.2.2 カスタムSASLメカニズムの使用

- 6.3 簡易認証プラグインの開発

- 6.3.1 簡易認証の例

- 6.3.2 プラグインの動作の表示

- 6.3.2.1 サンプル・サフィックスを設定するには

- 6.3.2.2 プラグインを登録するには

- 6.3.2.3 プラグインをバイパスするには

- 6.3.2.4 Example.comユーザーとしてバインドするには

- 6.4 SASL認証プラグインの開発

- 6.4.1 SASLの例

- 6.4.2 SASLメカニズムの登録

- 6.4.3 SASLクライアントの開発

- 6.4.4 SASLクライアントの試行

7 プラグインを使用した内部操作の実行

- 7.1 内部操作の使用

- 7.1.1 内部操作を使用する場合

- 7.1.2 内部操作に関する問題

- 7.1.3 内部操作例の検索

- 7.2 内部操作例を使用する前に

- 7.2.1 サンプル・サフィックスを設定するには

- 7.3 内部追加

- 7.4 内部変更

- 7.5 内部名前変更および移動(DN変更)

- 7.6 内部検索

- 7.7 内部削除

8 エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインの作成

- 8.1 エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインのコール

- 8.1.1 LDIF文字列パラメータの使用

- 8.1.2 エントリ・ストアとエントリ・フェッチの検索例

- 8.2 エントリを暗号化するプラグインの作成

- 8.2.1 エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインの登録

- 8.2.2 エントリ・ストアとエントリ・フェッチの試行例

- 8.2.2.1 サンプル・サフィックスを設定するには

- 8.2.2.2 スクランブル前のデータベースでの文字列の検索

- 8.2.2.3 スクランブル後のデータベースでの文字列の検索

9 拡張操作プラグインの作成

- 9.1 拡張操作プラグインのコール

- 9.2 拡張操作プラグインの実装

- 9.2.1 拡張操作の検索例

- 9.2.2 拡張操作プラグインの例

- 9.2.2.1 拡張操作プラグインの登録

- 9.2.2.2 拡張操作プラグインの初期化

- 9.2.2.3 拡張操作の処理

- 9.2.3 拡張操作クライアントの開発

- 9.2.4 拡張操作の試行例

10 一致ルール・プラグインの作成

- 10.1 一致ルール・プラグインの動作

- 10.1.1 一致ルールとは

- 10.1.2 一致ルールの要求

- 10.1.3 一致ルール・プラグインの機能

- 10.2 一致ルール・プラグインのサンプル

- 10.2.1 一致ルール・プラグインの構成

- 10.2.2 一致ルール・プラグインの登録

- 10.3 拡張可能な一致フィルタの操作

- 10.3.1 Directory Serverによる拡張可能な一致検索の処理方法

- 10.3.2 フィルタ一致関数

- 10.3.2.1 サブタイプの一致

- 10.3.2.2 スレッド・セーフティおよびフィルタ一致関数

- 10.3.3 フィルタ索引関数

- 10.3.3.1 フィルタ索引関数の入力パラメータ

- 10.3.3.2 フィルタ索引関数の出力パラメータ

- 10.3.3.3 スレッド・セーフティおよびフィルタ索引関数

- 10.3.4 フィルタ・ファクトリ関数

- 10.3.4.1 フィルタ・ファクトリ関数の入力パラメータ

- 10.3.4.2 フィルタ・ファクトリ関数の出力パラメータ

- 10.3.4.3 スレッド・セーフティおよびフィルタ・ファクトリ関数

- 10.3.5 フィルタ・オブジェクト・デストラクタ関数

- 10.4 一致ルールに従ったエントリの索引付け

- 10.4.1 Directory Serverによる索引の処理方法

- 10.4.2 インデクサ関数

- 10.4.2.1 インデクサの入力パラメータ

- 10.4.2.2 インデクサの出力パラメータ

- 10.4.2.3 スレッド・セーフティおよびインデクサ

- 10.4.3 インデクサ・ファクトリ関数

- 10.4.3.1 インデクサ・ファクトリ関数の入力パラメータ

- 10.4.3.2 インデクサ・ファクトリ関数の出力パラメータ

- 10.4.3.3 スレッド・セーフティおよびインデクサ・ファクトリ関数

- 10.4.4 インデクサ・オブジェクト・デストラクタ関数

- 10.5 一致ルールに従ったソートの使用可能化

- 10.5.1 Directory Serverによる一致ルールに従ったソートの実行方法

- 10.6 不明な一致ルールの処理

- 10.6.1 対応の内部リスト

- 10.6.2 内部リストに含まれないOID

11 パスワード記憶スキーム・プラグインの作成

- 11.1 パスワード記憶スキーム・プラグインのコール

- 11.1.1 パスワード記憶スキーム・プラグインのタイプ

- 11.1.2 事前インストールされるスキーム

- 11.1.3 パスワード属性値に対する影響

- 11.1.4 追加および変更リクエストの起動

- 11.1.5 バインド・リクエストの起動

- 11.1.6 パスワード・ポリシーの一部

- 11.2 パスワード記憶スキーム・プラグインの作成

- 11.2.1 パスワードのエンコード

- 11.2.2 パスワードの比較

- 11.2.3 パスワード記憶スキーム・プラグインの登録

- 11.2.4 パスワード記憶スキーム・プラグインの設定

- 11.2.4.1 プラグインを登録するには

- 11.2.5 パスワード記憶スキーム・サンプルの試行

- 11.2.5.1 クイック・テストの実行

- 11.2.5.2 XORエンコードされたパスワードの比較

12 パスワード品質チェック・プラグインの作成

- 12.1 Directory Serverがパスワード品質チェック・プラグインを使用する仕組み

- 12.1.1 パスワード品質をチェックするパスワード・ポリシー

- 12.1.2 パスワード・チェック・プラグインを実装するかどうか

- 12.1.3 パスワード・チェック・プラグインが実行する必要があること

- 12.2 カスタム・パスワード品質チェック・プラグインの作成

- 12.2.1 パスワード値のチェック

- 12.2.2 パスワード・チェック・プラグインの初期化

- 12.2.3 パスワード・チェック・プラグインのテスト

- 12.2.3.1 サンプル・サフィックスを設定するには

- 12.2.3.2 プラグインを登録するには

- 12.2.3.3 パスワード・チェック・プラグインを使用するには

13 算出属性プラグインの作成

- 13.1 算出属性とパフォーマンス

- 13.2 算出属性プラグインの作成

- 13.2.1 算出属性プラグインの初期化

- 13.2.2 属性値の計算

- 13.2.3 算出属性プラグインのテスト

- 13.2.3.1 プラグインを登録するには

- 13.2.3.2 算出属性プラグインを使用するには

第II部 プラグインAPIリファレンス

14 データ型と構造体のリファレンス

- 14.1 クイック・リファレンス表

- 14.2 データ型と構造体(アルファベット順)

- 14.2.1 berval

- 14.2.1.1 構文

- 14.2.1.2 フィールド

- 14.2.2 computed_attr_context

- 14.2.2.1 構文

- 14.2.2.2 説明

- 14.2.3 LDAPControl

- 14.2.3.1 構文

- 14.2.3.2 フィールド

- 14.2.4 LDAPMod

- 14.2.4.1 構文

- 14.2.4.2 フィールド

- 14.2.4.3 例

- 14.2.5 mrFilterMatchFn

- 14.2.5.1 構文

- 14.2.5.2 パラメータ

- 14.2.5.3 説明

- 14.2.5.4 戻り値

- 14.2.6 plugin_referral_entry_callback

- 14.2.6.1 構文

- 14.2.6.2 パラメータ

- 14.2.6.3 説明

- 14.2.6.4 戻り値

- 14.2.7 plugin_result_callback

- 14.2.7.1 構文

- 14.2.7.2 パラメータ

- 14.2.7.3 説明

- 14.2.8 plugin_search_entry_callback

- 14.2.8.1 構文

- 14.2.8.2 パラメータ

- 14.2.8.3 説明

- 14.2.8.4 戻り値

- 14.2.9 roles_get_scope_fn_type

- 14.2.9.1 構文

- 14.2.9.2 パラメータ

- 14.2.9.3 説明

- 14.2.9.4 戻り値

- 14.2.10 send_ldap_referral_fn_ptr_t

- 14.2.10.1 構文

- 14.2.10.2 パラメータ

- 14.2.10.3 説明

- 14.2.10.4 戻り値

- 14.2.11 send_ldap_result_fn_ptr_t

- 14.2.11.1 構文

- 14.2.11.2 パラメータ

- 14.2.11.3 説明

- 14.2.11.4 戻り値

- 14.2.12 send_ldap_search_entry_fn_ptr_t

- 14.2.12.1 構文

- 14.2.12.2 パラメータ

- 14.2.12.3 説明

- 14.2.12.4 戻り値

- 14.2.13 Slapi_Attr

- 14.2.13.1 構文

- 14.2.13.2 関連項目

- 14.2.14 Slapi_Backend

- 14.2.14.1 構文

- 14.2.14.2 関連項目

- 14.2.15 Slapi_ComponentId

- 14.2.15.1 構文

- 14.2.15.2 例

- 14.2.16 slapi_compute_callback_t

- 14.2.16.1 構文

- 14.2.16.2 パラメータ

- 14.2.16.3 説明

- 14.2.16.4 戻り値

- 14.2.17 slapi_compute_output_t

- 14.2.17.1 構文

- 14.2.17.2 パラメータ

- 14.2.17.3 説明

- 14.2.17.4 戻り値

- 14.2.18 Slapi_CondVar

- 14.2.18.1 構文

- 14.2.18.2 関連項目

- 14.2.19 Slapi_Connection

- 14.2.19.1 構文

- 14.2.20 Slapi_DN

- 14.2.20.1 構文

- 14.2.20.2 関連項目

- 14.2.21 Slapi_Entry

- 14.2.21.1 構文

- 14.2.21.2 関連項目

- 14.2.22 slapi_extension_constructor_fnptr

- 14.2.22.1 構文

- 14.2.22.2 パラメータ

- 14.2.22.3 説明

- 14.2.22.4 戻り値

- 14.2.23 slapi_extension_destructor_fnptr

- 14.2.23.1 構文

- 14.2.23.2 パラメータ

- 14.2.23.3 説明

- 14.2.24 Slapi_Filter

- 14.2.24.1 構文

- 14.2.24.2 関連項目

- 14.2.25 Slapi_MatchingRuleEntry

- 14.2.25.1 構文

- 14.2.25.2 関連項目

- 14.2.26 Slapi_Mod

- 14.2.26.1 構文

- 14.2.26.2 関連項目

- 14.2.27 Slapi_Mods

- 14.2.27.1 構文

- 14.2.27.2 関連項目

- 14.2.28 Slapi_Mutex

- 14.2.28.1 構文

- 14.2.28.2 関連項目

- 14.2.29 Slapi_Operation

- 14.2.29.1 構文

- 14.2.29.2 関連項目

- 14.2.30 Slapi_PBlock

- 14.2.30.1 構文

- 14.2.30.2 説明

- 14.2.30.3 関連項目

- 14.2.31 Slapi_PluginDesc

- 14.2.31.1 構文

- 14.2.31.2 フィールド

- 14.2.31.3 関連項目

- 14.2.32 slapi_plugin_init_fnptr

- 14.2.32.1 構文

- 14.2.32.2 パラメータ

- 14.2.32.3 説明

- 14.2.32.4 戻り値

- 14.2.32.5 関連項目

- 14.2.33 Slapi_RDN

- 14.2.33.1 構文

- 14.2.33.2 関連項目

- 14.2.34 Slapi_Value

- 14.2.34.1 構文

- 14.2.34.2 関連項目

- 14.2.35 Slapi_ValueSet

- 14.2.35.1 構文

- 14.2.35.2 関連項目

- 14.2.36 vattr_type_thang

- 14.2.36.1 構文

- 14.2.36.2 関連項目

15 Directory Server関数リファレンス(パートI)

- 15.1 機能領域別の関数

- 15.2 関数の説明(パートI)

- 15.3 関数、第I部(アルファベット順)

- 15.3.1 slapi_access_allowed()

- 15.3.1.1 構文

- 15.3.1.2 パラメータ

- 15.3.1.3 戻り値

- 15.3.1.4 説明

- 15.3.2 slapi_acl_check_mods()

- 15.3.2.1 構文

- 15.3.2.2 パラメータ

- 15.3.2.3 戻り値

- 15.3.2.4 説明

- 15.3.2.5 メモリーに関する注意事項

- 15.3.2.6 関連項目

- 15.3.3 slapi_acl_verify_aci_syntax()

- 15.3.3.1 構文

- 15.3.3.2 パラメータ

- 15.3.3.3 戻り値

- 15.3.3.4 メモリーに関する注意事項

- 15.3.3.5 関連項目

- 15.3.4 slapi_add_entry_internal_set_pb()

- 15.3.4.1 構文

- 15.3.4.2 パラメータ

- 15.3.4.3 戻り値

- 15.3.4.4 説明

- 15.3.4.5 メモリーに関する注意事項

- 15.3.4.6 関連項目

- 15.3.5 slapi_add_internal_pb()

- 15.3.5.1 構文

- 15.3.5.2 パラメータ

- 15.3.5.3 戻り値

- 15.3.5.4 説明

- 15.3.5.5 メモリーに関する注意事項

- 15.3.6 slapi_add_internal_set_pb()

- 15.3.6.1 構文

- 15.3.6.2 パラメータ

- 15.3.6.3 戻り値

- 15.3.6.4 説明

- 15.3.6.5 メモリーに関する注意事項

- 15.3.6.6 関連項目

- 15.3.7 slapi_attr_add_value()

- 15.3.7.1 構文

- 15.3.7.2 パラメータ

- 15.3.7.3 戻り値

- 15.3.7.4 メモリーに関する注意事項

- 15.3.7.5 関連項目

- 15.3.8 slapi_attr_basetype()

- 15.3.8.1 構文

- 15.3.8.2 パラメータ

- 15.3.8.3 戻り値

- 15.3.8.4 説明

- 15.3.8.5 メモリーに関する注意事項

- 15.3.8.6 関連項目

- 15.3.9 slapi_attr_dup()

- 15.3.9.1 構文

- 15.3.9.2 パラメータ

- 15.3.9.3 戻り値

- 15.3.9.4 説明

- 15.3.9.5 メモリーに関する注意事項

- 15.3.9.6 関連項目

- 15.3.10 slapi_attr_first_value_const()

- 15.3.10.1 構文

- 15.3.10.2 パラメータ

- 15.3.10.3 戻り値

- 15.3.10.4 説明

- 15.3.10.5 メモリーに関する注意事項

- 15.3.10.6 関連項目

- 15.3.11 slapi_attr_flag_is_set()

- 15.3.11.1 構文

- 15.3.11.2 パラメータ

- 15.3.11.3 戻り値

- 15.3.11.4 説明

- 15.3.11.5 関連項目

- 15.3.12 slapi_attr_free()

- 15.3.12.1 構文

- 15.3.12.2 パラメータ

- 15.3.12.3 説明

- 15.3.12.4 関連項目

- 15.3.13 slapi_attr_get_bervals_copy()

- 15.3.13.1 構文

- 15.3.13.2 パラメータ

- 15.3.13.3 戻り値

- 15.3.13.4 説明

- 15.3.13.5 メモリーに関する注意事項

- 15.3.14 slapi_attr_get_flags()

- 15.3.14.1 構文

- 15.3.14.2 パラメータ

- 15.3.14.3 戻り値

- 15.3.14.4 説明

- 15.3.14.5 関連項目

- 15.3.15 slapi_attr_get_numvalues()

- 15.3.15.1 構文

- 15.3.15.2 パラメータ

- 15.3.15.3 戻り値

- 15.3.15.4 説明

- 15.3.15.5 関連項目

- 15.3.16 slapi_attr_get_oid_copy()

- 15.3.16.1 構文

- 15.3.16.2 パラメータ

- 15.3.16.3 戻り値

- 15.3.16.4 説明

- 15.3.16.5 メモリーに関する注意事項

- 15.3.17 slapi_attr_get_plugin()

- 15.3.17.1 構文

- 15.3.17.2 パラメータ

- 15.3.17.3 戻り値

- 15.3.18 slapi_attr_get_type()

- 15.3.18.1 構文

- 15.3.18.2 パラメータ

- 15.3.18.3 戻り値

- 15.3.18.4 関連項目

- 15.3.19 slapi_attr_get_valueset()

- 15.3.19.1 構文

- 15.3.19.2 パラメータ

- 15.3.19.3 戻り値

- 15.3.19.4 メモリーに関する注意事項

- 15.3.19.5 関連項目

- 15.3.20 slapi_attr_init()

- 15.3.20.1 構文

- 15.3.20.2 パラメータ

- 15.3.20.3 戻り値

- 15.3.20.4 説明

- 15.3.20.5 メモリーに関する注意事項

- 15.3.20.6 関連項目

- 15.3.21 slapi_attr_new()

- 15.3.21.1 構文

- 15.3.21.2 パラメータ

- 15.3.21.3 戻り値

- 15.3.21.4 説明

- 15.3.21.5 関連項目

- 15.3.22 slapi_attr_next_value_const()

- 15.3.22.1 構文

- 15.3.22.2 パラメータ

- 15.3.22.3 戻り値

- 15.3.22.4 説明

- 15.3.22.5 関連項目

- 15.3.23 slapi_attr_syntax_normalize()

- 15.3.23.1 構文

- 15.3.23.2 パラメータ

- 15.3.23.3 戻り値

- 15.3.23.4 説明

- 15.3.23.5 メモリーに関する注意事項

- 15.3.23.6 関連項目

- 15.3.24 slapi_attr_type_cmp()

- 15.3.24.1 構文

- 15.3.24.2 パラメータ

- 15.3.24.3 戻り値

- 15.3.24.4 関連項目

- 15.3.25 slapi_attr_types_equivalent()

- 15.3.25.1 構文

- 15.3.25.2 パラメータ

- 15.3.25.3 戻り値

- 15.3.25.4 関連項目

- 15.3.26 slapi_attr_value_cmp()

- 15.3.26.1 構文

- 15.3.26.2 パラメータ

- 15.3.26.3 戻り値

- 15.3.26.4 関連項目

- 15.3.27 slapi_attr_value_find()

- 15.3.27.1 構文

- 15.3.27.2 パラメータ

- 15.3.27.3 戻り値

- 15.3.27.4 関連項目

- 15.3.28 slapi_be_exist()

- 15.3.28.1 構文

- 15.3.28.2 パラメータ

- 15.3.28.3 戻り値

- 15.3.28.4 関連項目

- 15.3.29 slapi_be_get_name()

- 15.3.29.1 構文

- 15.3.29.2 パラメータ

- 15.3.29.3 戻り値

- 15.3.29.4 メモリーに関する注意事項

- 15.3.30 slapi_be_get_readonly()

- 15.3.30.1 構文

- 15.3.30.2 パラメータ

- 15.3.30.3 戻り値

- 15.3.31 slapi_be_getsuffix()

- 15.3.31.1 構文

- 15.3.31.2 パラメータ

- 15.3.31.3 戻り値

- 15.3.31.4 説明

- 15.3.31.5 メモリーに関する注意事項

- 15.3.32 slapi_be_gettype()

- 15.3.32.1 構文

- 15.3.32.2 パラメータ

- 15.3.32.3 戻り値

- 15.3.32.4 メモリーに関する注意事項

- 15.3.33 slapi_be_is_flag_set()

- 15.3.33.1 構文

- 15.3.33.2 パラメータ

- 15.3.33.3 戻り値

- 15.3.34 slapi_be_issuffix()

- 15.3.34.1 構文

- 15.3.34.2 パラメータ

- 15.3.34.3 戻り値

- 15.3.34.4 説明

- 15.3.35 slapi_be_logchanges()

- 15.3.35.1 構文

- 15.3.35.2 パラメータ

- 15.3.35.3 戻り値

- 15.3.36 slapi_be_private()

- 15.3.36.1 構文

- 15.3.36.2 パラメータ

- 15.3.36.3 戻り値

- 15.3.37 slapi_be_select()

- 15.3.37.1 構文

- 15.3.37.2 パラメータ

- 15.3.37.3 戻り値

- 15.3.37.4 メモリーに関する注意事項

- 15.3.37.5 関連項目

- 15.3.38 slapi_be_select_by_instance_name()

- 15.3.38.1 構文

- 15.3.38.2 パラメータ

- 15.3.38.3 戻り値

- 15.3.38.4 説明

- 15.3.38.5 メモリーに関する注意事項

- 15.3.38.6 関連項目

- 15.3.39 slapi_berval_cmp()

- 15.3.39.1 構文

- 15.3.39.2 パラメータ

- 15.3.39.3 説明

- 15.3.39.4 戻り値

- 15.3.40 slapi_build_control()

- 15.3.40.1 構文

- 15.3.40.2 パラメータ

- 15.3.40.3 戻り値

- 15.3.40.4 説明

- 15.3.40.5 メモリーに関する注意事項

- 15.3.40.6 関連項目

- 15.3.41 slapi_build_control_from_berval()

- 15.3.41.1 構文

- 15.3.41.2 パラメータ

- 15.3.41.3 戻り値

- 15.3.41.4 説明

- 15.3.41.5 メモリーに関する注意事項

- 15.3.41.6 関連項目

- 15.3.42 slapi_ch_array_free()

- 15.3.42.1 構文

- 15.3.42.2 パラメータ

- 15.3.42.3 説明

- 15.3.43 slapi_ch_bvdup()

- 15.3.43.1 構文

- 15.3.43.2 パラメータ

- 15.3.43.3 戻り値

- 15.3.43.4 メモリーに関する注意事項

- 15.3.43.5 関連項目

- 15.3.44 slapi_ch_bvecdup()

- 15.3.44.1 構文

- 15.3.44.2 パラメータ

- 15.3.44.3 戻り値

- 15.3.44.4 メモリーに関する注意事項

- 15.3.44.5 関連項目

- 15.3.45 slapi_ch_calloc()

- 15.3.45.1 構文

- 15.3.45.2 パラメータ

- 15.3.45.3 戻り値

- 15.3.45.4 メモリーに関する注意事項

- 15.3.45.5 関連項目

- 15.3.46 slapi_ch_free()

- 15.3.46.1 構文

- 15.3.46.2 パラメータ

- 15.3.46.3 メモリーに関する注意事項

- 15.3.46.4 関連項目

- 15.3.47 slapi_ch_free_string()

- 15.3.47.1 構文

- 15.3.47.2 パラメータ

- 15.3.47.3 説明

- 15.3.47.4 関連項目

- 15.3.48 slapi_ch_malloc()

- 15.3.48.1 構文

- 15.3.48.2 パラメータ

- 15.3.48.3 戻り値

- 15.3.48.4 メモリーに関する注意事項

- 15.3.48.5 関連項目

- 15.3.49 slapi_ch_realloc()

- 15.3.49.1 構文

- 15.3.49.2 パラメータ

- 15.3.49.3 戻り値

- 15.3.49.4 メモリーに関する注意事項

- 15.3.49.5 関連項目

- 15.3.50 slapi_ch_strdup()

- 15.3.50.1 構文

- 15.3.50.2 パラメータ

- 15.3.50.3 戻り値

- 15.3.50.4 メモリーに関する注意事項

- 15.3.50.5 関連項目

- 15.3.51 slapi_compute_add_evaluator()

- 15.3.51.1 構文

- 15.3.51.2 パラメータ

- 15.3.51.3 戻り値

- 15.3.51.4 説明

- 15.3.51.5 関連項目

- 15.3.52 slapi_compute_add_search_rewriter_ex()

- 15.3.52.1 構文

- 15.3.52.2 パラメータ

- 15.3.52.3 戻り値

- 15.3.52.4 説明

- 15.3.53 slapi_control_present()

- 15.3.53.1 構文

- 15.3.53.2 パラメータ

- 15.3.53.3 戻り値

- 15.3.53.4 メモリーに関する注意事項

- 15.3.53.5 関連項目

- 15.3.54 slapi_delete_internal_pb()

- 15.3.54.1 構文

- 15.3.54.2 パラメータ

- 15.3.54.3 戻り値

- 15.3.54.4 説明

- 15.3.54.5 メモリーに関する注意事項

- 15.3.54.6 関連項目

- 15.3.55 slapi_delete_internal_set_pb()

- 15.3.55.1 構文

- 15.3.55.2 パラメータ

- 15.3.55.3 戻り値

- 15.3.55.4 説明

- 15.3.55.5 メモリーに関する注意事項

- 15.3.55.6 関連項目

- 15.3.56 slapi_destroy_condvar()

- 15.3.56.1 構文

- 15.3.56.2 パラメータ

- 15.3.56.3 説明

- 15.3.57 slapi_destroy_mutex()

- 15.3.57.1 構文

- 15.3.57.2 パラメータ

- 15.3.57.3 説明

- 15.3.58 slapi_dn_beparent()

- 15.3.58.1 構文

- 15.3.58.2 パラメータ

- 15.3.58.3 戻り値

- 15.3.58.4 関連項目

- 15.3.59 slapi_dn_ignore_case()

- 15.3.59.1 構文

- 15.3.59.2 パラメータ

- 15.3.59.3 戻り値

- 15.3.59.4 関連項目

- 15.3.60 slapi_dn_isbesuffix()

- 15.3.60.1 構文

- 15.3.60.2 パラメータ

- 15.3.60.3 戻り値

- 15.3.61 slapi_dn_isbesuffix_norm()

- 15.3.61.1 構文

- 15.3.61.2 パラメータ

- 15.3.61.3 戻り値

- 15.3.62 slapi_dn_isparent()

- 15.3.62.1 構文

- 15.3.62.2 パラメータ

- 15.3.62.3 戻り値

- 15.3.62.4 関連項目

- 15.3.63 slapi_dn_isroot()

- 15.3.63.1 構文

- 15.3.63.2 パラメータ

- 15.3.63.3 戻り値

- 15.3.64 slapi_dn_issuffix()

- 15.3.64.1 構文

- 15.3.64.2 パラメータ

- 15.3.64.3 戻り値

- 15.3.64.4 関連項目

- 15.3.65 slapi_dn_normalize()

- 15.3.65.1 構文

- 15.3.65.2 パラメータ

- 15.3.65.3 戻り値

- 15.3.65.4 関連項目

- 15.3.66 slapi_dn_normalize_case()

- 15.3.66.1 構文

- 15.3.66.2 パラメータ

- 15.3.66.3 戻り値

- 15.3.66.4 関連項目

- 15.3.67 slapi_dn_normalize_to_end()

- 15.3.67.1 構文

- 15.3.67.2 パラメータ

- 15.3.67.3 戻り値

- 15.3.67.4 関連項目

- 15.3.68 slapi_dn_parent()

- 15.3.68.1 構文

- 15.3.68.2 パラメータ

- 15.3.68.3 戻り値

- 15.3.69 slapi_dn_plus_rdn()

- 15.3.69.1 構文

- 15.3.69.2 パラメータ

- 15.3.69.3 戻り値

- 15.3.69.4 メモリーに関する注意事項

- 15.3.69.5 関連項目

- 15.3.70 slapi_dup_control()

- 15.3.70.1 構文

- 15.3.70.2 パラメータ

- 15.3.70.3 戻り値

- 15.3.70.4 説明

- 15.3.70.5 メモリーに関する注意事項

- 15.3.70.6 関連項目

- 15.3.71 slapi_entry2mods()

- 15.3.71.1 構文

- 15.3.71.2 パラメータ

- 15.3.71.3 戻り値

- 15.3.71.4 説明

- 15.3.71.5 関連項目

- 15.3.72 slapi_entry2str()

- 15.3.72.1 構文

- 15.3.72.2 パラメータ

- 15.3.72.3 戻り値

- 15.3.72.4 説明

- 15.3.72.5 メモリーに関する注意事項

- 15.3.72.6 関連項目

- 15.3.73 slapi_entry2str_with_options()

- 15.3.73.1 構文

- 15.3.73.2 パラメータ

- 15.3.73.3 The Options Parameter

- 15.3.73.4 戻り値

- 15.3.73.5 説明

- 15.3.73.6 メモリーに関する注意事項

- 15.3.73.7 関連項目

- 15.3.74 slapi_entry_add_rdn_values()

- 15.3.74.1 構文

- 15.3.74.2 パラメータ

- 15.3.74.3 戻り値

- 15.3.74.4 説明

- 15.3.74.5 メモリーに関する注意事項

- 15.3.74.6 関連項目

- 15.3.75 slapi_entry_add_string()

- 15.3.75.1 構文

- 15.3.75.2 パラメータ

- 15.3.75.3 戻り値

- 15.3.75.4 説明

- 15.3.75.5 メモリーに関する注意事項

- 15.3.76 slapi_entry_add_value()

- 15.3.76.1 構文

- 15.3.76.2 パラメータ

- 15.3.76.3 戻り値

- 15.3.76.4 説明

- 15.3.76.5 メモリーに関する注意事項

- 15.3.77 slapi_entry_add_values_sv()

- 15.3.77.1 構文

- 15.3.77.2 パラメータ

- 15.3.77.3 戻り値

- 15.3.77.4 説明

- 15.3.77.5 メモリーに関する注意事項

- 15.3.78 slapi_entry_add_valueset()

- 15.3.78.1 構文

- 15.3.78.2 パラメータ

- 15.3.78.3 戻り値

- 15.3.78.4 説明

- 15.3.78.5 メモリーに関する注意事項

- 15.3.79 slapi_entry_alloc()

- 15.3.79.1 構文

- 15.3.79.2 戻り値

- 15.3.79.3 説明

- 15.3.79.4 メモリーに関する注意事項

- 15.3.79.5 関連項目

- 15.3.80 slapi_entry_attr_delete()

- 15.3.80.1 構文

- 15.3.80.2 パラメータ

- 15.3.80.3 戻り値

- 15.3.81 slapi_entry_attr_find()

- 15.3.81.1 構文

- 15.3.81.2 パラメータ

- 15.3.81.3 戻り値

- 15.3.81.4 メモリーに関する注意事項

- 15.3.81.5 関連項目

- 15.3.82 slapi_entry_attr_get_charptr()

- 15.3.82.1 構文

- 15.3.82.2 パラメータ

- 15.3.82.3 戻り値

- 15.3.82.4 メモリーに関する注意事項

- 15.3.83 slapi_entry_attr_get_int()

- 15.3.83.1 構文

- 15.3.83.2 パラメータ

- 15.3.83.3 戻り値

- 15.3.84 slapi_entry_attr_get_long()

- 15.3.84.1 構文

- 15.3.84.2 パラメータ

- 15.3.84.3 戻り値

- 15.3.85 slapi_entry_attr_get_uint()

- 15.3.85.1 構文

- 15.3.85.2 パラメータ

- 15.3.85.3 戻り値

- 15.3.86 slapi_entry_attr_get_ulong()

- 15.3.86.1 構文

- 15.3.86.2 パラメータ

- 15.3.86.3 戻り値

- 15.3.87 slapi_entry_attr_hasvalue()

- 15.3.87.1 構文

- 15.3.87.2 パラメータ

- 15.3.87.3 戻り値

- 15.3.87.4 メモリーに関する注意事項

- 15.3.88 slapi_entry_attr_merge_sv()

- 15.3.88.1 構文

- 15.3.88.2 パラメータ

- 15.3.88.3 戻り値

- 15.3.88.4 説明

- 15.3.88.5 メモリーに関する注意事項

- 15.3.89 slapi_entry_attr_replace_sv()

- 15.3.89.1 構文

- 15.3.89.2 パラメータ

- 15.3.89.3 戻り値

- 15.3.89.4 説明

- 15.3.89.5 メモリーに関する注意事項

- 15.3.90 slapi_entry_attr_set_charptr()

- 15.3.90.1 構文

- 15.3.90.2 パラメータ

- 15.3.90.3 メモリーに関する注意事項

- 15.3.90.4 関連項目

- 15.3.91 slapi_entry_attr_set_int()

- 15.3.91.1 構文

- 15.3.91.2 パラメータ

- 15.3.91.3 説明

- 15.3.92 slapi_entry_attr_set_long()

- 15.3.92.1 構文

- 15.3.92.2 パラメータ

- 15.3.93 slapi_entry_attr_set_uint()

- 15.3.93.1 構文

- 15.3.93.2 パラメータ

- 15.3.93.3 説明

- 15.3.94 slapi_entry_attr_set_ulong()

- 15.3.94.1 構文

- 15.3.94.2 パラメータ

- 15.3.94.3 説明

- 15.3.95 slapi_entry_delete_string()

- 15.3.95.1 構文

- 15.3.95.2 パラメータ

- 15.3.95.3 戻り値

- 15.3.96 slapi_entry_delete_values_sv()

- 15.3.96.1 構文

- 15.3.96.2 パラメータ

- 15.3.96.3 戻り値

- 15.3.96.4 説明

- 15.3.96.5 メモリーに関する注意事項

- 15.3.97 slapi_entry_dup()

- 15.3.97.1 構文

- 15.3.97.2 パラメータ

- 15.3.97.3 戻り値

- 15.3.97.4 説明

- 15.3.97.5 メモリーに関する注意事項

- 15.3.97.6 関連項目

- 15.3.98 slapi_entry_first_attr()

- 15.3.98.1 構文

- 15.3.98.2 パラメータ

- 15.3.98.3 戻り値

- 15.3.98.4 メモリーに関する注意事項

- 15.3.98.5 関連項目

- 15.3.99 slapi_entry_free()

- 15.3.99.1 構文

- 15.3.99.2 パラメータ

- 15.3.99.3 説明

- 15.3.99.4 メモリーに関する注意事項

- 15.3.99.5 関連項目

- 15.3.100 slapi_entry_get_dn()

- 15.3.100.1 構文

- 15.3.100.2 パラメータ

- 15.3.100.3 戻り値

- 15.3.100.4 メモリーに関する注意事項

- 15.3.100.5 関連項目

- 15.3.101 slapi_entry_get_dn_const()

- 15.3.101.1 構文

- 15.3.101.2 パラメータ

- 15.3.101.3 戻り値

- 15.3.101.4 メモリーに関する注意事項

- 15.3.102 slapi_entry_get_ndn()

- 15.3.102.1 構文

- 15.3.102.2 パラメータ

- 15.3.102.3 戻り値

- 15.3.102.4 メモリーに関する注意事項

- 15.3.103 slapi_entry_get_sdn()

- 15.3.103.1 構文

- 15.3.103.2 パラメータ

- 15.3.103.3 戻り値

- 15.3.103.4 メモリーに関する注意事項

- 15.3.103.5 関連項目

- 15.3.104 slapi_entry_get_sdn_const()

- 15.3.104.1 構文

- 15.3.104.2 パラメータ

- 15.3.104.3 戻り値

- 15.3.104.4 メモリーに関する注意事項

- 15.3.104.5 関連項目

- 15.3.105 slapi_entry_get_uniqueid()

- 15.3.105.1 構文

- 15.3.105.2 パラメータ

- 15.3.105.3 戻り値

- 15.3.105.4 メモリーに関する注意事項

- 15.3.105.5 関連項目

- 15.3.106 slapi_entry_has_children()

- 15.3.106.1 構文

- 15.3.106.2 パラメータ

- 15.3.106.3 戻り値

- 15.3.107 slapi_entry_init()

- 15.3.107.1 構文

- 15.3.107.2 パラメータ

- 15.3.107.3 説明

- 15.3.107.4 メモリーに関する注意事項

- 15.3.107.5 関連項目

- 15.3.108 slapi_entry_isroot()

- 15.3.108.1 構文

- 15.3.108.2 パラメータ

- 15.3.108.3 戻り値

- 15.3.109 slapi_entry_merge_values_sv()

- 15.3.109.1 構文

- 15.3.109.2 パラメータ

- 15.3.109.3 戻り値

- 15.3.109.4 説明

- 15.3.109.5 メモリーに関する注意事項

- 15.3.110 slapi_entry_next_attr()

- 15.3.110.1 構文

- 15.3.110.2 パラメータ

- 15.3.110.3 戻り値

- 15.3.110.4 メモリーに関する注意事項

- 15.3.110.5 関連項目

- 15.3.111 slapi_entry_rdn_values_present()

- 15.3.111.1 構文

- 15.3.111.2 パラメータ

- 15.3.111.3 戻り値

- 15.3.112 slapi_entry_schema_check()

- 15.3.112.1 構文

- 15.3.112.2 パラメータ

- 15.3.112.3 戻り値

- 15.3.112.4 メモリーに関する注意事項

- 15.3.113 slapi_entry_schema_check_ext ()

- 15.3.113.1 構文

- 15.3.113.2 パラメータ

- 15.3.113.3 戻り値

- 15.3.113.4 メモリーに関する注意事項

- 15.3.114 slapi_entry_set_dn()

- 15.3.114.1 構文

- 15.3.114.2 パラメータ

- 15.3.114.3 説明

- 15.3.114.4 メモリーに関する注意事項

- 15.3.114.5 関連項目

- 15.3.115 slapi_entry_set_sdn()

- 15.3.115.1 構文

- 15.3.115.2 パラメータ

- 15.3.115.3 説明

- 15.3.115.4 メモリーに関する注意事項

- 15.3.116 slapi_entry_size()

- 15.3.116.1 構文

- 15.3.116.2 パラメータ

- 15.3.116.3 戻り値

- 15.3.116.4 説明

- 15.3.117 slapi_entry_syntax_check()

- 15.3.117.1 構文

- 15.3.117.2 パラメータ

- 15.3.117.3 戻り値

- 15.3.117.4 メモリーに関する注意事項

- 15.3.118 slapi_entry_vattr_find()

- 15.3.118.1 構文

- 15.3.118.2 パラメータ

- 15.3.118.3 戻り値

- 15.3.119 slapi_filter_compare()

- 15.3.119.1 構文

- 15.3.119.2 パラメータ

- 15.3.119.3 戻り値

- 15.3.119.4 説明

- 15.3.120 slapi_filter_free()

- 15.3.120.1 構文

- 15.3.120.2 パラメータ

- 15.3.120.3 メモリーに関する注意事項

- 15.3.120.4 関連項目

- 15.3.121 slapi_filter_get_attribute_type()

- 15.3.121.1 構文

- 15.3.121.2 パラメータ

- 15.3.121.3 戻り値

- 15.3.121.4 説明

- 15.3.121.5 メモリーに関する注意事項

- 15.3.121.6 関連項目

- 15.3.122 slapi_filter_get_ava()

- 15.3.122.1 構文

- 15.3.122.2 パラメータ

- 15.3.122.3 戻り値

- 15.3.122.4 説明

- 15.3.122.5 メモリーに関する注意事項

- 15.3.122.6 関連項目

- 15.3.123 slapi_filter_get_choice()

- 15.3.123.1 構文

- 15.3.123.2 パラメータ

- 15.3.123.3 戻り値

- 15.3.123.4 関連項目

- 15.3.124 slapi_filter_get_subfilt()

- 15.3.124.1 構文

- 15.3.124.2 パラメータ

- 15.3.124.3 戻り値

- 15.3.124.4 説明

- 15.3.124.5 関連項目

- 15.3.125 slapi_filter_get_type()

- 15.3.125.1 構文

- 15.3.125.2 パラメータ

- 15.3.125.3 戻り値

- 15.3.125.4 説明

- 15.3.125.5 メモリーに関する注意事項

- 15.3.125.6 関連項目

- 15.3.126 slapi_filter_join()

- 15.3.126.1 構文

- 15.3.126.2 パラメータ

- 15.3.126.3 戻り値

- 15.3.126.4 説明

- 15.3.126.5 メモリーに関する注意事項

- 15.3.127 slapi_filter_list_first()

- 15.3.127.1 構文

- 15.3.127.2 パラメータ

- 15.3.127.3 戻り値

- 15.3.127.4 説明

- 15.3.127.5 メモリーに関する注意事項

- 15.3.127.6 関連項目

- 15.3.128 slapi_filter_list_next()

- 15.3.128.1 構文

- 15.3.128.2 パラメータ

- 15.3.128.3 戻り値

- 15.3.128.4 説明

- 15.3.128.5 メモリーに関する注意事項

- 15.3.128.6 関連項目

- 15.3.129 slapi_filter_test()

- 15.3.129.1 構文

- 15.3.129.2 パラメータ

- 15.3.129.3 戻り値

- 15.3.129.4 関連項目

- 15.3.130 slapi_filter_test_ext()

- 15.3.130.1 構文

- 15.3.130.2 パラメータ

- 15.3.130.3 戻り値

- 15.3.130.4 説明

- 15.3.130.5 関連項目

- 15.3.131 slapi_filter_test_simple()

- 15.3.131.1 構文

- 15.3.131.2 パラメータ

- 15.3.131.3 戻り値

- 15.3.131.4 説明

- 15.3.131.5 関連項目

- 15.3.132 slapi_find_matching_paren()

- 15.3.132.1 構文

- 15.3.132.2 パラメータ

- 15.3.132.3 戻り値

- 15.3.132.4 説明

- 15.3.133 slapi_free_search_results_internal()

- 15.3.133.1 構文

- 15.3.133.2 パラメータ

- 15.3.133.3 説明

- 15.3.134 slapi_free_suffix_list()

- 15.3.134.1 構文

- 15.3.134.2 パラメータ

- 15.3.134.3 説明

- 15.3.135 slapi_get_first_backend()

- 15.3.135.1 構文

- 15.3.135.2 パラメータ

- 15.3.135.3 戻り値

- 15.3.135.4 説明

- 15.3.135.5 メモリーに関する注意事項

- 15.3.135.6 関連項目

- 15.3.136 slapi_get_object_extension()

- 15.3.136.1 構文

- 15.3.136.2 パラメータ

- 15.3.136.3 説明

- 15.3.136.4 関連項目

- 15.3.137 slapi_get_next_backend()

- 15.3.137.1 構文

- 15.3.137.2 パラメータ

- 15.3.137.3 戻り値

- 15.3.137.4 説明

- 15.3.137.5 メモリーに関する注意事項

- 15.3.137.6 関連項目

- 15.3.138 slapi_get_suffix_list()

- 15.3.138.1 構文

- 15.3.138.2 パラメータ

- 15.3.138.3 戻り値

- 15.3.138.4 メモリーに関する注意事項

- 15.3.139 slapi_get_supported_controls_copy()

- 15.3.139.1 構文

- 15.3.139.2 パラメータ

- 15.3.139.3 戻り値

- 15.3.139.4 説明

- 15.3.139.5 メモリーに関する注意事項

- 15.3.139.6 関連項目

- 15.3.140 slapi_get_supported_extended_ops_copy()

- 15.3.140.1 構文

- 15.3.140.2 パラメータ

- 15.3.140.3 戻り値

- 15.3.140.4 説明

- 15.3.140.5 メモリーに関する注意事項

- 15.3.140.6 関連項目

- 15.3.141 slapi_get_supported_saslmechanisms_copy()

- 15.3.141.1 構文

- 15.3.141.2 戻り値

- 15.3.142 slapi_has8thBit()

- 15.3.142.1 構文

- 15.3.142.2 パラメータ

- 15.3.142.3 戻り値

- 15.3.143 slapi_is_rootdse()

- 15.3.143.1 構文

- 15.3.143.2 パラメータ

- 15.3.143.3 戻り値

- 15.3.144 slapi_is_root_suffix()

- 15.3.144.1 構文

- 15.3.144.2 パラメータ

- 15.3.144.3 戻り値

- 15.3.145 slapi_ldap_init()

- 15.3.145.1 構文

- 15.3.145.2 パラメータ

- 15.3.145.3 説明

- 15.3.145.4 戻り値

- 15.3.145.5 関連項目

- 15.3.146 slapi_ldap_unbind()

- 15.3.146.1 構文

- 15.3.146.2 パラメータ

- 15.3.146.3 説明

- 15.3.146.4 関連項目

- 15.3.147 slapi_ldapmods_syntax_check ()

- 15.3.147.1 構文

- 15.3.147.2 パラメータ

- 15.3.147.3 戻り値

- 15.3.147.4 メモリーに関する注意事項

- 15.3.148 slapi_lock_mutex()

- 15.3.148.1 構文

- 15.3.148.2 パラメータ

- 15.3.148.3 説明

- 15.3.148.4 関連項目

- 15.3.149 slapi_log_error_ex()

- 15.3.149.1 構文

- 15.3.149.2 パラメータ

- 15.3.149.3 説明

- 15.3.149.4 例

- 15.3.149.5 戻り値

- 15.3.149.6 関連項目

- 15.3.150 slapi_log_info_ex()

- 15.3.150.1 構文

- 15.3.150.2 パラメータ

- 15.3.150.3 説明

- 15.3.150.4 例

- 15.3.150.5 戻り値

- 15.3.150.6 関連項目

- 15.3.151 slapi_log_warning_ex()

- 15.3.151.1 構文

- 15.3.151.2 パラメータ

- 15.3.151.3 説明

- 15.3.151.4 例

- 15.3.151.5 戻り値

- 15.3.151.6 関連項目

- 15.3.152 slapi_matchingrule_free()

- 15.3.152.1 構文

- 15.3.152.2 パラメータ

- 15.3.152.3 説明

- 15.3.152.4 関連項目

- 15.3.153 slapi_matchingrule_get()

- 15.3.153.1 構文

- 15.3.153.2 パラメータ

- 15.3.153.3 説明

- 15.3.153.4 戻り値

- 15.3.153.5 関連項目

- 15.3.154 slapi_matchingrule_new()

- 15.3.154.1 構文

- 15.3.154.2 説明

- 15.3.154.3 戻り値

- 15.3.154.4 関連項目

- 15.3.155 slapi_matchingrule_register()

- 15.3.155.1 構文

- 15.3.155.2 パラメータ

- 15.3.155.3 説明

- 15.3.155.4 戻り値

- 15.3.155.5 関連項目

- 15.3.156 slapi_matchingrule_set()

- 15.3.156.1 構文

- 15.3.156.2 パラメータ

- 15.3.156.3 説明

- 15.3.156.4 戻り値

- 15.3.156.5 関連項目

- 15.3.157 slapi_mod_add_value()

- 15.3.157.1 構文

- 15.3.157.2 パラメータ

- 15.3.157.3 説明

- 15.3.158 slapi_mod_done()

- 15.3.158.1 構文

- 15.3.158.2 パラメータ

- 15.3.158.3 説明

- 15.3.158.4 メモリーに関する注意事項

- 15.3.158.5 関連項目

- 15.3.159 slapi_mod_dump()

- 15.3.159.1 構文

- 15.3.159.2 パラメータ

- 15.3.159.3 説明

- 15.3.160 slapi_mod_free()

- 15.3.160.1 構文

- 15.3.160.2 パラメータ

- 15.3.160.3 説明

- 15.3.160.4 関連項目

- 15.3.161 slapi_mod_get_first_value()

- 15.3.161.1 構文

- 15.3.161.2 パラメータ

- 15.3.161.3 戻り値

- 15.3.161.4 説明

- 15.3.161.5 関連項目

- 15.3.162 slapi_mod_get_ldapmod_byref()

- 15.3.162.1 構文

- 15.3.162.2 パラメータ

- 15.3.162.3 戻り値

- 15.3.162.4 説明

- 15.3.162.5 メモリーに関する注意事項

- 15.3.162.6 関連項目

- 15.3.163 slapi_mod_get_ldapmod_passout()

- 15.3.163.1 構文

- 15.3.163.2 パラメータ

- 15.3.163.3 戻り値

- 15.3.163.4 説明

- 15.3.163.5 メモリーに関する注意事項

- 15.3.163.6 関連項目

- 15.3.164 slapi_mod_get_next_value()

- 15.3.164.1 構文

- 15.3.164.2 パラメータ

- 15.3.164.3 戻り値

- 15.3.164.4 説明

- 15.3.164.5 関連項目

- 15.3.165 slapi_mod_get_num_values()

- 15.3.165.1 構文

- 15.3.165.2 パラメータ

- 15.3.165.3 戻り値

- 15.3.166 slapi_mod_get_operation()

- 15.3.166.1 構文

- 15.3.166.2 パラメータ

- 15.3.166.3 戻り値

- 15.3.166.4 関連項目

- 15.3.167 slapi_mod_get_type()

- 15.3.167.1 構文

- 15.3.167.2 パラメータ

- 15.3.167.3 戻り値

- 15.3.167.4 説明

- 15.3.167.5 関連項目

- 15.3.168 slapi_mod_init()

- 15.3.168.1 構文

- 15.3.168.2 パラメータ

- 15.3.168.3 説明

- 15.3.168.4 メモリーに関する注意事項

- 15.3.168.5 関連項目

- 15.3.169 slapi_mod_init_byref()

- 15.3.169.1 構文

- 15.3.169.2 パラメータ

- 15.3.169.3 説明

- 15.3.169.4 関連項目

- 15.3.170 slapi_mod_init_byval()

- 15.3.170.1 構文

- 15.3.170.2 パラメータ

- 15.3.170.3 関連項目

- 15.3.171 slapi_mod_init_passin()

- 15.3.171.1 構文

- 15.3.171.2 パラメータ

- 15.3.171.3 説明

- 15.3.171.4 メモリーに関する注意事項

- 15.3.171.5 関連項目

- 15.3.172 slapi_mod_isvalid()

- 15.3.172.1 構文

- 15.3.172.2 パラメータ

- 15.3.172.3 戻り値

- 15.3.172.4 説明

- 15.3.173 slapi_mod_new()

- 15.3.173.1 構文

- 15.3.173.2 パラメータ

- 15.3.173.3 戻り値

- 15.3.173.4 説明

- 15.3.173.5 関連項目

- 15.3.174 slapi_mod_remove_value()

- 15.3.174.1 構文

- 15.3.174.2 パラメータ

- 15.3.174.3 関連項目

- 15.3.175 slapi_mod_set_operation()

- 15.3.175.1 構文

- 15.3.175.2 パラメータ

- 15.3.175.3 関連項目

- 15.3.176 slapi_mod_set_type()

- 15.3.176.1 構文

- 15.3.176.2 パラメータ

- 15.3.176.3 説明

- 15.3.176.4 関連項目

- 15.3.177 slapi_moddn_get_newdn()

- 15.3.177.1 構文

- 15.3.177.2 パラメータ

- 15.3.177.3 戻り値

- 15.3.177.4 説明

- 15.3.177.5 メモリーに関する注意事項

16 Directory Server関数リファレンス(パートII)

- 16.1 アルファベット順の関数(パートII)

- 16.1.1 slapi_modify_internal_pb()

- 16.1.1.1 構文

- 16.1.1.2 パラメータ

- 16.1.1.3 戻り値

- 16.1.1.4 説明

- 16.1.1.5 メモリーに関する注意事項

- 16.1.2 slapi_modify_internal_set_pb()

- 16.1.2.1 構文

- 16.1.2.2 パラメータ

- 16.1.2.3 戻り値

- 16.1.2.4 説明

- 16.1.2.5 メモリーに関する注意事項

- 16.1.2.6 関連項目

- 16.1.3 slapi_modrdn_internal_pb()

- 16.1.3.1 構文

- 16.1.3.2 パラメータ

- 16.1.3.3 戻り値

- 16.1.3.4 説明

- 16.1.3.5 メモリーに関する注意事項

- 16.1.3.6 関連項目

- 16.1.4 slapi_mods2entry()

- 16.1.4.1 構文

- 16.1.4.2 パラメータ

- 16.1.4.3 戻り値

- 16.1.4.4 説明

- 16.1.4.5 関連項目

- 16.1.5 slapi_mods_add()

- 16.1.5.1 構文

- 16.1.5.2 パラメータ

- 16.1.5.3 説明

- 16.1.5.4 メモリーに関する注意事項

- 16.1.5.5 関連項目

- 16.1.6 slapi_mods_add_ldapmod()

- 16.1.6.1 構文

- 16.1.6.2 パラメータ

- 16.1.6.3 説明

- 16.1.6.4 メモリーに関する注意事項

- 16.1.6.5 関連項目

- 16.1.7 slapi_mods_add_mod_values()

- 16.1.7.1 構文

- 16.1.7.2 パラメータ

- 16.1.7.3 説明

- 16.1.7.4 メモリーに関する注意事項

- 16.1.8 slapi_mods_add_modbvps()

- 16.1.8.1 構文

- 16.1.8.2 パラメータ

- 16.1.8.3 説明

- 16.1.8.4 メモリーに関する注意事項

- 16.1.8.5 関連項目

- 16.1.9 slapi_mods_add_smod()

- 16.1.9.1 構文

- 16.1.9.2 パラメータ

- 16.1.9.3 説明

- 16.1.9.4 メモリーに関する注意事項

- 16.1.9.5 関連項目

- 16.1.10 slapi_mods_add_string()

- 16.1.10.1 構文

- 16.1.10.2 パラメータ

- 16.1.10.3 説明

- 16.1.10.4 メモリーに関する注意事項

- 16.1.10.5 関連項目

- 16.1.11 slapi_mods_done()

- 16.1.11.1 構文

- 16.1.11.2 パラメータ

- 16.1.11.3 説明

- 16.1.11.4 関連項目

- 16.1.12 slapi_mods_dump()

- 16.1.12.1 構文

- 16.1.12.2 パラメータ

- 16.1.12.3 説明

- 16.1.13 slapi_mods_free()

- 16.1.13.1 構文

- 16.1.13.2 パラメータ

- 16.1.13.3 説明

- 16.1.13.4 関連項目

- 16.1.14 slapi_mods_get_first_mod()

- 16.1.14.1 構文

- 16.1.14.2 パラメータ

- 16.1.14.3 戻り値

- 16.1.15 slapi_mods_get_first_smod()

- 16.1.15.1 構文

- 16.1.15.2 パラメータ

- 16.1.15.3 戻り値

- 16.1.15.4 説明

- 16.1.15.5 メモリーに関する注意事項

- 16.1.15.6 関連項目

- 16.1.16 slapi_mods_get_ldapmods_byref()

- 16.1.16.1 構文

- 16.1.16.2 パラメータ

- 16.1.16.3 戻り値

- 16.1.16.4 説明

- 16.1.16.5 メモリーに関する注意事項

- 16.1.16.6 関連項目

- 16.1.17 slapi_mods_get_ldapmods_passout()

- 16.1.17.1 構文

- 16.1.17.2 パラメータ

- 16.1.17.3 戻り値

- 16.1.17.4 説明

- 16.1.17.5 関連項目

- 16.1.18 slapi_mods_get_next_mod()

- 16.1.18.1 構文

- 16.1.18.2 パラメータ

- 16.1.18.3 戻り値

- 16.1.18.4 説明

- 16.1.18.5 メモリーに関する注意事項

- 16.1.18.6 関連項目

- 16.1.19 slapi_mods_get_next_smod()

- 16.1.19.1 構文

- 16.1.19.2 パラメータ

- 16.1.19.3 戻り値

- 16.1.19.4 説明

- 16.1.19.5 メモリーに関する注意事項

- 16.1.19.6 関連項目

- 16.1.20 slapi_mods_get_num_mods()

- 16.1.20.1 構文

- 16.1.20.2 パラメータ

- 16.1.20.3 戻り値

- 16.1.21 slapi_mods_init()

- 16.1.21.1 構文

- 16.1.21.2 パラメータ

- 16.1.21.3 説明

- 16.1.21.4 メモリーに関する注意事項

- 16.1.21.5 関連項目

- 16.1.22 slapi_mods_init_byref()

- 16.1.22.1 構文

- 16.1.22.2 パラメータ

- 16.1.22.3 説明

- 16.1.22.4 メモリーに関する注意事項

- 16.1.22.5 関連項目

- 16.1.23 slapi_mods_init_passin()

- 16.1.23.1 構文

- 16.1.23.2 パラメータ

- 16.1.23.3 説明

- 16.1.23.4 メモリーに関する注意事項

- 16.1.23.5 関連項目

- 16.1.24 slapi_mods_insert_after()

- 16.1.24.1 構文

- 16.1.24.2 パラメータ

- 16.1.24.3 説明

- 16.1.24.4 メモリーに関する注意事項

- 16.1.24.5 関連項目

- 16.1.25 slapi_mods_insert_at()

- 16.1.25.1 構文

- 16.1.25.2 パラメータ

- 16.1.25.3 説明

- 16.1.25.4 メモリーに関する注意事項

- 16.1.26 slapi_mods_insert_before()

- 16.1.26.1 構文

- 16.1.26.2 パラメータ

- 16.1.26.3 説明

- 16.1.26.4 メモリーに関する注意事項

- 16.1.26.5 関連項目

- 16.1.27 slapi_mods_insert_smod_at()

- 16.1.27.1 構文

- 16.1.27.2 パラメータ

- 16.1.27.3 説明

- 16.1.27.4 メモリーに関する注意事項

- 16.1.28 slapi_mods_insert_smod_before()

- 16.1.28.1 構文

- 16.1.28.2 パラメータ

- 16.1.28.3 説明

- 16.1.28.4 メモリーに関する注意事項

- 16.1.28.5 関連項目

- 16.1.29 slapi_mods_iterator_backone()

- 16.1.29.1 構文

- 16.1.29.2 パラメータ

- 16.1.29.3 説明

- 16.1.29.4 関連項目

- 16.1.30 slapi_mods_new()

- 16.1.30.1 構文

- 16.1.30.2 パラメータ

- 16.1.30.3 戻り値

- 16.1.30.4 説明

- 16.1.30.5 メモリーに関する注意事項

- 16.1.30.6 関連項目

- 16.1.31 slapi_mods_remove()

- 16.1.31.1 構文

- 16.1.31.2 パラメータ

- 16.1.31.3 説明

- 16.1.31.4 関連項目

- 16.1.32 slapi_mods_remove_at()

- 16.1.32.1 構文

- 16.1.32.2 パラメータ

- 16.1.32.3 説明

- 16.1.32.4 関連項目

- 16.1.33 slapi_mr_filter_index()

- 16.1.33.1 構文

- 16.1.33.2 パラメータ

- 16.1.33.3 説明

- 16.1.33.4 戻り値

- 16.1.34 slapi_mr_indexer_create()

- 16.1.34.1 構文

- 16.1.34.2 パラメータ

- 16.1.34.3 説明

- 16.1.34.4 戻り値

- 16.1.35 slapi_new_condvar()

- 16.1.35.1 構文

- 16.1.35.2 パラメータ

- 16.1.35.3 説明

- 16.1.35.4 戻り値

- 16.1.35.5 メモリーに関する注意事項

- 16.1.35.6 関連項目

- 16.1.36 slapi_new_mutex()

- 16.1.36.1 構文

- 16.1.36.2 戻り値

- 16.1.36.3 説明

- 16.1.36.4 メモリーに関する注意事項

- 16.1.36.5 関連項目

- 16.1.37 slapi_notify_condvar()

- 16.1.37.1 構文

- 16.1.37.2 パラメータ

- 16.1.37.3 説明

- 16.1.37.4 戻り値

- 16.1.37.5 メモリーに関する注意事項

- 16.1.37.6 関連項目

- 16.1.38 slapi_op_abandoned()

- 16.1.38.1 構文

- 16.1.38.2 パラメータ

- 16.1.38.3 説明

- 16.1.38.4 戻り値

- 16.1.39 slapi_op_get_type()

- 16.1.39.1 構文

- 16.1.39.2 パラメータ

- 16.1.39.3 説明

- 16.1.39.4 戻り値

- 16.1.39.5 関連項目

- 16.1.40 slapi_pblock_destroy()

- 16.1.40.1 構文

- 16.1.40.2 パラメータ

- 16.1.40.3 メモリーに関する注意事項

- 16.1.40.4 関連項目

- 16.1.41 slapi_pblock_get()

- 16.1.41.1 構文

- 16.1.41.2 パラメータ

- 16.1.41.3 戻り値

- 16.1.41.4 メモリーに関する注意事項

- 16.1.41.5 関連項目

- 16.1.42 slapi_pblock_new()

- 16.1.42.1 構文

- 16.1.42.2 戻り値

- 16.1.42.3 メモリーに関する注意事項

- 16.1.43 slapi_pblock_set()

- 16.1.43.1 構文

- 16.1.43.2 パラメータ

- 16.1.43.3 戻り値

- 16.1.43.4 メモリーに関する注意事項

- 16.1.43.5 関連項目

- 16.1.44 slapi_pw_find_sv()

- 16.1.44.1 構文

- 16.1.44.2 パラメータ

- 16.1.44.3 戻り値

- 16.1.44.4 メモリーに関する注意事項

- 16.1.44.5 説明

- 16.1.44.6 関連項目

- 16.1.45 slapi_pw_find_valueset()

- 16.1.45.1 構文

- 16.1.45.2 パラメータ

- 16.1.45.3 戻り値

- 16.1.45.4 説明

- 16.1.45.5 関連項目

- 16.1.46 slapi_rdn_add()

- 16.1.46.1 構文

- 16.1.46.2 パラメータ

- 16.1.46.3 戻り値

- 16.1.46.4 説明

- 16.1.46.5 関連項目

- 16.1.47 slapi_rdn_compare()

- 16.1.47.1 構文

- 16.1.47.2 パラメータ

- 16.1.47.3 戻り値

- 16.1.47.4 説明

- 16.1.48 slapi_rdn_contains()

- 16.1.48.1 構文

- 16.1.48.2 パラメータ

- 16.1.48.3 戻り値

- 16.1.48.4 説明

- 16.1.48.5 関連項目

- 16.1.49 slapi_rdn_contains_attr()

- 16.1.49.1 構文

- 16.1.49.2 パラメータ

- 16.1.49.3 戻り値

- 16.1.49.4 説明

- 16.1.49.5 関連項目

- 16.1.50 slapi_rdn_done()

- 16.1.50.1 構文

- 16.1.50.2 パラメータ

- 16.1.50.3 説明

- 16.1.50.4 関連項目

- 16.1.51 slapi_rdn_free()

- 16.1.51.1 構文

- 16.1.51.2 パラメータ

- 16.1.51.3 説明

- 16.1.51.4 関連項目

- 16.1.52 slapi_rdn_get_first()

- 16.1.52.1 構文

- 16.1.52.2 パラメータ

- 16.1.52.3 戻り値

- 16.1.52.4 説明

- 16.1.52.5 関連項目

- 16.1.53 slapi_rdn_get_index()

- 16.1.53.1 構文

- 16.1.53.2 パラメータ

- 16.1.53.3 戻り値

- 16.1.53.4 説明

- 16.1.53.5 関連項目

- 16.1.54 slapi_rdn_get_index_attr()

- 16.1.54.1 構文

- 16.1.54.2 パラメータ

- 16.1.54.3 戻り値

- 16.1.54.4 説明

- 16.1.54.5 関連項目

- 16.1.55 slapi_rdn_get_next()

- 16.1.55.1 構文

- 16.1.55.2 パラメータ

- 16.1.55.3 戻り値

- 16.1.55.4 説明

- 16.1.55.5 関連項目

- 16.1.56 slapi_rdn_get_num_components()

- 16.1.56.1 構文

- 16.1.56.2 パラメータ

- 16.1.56.3 戻り値

- 16.1.56.4 関連項目

- 16.1.57 slapi_rdn_get_rdn()

- 16.1.57.1 構文

- 16.1.57.2 パラメータ

- 16.1.57.3 戻り値

- 16.1.58 slapi_rdn_init()

- 16.1.58.1 構文

- 16.1.58.2 パラメータ

- 16.1.58.3 説明

- 16.1.58.4 関連項目

- 16.1.59 slapi_rdn_init_dn()

- 16.1.59.1 構文

- 16.1.59.2 パラメータ

- 16.1.59.3 説明

- 16.1.59.4 関連項目

- 16.1.60 slapi_rdn_init_rdn()

- 16.1.60.1 構文

- 16.1.60.2 パラメータ

- 16.1.60.3 説明

- 16.1.60.4 関連項目

- 16.1.61 slapi_rdn_init_sdn()

- 16.1.61.1 構文

- 16.1.61.2 パラメータ

- 16.1.61.3 説明

- 16.1.61.4 関連項目

- 16.1.62 slapi_rdn_isempty()

- 16.1.62.1 構文

- 16.1.62.2 パラメータ

- 16.1.62.3 戻り値

- 16.1.62.4 関連項目

- 16.1.63 slapi_rdn_new()

- 16.1.63.1 構文

- 16.1.63.2 パラメータ

- 16.1.63.3 戻り値

- 16.1.63.4 説明

- 16.1.63.5 関連項目

- 16.1.64 slapi_rdn_new_dn()

- 16.1.64.1 構文

- 16.1.64.2 パラメータ

- 16.1.64.3 戻り値

- 16.1.64.4 説明

- 16.1.64.5 メモリーに関する注意事項

- 16.1.64.6 関連項目

- 16.1.65 slapi_rdn_new_rdn()

- 16.1.65.1 構文

- 16.1.65.2 パラメータ

- 16.1.65.3 戻り値

- 16.1.65.4 説明

- 16.1.65.5 メモリーに関する注意事項

- 16.1.65.6 関連項目

- 16.1.66 slapi_rdn_new_sdn()

- 16.1.66.1 構文

- 16.1.66.2 パラメータ

- 16.1.66.3 戻り値

- 16.1.66.4 説明

- 16.1.66.5 メモリーに関する注意事項

- 16.1.66.6 関連項目

- 16.1.67 slapi_rdn_remove()

- 16.1.67.1 構文

- 16.1.67.2 パラメータ

- 16.1.67.3 戻り値

- 16.1.67.4 説明

- 16.1.67.5 関連項目

- 16.1.68 slapi_rdn_remove_attr()

- 16.1.68.1 構文

- 16.1.68.2 パラメータ

- 16.1.68.3 戻り値

- 16.1.68.4 説明

- 16.1.68.5 関連項目

- 16.1.69 slapi_rdn_remove_index()

- 16.1.69.1 構文

- 16.1.69.2 パラメータ

- 16.1.69.3 戻り値

- 16.1.69.4 説明

- 16.1.69.5 関連項目

- 16.1.70 slapi_rdn_set_dn()

- 16.1.70.1 構文

- 16.1.70.2 パラメータ

- 16.1.70.3 説明

- 16.1.70.4 関連項目

- 16.1.71 slapi_rdn_set_rdn()

- 16.1.71.1 構文

- 16.1.71.2 パラメータ

- 16.1.71.3 説明

- 16.1.71.4 関連項目

- 16.1.72 slapi_rdn_set_sdn()

- 16.1.72.1 構文

- 16.1.72.2 パラメータ

- 16.1.72.3 説明

- 16.1.72.4 関連項目

- 16.1.73 slapi_rdn_syntax_check()

- 16.1.73.1 構文

- 16.1.73.2 パラメータ

- 16.1.73.3 戻り値

- 16.1.73.4 メモリーに関する注意事項

- 16.1.74 slapi_register_object_extension()

- 16.1.74.1 構文

- 16.1.74.2 パラメータ

- 16.1.74.3 説明

- 16.1.74.4 戻り値

- 16.1.74.5 関連項目

- 16.1.75 slapi_register_plugin()

- 16.1.75.1 構文

- 16.1.75.2 パラメータ

- 16.1.75.3 説明

- 16.1.75.4 戻り値

- 16.1.75.5 関連項目

- 16.1.76 slapi_register_role_get_scope()

- 16.1.76.1 構文

- 16.1.76.2 パラメータ

- 16.1.76.3 説明

- 16.1.76.4 関連項目

- 16.1.77 slapi_register_supported_control()

- 16.1.77.1 構文

- 16.1.77.2 パラメータ

- 16.1.77.3 関連項目

- 16.1.78 slapi_register_supported_saslmechanism()

- 16.1.78.1 構文

- 16.1.78.2 パラメータ

- 16.1.78.3 説明

- 16.1.78.4 関連項目

- 16.1.79 slapi_rename_internal_set_pb()

- 16.1.79.1 構文

- 16.1.79.2 パラメータ

- 16.1.79.3 戻り値

- 16.1.79.4 説明

- 16.1.79.5 メモリーに関する注意事項

- 16.1.79.6 関連項目

- 16.1.80 slapi_role_check()

- 16.1.80.1 構文

- 16.1.80.2 パラメータ

- 16.1.80.3 戻り値

- 16.1.81 slapi_role_get_scope()

- 16.1.81.1 構文

- 16.1.81.2 パラメータ

- 16.1.81.3 説明

- 16.1.81.4 メモリーに関する注意事項

- 16.1.81.5 関連項目

- 16.1.82 slapi_sdn_add_rdn()

- 16.1.82.1 構文

- 16.1.82.2 パラメータ

- 16.1.82.3 戻り値

- 16.1.82.4 関連項目

- 16.1.83 slapi_sdn_compare()

- 16.1.83.1 構文

- 16.1.83.2 パラメータ

- 16.1.83.3 戻り値

- 16.1.83.4 説明

- 16.1.84 slapi_sdn_copy()

- 16.1.84.1 構文

- 16.1.84.2 パラメータ

- 16.1.84.3 説明

- 16.1.84.4 メモリーに関する注意事項

- 16.1.84.5 関連項目

- 16.1.85 slapi_sdn_done()

- 16.1.85.1 構文

- 16.1.85.2 パラメータ

- 16.1.85.3 説明

- 16.1.85.4 関連項目

- 16.1.86 slapi_sdn_dup()

- 16.1.86.1 構文

- 16.1.86.2 パラメータ

- 16.1.86.3 戻り値

- 16.1.86.4 関連項目

- 16.1.87 slapi_sdn_free()

- 16.1.87.1 構文

- 16.1.87.2 パラメータ

- 16.1.87.3 説明

- 16.1.87.4 関連項目

- 16.1.88 slapi_sdn_get_backend_parent()

- 16.1.88.1 構文

- 16.1.88.2 パラメータ

- 16.1.88.3 説明

- 16.1.88.4 メモリーに関する注意事項

- 16.1.88.5 関連項目

- 16.1.89 slapi_sdn_get_dn()

- 16.1.89.1 構文

- 16.1.89.2 パラメータ

- 16.1.89.3 戻り値

- 16.1.89.4 説明

- 16.1.89.5 関連項目

- 16.1.90 slapi_sdn_get_ndn()

- 16.1.90.1 構文

- 16.1.90.2 パラメータ

- 16.1.90.3 戻り値

- 16.1.90.4 説明

- 16.1.90.5 関連項目

- 16.1.91 slapi_sdn_get_ndn_len()

- 16.1.91.1 構文

- 16.1.91.2 パラメータ

- 16.1.91.3 戻り値

- 16.1.91.4 説明

- 16.1.92 slapi_sdn_get_parent()

- 16.1.92.1 構文

- 16.1.92.2 パラメータ

- 16.1.92.3 説明

- 16.1.92.4 関連項目

- 16.1.93 slapi_sdn_get_rdn()

- 16.1.93.1 構文

- 16.1.93.2 パラメータ

- 16.1.93.3 説明

- 16.1.93.4 関連項目

- 16.1.94 slapi_sdn_get_suffix()

- 16.1.94.1 構文

- 16.1.94.2 パラメータ

- 16.1.94.3 戻り値

- 16.1.94.4 メモリーに関する注意事項

- 16.1.95 slapi_sdn_isempty()

- 16.1.95.1 構文

- 16.1.95.2 パラメータ

- 16.1.95.3 戻り値

- 16.1.95.4 説明

- 16.1.95.5 関連項目

- 16.1.96 slapi_sdn_isgrandparent()

- 16.1.96.1 構文

- 16.1.96.2 パラメータ

- 16.1.96.3 戻り値

- 16.1.96.4 関連項目

- 16.1.97 slapi_sdn_isparent()

- 16.1.97.1 構文

- 16.1.97.2 パラメータ

- 16.1.97.3 戻り値

- 16.1.97.4 関連項目

- 16.1.98 slapi_sdn_issuffix()

- 16.1.98.1 構文

- 16.1.98.2 パラメータ

- 16.1.98.3 戻り値

- 16.1.98.4 関連項目

- 16.1.99 slapi_sdn_new()

- 16.1.99.1 構文

- 16.1.99.2 パラメータ

- 16.1.99.3 戻り値

- 16.1.99.4 説明

- 16.1.99.5 関連項目

- 16.1.100 slapi_sdn_new_dn_byref()

- 16.1.100.1 構文

- 16.1.100.2 パラメータ

- 16.1.100.3 戻り値

- 16.1.100.4 説明

- 16.1.100.5 メモリーに関する注意事項

- 16.1.100.6 関連項目

- 16.1.101 slapi_sdn_new_dn_byval()

- 16.1.101.1 構文

- 16.1.101.2 パラメータ

- 16.1.101.3 戻り値

- 16.1.101.4 説明

- 16.1.101.5 メモリーに関する注意事項

- 16.1.101.6 関連項目

- 16.1.102 slapi_sdn_new_dn_passin()

- 16.1.102.1 構文

- 16.1.102.2 パラメータ

- 16.1.102.3 戻り値

- 16.1.102.4 説明

- 16.1.102.5 メモリーに関する注意事項

- 16.1.102.6 関連項目

- 16.1.103 slapi_sdn_new_ndn_byref()

- 16.1.103.1 構文

- 16.1.103.2 パラメータ

- 16.1.103.3 戻り値

- 16.1.103.4 説明

- 16.1.103.5 メモリーに関する注意事項

- 16.1.103.6 関連項目

- 16.1.104 slapi_sdn_new_ndn_byval()

- 16.1.104.1 構文

- 16.1.104.2 パラメータ

- 16.1.104.3 戻り値

- 16.1.104.4 説明

- 16.1.104.5 メモリーに関する注意事項

- 16.1.104.6 関連項目

- 16.1.105 slapi_sdn_scope_test()

- 16.1.105.1 構文

- 16.1.105.2 パラメータ

- 16.1.105.3 戻り値

- 16.1.105.4 説明

- 16.1.105.5 関連項目

- 16.1.106 slapi_sdn_set_dn_byref()

- 16.1.106.1 構文

- 16.1.106.2 パラメータ

- 16.1.106.3 戻り値

- 16.1.106.4 説明

- 16.1.106.5 関連項目

- 16.1.107 slapi_sdn_set_dn_byval()

- 16.1.107.1 構文

- 16.1.107.2 パラメータ

- 16.1.107.3 戻り値

- 16.1.107.4 説明

- 16.1.107.5 関連項目

- 16.1.108 slapi_sdn_set_dn_passin()

- 16.1.108.1 構文

- 16.1.108.2 パラメータ

- 16.1.108.3 戻り値

- 16.1.108.4 説明

- 16.1.108.5 関連項目

- 16.1.109 slapi_sdn_set_ndn_byref()

- 16.1.109.1 構文

- 16.1.109.2 パラメータ

- 16.1.109.3 戻り値

- 16.1.109.4 説明

- 16.1.109.5 関連項目

- 16.1.110 slapi_sdn_set_ndn_byval()

- 16.1.110.1 構文

- 16.1.110.2 パラメータ

- 16.1.110.3 戻り値

- 16.1.110.4 説明

- 16.1.110.5 関連項目

- 16.1.111 slapi_sdn_set_parent()

- 16.1.111.1 構文

- 16.1.111.2 パラメータ

- 16.1.111.3 戻り値

- 16.1.111.4 説明

- 16.1.111.5 関連項目

- 16.1.112 slapi_sdn_set_rdn()

- 16.1.112.1 構文

- 16.1.112.2 パラメータ

- 16.1.112.3 戻り値

- 16.1.112.4 説明

- 16.1.112.5 関連項目

- 16.1.113 slapi_search_internal_callback_pb()

- 16.1.113.1 構文

- 16.1.113.2 パラメータ

- 16.1.113.3 戻り値

- 16.1.113.4 説明

- 16.1.113.5 メモリーに関する注意事項

- 16.1.114 slapi_search_internal_get_entry()

- 16.1.114.1 構文

- 16.1.114.2 パラメータ

- 16.1.114.3 戻り値

- 16.1.114.4 説明

- 16.1.114.5 メモリーに関する注意事項

- 16.1.114.6 関連項目

- 16.1.115 slapi_search_internal_pb()

- 16.1.115.1 構文

- 16.1.115.2 パラメータ

- 16.1.115.3 戻り値

- 16.1.115.4 説明

- 16.1.115.5 メモリーに関する注意事項

- 16.1.116 slapi_search_internal_set_pb()

- 16.1.116.1 構文

- 16.1.116.2 パラメータ

- 16.1.116.3 戻り値

- 16.1.116.4 説明

- 16.1.116.5 メモリーに関する注意事項

- 16.1.116.6 関連項目

- 16.1.117 slapi_send_ldap_referral()

- 16.1.117.1 構文

- 16.1.117.2 パラメータ

- 16.1.117.3 戻り値

- 16.1.117.4 説明

- 16.1.117.5 関連項目

- 16.1.118 slapi_send_ldap_result()

- 16.1.118.1 構文

- 16.1.118.2 パラメータ

- 16.1.118.3 説明

- 16.1.118.4 関連項目

- 16.1.119 slapi_send_ldap_search_entry()

- 16.1.119.1 構文

- 16.1.119.2 パラメータ

- 16.1.119.3 戻り値

- 16.1.119.4 説明

- 16.1.119.5 関連項目

- 16.1.120 slapi_set_object_extension()

- 16.1.120.1 構文

- 16.1.120.2 パラメータ

- 16.1.120.3 説明

- 16.1.120.4 関連項目

- 16.1.121 slapi_str2entry()

- 16.1.121.1 構文

- 16.1.121.2 パラメータ

- 16.1.121.3 戻り値

- 16.1.121.4 説明

- 16.1.121.5 メモリーに関する注意事項

- 16.1.121.6 関連項目

- 16.1.122 slapi_str2filter()

- 16.1.122.1 構文

- 16.1.122.2 パラメータ

- 16.1.122.3 メモリーに関する注意事項

- 16.1.122.4 戻り値

- 16.1.123 slapi_unlock_mutex()

- 16.1.123.1 構文

- 16.1.123.2 パラメータ

- 16.1.123.3 戻り値

- 16.1.123.4 説明

- 16.1.123.5 関連項目

- 16.1.124 slapi_UTF-8CASECMP()

- 16.1.124.1 構文

- 16.1.124.2 パラメータ

- 16.1.124.3 戻り値

- 16.1.124.4 説明

- 16.1.125 slapi_UTF-8NCASECMP()

- 16.1.125.1 構文

- 16.1.125.2 パラメータ

- 16.1.125.3 戻り値

- 16.1.125.4 説明

- 16.1.126 slapi_UTF-8ISLOWER()

- 16.1.126.1 構文

- 16.1.126.2 パラメータ

- 16.1.126.3 戻り値

- 16.1.127 slapi_UTF-8ISUPPER()

- 16.1.127.1 構文

- 16.1.127.2 パラメータ

- 16.1.127.3 戻り値

- 16.1.128 slapi_UTF-8STRTOLOWER()

- 16.1.128.1 構文

- 16.1.128.2 パラメータ

- 16.1.128.3 戻り値

- 16.1.128.4 説明

- 16.1.128.5 メモリーに関する注意事項

- 16.1.128.6 関連項目

- 16.1.129 slapi_UTF-8STRTOUPPER()

- 16.1.129.1 構文

- 16.1.129.2 パラメータ

- 16.1.129.3 戻り値

- 16.1.129.4 メモリーに関する注意事項

- 16.1.130 slapi_UTF-8TOLOWER()

- 16.1.130.1 構文

- 16.1.130.2 パラメータ

- 16.1.131 slapi_UTF-8TOUPPER()

- 16.1.131.1 構文

- 16.1.131.2 パラメータ

- 16.1.132 slapi_value_compare()

- 16.1.132.1 構文

- 16.1.132.2 パラメータ

- 16.1.132.3 戻り値

- 16.1.132.4 説明

- 16.1.133 slapi_value_done()

- 16.1.133.1 構文

- 16.1.133.2 パラメータ

- 16.1.133.3 関連項目

- 16.1.134 slapi_value_dup()

- 16.1.134.1 構文

- 16.1.134.2 パラメータ

- 16.1.134.3 戻り値

- 16.1.134.4 メモリーに関する注意事項

- 16.1.134.5 関連項目

- 16.1.135 slapi_value_free()

- 16.1.135.1 構文

- 16.1.135.2 パラメータ

- 16.1.135.3 説明

- 16.1.135.4 メモリーに関する注意事項

- 16.1.136 slapi_valuearray_free()

- 16.1.136.1 構文

- 16.1.136.2 パラメータ

- 16.1.136.3 説明

- 16.1.136.4 メモリーに関する注意事項

- 16.1.137 slapi_value_get_berval()

- 16.1.137.1 構文

- 16.1.137.2 パラメータ

- 16.1.137.3 戻り値

- 16.1.137.4 メモリーに関する注意事項

- 16.1.137.5 関連項目

- 16.1.138 slapi_value_get_int()

- 16.1.138.1 構文

- 16.1.138.2 パラメータ

- 16.1.138.3 戻り値

- 16.1.138.4 説明

- 16.1.138.5 関連項目

- 16.1.139 slapi_value_get_length()

- 16.1.139.1 構文

- 16.1.139.2 パラメータ

- 16.1.139.3 戻り値

- 16.1.139.4 説明

- 16.1.140 slapi_value_get_long()

- 16.1.140.1 構文

- 16.1.140.2 パラメータ

- 16.1.140.3 戻り値

- 16.1.140.4 説明

- 16.1.140.5 関連項目

- 16.1.141 slapi_value_get_string()

- 16.1.141.1 構文

- 16.1.141.2 パラメータ

- 16.1.141.3 戻り値

- 16.1.141.4 メモリーに関する注意事項

- 16.1.141.5 関連項目

- 16.1.142 slapi_value_get_uint()

- 16.1.142.1 構文

- 16.1.142.2 パラメータ

- 16.1.142.3 戻り値

- 16.1.142.4 説明

- 16.1.142.5 関連項目

- 16.1.143 slapi_value_get_ulong()

- 16.1.143.1 構文

- 16.1.143.2 パラメータ

- 16.1.143.3 戻り値

- 16.1.143.4 説明

- 16.1.143.5 関連項目

- 16.1.144 slapi_value_init()

- 16.1.144.1 構文

- 16.1.144.2 パラメータ

- 16.1.144.3 戻り値

- 16.1.144.4 説明

- 16.1.144.5 メモリーに関する注意事項

- 16.1.145 slapi_value_init_berval()

- 16.1.145.1 構文

- 16.1.145.2 パラメータ

- 16.1.145.3 戻り値

- 16.1.145.4 説明

- 16.1.145.5 メモリーに関する注意事項

- 16.1.146 slapi_value_init_string()

- 16.1.146.1 構文

- 16.1.146.2 パラメータ

- 16.1.146.3 戻り値

- 16.1.146.4 説明

- 16.1.146.5 メモリーに関する注意事項

- 16.1.147 slapi_value_init_string_passin()

- 16.1.147.1 構文

- 16.1.147.2 パラメータ

- 16.1.147.3 戻り値

- 16.1.147.4 説明

- 16.1.147.5 メモリーに関する注意事項

- 16.1.147.6 関連項目

- 16.1.148 slapi_value_new()

- 16.1.148.1 構文

- 16.1.148.2 パラメータ

- 16.1.148.3 戻り値

- 16.1.148.4 説明

- 16.1.148.5 メモリーに関する注意事項

- 16.1.148.6 関連項目

- 16.1.149 slapi_value_new_berval()

- 16.1.149.1 構文

- 16.1.149.2 パラメータ

- 16.1.149.3 戻り値

- 16.1.149.4 説明

- 16.1.149.5 メモリーに関する注意事項

- 16.1.149.6 関連項目

- 16.1.150 slapi_value_new_string()

- 16.1.150.1 構文

- 16.1.150.2 パラメータ

- 16.1.150.3 戻り値

- 16.1.150.4 説明

- 16.1.150.5 メモリーに関する注意事項

- 16.1.150.6 関連項目

- 16.1.151 slapi_value_new_string_passin()

- 16.1.151.1 構文

- 16.1.151.2 パラメータ

- 16.1.151.3 戻り値

- 16.1.151.4 説明

- 16.1.151.5 メモリーに関する注意事項

- 16.1.151.6 関連項目

- 16.1.152 slapi_value_new_value()

- 16.1.152.1 構文

- 16.1.152.2 パラメータ

- 16.1.152.3 戻り値

- 16.1.152.4 説明

- 16.1.152.5 メモリーに関する注意事項

- 16.1.152.6 関連項目

- 16.1.153 slapi_value_set()

- 16.1.153.1 構文

- 16.1.153.2 パラメータ

- 16.1.153.3 戻り値

- 16.1.153.4 説明

- 16.1.153.5 メモリーに関する注意事項

- 16.1.153.6 関連項目

- 16.1.154 slapi_value_set_berval()

- 16.1.154.1 構文

- 16.1.154.2 パラメータ

- 16.1.154.3 戻り値

- 16.1.154.4 説明

- 16.1.154.5 メモリーに関する注意事項

- 16.1.154.6 関連項目

- 16.1.155 slapi_value_set_int()

- 16.1.155.1 構文

- 16.1.155.2 パラメータ

- 16.1.155.3 戻り値

- 16.1.155.4 説明

- 16.1.155.5 メモリーに関する注意事項

- 16.1.155.6 関連項目

- 16.1.156 slapi_value_set_string()

- 16.1.156.1 構文

- 16.1.156.2 パラメータ

- 16.1.156.3 戻り値

- 16.1.156.4 説明

- 16.1.156.5 メモリーに関する注意事項

- 16.1.156.6 関連項目

- 16.1.157 slapi_value_set_string_passin()

- 16.1.157.1 構文

- 16.1.157.2 パラメータ

- 16.1.157.3 戻り値

- 16.1.157.4 説明

- 16.1.157.5 メモリーに関する注意事項

- 16.1.158 slapi_value_set_value()

- 16.1.158.1 構文

- 16.1.158.2 パラメータ

- 16.1.158.3 戻り値

- 16.1.158.4 説明

- 16.1.158.5 メモリーに関する注意事項

- 16.1.158.6 関連項目

- 16.1.159 slapi_valueset_add_value_optimised()

- 16.1.159.1 構文

- 16.1.159.2 パラメータ

- 16.1.159.3 説明

- 16.1.159.4 メモリーに関する注意事項

- 16.1.159.5 関連項目

- 16.1.160 slapi_valueset_count()

- 16.1.160.1 構文

- 16.1.160.2 パラメータ

- 16.1.160.3 戻り値

- 16.1.161 slapi_valueset_done()

- 16.1.161.1 構文

- 16.1.161.2 パラメータ

- 16.1.161.3 メモリーに関する注意事項

- 16.1.162 slapi_valueset_find_const()

- 16.1.162.1 パラメータ

- 16.1.162.2 戻り値

- 16.1.162.3 説明

- 16.1.163 slapi_valueset_first_value_const()

- 16.1.163.1 構文

- 16.1.163.2 パラメータ

- 16.1.163.3 戻り値

- 16.1.163.4 説明

- 16.1.163.5 メモリーに関する注意事項

- 16.1.163.6 関連項目

- 16.1.164 slapi_valueset_free()

- 16.1.164.1 構文

- 16.1.164.2 パラメータ

- 16.1.164.3 説明

- 16.1.164.4 関連項目

- 16.1.165 slapi_valueset_init()

- 16.1.165.1 構文

- 16.1.165.2 パラメータ

- 16.1.165.3 説明

- 16.1.165.4 メモリーに関する注意事項

- 16.1.165.5 関連項目

- 16.1.166 slapi_valueset_new()

- 16.1.166.1 構文

- 16.1.166.2 パラメータ

- 16.1.166.3 戻り値

- 16.1.166.4 説明

- 16.1.166.5 メモリーに関する注意事項

- 16.1.166.6 関連項目

- 16.1.167 slapi_valueset_next_value_const()

- 16.1.167.1 構文

- 16.1.167.2 パラメータ

- 16.1.167.3 戻り値

- 16.1.167.4 説明

- 16.1.167.5 メモリーに関する注意事項

- 16.1.167.6 関連項目

- 16.1.168 slapi_valueset_set_from_smod()

- 16.1.168.1 構文

- 16.1.168.2 パラメータ

- 16.1.168.3 説明

- 16.1.168.4 メモリーに関する注意事項

- 16.1.168.5 関連項目

- 16.1.169 slapi_valueset_set_valueset_optimised()

- 16.1.169.1 構文

- 16.1.169.2 パラメータ

- 16.1.169.3 説明

- 16.1.169.4 メモリーに関する注意事項

- 16.1.169.5 関連項目

- 16.1.170 slapi_vattr_attr_free()

- 16.1.170.1 構文

- 16.1.170.2 パラメータ

- 16.1.170.3 説明

- 16.1.170.4 関連項目

- 16.1.171 slapi_vattr_attrs_free()

- 16.1.171.1 構文

- 16.1.171.2 パラメータ

- 16.1.171.3 説明

- 16.1.171.4 関連項目

- 16.1.172 slapi_vattr_filter_test()

- 16.1.172.1 構文

- 16.1.172.2 パラメータ

- 16.1.172.3 説明

- 16.1.172.4 戻り値

- 16.1.173 slapi_vattr_is_registered()

- 16.1.173.1 構文

- 16.1.173.2 パラメータ

- 16.1.173.3 説明

- 16.1.173.4 戻り値

- 16.1.174 slapi_vattr_is_virtual()

- 16.1.174.1 構文

- 16.1.174.2 パラメータ

- 16.1.174.3 戻り値

- 16.1.175 slapi_vattr_list_attrs()

- 16.1.175.1 構文

- 16.1.175.2 パラメータ

- 16.1.175.3 説明

- 16.1.175.4 戻り値

- 16.1.175.5 メモリーに関する注意事項

- 16.1.175.6 関連項目

- 16.1.176 slapi_vattr_value_compare()

- 16.1.176.1 構文

- 16.1.176.2 パラメータ

- 16.1.176.3 戻り値

- 16.1.176.4 説明

- 16.1.177 slapi_vattr_values_free()

- 16.1.177.1 構文

- 16.1.177.2 パラメータ

- 16.1.177.3 説明

- 16.1.177.4 関連項目

- 16.1.178 slapi_vattr_values_get_ex()

- 16.1.178.1 構文

- 16.1.178.2 パラメータ

- 16.1.178.3 戻り値

- 16.1.178.4 説明

- 16.1.178.5 メモリーに関する注意事項

- 16.1.178.6 関連項目

- 16.1.179 slapi_vattr_values_type_thang_get()

- 16.1.179.1 構文

- 16.1.179.2 パラメータ

- 16.1.179.3 説明

- 16.1.179.4 戻り値

- 16.1.179.5 関連項目

- 16.1.180 slapi_wait_condvar()

- 16.1.180.1 構文

- 16.1.180.2 パラメータ

- 16.1.180.3 説明

- 16.1.180.4 戻り値

- 16.1.180.5 メモリーに関する注意事項

- 16.1.180.6 関連項目

17 パラメータ・ブロック・リファレンス

- 17.1 パラメータ・カテゴリ

- 17.2 アクセス・ログ

- 17.3 追加

- 17.4 バックエンド情報

- 17.5 バインド

- 17.6 比較

- 17.7 接続情報

- 17.8 削除

- 17.9 ディレクトリ構成情報

- 17.10 拡張操作

- 17.11 内部操作

- 17.12 変更

- 17.13 操作情報

- 17.14 プラグイン登録

- 17.15 パスワード検証

- 17.16 事後操作エントリ・アクセス

- 17.17 起動と停止

- 17.18 拡張操作

- 17.19 内部事後操作

- 17.20 内部事前操作

- 17.21 エントリの格納と取得

- 17.22 一致ルール

- 17.23 事後操作

- 17.24 事前操作

- 17.25 一方向のパスワード記憶と可逆のパスワード記憶

- 17.26 名前変更(RDN変更)

- 17.27 結果

- 17.28 検索

A NameFinderアプリケーション

- A.1 前提条件となるソフトウェア

- A.2 NameFinderのデプロイ

- A.2.1 アプリケーション・サーバーでデプロイするには

- A.2.2 Webサーバーでデプロイするには

- A.3 ディレクトリにアクセスするNameFinderの構成

- A.3.1 アプリケーション・サーバーを使用する場合のアクセスを構成するには

- A.3.2 Webサーバーを使用する場合のアクセスを構成するには

- A.4 NameFinderのカスタマイズ

- A.4.1 接続プロパティ

- A.4.2 検索属性プロパティ

- A.4.3 その他のプロパティ

索引

例一覧

- 3-1 Hello, World!プラグイン(hello.c)

- 3-2 64ビット: Solarisサンプル・プラグイン・ライブラリのMakefile

- 3-3 32ビット: Solarisサンプル・プラグイン・ライブラリのMakefile

- 3-4 引数を使用するプラグイン(testextendedop.c)

- 3-5 致命的エラー・メッセージのロギング

- 3-6 警告メッセージのロギング

- 4-1 新規エントリの作成(entries.c)

- 4-2 エントリを表現するLDIF構文

- 4-3 LDIF文字列との変換(entries.c)

- 4-4 属性値に対する処理の繰返し(testpreop.c)

- 4-5 文字列属性値の追加(entries.c)

- 4-6 属性値のマージ(entries.c)

- 4-7 スキーマ準拠のチェック(entries.c)

- 4-8 エントリの親およびサフィックスの決定(dns.c)

- 4-9 サフィックスがローカルかどうかの判断(dns.c)

- 4-10 DNの正規化(dns.c)

- 5-1 事後操作関数の登録(testpostop.c)

- 5-2 認証方式のロギング(testpreop.c)

- 5-3 検索を要求するクライアントのDNの取得(testbind.c)

- 5-4 検索のベースおよび範囲のロギング(testpreop.c)

- 5-5 フィルタ情報の取得(testpreop.c)

- 5-6 検索フィルタのブレークダウン

- 5-7 プラグインの比較関数(testpreop.c)

- 5-8 属性値の取得

- 5-9 比較の実行

- 5-10 LDIFエントリ

- 5-11 エントリの説明の前へのADDの追加(testpreop.c)

- 5-12 エントリの検索

- 5-13 追加されたエントリの追跡(testpostop.c)

- 5-14 changelog.txtエントリの例

- 5-15 変更されたエントリの追跡(testpostop.c)

- 5-16 ディレクトリでのエントリの確認

- 5-17 メール・アドレスの変更

- 5-18 変更後のchangelog.txtの例

- 5-19 名前が変更されたエントリの追跡(testpostop.c)

- 5-20 エントリの名前の変更

- 5-21 名前を変更された後のchangelog.txtエントリの例

- 5-22 エントリの削除の追跡(testpostop.c)

- 5-23 削除後のchangelog.txtの例

- 5-24 クライアントに対するロギングと応答(testpreop.c)

- 6-1 事前操作バインド関数(testbind.c)

- 6-2 カスタムSASLプラグインの登録(testsaslbind.c)

- 6-3 my_sasl_mechanismバインドの処理(testsaslbind.c)

- 6-4 my_sasl_mechanismを使用したクライアント(clients/saslclient.c)

- 7-1 内部追加操作(internal.c)

- 7-2 内部変更操作(internal.c)

- 7-3 内部名前変更または移動操作(internal.c)

- 7-4 検索コールバック(internal.c)

- 7-5 内部検索操作(internal.c)

- 8-1 エントリ・フェッチのスクランブラ(testentry.c)

- 8-2 エントリ・フェッチのアンスクランブラ(testentry.c)

- 8-3 エントリ・ストア・プラグインとエントリ・フェッチ・プラグインの登録(testentry.c)

- 8-4 エントリのLDIF表現

- 8-5 スクランブル前のデータベース・ファイルの属性値

- 8-6 スクランブル後のデータベース・ファイルの属性値

- 8-7 スクランブル解除された検索結果

- 9-1 プラグイン関数とOIDの登録(testextendedop.c)

- 9-2 拡張操作を要求するクライアント(clients/reqextop.c)

- 10-1 一致ルール・ファクトリ関数の登録(matchingrule.c)

- 10-2 一致ルールの登録(matchingrule.c)

- 10-3 フィルタ一致関数(matchingrule.c)

- 10-4 フィルタ索引関数(matchingrule.c)

- 10-5 フィルタ・ファクトリ関数(matchingrule.c)

- 10-6 フィルタ・オブジェクトおよびデストラクタ(matchingrule.c)

- 10-7 インデクサ関数(matchingrule.c)

- 10-8 インデクサ・ファクトリ関数(matchingrule.c)

- 11-1 userPassword値のエンコード(testpwdstore.c)

- 11-2 userPassword値の比較(testpwdstore.c)

- 11-3 パスワード記憶スキーム・プラグインの登録(testpwdstore.c)

- 11-4 パスワード記憶スキームのテスト

- 11-5 新しいパスワードを使用したバインド

- 14-1 エントリに対する変更の準備

- 14-2 さらなる変更の追加

- 14-3 内部操作で使用するプラグイン識別子の設定

- 15-1 タイムアウトの設定

- 15-2 エラーのロギング

- 15-3 情報メッセージのロギング

- 15-4 警告のロギング

図一覧

- 1-1 クライアント・リクエスト処理

- 1-2 プラグイン・エントリ・ポイント

- 1-3 共有ライブラリ内の複数のプラグイン

- 10-1 Directory Serverによる拡張可能な一致検索の実行

- 10-2 フィルタ一致関数のコンテキスト

- 10-3 フィルタ・ファクトリ関数のコンテキスト

- 10-4 Directory Serverによる一致ルールを使用した索引のメンテナンス

- 10-5 インデクサ関数のコンテキスト

- 10-6 インデクサ・ファクトリ関数のコンテキスト

- 10-7 一致ルール・プラグインでの不明なOIDの検索

表一覧

- 1-1 サーバー・プラグイン・タイプ

- 1-2 タイプ別のプラグイン使用例

- 2-1 属性値を処理するための代替関数

- 3-1 プラグイン構成設定

- 10-1 一致ルール・プラグインに定義された関数

- 14-1 データ構造体に対するクイック・リファレンス

- 14-2 コールバックに対するクイック・リファレンス

- 14-3 bervalのフィールド

- 14-4 LDAPControlのフィールド

- 14-5 LDAPModのフィールド

- 14-6 mrFilterMatchFnのパラメータ

- 14-7 plugin_referral_entry_callbackのパラメータ

- 14-8 plugin_result_callbackのパラメータ

- 14-9 plugin_search_entry_callbackのパラメータ

- 14-10 roles_get_scope_fn_typeのパラメータ

- 14-11 send_ldap_referral_fn_ptr_tのパラメータ

- 14-12 send_ldap_result_fn_ptr_tのパラメータ

- 14-13 send_ldap_search_entry_fn_ptr_tのパラメータ

- 14-14 slapi_compute_callback_tのパラメータ

- 14-15 slapi_compute_output_tのパラメータ

- 14-16 slapi_extension_constructor_fnptrのパラメータ

- 14-17 slapi_extension_destructor_fnptrのパラメータ

- 14-18 Slapi_PluginDescのフィールド

- 14-19 slapi_plugin_init_fnptrのパラメータ

- 15-1 パラメータ・ブロック処理の関数

- 15-2 メモリー処理の関数

- 15-3 アクセス制御処理の関数

- 15-4 属性処理の関数

- 15-5 基本エンコーディング・ルール値処理の関数

- 15-6 コントロール処理の関数

- 15-7 識別名文字列処理の関数

- 15-8 エントリ処理の関数

- 15-9 拡張操作処理の関数

- 15-10 フィルタ処理の関数

- 15-11 内部操作処理の関数

- 15-12 一致ルール処理の関数

- 15-13 変更処理の関数

- 15-14 操作処理の関数

- 15-15 パスワード処理の関数

- 15-16 ロール処理の関数

- 15-17 SASLメカニズム処理の関数

- 15-18 Slapi_Backend構造体処理の関数

- 15-19 Slapi_DN構造体処理の関数

- 15-20 Slapi_RDN構造体処理の関数

- 15-21 Slapi_Value構造体処理の関数

- 15-22 Slapi_ValueSet構造体処理の関数

- 15-23 UTF-8文字列処理の関数

- 15-24 ログ・メッセージ書込み関数

- 15-25 仮想属性処理の関数

- 15-26 エントリ、参照および結果をクライアントに送信する関数

- 15-27 プラグイン登録の関数

- 17-1 Slapi_PBlockのパラメータ・カテゴリ

- 17-2 アクセス・ログのパラメータ

- 17-3 追加関数のパラメータ

- 17-4 バックエンド情報のパラメータ

- 17-5 バインド関数のパラメータ

- 17-6 比較関数のパラメータ

- 17-7 接続情報のパラメータ

- 17-8 削除関数のパラメータ

- 17-9 ディレクトリ構成情報のパラメータ

- 17-10 拡張操作のパラメータ

- 17-11 内部操作のパラメータ

- 17-12 変更関数のパラメータ

- 17-13 操作情報のパラメータ

- 17-14 プラグイン情報のパラメータ

- 17-15 パスワード検証のパラメータ

- 17-16 事後操作エントリ・アクセスのパラメータ

- 17-17 汎用関数の登録パラメータ

- 17-18 拡張操作の登録パラメータ

- 17-19 内部事後操作の登録パラメータ

- 17-20 内部事前操作の登録パラメータ

- 17-21 エントリ・ストア/フェッチ関数の登録パラメータ

- 17-22 一致ルール関数および引数の登録パラメータ

- 17-23 事後操作関数の登録パラメータ

- 17-24 事前操作関数の登録パラメータ

- 17-25 パスワード記憶関数の登録パラメータ

- 17-26 名前変更(RDN変更)関数のパラメータ

- 17-27 結果のパラメータ

- 17-28 検索関数のパラメータ

Oracle® Fusion Middleware

Oracle Directory Server Enterprise Edition開発者ガイド

11g リリース1 (11.1.1.7.0)

B72440-01(原本部品番号:E28970-01)

2013年1月

Directory Server Enterprise Editionソフトウェアに付属するプラグインAPIの使用方法を開発者に示します。

Oracle Directory Server Enterprise Edition開発者ガイド 11g リリース1 (11.1.1.7.0)

B72440-01

Copyright © 2001, 2013, Oracle and/or its affiliates.All rights reserved.

原本著者:  Gina Cariaga

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

はじめに

『Oracle Directory Server Enterprise Edition開発者ガイド』では、Oracle Directory Server Enterprise Editionの一部として提供されるAPIを使用してディレクトリ・プラグインを開発する方法について説明します。

対象読者

このドキュメントは、Directory ServerおよびDirectory Proxy Serverの機能を拡張する開発者向けです。

このドキュメントを使用する前に、次の製品、プログラミング言語およびテクノロジを理解する必要があります。

- Directory Server機能およびC言語(Directory Serverプラグインを開発する予定の場合)

- DSML v2などのLDAPおよび関連プロトコルの仕様

- インターネットおよびWorld Wide Webテクノロジ

このドキュメントをお読みになる前に

このドキュメントでは、ソフトウェアのインストールについては説明していません。インストールについては、『Oracle Directory Server Enterprise Editionインストレーション・ガイド』を参照してください。

古いバージョンのDirectory ServerまたはDirectory Proxy Serverから移行する場合は、サーバーの移行方法について、『Oracle Directory Server Enterprise Editionアップグレードおよび移行ガイド』を参照してください。このバージョンの新機能をよく知らない場合は、新機能の概要について、『Oracle Directory Server Enterprise Edition評価ガイド』を参照すると役立ちます。

このドキュメントの構成

第I部「プラグインAPIガイド」: Directory Serverプラグインの開発方法について説明します。

第II部「プラグインAPIリファレンス」: APIに関する完全なリファレンスを提供します。

このドキュメントで使用する例

一貫性を保つため、このドキュメント全体で同じサンプル・データを使用します。これらの値をご使用のシステムに適した値に置き換えてください。

変数

例で使用する値

サフィックス(SUFFIX_DN)

dc=example,dc=com

インスタンスのパス(INSTANCE_PATH)

Directory Serverの場合: /local/dsInst/

Directory Proxy Serverの場合: /local/dps/

ホスト名(HOST)

host1、host2、host3

ポート(PORT)

LDAP:rootのデフォルト: 389。root以外のデフォルト: 1389

SSLのデフォルト: rootのデフォルト: 636。root以外のデフォルト: 1636

Oracle Directory Server Enterprise Editionドキュメント・セット

このドキュメント・セットでは、Oracle Directory Server Enterprise Editionを使用してディレクトリ・サービスを評価、設計、デプロイ、および管理する方法について説明します。また、Directory Server Enterprise Edition用クライアント・アプリケーションの開発方法についても説明します。Oracle Fusion Middleware Directory Server Enterprise Editionのドキュメント・ライブラリは、http://docs.oracle.com/cd/E29127_01/index.htmで使用できます。

次の表に、Directory Server Enterprise Editionのドキュメント・セットを構成するドキュメントのリストを示します。

ドキュメント・タイトル

内容

『Oracle Directory Server Enterprise Editionリリース・ノート』

既知の問題点を含め、Directory Server Enterprise Editionについての最新情報を提供しています。

『Oracle Directory Server Enterprise Edition評価ガイド』

このリリースの重要な機能を紹介します。これらの機能の仕組みや提供される利点を、単独システムに実装可能なデプロイメントのコンテキストに沿って示しています。

『Oracle Directory Server Enterprise Editionデプロイメント・プランニング・ガイド』

Directory Server Enterprise Editionをベースとする、可用性と拡張性に優れたディレクトリ・サービスを計画および設計する方法について説明しています。デプロイメントの計画および設計の基本的な概念および原則を提示します。ソリューションのライフ・サイクルについて検討し、Directory Server Enterprise Editionベースのソリューションを計画するために使用する概略レベルのサンプルおよび戦略を提供します。

『Oracle Directory Server Enterprise Editionインストレーション・ガイド』

Directory Server Enterprise Editionソフトウェアのインストール方法について説明しています。インストール済ソフトウェアの構成方法および構成済ソフトウェアの検証方法を示します。

『Oracle Directory Server Enterprise Editionアップグレードおよび移行ガイド』

バージョン11.1.1.3, 7.xおよび6のインストールをアップグレードする手順およびバージョン5.2インストールを移行する手順を示しています。

『Oracle Directory Server Enterprise Edition管理者ガイド』

Directory Server Enterprise Editionをコマンドラインから管理する手順を示しています。

Directory Service Control Center(DSCC)を使用してDirectory Server Enterprise Editionを管理する際のヒントおよび手順については、DSCCのオンライン・ヘルプを参照してください。

『Oracle Directory Server Enterprise Editionリファレンス』

Directory Server Enterprise Editionの技術および概念の基礎を紹介します。コンポーネント、アーキテクチャ、プロセス、および機能について説明しています。

『Oracle Directory Server Enterprise Editionマニュアル・ページ・リファレンス』

Directory Server Enterprise Editionを通じて利用可能なコマンドライン・ツール、スキーマ・オブジェクトおよびその他の公開インタフェースについて説明しています。このドキュメントの個別の項を、オンライン・マニュアル・ページとしてインストールできます。

『Oracle Directory Server Enterprise Edition開発者ガイド』

Directory Server Enterprise Editionの一部として提供されるツールおよびAPIを利用して、ディレクトリ・クライアント・アプリケーションを開発する方法を示しています。

『Oracle Directory Server Enterprise Editionトラブルシューティング・ガイド』

様々なツールを使用して問題の範囲を特定し、データを収集し、問題部分のトラブルシューティングを行う手順について説明しています。

『dentity Synchronization for Windows 6.0リリース・ノート』

Identity Synchronization for Windows 6.0 SP1のインストール、移行およびアップグレードに関する最新情報について説明しています。

『Identity Synchronization for Windows 6.0デプロイメント・プランニング・ガイド』

Identity Synchronization for Windowsの計画とデプロイメントに関する一般的なガイドラインやベスト・プラクティスを示しています。

『Identity Synchronization for Windows 6.0インストールおよび構成ガイド』

Identity Synchronization for Windowsをインストールおよび構成する方法を説明しています。

Directory Server Enterprise Editionの概要については、次の図に一覧表示されている次のドキュメントを記載順に確認してください。

docmap.pngの説明

関連ドキュメント

SLAMD分散負荷生成エンジンは、ネットワークベースのアプリケーションのパフォーマンスについて負荷テストを実行し、解析するために設計されたJavaアプリケーションです。このアプリケーションは、LDAPディレクトリ・サーバーのパフォーマンスについてベンチマークを実行し、分析するためにSun Microsystems, Inc.によって開発されました。SLAMDは、OSI認定オープン・ソース・ライセンスであるSun Public Licenseに基づいて、オープン・ソース・アプリケーションとして使用できます。SLAMDについては、http://www.slamd.com/を参照してください。SLAMDは、java.netプロジェクトでも提供されています。https://slamd.dev.java.net/を参照してください。

Java Naming and Directory Interface(JNDI)は、LDAPやDSML v2によるJavaアプリケーションからDirectory Serverへのアクセスに対応しています。JNDIの詳細は、http://www.oracle.com/technetwork/java/jndi/index.htmlを参照してください。JNDI Tutorialには、詳しい説明とJNDIの使用例が記載されています。このチュートリアルは、http://download.oracle.com/javase/jndi/tutorial/で参照できます。

Identity Synchronization for WindowsはMessage Queueを制限されたライセンスで使用します。Message Queueのドキュメントは、http://www.oracle.com/technetwork/indexes/documentation/index.htmlから入手できます。

Identity Synchronization for WindowsはMicrosoft Windowsのパスワード・ポリシーを扱います。

- Windows 2003のパスワード・ポリシーに関する情報は、オンラインのMicrosoftドキュメント(http://technet.microsoft.com/en-us/windowsserver/default.aspx)で入手できます。

- Microsoft証明書サービスのエンタープライズ・ルート認証局に関する情報は、オンラインのMicrosoftサポート・ドキュメント(http://support.microsoft.com/default.aspx?scid=kb;en-us;247078)で入手できます。

- MicrosoftシステムでのLDAP over SSLの設定に関する情報は、オンラインのMicrosoftサポート・ドキュメント(http://support.microsoft.com/default.aspx?scid=kb;en-us;321051)で入手できます。

再配布可能ファイル

Directory Server Enterprise Editionのファイルは、再頒布できません。

デフォルト・パスとコマンドの場所

この項では、このドキュメントで使用するデフォルトのパスについて説明し、様々なオペレーティング・システムおよびデプロイメント・タイプでのコマンドの場所を示します。

デフォルト・パス

次の表では、このドキュメントで使用するデフォルトのパスについて説明します。インストールされるファイルの詳細な説明については、『Oracle Directory Server Enterprise Editionリファレンス』の第1章「Directory Server Enterprise Editionのファイル・リファレンス」を参照してください。

プレースホルダ

説明

デフォルト値

install-path

Directory Server Enterprise Editionソフトウェアのベース・インストール・ディレクトリを表します。

unzipを使用してzipディストリビューションからインストールする場合、install-pathは、current-directory/dsee7になります。

instance-path

Directory ServerまたはDirectory Proxy Serverのインスタンスのフルパスを表します。

このドキュメントでは、Directory Serverには/local/dsInst/、Directory Proxy Serverには/local/dps/を使用します。

デフォルト・パスはありません。インスタンス・パスは、常にローカル・ファイル・システム上に存在するようにします。

Solarisシステムでは、/varディレクトリをお薦めします。

serverroot

Identity Synchronization for Windowsのインストール先の親ディレクトリを表します。

インストールごとに異なります。Directory ServerおよびDirectory Proxy Serverでは、serverrootの概念が存在しなくなったことに注意してください。

isw-hostname

Identity Synchronization for Windowsインスタンスのディレクトリを表します。

インストールごとに異なります。

/path/to/cert8.db

Identity Synchronization for Windowsにおけるクライアントの証明書データベースのデフォルト・パスおよびファイル名を表します。

current-working-dir/cert8.db

serverroot/isw-hostname/linebreaklogs/

システム・マネージャ、各コネクタ、およびセントラル・ロガーのログ・ファイルをIdentity Synchronization for Windowsがローカルに保存する場所のデフォルト・パスを表します。

インストールごとに異なります。

serverroot/isw-hostname/linebreaklogs/central/

Identity Synchronization for Windowsセントラル・ログ・ファイルのデフォルト・パスを表します。

インストールごとに異なります。

コマンドの場所

この項の次の表は、Directory Server Enterprise Editionのドキュメントで使用されるコマンドの場所を示しています。各コマンドの詳細は、関連するマニュアル・ページを参照してください。『Oracle Directory Server Enterprise Editionリファレンス』の「Directory Server Enterprise Editionのソフトウェア・レイアウト」も参照してください。

コマンド

Zipディストリビューション

certutil

install-path/bin/certutil

dpadm

install-path/bin/dpadm

dpconf

install-path/bin/dpconf

dsadm

install-path/bin/dsadm

dsccagent

install-path/bin/agent

dsccmon

install-path/bin/dsccmon

dsccreg

install-path/bin/dsccreg

dsccsetup

install-path/bin/dsccsetup

dsconf

install-path/bin/dsconf

dsmig

install-path/bin/dsmig

dsutil

install-path/bin/dsutil

entrycmp

install-path/bin/entrycmp

fildif

install-path/bin/fildif

idsktune

解凍したzipディストリビューションのroot

insync

install-path/bin/insync

ldapmodify

install-path/dsrk/bin/ldapmodify

ldapsearch

install-path/dsrk/bin/ldapsearch

repldisc

install-path/bin/repldisc

表記規則

次の表に、このドキュメントで使用する表記規則を示します。

書体

意味

例

AaBbCc123

コマンド名、ファイル名、ディレクトリ名、画面上のコンピュータ出力を示します。

.loginファイルを編集します。

ls aを使用してすべてのファイルをリストします。

machine_name% you have mail.

AaBbCc123

ユーザーが入力する文字を、画面上のコンピュータ出力と区別して示します。

machine_name% su

Password:

aabbcc123

プレースホルダ: 実際の名前または値で置き換えます。

ファイルを削除するコマンドはrm filenameです。

AaBbCc123

書名、新規用語および強調する用語を示します。

『ユーザーズ・ガイド』の第6章を参照してください。

キャッシュとは、ローカルに格納されるコピーです。

このファイルは保存しないでください。

注意: 強調する一部の項目は、オンラインで太字で表示されます。

コマンド例でのシェル・プロンプト

次の表に、Oracle Solaris OSに含まれるシェルのデフォルトのUNIXシステム・プロンプトとスーパーユーザー・プロンプトを示します。コマンド例に表示されるデフォルトのシステム・プロンプトは、Oracle Solarisのリリースによって異なることに注意してください。

シェル

プロンプト

Bashシェル、KornシェルおよびBourneシェル

$

Bashシェル、KornシェルおよびBourneシェル(スーパーユーザーの場合)

#

Cシェル

machine_name%

Cシェル(スーパーユーザーの場合)

machine_name#

記号の表記規則

次の表では、このドキュメントで使用される記号について説明します。

記号

説明

例

意味

[ ]

省略可能な引数やコマンドオプションが含まれます。

ls [-l]

-lオプションは省略可能です。

{ | }

必須のコマンドオプションの選択肢を囲みます。

-d {y|n}

-dオプションでは、yかnのどちらかの引数を使用する必要があります。

${ }

編集参照を示します。

${com.sun.javaRoot}

com.sun.javaRoot変数の値を参照します。

-

同時に押すキーを連結します。

Control-A

[Ctrl]キーと[A]キーを同時に押します。

+

連続して押すキーを連結します。

Ctrl+A+N

[Ctrl]キーを押し、放してから以後のキーを続けて押します。

>

グラフィカル・ユーザー・インタフェースで選択するメニュー項目を示します。

「ファイル」→「新規」→「テンプレート」

「ファイル」メニューから「新規」を選択します。「新規」サブメニューから「テンプレート」を選択します。

ドキュメント、サポートおよびトレーニング

次のWebサイトでは、追加の情報が提供されています。

- ドキュメント(http://www.oracle.com/technetwork/indexes/documentation/index.html)

- サポート(http://www.oracle.com/us/support/systems/index.html)

- トレーニング(http://education.oracle.com)

Oracleソフトウェア・リソース

Oracle Technology Network (http://www.oracle.com/technetwork/index.html)は、Oracleソフトウェアに関連する特定範囲のリソースを提供しています。

- 技術上の問題と解決策については、ODSEEディスカッション・フォーラム(http://forums.oracle.com/forums/forum.jspa?forumID=877)およびDirectory Servicesブログ(http://blogs.oracle.com/directoryservices/)を参照してください。

- 最新アナウンスメントについては、Directory Servicesブログ(http://blogs.oracle.com/directoryservices/)を参照してください。

- ODSEE 11gのサンプル・ファイル(http://www.oracle.com/technetwork/middleware/id-mgmt/learnmore/odsee11113-examples-350399.zip)をダウンロードします。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWeb サイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

第I部

プラグインAPIガイド

ここでは、Directory Serverプラグインの開発方法について説明します。また、Directory Server Enterprise Edition 11gリリース1 (11.1.1.7.0)で使用するために既存のプラグインをアップグレードできるように、最終リリースからの変更点についても説明します。

- 第1章「プラグインの作成を開始する前に」: Directory Serverプラグイン、およびどのような場合にプラグインを開発するかについて説明します。

- 第2章「Directory Server 5.2以上のプラグインAPIへの変更」: Directory Server 5.2リリース以上のプラグインAPIへの変更について説明します。

- 第3章「Directory Serverプラグインのスタート・ガイド」: プラグインAPIの使用のスタート・ガイドです。

- 第4章「プラグインを使用したエントリの処理」: ディレクトリ・エントリを処理するプラグイン・コードの作成方法について説明します。

- 第5章「プラグインを使用したクライアント・リクエスト処理の拡張」: クライアント・リクエストを処理する前後にサーバーがコールするプラグイン・コードの作成方法について説明します。

- 第6章「プラグインを使用した認証の処理」: 認証を処理する方法を変更するプラグイン・コードの作成方法について説明します。

- 第7章「プラグインを使用した内部操作の実行」: 内部ディレクトリ・リクエストを実行するプラグイン・コードの作成方法について説明します。

- 第8章「エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインの作成」: エントリがデータベースに格納される前後にコールされるプラグイン・コードの作成方法について説明します。

- 第9章「拡張操作プラグインの作成」: LDAP v3の拡張操作を処理するプラグイン・コードの作成方法について説明します。

- 第10章「一致ルール・プラグインの作成」: カスタム一致ルールのプラグイン・コードの作成方法について説明します。

- 第11章「パスワード記憶スキーム・プラグインの作成」: パスワードの格納方法を変更するプラグイン・コードの作成方法について説明します。

- 第12章「パスワードの品質チェック・プラグインの作成」: パスワード品質のチェックに使用されるプラグイン・コードの作成方法について説明します。

- 第13章「算出属性プラグインの作成」: クライアント・アプリケーションによって値が要求されるときに属性値を計算するプラグイン・コードの作成方法について説明します。

1 プラグインの作成を開始する前に

この章は、サーバー・プラグインを実装するかどうかを決定する際に役立ちます。また、プラグインを実装することを選択した場合に、次に実行することについても説明します。

この章の内容は、次のとおりです。

- サーバー・プラグインを実装する状況

- プラグインとサーバーとの相互作用

- 使用例

- 次に実行すること

1.1 サーバー・プラグインを実装する状況

Directory Server固有の製品機能の多くは、サーバー・プラグインに依存しています。プラグインとは、特定のディレクトリ・サービス操作の主要部分を実行するためにサーバーに登録される、関数のライブラリです。

Directory ServerのプラグインAPIでは、製品の現在のリリースには含まれていないサーバー機能を追加するインタフェースが提供されます。必要な機能が実装されていないため、サーバー機能を追加する必要がある場合、プラグインAPIによってその拡張が可能になることがあります。製品の標準機能をかわりに使用できる場合は、プラグインは作成しないでください。

1.1.1 プラグインのメンテナンス

独自のプラグインを作成すると、ソフトウェア・ソリューションが特定の製品リリースに関連付けられることに注意してください。プラグインAPIは、新機能に対応するために、リリースごとに進化することがあります。新機能を活用するためにアップグレードすることを選択すると、Directory Serverプラグインを更新することが必要になる場合があります。

クラス・ライブラリを含むヘッダー・ファイルは、ソフトウェアのAPIとインタフェースするプログラムを作成して配布する目的でのみ使用できます。また、ライブラリを使用して、ソフトウェアのプラグインAPIとインタフェースする、プログラムのプラグインを作成して配布することもできます。ヘッダー・ファイルまたはライブラリを変更することはできません。オラクル社は、ソフトウェアの将来のリリースにおけるプラグインAPIの下位互換性について、直接的にも暗黙的にも保証しません。また、オラクル社は、派生するすべてのプラグインについてアップグレードまたはエラー修正をサポートしたり提供する義務を負いません。

テクニカル・サポートの担当者は、テクニカル・サポートを提供する場合に、カスタム・プラグインをオフにした後、問題を再現することを要求します。

1.2 プラグインとサーバーとの相互作用

Directory Serverインスタンスへのすべてのクライアント・リクエストは、特定の処理順序で処理されます。正確な順序は、クライアントによって要求された操作によって異なります。ただし、全体的な順序は類似しています。プラグインでのリクエストの処理方法は、クライアントでどのようにリクエストをエンコードするかには依存しません。つまり、Directory Serverとの通信に使用されるクライアント・アクセス・プロトコルに関係なく、クライアント・リクエスト・データは、プラグインによって、基本的に同じように認識されます。

一般的に、クライアント・リクエスト処理は次のように進行します。最初に、Directory Serverフロントエンドによってリクエストがデコードされます。コア・サーバーでは、デコードされたリクエストを処理し、エントリの検索や格納などに必要なバックエンド関数をコールします。Directory Serverバックエンドの主な機能は、エントリの取得および格納です。ただし、中止されないかぎり、クライアント・リクエストには、バックエンドで開始されたレスポンスが発生します。レスポンスはフロントエンドで書式設定され、クライアントに送信されます。

次の図は、クライアント・リクエスト・データがどのようにDirectory Server内を移動するかを示しています。

図1-1 クライアント・リクエスト処理

「図1-1 クライアント・リクエスト処理」の説明

一般的に、プラグインでは、クライアント・リクエストを処理する特定のステップでDirectory Serverによってコールされる関数を登録します。プラグインには、事前操作や事後操作などの特定のタイプがあります。事前操作プラグインでは、サーバーで処理される前に受信リクエストを処理する関数を登録します。たとえば、事前操作プラグインで、コア・サーバーがクライアント・バインドの処理を開始する前にコールされるバインド前関数を登録できます。クライアントがDirectory Serverに対して認証する方法をバインド前関数で再定義できるため、外部データベースに対する認証が可能となります。事後操作プラグインでは、リクエストが処理された後にコールされる関数を登録します。たとえば、事後操作プラグインで、変更リクエストに関する情報をログに記録するためにコールされる変更後関数を登録できます。「使用例」では、他のプラグイン・タイプの例を示しています。

2つの内部操作プラグイン・タイプが、クライアント・リクエスト処理を実行するために関数がコールされるというルールの例外となります。内部操作プラグインでは、Directory Serverの内部操作に対してトリガーされる関数を実装します。内部操作は、クライアント・リクエストではなく、Directory ServerまたはDirectory Serverによってコールされた別のプラグインが開始します。内部操作データを操作する場合には、注意が必要です。

次の表に、記載されているプラグイン関数タイプがDirectory Serverによりコールされる場合についてまとめます。

表1-1 サーバー・プラグイン・タイプ

プラグイン・タイプ

いつコールされるか

エントリ・ストア/フェッチ

ディレクトリ・エントリをディレクトリ・データベースに書き込む直前、またはディレクトリ・データベースから読み取った直後

タイプ: ldbmentryfetchstore

拡張操作

LDAP v3拡張操作を処理する場合

タイプ: extendedop

内部的な事後操作

Directory Serverによって開始された操作を完了した後(この操作に対応するクライアント・リクエストが存在しない場合)

タイプ: internalpostoperation

内部的な事前操作

Directory Serverによって開始された操作を実行する前(この操作に対応するクライアント・リクエストが存在しない場合)

タイプ: internalpreoperation

一致ルール

検索操作のみを対象として、拡張一致フィルタに基づいて検索結果候補を検索する場合

タイプ: matchingrule

オブジェクト

登録されている関数に応じて(このタイプは汎用的で、他のタイプを登録する場合に使用されます)

タイプ: object

パスワード・チェック

追加または変更するuserPassword値について厳格なチェックを実行する場合

タイプ: passwordcheck

パスワード記憶スキーム

複合化できないエンコードされたuserPassword値を格納する場合

タイプ: pwdstoragescheme

事後操作

クライアントによって要求された操作を完了した後

タイプ: postoperation

事前操作

クライアントによって要求された操作を実行する前

タイプ: preoperation

次の図は、Directory Serverにより、表1-1で説明されているいくつかのプラグイン・タイプが、処理順序内のどこでコールされるかを示しています。

図1-2 プラグイン・エントリ・ポイント

「図1-2 プラグイン・エントリ・ポイント」の説明

事後操作のリターン・コードが、Directory Serverの処理に影響を及ぼすことはありません。

プラグイン・タイプおよびプラグイン構成情報は、通常、構成エントリで静的に指定されます。

単一の共有ライブラリに複数のプラグインを含めることができますが、静的に登録されるプラグインごとに、サーバー固有の構成エントリを個別に指定する必要があります。つまり、事前操作の関数と事後操作の関数が必要である場合は、通常、2つのプラグインを作成します。その後、各プラグインをDirectory Serverに登録します。両方のプラグインを同じ共有ライブラリに含めることができます。両方のプラグインで、同じ操作や接続を通してプライベート・データの通信を行い、提供されたインタフェースを使用できます。また、他のプラグインを初期化するプラグインを1つ作成することもできます(デプロイメントにこのような構成が必要な場合)。

製品に付属のサンプル・プラグインは、すべてのプラグインを1つのライブラリに構築した後、プラグインを個別に登録するという原則に従っています。

次の図は、同じライブラリに存在する複数のプラグインを示しています。

図1-3 共有ライブラリ内の複数のプラグイン

「図1-3 共有ライブラリ内の複数のプラグイン」の説明

各プラグインには、起動時にDirectory Serverによってコールされる登録ルーチンが含まれています。登録ルーチンにより、各プラグイン関数がDirectory Serverに明示的に登録されます。

注意:

プラグイン・ライブラリはDirectory Serverに関連付けられています。プラグインは、Directory Serverと同じメモリー・アドレス領域で実行されます。プラグインは、Directory Serverで使用されるデータ構造体に直接アクセスできます。結果として、プラグインによって、Directory Serverで使用されるメモリーが破損する可能性があります。このようなメモリーの破損が原因で、データベースの破損が発生することがあります。このような危険が伴うため、本番のDirectory Serverでは、テストされていないプラグインを使用しないでください。

また、Directory Serverは、複数のスレッド・プロセスとして実行されます。プラグイン用に作成するコードは、再入可能である必要があります。複数のスレッドで、エントリ・ポイントを同時にコールできます。これらのスレッドはいつでも再スケジュールできます。

1.3 使用例

ジョブに適したプラグイン・タイプは、理論というより、経験に基づいて選択します。次の表は、記載されているプラグイン・タイプの使用例を示しています。

表1-2 タイプ別のプラグイン使用例

プラグイン・タイプ

使用例

エントリ・ストア/フェッチ

プラグイン・エントリ全体のエンコードおよびデコード

エントリがディスクに書き込まれるときの、各エントリの監査またはロギング

拡張操作

LDAP v3で使用できないデジタル署名などのクライアント・サービスのリクエストおよびレスポンスでの追加

内部的な事後操作

別のプラグインによって開始された内部操作の結果の監査

内部的な事前操作

別のプラグインによって開始される内部的な割込み操作

一致ルール

ディレクトリ検索での、よく似た一致を検出する拡張機能の提供

オブジェクト

他のプラグインのグループをDirectory Serverに登録するプラグインの開発

パスワード・チェック

パスワード構文の企業ポリシーに対する新規パスワードでの確認の強制

パスワード記憶スキーム

標準製品によってサポートされるいずれかのアルゴリズムにかわる、パスワード暗号化でのカスタム・アルゴリズムの使用

事後操作

特定操作の後に送信されるアラートおよびアラームの関連付け

特定のエントリについての変更の監査

操作後のクリーンアップの実行

事前操作

ディレクトリ外部でのカスタム認証方式の処理

エントリを追加または変更する前の、属性値の構文チェックの強制

リクエストへの属性の追加またはリクエストからの属性の削除

従来のアプリケーションからのリクエストを変換するための、クライアント・リクエスト・コンテンツの事前処理

リクエストを処理する前の、クライアント変更リクエストのコンテンツの承認または却下

使用例のリストは包括的ではありませんが、かわりに、ソリューションの検討に役立ちます。

1.4 次に実行すること

このドキュメントの残りの部分では、主に、特定のプラグイン・タイプの具体例を示します。

注意:

プラグインの開発は、本番サーバー上ではなく、プラグイン開発専用のテスト・サーバー上で行ってください。

1.4.1 開発環境の準備

Directory Serverソフトウェアがインストール済でない場合があります。プラグインの開発中に使用するC言語用の開発ソフトウェアがインストール済でない場合があります。ここで、ソフトウェアをインストールしてください。開発ツールおよび機能するDirectory Serverがないと、ここで説明する例を使用できません。

1.4.2 プラグイン開発の概要

今回のリリースでプラグインをまだ作成したことがない場合は、第3章「Directory Serverプラグインのスタート・ガイド」を参照してください。この章は、単純なプラグインを構築して、Directory Serverに登録する場合に役立ちます。

1.4.3 既存のプラグインのアップグレード

以前のリリースのDirectory Server用に開発されたプラグインをメンテナンスする場合、変更内容は、第2章「Directory Server 5.2以上のプラグインAPIへの変更」を参照してください。

1.4.4 サンプル・プラグインの試用

複数のプラグイン・タイプの例は、製品のinstall-path/examplesで提供されており、このサンプル・プラグインの使用例について、後続の章で説明します。

1.4.5 詳細

特定のデータ構造体、関数およびパラメータ・ブロック・セマンティクスの詳細は、「プラグインAPIリファレンス」を参照してください。

2 Directory Server 5.2以上のプラグインAPIへの変更

この章では、Directory Server 11gリリース1 (11.1.1.7.0)のリリースにおける新機能、つまり、Directory Server 5.2リリース以上のプラグインAPIに加えられた変更について説明します。当初、前のリリースを対象として開発されたDirectory Serverのプラグインをメンテナンスする場合は、新機能や更新された機能を使用するために、そのようなプラグインをアップグレードすることを検討してください。

リファレンス情報は、「プラグインAPIリファレンス」を参照してください。

ヒント:

Directory Serverのプラグインを開発およびメンテナンスする場合は、Oracleサービスのコンサルタントと連携することを検討してください。

この章の内容は、次のとおりです。

- Directory Server 5.2以上で非推奨になった機能と変更された機能

- Directory Server 5.2以上の新機能

2.1 Directory Server 5.2以上で非推奨になった機能と変更された機能

この項では、Directory Server5.2リリース以上に非推奨になったか、または変更された機能について説明します。可能な場合には、代替機能を使用します。

2.1.1 変更を処理する属性値

次の表に、非推奨の関数と、属性値を処理するための代替関数を示します。

表2-1 属性値を処理するための代替関数

非推奨の関数

代替関数

slapi_attr_first_value()

slapi_attr_first_value_const()

slapi_attr_next_value()

slapi_attr_next_value_const()

slapi_valueset_add_value()

slapi_valueset_add_value_optimised()

slapi_valueset_first_value()

slapi_valueset_first_value_const()

slapi_valueset_next_value()

slapi_valueset_next_value_const()

slapi_valueset_set_valueset()

slapi_valueset_set_valueset_optimised()

slapi_valueset_find()

slapi_valueset_find_const()

2.1.2 constコレクトネスに関するコード変更

次の関数には、constコレクトネスが適用されるようになりました。

- slapi_build_control()

- slapi_build_control_from_berval()

- slapi_control_present()

- slapi_dup_control()

- slapi_entry2str()

- slapi_entry2str_with_options()

- slapi_get_account_availability()

- slapi_log_error_ex()

- slapi_log_info_ex()

- slapi_log_warning_ex()

- slapi_register_supported_control()

- slapi_search_internal_get_entry()

次のコールバック・データ型にも、constコレクトネスが適用されるようになりました。

- slapi_pwd_storage_scheme_cmp_fn

- slapi_pwd_storage_scheme_dec_fn

- slapi_pwd_storage_scheme_enc_fn

更新されたプロトタイプは、install-path/include/slapi-plugin.hを参照してください。

2.2 Directory Server 5.2以上の新機能

この項では、Directory Server 5.2リリース以上に追加された機能の概要について説明します。この項では、内部使用のために予約された機能については説明しません。

2.2.1 新しい識別名関数

識別名(DN)を処理するために、次の関数が追加されました。

slapi_dn_is_besuffix_norm()
slapi_sdn_get_suffix()

2.2.2 新しいエントリ処理関数

エントリを処理するために、slapi_entry_isroot()関数が追加されました。

2.2.3 新しい変更処理関数

変更を処理するために、slapi_mods_remove_at()関数が追加されました。

2.2.4 新しいプラグイン・コールの順序付けメカニズム

Directory Serverでは、現在、サーバーによりプラグインをコールする順序を設定するためのメカニズムが提供されています。詳細は、「プラグイン・コールの順序付け」を参照してください。

2.2.5 新しいスキーマ・チェック関数

スキーマ・チェックを処理するために、slapi_entry_schema_check_ext()関数が追加されました。

2.2.6 新しいサフィックス関数

サポートされているサフィックスを参照するために、次の関数が追加されました。

slapi_free_suffix_list()
slapi_get_suffix_list()

2.2.7 新しい構文チェック関数

構文チェックを処理するために、次の関数が追加されました。

slapi_entry_syntax_check()
slapi_ldapmods_syntax_check()
slapi_rdn_syntax_check()

2.2.8 新しい仮想属性関数

仮想属性を処理するために、slapi_vattr_is_virtual()関数が追加されました。

+

2.2.9 属性リストを要求するための新しいattrsの実装

戻される属性のリストを指定するために、attrsパラメータがslapi_search_internal_set_pb() ()関数に実装されています。以前は、attrsパラメータの値に関係なく、すべての属性が戻されました。

3 Directory Serverプラグインのスタート・ガイド

この章では、Directory Serverプラグインの作成について説明します。この章ではまた、サーバーでプラグインを使用できるようにする方法およびログ・エントリの生成方法についても説明します。

以前のリリースのDirectory Server用に開発されたプラグインをメンテナンスする場合、変更内容は、第2章「Directory Server 5.2以上のプラグインAPIへの変更」を参照してください。

この章の内容は、次のとおりです。

- Hello Worldプラグイン

- Directory Serverプラグインの作成

- Directory Serverプラグインの構築

- Directory Serverへのライブラリのプラグイン

- プラグイン・メッセージのロギング

3.1 Hello Worldプラグイン

この項では、有名なメッセージをログに記録するプラグインについて説明します。この項に示されているプロセスに従うと、この章で説明される概念を理解できます。

3.1.1 コードの場所

ディレクトリ・ホストのinstall-path/examples/ディレクトリを確認してください。この項で説明されるサンプル・コードはhello.cです。

3.1.2 プラグインの確認

次の例では、Directory Serverの起動時にHello, World!がログに記録されます。

例3-1 Hello, World!プラグイン(hello.c)

#include "slapi-plugin.h"

Slapi_PluginDesc desc = {
"Hello, World",                    /* plug-in identifier      */
"Oracle Corporation (test)",       /* vendor name             */
"11.1.1.3.0",                      /* plug-in revision number */
"My first plug-in"                 /* plug-in description     */
};

/* Log a greeting at server startup if info logging is on for plug-ins */
int
hello()
{
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,    /* Log if info logging is  */
SLAPI_LOG_INFO_LEVEL_DEFAULT,  /* set for plug-ins.       */
SLAPI_LOG_NO_MSGID,            /* No client at startup    */
SLAPI_LOG_NO_CONNID,           /* No conn.  at startup    */
SLAPI_LOG_NO_OPID,             /* No op.    at startup    */
"hello() in My first plug-in", /* Origin of this message  */
"Hello, World!\n"              /* Informational message   */
);
return 0;
}

/* Register the plug-in with the server */
#ifdef _WIN32
__declspec(dllexport)
#endif
int
hello_init(Slapi_PBlock * pb)
{
int rc = 0;                        /* 0 means success         */
rc |= slapi_pblock_set(            /* Plug-in API version     */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description     */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &desc;
);
rc |= slapi_pblock_set(            /* Startup function        */
pb,
SLAPI_PLUGIN_START_FN,
(void *) hello
);
return rc;
}

メッセージをログに記録するために、プラグインにはDirectory Serverの起動時にコールされる関数が含まれています。プラグインには、プラグインの説明、サポートされているAPIのバージョンおよび起動関数をDirectory Serverに登録するための初期化関数も含まれています。

起動関数では、メッセージがプラグインから取得されることが指定されています(SLAPI_LOG_INFO_AREA_PLUGIN)。また、起動関数では情報ロギングがアクティブ化されている場合はメッセージをログに記録する必要があることも指定されています(SLAPI_LOG_INFO_LEVEL_DEFAULT)。このログ・メッセージには、クライアント接続情報は示されません(SLAPI_LOG_NO_MSGID、SLAPI_LOG_NO_CONNIDおよびSLAPI_LOG_NO_OPID)。Directory Serverでは、起動時、クライアントが接続される前に、この関数をコールします。関数では、ログ・メッセージがどこで発生したかが指定されています("hello() in My first plug-in")。最後に、関数によって、有名なログ・メッセージが出力されます。

初期化関数の名前はhello_init()です。この関数では、関数slapi_pblock_set()を使用して、パラメータ・ブロックpbを変更します。この関数では、このようにして、サポートされるプラグインAPIバージョン、プラグインの説明、およびこのプラグインによってDirectory Serverに提供される関数を登録します。すべてのプラグイン初期化関数で必要であるように、hello_init()では成功時に0を戻し、失敗時に-1を戻します。関数slapi_pblock_set ()では、成功時に0を戻し、それ以外の場合は-1を戻します。したがって、Hello Worldプラグインでは、リターン・コードを明示的に-1に設定する必要はありません。

3.1.3 プラグインの構築

使用しているプラットフォームに応じて、共有オブジェクト(libtest-plugin.soまたはlibtest-plugin.sl)または動的リンク・ライブラリ(testplugin.dll)としてプラグインを構築します。Solaris SPARCシステムでは、次のようにします。

$ gmake -f Makefile

64ビット・カーネルをブートするSolaris x64システムでは、次のようにします。

$ gmake -f Makefile64

MakefileまたはMakefile64をinstall-path/examples/で使用して、コードをコンパイルしてリンクします。このファイルにより、すべてのサンプル・プラグインが同じライブラリに構築されてリンクされます。64ビットのDirectory Serverインスタンスで使用するようにプラグインを構築する場合の詳細は、「プラグイン・ライブラリの検索」を参照してください。

3.1.4 プラグインのプラグイン

dsconfコマンドを使用して、プラグインに関する情報をサーバー構成に追加します。

3.1.4.1 Directory Server構成の更新

プラグイン・メッセージをログに記録するようにサーバーを構成します。

$ dsconf set-log-prop -h localhost -p 1389 error level:err-plugins

プラグインをロードするようにサーバーを構成します。

$ dsconf create-plugin -h localhost -p 1389 \
-H lib-path -F hello_init -Y object "Hello World"
$ dsconf set-plugin-prop "Hello World" feature:"Hello, World" version:11.1.1.3.0
vendor:"Oracle Corporation (test)" desc:"My first plug-in"
$ dsconf enable-plugin -h localhost -p 1389 "Hello World"
Directory Server needs to be restarted for changes to take effect

ここで、lib-pathはプラグイン・ライブラリの絶対パス(/local/myplugins/examples/libtest-plugin.soなど)に対応している必要があります。Directory Serverでは、相対パスではなく、絶対パスが必要です。64ビット・システムでlib-pathを設定する場合は、その前に、「プラグイン・ライブラリの検索」をお読みください。

注意:

Directory Serverに付属のプラグインには、ds-pluginSignature属性値として格納されるシグネチャが含まれています。また、プラグインにはダイジェストも含まれ、これはds-pluginDigest属性値として格納されます。これらの値により、Directory Serverに付属のプラグインをカスタム・プラグインと区別できます。

3.1.4.2 Directory Serverの再起動

Directory Server構成を変更した後は、サーバーでプラグインを登録するために、Directory Serverを再起動する必要があります。dsadmコマンドを使用します。

たとえば、/local/ds/内のサーバー・インスタンスを再起動するには、次のように入力します。

$ dsadm restart /local/ds
Waiting for server to stop...
Server stopped
Server started: pid=4362

3.1.4.3 ログの確認

Directory Serverが起動した後、エラー・ログinstance-path/logs/errorsでHello, World!を検索します。次の行のようなエントリを探します(印刷ページ用に折り返されています)。

[02/Jan/2006:16:56:07 +0100] - INFORMATION -
hello() in My first plug-in - conn=-1 op=-1 msgId=-1 -  Hello, World!

ここで、不要なメッセージが記録されないように、ログ・レベルをデフォルトにリセットします。

$ dsconf set-log-prop -h localhost -p 1389 error level:default

3.2 Directory Serverプラグインの作成

この項では、Directory Serverプラグインのコード化の基本について説明します。この項では、主なタスクについて説明します。これらのタスクには、ヘッダー・ファイルの指定、初期化関数の作成、パラメータ・ブロック値の設定およびプラグイン関数の登録などがあります。

3.2.1 slapi-plugin.hヘッダー・ファイルの組込み

プラグインAPIはinstall-path/include/slapi-plugin.hで定義されます。ヘッダー・ファイルに、標準および拡張LDAP C APIのエントリ・ポイントであるldap.hおよびDirectory Serverによって使用されるエラー・メッセージ識別子のリストであるldap_msg.hが含まれていることを確認します。

一般的に、Directory Serverによって公開されるインタフェースはinstall-path/include/で指定されます。APIの特定の機能の詳細は、「プラグインAPIリファレンス」を参照してください。

APIを使用するには、プラグイン・ソースの宣言セクションにslapi-plugin.hを含めます。

#include "slapi-plugin.h"

通常、Makefileまたはプロジェクト・ファイルで適切なマクロを使用して、install-path/include/でヘッダー・ファイルを検索するようにリンカーに指示します。

3.2.2 プラグイン関数の作成

Directory Serverでは、Directory Server操作のコンテキスト内(たとえば、バインド、追加、検索、変更または削除の実行時)でプラグイン関数をコールします。これらの関数はエクスポートしないでください。関数は、起動時にDirectory Serverに登録されると、適切な範囲で使用できるようになります。このドキュメントでは、そのような関数の作成方法について説明します。

プラグイン関数のプロトタイプは、ローカルで使用されるその他の関数のプロトタイプと同様です。数多くのプラグイン関数にパラメータ・ブロックが渡されます。

int prebind_auth(Slapi_PBlock * pb); /* External authentication. */

Directory Serverに登録されていない追加のヘルパー関数も使用できます。このドキュメントでは追加のヘルパー関数については説明しませんが、製品に付属のサンプル・プラグインの一部にそのような関数が含まれています。

3.2.3 適切なリターン・コードの使用

一般的に、プラグイン関数が正常に完了した場合は、0を戻すようにします。一致を検索する一部の関数では、0は一致が見つかったことを意味し、-1は一致が見つからなかったことを意味します。事前操作関数の場合、0は、Directory Serverで操作の処理を続行する必要があることを意味します。事前操作関数の完了後に、サーバーで操作の処理が停止されるようにする場合は、1などの正数を戻します。

プラグイン関数が正常に完了しなかった場合は、必要に応じてクライアントに結果を送信し、エラー・メッセージをログに記録し、install-path/include/ldap-standard.hからのLDAP結果コードなどのゼロ以外の値を戻します。

3.2.4 初期化関数の作成

すべてのプラグインには初期化関数を含める必要があります。プラグイン・バージョンの互換性、プラグインの説明、プラグイン関数およびプラグインで必要なその他すべてのデータが、初期化関数によって登録されます。初期化関数では、Slapi_PBlock構造体へのポインタをパラメータとして取得します。「Hello Worldプラグイン」を参照してください。

すべての登録が成功すると、初期化関数から0が戻されます。いずれかの構成情報または関数の登録に失敗した場合は、初期化関数から-1が戻されます。プラグイン初期化関数からのリターン・コード-1により、サーバーが起動できなくなります。

Directory Serverでは、起動時に初期化関数を複数回コールできます。

3.2.5 パラメータ・ブロックを使用した構成情報の設定

Directory Serverによって、パラメータ・ブロック・ポインタがプラグイン初期化関数に渡されます。このパラメータ・ブロックには構成情報が保持されます。パラメータ・ブロックにはDirectory Serverの他のデータを保持できます。パラメータ・ブロックとは、slapi_pblock_set()のコールを使用した、構成情報およびプラグイン関数へのポインタの追加先となる構造体です。

ヒント:

パラメータ値を読み取るには、slapi_pblock_get()を使用します。パラメータ値を書き込むには、slapi_pblock_set()を使用します。他の関数を使用すると、サーバーがクラッシュする場合があります。

3.2.5.1 互換性の指定

slapi-plugin.hに定義されているプラグインAPIバージョンとの互換性を指定します(「プラグインAPIリファレンス」で説明されています)。新規プラグインを作成する場合は、たとえば、SLAPI_PLUGIN_CURRENT_VERSIONやSLAPI_PLUGIN_VERSION_03を使用します。たとえば、プラグインAPIの現行バージョンであるバージョン3がプラグインでサポートされることを指定するには、次のようにします。

slapi_pblock_set(pb,SLAPI_PLUGIN_VERSION, SLAPI_PLUGIN_VERSION_03);

ここで、pbは初期化関数に渡されるパラメータ・ブロック・ポインタです。SLAPI_PLUGIN_VERSIONは、パラメータ・ブロックにプラグインAPIバージョンの互換性を設定することを示します。

3.2.5.2 プラグインの説明の指定

「プラグインAPIリファレンス」で説明するとおり、プラグインの説明をSlapi_PluginDesc構造体にslapi-plugin.hで指定します。説明を登録するには、次のように、slapi_pblock_set()をコールします。

slapi_pblock_set(pb, SLAPI_PLUGIN_DESCRIPTION,(void *) &desc);

ここで、descはプラグインの説明を含むSlapi_PluginDesc構造体です。「Hello Worldプラグイン」を参照してください。

3.2.6 パラメータ・ブロックを使用した関数へのポインタの設定

Directory Serverによりどのような操作が実行されるかに応じて、プラグイン関数を登録します。また、操作がいつ実行されるかにも応じて、プラグイン関数を登録します。Directory Serverでは、通常、標準操作の実行前、実行中または実行後にプラグイン関数をコールします。

Directory Serverでいつプラグインをコールするかを指定するマクロの形式は、SLAPI_PLUGIN_*_FNです。サンプル・プラグインで示すとおり、プラグイン関数を登録するために使用されるマクロは、その関数の実行内容によってのみ決定されます。たとえば、Directory Serverの起動時にコールするようにプラグイン関数foo()を登録するには、次のようにします。

slapi_pblock_set(pb, SLAPI_PLUGIN_START_FN, (void *) foo);

ここで、pbは初期化関数に渡されるパラメータ・ブロック・ポインタです。SLAPI_PLUGIN_START_FNは、Directory Serverにより起動時にfoo()がコールされることを示します。成功すると、foo()から0が戻されることに注意してください。

3.2.7 サンプルの場所

サンプル・プラグインはinstall-path/examples/にあります。

3.3 Directory Serverプラグインの構築

この項では、プラグイン・バイナリの構築方法について説明します。この項では、Directory Serverプラグインのコンパイル要件およびリンク要件を示します。

3.3.1 プラグインAPIのヘッダー・ファイルの組込み

コンパイラでは、slapi-plugin.hなどのヘッダー・ファイルを検出できる必要があります。ヘッダー・ファイルはinstall-path/include/で検索します。

3.3.2 共有オブジェクトまたは動的リンク・ライブラリとしてのプラグインのリンク

プラグインをリンクして、プラグイン・ライブラリが再入可能および移植可能であり、共有できるようにします。次の例は、プラグイン・ライブラリを構築する1つの方法を示しています。例では、Solarisプラットフォームで稼働する64ビットDirectory Serverで使用されるコンパイラを示しています。

例3-2 64ビット: Solarisサンプル・プラグイン・ライブラリのMakefile

INCLUDE_FLAGS = -I../include
CFLAGS = $(INCLUDE_FLAGS) -D_REENTRANT -KPIC -xarch=v9 -DUSE_64
LDFLAGS = -G
DIR64 = 64

OBJS = dns.o entries.o hello.o internal.o testpwdstore.o \
testsaslbind.o testextendedop.o testpreop.o testpostop.o \
testentry.o testbind.o testgetip.o

all: MKDIR64 $(DIR64)/libtest-plugin.so

MKDIR64:
@if [ ! -d $(DIR64) ]; then mkdir $(DIR64); fi

$(DIR64)/libtest-plugin.so: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $(OBJS)

.c.o:
$(CC) $(CFLAGS) -c $<

clean:
-rm -f $(OBJS) libtest-plugin.so $(DIR64)/libtest-plugin.so

CFLAGS -xarch=v9および-DUSE_64は、64ビット・サーバーで使用するライブラリがコンパイラによって構築されることを示します。64ビット・ライブラリが64/という名前のディレクトリに置かれることにも注意してください。この追加のディレクトリは64ビット・プラグインに必要です。64ビット・サーバーでは、ライブラリを検索するときに、追加ディレクトリの名前をパス名に追加します。詳細は、「プラグイン・ライブラリの検索」を参照してください。

次の例は、32ビットの場合のMakefileを示します。

例3-3 32ビット: Solarisサンプル・プラグイン・ライブラリのMakefile

INCLUDE_FLAGS = -I../include
CFLAGS = $(INCLUDE_FLAGS) -D_REENTRANT -KPIC
LDFLAGS = -G

OBJS = dns.o entries.o hello.o internal.o testpwdstore.o \
testsaslbind.o testextendedop.o testpreop.o testpostop.o \
testentry.o testbind.o testgetip.o

all: libtest-plugin.so

libtest-plugin.so: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $(OBJS)

.c.o:
$(CC) $(CFLAGS) -c $<

clean:
-rm -f $(OBJS) libtest-plugin.so

32ビット・バージョンおよび64ビット・バージョン両方のプラグイン・ライブラリが同じホスト上で共存できることに注意してください。

3.3.3 サンプル・ビルド・ルールの場所

ビルド・ルールはinstall-path/examples/にあります。ルールはinstall-path/examples/Makefile64にもあります。使用しているプラットフォームで推奨されるコンパイルおよびリンクの設定の詳細は、これらのファイルを参照してください。

3.4 Directory Serverへのライブラリのプラグイン

この項では、サーバーのプラグイン構成について説明します。この項では、プラグインのロード方法についても説明します。プラグインが正しくロードされると、Directory Serverでプラグインを正しく初期化および登録できます。Directory Serverプラグイン間の依存関係についても説明します。

3.4.1 プラグイン構成設定の指定

プラグイン構成設定により、Directory Serverで必要な情報が指定されます。サーバーではこの情報を使用して、起動時にプラグインをロードし、プラグインを識別し、ロード時にプラグインにパラメータを渡します。

構成設定には、dsconfコマンドから、サブコマンドcreate-plugin、set-plugin-propおよびenable-pluginを使用してアクセスします。

dsconf create-pluginコマンドでは、必要なプラグイン構成設定を設定するようユーザーに強制します。設定には、名前、プラグイン初期化関数、プラグインを含むライブラリへのパスおよびプラグイン・タイプが含まれます。

dsconf set-plugin-propコマンドを使用すると、オプションの構成設定を設定できます。

dsconf enable-pluginコマンドを使用すると、プラグインをonまたはoffにできます。この設定を変更する場合は、サーバーを再起動する必要があります。

次の表に、構成設定およびその設定が必須(dsconf create-pluginにより設定)またはオプション(dsconf set-plugin-propにより設定)のいずれであるかを示します。

表3-1 プラグイン構成設定

設定

説明

必須またはオプション

プラグイン名

プラグインにより登録された名前に対応するプラグインの共通名

必須

初期化関数(-F)

Directory Serverの起動時にコールされる初期化関数の名前(プラグイン・コードに名前が出現する順にコールされる)

必須

ライブラリ・パス(-H)

プラグインを含むライブラリのフルパス(64ビット・プラグイン・ライブラリの64ビット・ディレクトリを除く)

詳細は、「プラグイン・ライブラリの検索」を参照してください。

必須

プラグイン・タイプ(-Y)

プラグインにより実装される関数のタイプを定義するプラグイン・タイプ

詳細は、「プラグイン・タイプおよび依存関係の理解」を参照してください。

必須

argument

Directory Serverの起動時にプラグインに渡されるパラメータ(suffix=dc=example,dc=comなど)

「プラグインに渡される引数の取得」を参照してください。

.

オプション

depends-on-named

State Change PluginやMultimaster Replication Pluginなどのプラグイン名(RDN)に対する1つ以上のプラグイン依存関係

詳細は、「プラグイン・タイプおよび依存関係の理解」を参照してください。

オプション

depends-on-type

preoperationやdatabaseなどのプラグイン・タイプに対する1つ以上のプラグイン依存関係

詳細は、「プラグイン・タイプおよび依存関係の理解」を参照してください。

オプション

desc

プラグインSlapi_PluginDesc構造体のspd_descriptionフィールドで指定された1行の説明

オプション

feature

プラグインSlapi_PluginDesc構造体のspd_idフィールドで指定された識別子

オプション

vendor

プラグインSlapi_PluginDesc構造体のspd_vendorフィールドで指定されたベンダー名

オプション

version

プラグインSlapi_PluginDesc構造体のspd_versionフィールドで指定されたバージョン番号

オプション

3.4.1.1 プラグイン・タイプおよび依存関係の理解

プラグインのタイプにより、プラグインにより登録できるプラグイン関数のタイプがDirectory Serverに示されます。プラグイン・タイプは、プラグインで実行される主な操作のタイプに対応しています。プラグイン・タイプの説明は、「プラグインとサーバーとの対話方法」および「使用例」を参照してください。「プラグインAPIリファレンス」では、プラグイン・タイプについて説明し、slapi-plugin.hで指定されたタイプ識別子に対応するタイプ・プロパティ設定を一覧表示しています。

プラグインの処理内容がわかっている場合、プラグイン・タイプを決定することは簡単です。たとえば、Directory Serverで、リクエストのバインドを処理する前に、そのリクエストの認証を処理するプラグインを作成する場合、タイプはpreoperationです。つまり、バインド操作の前に、プラグインによって、リクエストに対するなんらかの処理が実行されます。したがって、そのようなプラグインでは、バインドの前にリクエストを処理するためのバインド前プラグイン関数を少なくとも1つ登録します。一方、パスワードをエンコードし、エンコードされたパスワードと受信パスワードとの比較も行うプラグインを作成する場合、タイプはpwdstorageschemeです。そのようなプラグインでは、少なくともパスワードのエンコーディングを登録し、関数の比較も行います。いずれの場合も、プラグイン・タイプはプラグイン関数に従います。

プラグイン依存関係は、プラグインが正しく機能するためには1つ以上の他のプラグインが必要であることをDirectory Serverに示します。Directory Serverでは、サーバーにプラグインがロードされるときに依存関係を解決します。このため、登録するプラグインの依存するプラグインを登録できない場合、Directory Serverではそのプラグインの登録に失敗します。

プラグインの依存関係は、depends-on-namedを使用して名前で指定するか、depends-on-typeを使用してタイプで指定します。ここで、プラグイン名は、構成エントリのプラグインの相対識別名(RDN)を指します。プラグイン・タイプは、第17章「パラメータ・ブロックのリファレンス」にあるタイプのリストのタイプ識別子です。depends-on-namedおよびnsslapddepends-on-typeのいずれにも、複数の値を指定できます。

プラグイン構成エントリでは、いずれかの種類または両方の種類の依存関係を指定できます。構成エントリを使用して、特定のプラグインに対する依存関係を名前で指定します。プラグインのタイプに対する依存関係はタイプで指定します。依存関係でプラグインが名前で指定される場合、Directory Serverでは、サーバーにその名前のプラグインが登録された後でのみプラグインを登録します。依存関係でプラグインがタイプで指定される場合、Directory Serverでは、指定されたタイプのすべてのプラグインがサーバーに登録された後でのみプラグインを登録します。

プラグイン登録の依存関係を、Directory Serverでプラグインがコールされる順序を指定するメカニズムと混同しないでください。

3.4.1.2 プラグイン・コールの順序付け

Directory Serverでは、プラグインがコールされる順序を定義できます。このメカニズムは、プラグインのロード依存関係を定義するメカニズムからは独立しています。

このメカニズムでは、DN cn=plugins,cn=monitorを持つエントリでの属性のセットを使用します。プラグイン・コールの順序付けは、各プラグインのタイプについて、値がプラグイン名のカンマ区切りリストである属性を使用して定義されます。各属性タイプ名はplugin-list-で始まり、サーバーのリクエスト処理中のどこでプラグインをコールできるかを示します。プラグインのカンマ区切りリストで、リストの最初のあるプラグインが最初にコールされ、2番目のプラグインが2番目にコールされ、その後も同様に続きます。

たとえば、6個の事後操作プラグインが変更操作の後にコールされます。cn=plugins,cn=monitorのplugin-list-postoperation-modify属性は、これらの6個のプラグインがサーバーによりコールされる順序を示します。

plugin-list-postoperation-modify:
Class of Service,
Legacy replication postoperation plugin,
Multimaster replication postoperation plugin,
Retrocl postoperation plugin,
Roles Plugin,
State Change Plugin

これらの属性は、DN cn=plugins,cn=monitorを持つエントリで検索を実行することによっても取得できます。

プラグインのコール順序を変更する場合、plugin-list-で始まる属性タイプの値は変更しないでください。かわりに、plugin-order-で始まり、plugin-list-属性と末尾が同じ属性タイプに対応する値を変更する必要があります。また、DN cn=plugins,cn=configを持つエントリに、plugin-order-で始まる属性タイプを格納する必要もあります。

プラグイン・コール順序付け属性タイプの全リストを次に示します。

- plugin-order-bepostoperation-add

- plugin-order-bepostoperation-delete

- plugin-order-bepostoperation-modify

- plugin-order-bepostoperation-modrdn

- plugin-order-beprecommit-add

- plugin-order-beprecommit-delete

- plugin-order-beprecommit-modify

- plugin-order-beprecommit-modrdn

- plugin-order-bepreoperation-add

- plugin-order-bepreoperation-delete

- plugin-order-bepreoperation-modify

- plugin-order-bepreoperation-modrdn

- plugin-order-internalpostoperation-add

- plugin-order-internalpostoperation-delete

- plugin-order-internalpostoperation-modify

- plugin-order-internalpostoperation-modrdn

- plugin-order-internalpreoperation-add

- plugin-order-internalpreoperation-delete

- plugin-order-internalpreoperation-modify

- plugin-order-internalpreoperation-modrdn

- plugin-order-postoperation-abandon

- plugin-order-postoperation-add

- plugin-order-postoperation-bind

- plugin-order-postoperation-compare

- plugin-order-postoperation-delete

- plugin-order-postoperation-entry

- plugin-order-postoperation-modify

- plugin-order-postoperation-modrdn

- plugin-order-postoperation-referral

- plugin-order-postoperation-result

- plugin-order-postoperation-search

- plugin-order-postoperation-unbind

- plugin-order-preoperation-abandon

- plugin-order-preoperation-add

- plugin-order-preoperation-attr-encode-result

- plugin-order-preoperation-bind

- plugin-order-preoperation-compare

- plugin-order-preoperation-delete

- plugin-order-preoperation-entry

- plugin-order-preoperation-finish-entry-encode-result

- plugin-order-preoperation-modify

- plugin-order-preoperation-modrdn

- plugin-order-preoperation-referral

- plugin-order-preoperation-result

- plugin-order-preoperation-search

- plugin-order-preoperation-unbind

- plugin-order-pwdpolicy-bind-fail

- plugin-order-pwdpolicy-bind-success

たとえば、変更後に事後操作プラグインがコールされる順序を変更するには、まずplugin-list-postoperation-modifyを読み取ります。次に、plugin-list-postoperation-modifyの値からプラグイン名をコピーして、plugin-order-postoperation-modifyを設定します。次にDirectory Serverを再起動します。プラグイン名では大文字と小文字は区別されませんが、空白文字は考慮されます。認識されない名前は無視されます。

カンマ区切りリスト内の項目として1つのアスタリスク(*)を使用して、明示的に指定しないプラグインのコール順序がDirectory Serverで定義されるようにします。

最初はCall Me First、2つ目はCall Me Lastという2つの事後操作変更プラグインがある場合、plugin-list-postoperation-modifyを次のように設定できます。

plugin-order-postoperation-modify: Call Me First,*,Call Me Last

指定するプラグイン名は、slapi_register_plugin関数に渡されるname引数に同一である必要があります。また、カンマ・デリミタと隣接するプラグイン名の間および名前リストの末尾に空白文字を置くことはできません。

プラグインは、名前による明示的な指定や*を使用した暗黙的な指定をしないままにできます。そのようなプラグインは、Directory Serverにより、リストに示したプラグインをコールする前にコールされます。

3.4.1.3 プラグインに渡される引数の取得

プラグインでは、複数値を持つ構成設定プロパティのargumentで指定されるパラメータを取得できます。Directory Serverでは、プラグイン初期化関数に渡されるパラメータ・ブロックを使用して、プラグインで引数を使用できるようにします。

構成設定にパラメータを含める場合、次のことが適用されます。

- SLAPI_PLUGIN_ARGCは、パラメータの数を指定します。

- SLAPI_PLUGIN_ARGVにはパラメータが含まれます。

次の例では、slapi_pblock_get()を使用してinstall-path/examples/testextendedop.cから引数を取得します。

例3-4 引数を使用するプラグイン(testextendedop.c)

#include "slapi-plugin.h"

Slapi_PluginDesc expdesc = {
"test-extendedop",                 /* plug-in identifier       */
"Oracle Corporation (test)",       /* vendor name              */
"11.1.1.3.0",                      /* plug-in revision number  */
"Sample extended operation plug-in"/* plug-in description      */
};

/* Register the plug-in with the server.                           */
#ifdef _WIN32
__declspec(dllexport)
#endif
int
testexop_init(Slapi_PBlock * pb)
{
char ** argv;                      /* Args from configuration  */
int     argc;                      /* entry for plug-in.       */
char ** oid_list;                  /* OIDs supported           */
int     rc = 0;                    /* 0 means success          */
int     i;

/* Get the arguments from the configuration entry.             */
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_ARGV, &argv);
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_ARGC, &argc);
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"testexop_init in test-extendedop plug-in",
"Could not get plug-in arguments.\n"
);
return (rc);
}

/* Extended operation plug-ins may handle a range of OIDs. */
oid_list = (char **)slapi_ch_malloc((argc + 1) * sizeof(char *));
for (i = 0; i < argc; ++i) {
oid_list[i] = slapi_ch_strdup(argv[i]);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"testexop_init in test-extendedop plug-in",
"Registering plug-in for extended operation %s.\n",
oid_list[i]
);
}
oid_list[argc] = NULL;

rc |= slapi_pblock_set(            /* Plug-in API version      */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description      */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &expdesc
);
rc |= slapi_pblock_set(            /* Extended op. handler     */
pb,
SLAPI_PLUGIN_EXT_OP_FN,
(void *) test_extendedop
);
rc |= slapi_pblock_set(            /* List of OIDs handled     */
pb,
SLAPI_PLUGIN_EXT_OP_OIDLIST,
oid_list
);
return (rc);
}

コマンドラインで複数のプロパティを使用して複数の引数を指定できます。dsconfコマンドにより、サーバーからプラグインに、コマンドラインで指定した順序で引数が渡されます。dsconfコマンドを使用して引数のリストを変更する場合、新しい引数で既存の引数が置き換えられます。引数はリストに追加されません。

3.4.1.4 プラグイン・ライブラリの検索

Directory Serverでは、dsconf create-pluginコマンドに-Hオプションで指定したライブラリ・パスを使用して、プラグイン・ライブラリを検索します。

- 64ビット・サーバーでは、パス名の末尾にディレクトリ名を追加して64ビット・ライブラリを検索します。
たとえば、-H /local/myplugins/mylib.soと指定すると、Solarisプラットフォーム上で稼働する64ビットDirectory Serverでは、次のような名前の64ビット・プラグイン・ライブラリが検索されます。

/local/myplugins/64/mylib.so

- 32ビットDirectory Serverでは、指定したとおりのパスを使用して32ビット・プラグイン・ライブラリを検索します。同じ構成エントリを使用する32ビットDirectory Serverでは、次の名前のプラグイン・ライブラリが検索されます。

/local/myplugins/mylib.so

構成エントリに指定されたプラグイン・ライブラリが見つからないと、Directory Serverの起動は失敗します。

3.4.2 Directory Server構成の変更

Directory Serverが稼働している状態で、dsconfコマンドを使用してプラグイン構成設定を追加します。dsconf enable-plugin nameコマンドを使用して、プラグインを有効にします。

すべてが予期したとおりに動作した場合、instance-path/config/dse.ldifに格納されているプラグイン構成エントリが、Directory ServerによってDirectory Server構成に追加されます。構成ファイルを直接変更しないでください。

3.4.3 Directory Serverの再起動

Directory Serverでは、プラグインは動的にはロードされません。かわりに、サーバーを再起動する必要があります。これにより、Directory Serverによって起動時にプラグインが登録されます。

dsconf set-log-prop error level:err-pluginsコマンドを使用して、プラグイン情報メッセージがDirectory Serverによってログに記録されるように、ロギングを設定します。ログ・レベルを適切に設定したら、サーバーを再起動して、構成した新しいプラグインがサーバーにロードされることを確認します。

$ dsadm restart instance-path

ログ・レベルはサーバーの稼働中に調整できます。

3.5 プラグイン・メッセージのロギング

この項では、次の操作の実行方法について説明します。

- Directory Serverログでのメッセージの生成

- Directory Serverによって特定のタイプのメッセージがログに書き込まれるようにするログ・レベルの設定

- サーバーによってログに記録されたメッセージの検索

3.5.1 3つのレベルのメッセージ重大度のロギング

プラグインAPIにより、致命的エラー・メッセージ、警告および情報を記録するためのログ関数が提供されます。エラー・メッセージおよび警告は常にログに記録されます。情報ロギングはデフォルトでオフになっています。ログ・レベルはDirectory Serverの稼働中に調整できます。

ヒント:

それぞれのログ・メッセージがディスクに書き込まれるとき、Directory Serverで待機が発生するため、サーバーの速度が低下します。

ロギングは必要な場合に使用してください。使用する必要がない場合はロギングをオフにしてください。

各ロギング関数の詳細は、第15章「Directory Server関数リファレンス(パートI)」を参照してください。

3.5.1.1 致命的エラー・メッセージ

致命的エラーにはslapi_log_error_ex()を使用します。多くの場合、メッセージをログに記録した後、-1を戻し、Directory Serverに対して、深刻な問題が発生したことを示します。

例3-5 致命的エラー・メッセージのロギング

#include "slapi-plugin.h"
#include "example-com-error-ids.h" /* example.com unique
error IDs file       */
int
foobar(Slapi_PBlock * pb)
{
char * error_cause;
int    apocalypse = 1;         /* Expect the worst.    */

/* ... */

if (apocalypse) {              /* Server to crash soon */
slapi_log_error_ex(
EXCOM_SERVER_MORIBUND, /* Unique error ID      */
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"example.com: foobar in baz plug-in",
"cannot write to file system: %s\n",
error_cause
);
return -1;
}
return 0;
}

この例では、foobar()によって、Directory Serverがクラッシュする寸前であるというエラーがログに記録されます。

ヒント:

プラグインが国際化されている場合、slapi_log_*_ex()関数に対する最後の2つの引数には、リテラル文字列ではなくマクロを使用してください。

3.5.1.2 警告メッセージ

注意が必要であり、常にメッセージを記録する必要がある深刻な状況には、slapi_log_warning_ex()を使用します。

次の例では、ディスクがほぼ一杯であるため、foobar()によって警告がログに記録されます。

例3-6 警告メッセージのロギング

#include "slapi-plugin.h"
#include "example-com-warning-ids.h" /* example.com unique
warning IDs file  */
int
foobar()
{
int disk_use_percentage;

/* ... */

if (disk_use_percentage>= 95) {
slapi_log_warning_ex(
EXCOM_DISK_FULL_WARN,    /* unique warning ID */
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"example.com: foobar in baz plug-in",
"disk %.0f%% full, find more space\n",
disk_use_percentage
);
}
return 0;
}

3.5.1.3 情報メッセージ

情報またはデバッグ・メッセージには、slapi_log_info_ex()を使用します。この関数はデフォルト・ロギング用に設定でき、この設定は、プラグインでロギングがオフになっている場合はメッセージがログに記録されないことを意味します。情報ロギングは、負荷の高いロギングが使用されている場合にのみ発生するように設定することもできます。これにより、プラグイン・ロギングがオンになっており、かつ、すべての情報メッセージをログに記録するように設定されている場合に、メッセージが記録されます。

プラグインからの情報メッセージをログに記録する方法の例は、「プラグインの確認」を参照してください。

3.5.2 Directory Server構成での適切なログ・レベルの設定

ログ・レベルは、プラグインの情報メッセージおよびその他多数のDirectory Serverサブシステムに対して設定できます。Directory Service Control Centerを使用してログ・レベルを設定できます。dsconf set-log-propコマンドを使用してコマンドラインからログ・レベルを設定することもできます。

dsconf set-log-prop error level:err-pluginsと設定すると、サーバーによりプラグインの情報ロギングがオンになります。

3.5.3 ログ内のメッセージの検索

エラー、警告および情報メッセージのログ・ファイルはinstance-path/logs/errorsです。すべてのメッセージが同じログに記録されるため、イベントの発生順を簡単に判別できます。

この例に示すとおり、メッセージはタイムスタンプ、その次に識別子、その次にログ・メッセージ内のその他の情報という構成になっています。印刷ページではこのログ・メッセージは壊れていることに注意してください。

[02/Jan/2006:16:54:57 +0100] - INFORMATION -
start_tls - conn=-1 op=-1 msgId=-1 -
Start TLS extended operation request confirmed.

識別子を使用して不要な項目をフィルタリングしてください。

4 プラグインを使用したエントリの処理

この章では、ディレクトリ・エントリ、属性、属性値および識別名(DN)を処理するプラグインAPIの機能について説明します。また、エントリのLDAP Data Interchange Format (LDIF)文字列との変換、およびエントリがLDAPスキーマに準拠しているかどうかのチェックについても説明します。

この章で使用されているコードは、install-path/examples/entries.cのサンプル・プラグインとinstall-path/examples/dns.cのサンプル・プラグインで見つかります。

この章で使用されるプラグインAPI関数の詳細は、第15章「Directory Server関数リファレンス(パートI)」を参照してください。

この章の内容は、次のとおりです。

- エントリの作成

- LDIF表現との変換

- エントリ属性および属性値の取得

- 属性値の追加および削除

- エントリのスキーマ準拠の検証

- エントリ識別名の処理

4.1 エントリの作成

この項では、ディレクトリでエントリを作成する方法について説明します。スペースを割り当てることによって新規エントリを作成し、完全に新しいエントリを作成します。または、既存エントリを複製し、その値を変更することによって新規エントリを作成します。

4.1.1 新規エントリの作成

次の例に示すように、slapi_entry_alloc()を使用して完全に新しいエントリを作成し、必要なメモリーを割り当てます。

例4-1 新規エントリの作成(entries.c)

#include "slapi-plugin.h"

int
test_ldif()
{
Slapi_Entry * entry = NULL;        /* Entry to hold LDIF      */

/* Allocate the Slapi_Entry structure.                        */
entry = slapi_entry_alloc();

/* Add code that fills the Slapi_Entry structure.             */

/* Add code that uses the Slapi_Entry structure.              */

/* Release memory allocated for the entry.                    */
slapi_entry_free(entry);

return (0);
}

4.1.2 エントリのコピーの作成

slapi_entry_dup()を使用して、エントリのコピーを作成します。

4.2 LDIF表現との変換

この項では、プラグインAPIを使用して、LDIFで表現されているエントリをSlapi_Entry構造体に変換する方法について説明します。また、Slapi_Entry構造体をLDIF文字列に変換する方法についても説明します。

LDIFファイルは、ディレクトリ・エントリに関する一連の判読可能な表現、およびオプションのアクセス制御命令として示されます。LDIFで表現されるエントリは、識別名の行で始まります。LDIF表現では、属性のオプションの行が続きます。構文を次の例に示します。

例4-2 エントリを表現するLDIF構文

dn:[:] dn-value\n
[attribute:[:] value\n]
[attribute:[:] value\n]
[single-space continued-value\n]*

二重コロン(::)は、値がbase64でエンコードされていることを示します。Base64でエンコードされた値は、たとえば、属性値の途中で改行できます。

前述の例で示したように、後続の行の最初に空白を1つ残すことによって、LDIFの行を折りたたむことができます。

サンプルのLDIFファイルは、install-path/ldif/にあります。

LDIF構文の詳細は、『Oracle Directory Server Enterprise Editionリファレンス』の第4章「Directory ServerのLDIFおよび検索フィルタ」を参照してください。

4.2.1 LDIF文字列のSlapi_Entry構造体への変換

このタイプの変換は、slapi_str2entry()を使用することによって実現できます。この関数は、2つの引数として、変換する文字列と、slapi-plugin.hにおけるSLAPI_STR2ENTRY_*の形式のフラグを保持するintを取ります。関数は、次の例に示すように、成功の場合はSlapi_Entryへのポインタを戻し、それ以外はNULLを戻します。

例4-3 LDIF文字列との変換(entries.c)

#include "slapi-plugin.h"

#define LDIF_STR "dn: dc=example,dc=com\nobjectclass: \
top\nobjectclass: domain\ndc: example\n"

int
test_ldif()
{
char        * ldif  = NULL;        /* Example LDIF string     */
Slapi_Entry * entry = NULL;        /* Entry to hold LDIF      */
char        * str   = NULL;        /* String to hold entry    */
int           len;                 /* Length of entry as LDIF */

/* LDIF to Slapi_Entry                                        */
entry = slapi_entry_alloc();
ldif  = slapi_ch_strdup(LDIF_STR);
entry = slapi_str2entry(ldif, SLAPI_STR2ENTRY_ADDRDNVALS);
slapi_ch_free_string(&ldif);
if (entry == NULL) return (-1);

/* Slapi_Entry to LDIF                                        */
str = slapi_entry2str(entry, &len);
if (str == NULL) return (-1);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_ldif in test-entries plug-in",
"\nOriginal entry:\n%sEntry length: %d\n", str, len
);

slapi_entry_free(entry);

return (0);
}

ここで、SLAPI_STR2ENTRY_ADDRDNVALSは、slapi_str2entry()のサポートされているフラグが一覧表示されたslapi-plugin.hで指定されたように、欠落した相対識別名(RDN)の値を追加します。

4.2.2 Slapi_Entry構造体のLDIF文字列への変換

このタイプの変換は、slapi_entry2str()を使用することによって実現できます。この関数は、2つの引数として、変換するエントリと、戻される文字列の長さを保持するintを取ります。関数は、例38-3に示すように、成功の場合はLDIFにchar *を戻し、それ以外はNULLを戻します。

4.3 エントリ属性および属性値の取得

この項では、エントリの実在属性に対して処理を繰り返し行う方法について説明します。この手法は、エントリに属する属性のリストを検索する場合に使用できます。エントリに特定の属性が含まれていることがわかっている場合、slapi_entry_attr_find()を使用すると、属性へのポインタが直接戻されます。

注意:

仮想属性は、ロールとサービス・クラス(CoS)を使用する高度なエントリ管理のためにDirectory Serverによって生成され、実在属性とは対照的です。

CoSの属性などの仮想属性を処理する場合は、slapi_vattr_list_attrs ()を使用できます。この関数は、実在属性とエントリに属する仮想属性の完全なリストを提供します。

属性値に対する処理の繰返しは、次の例に示すように、slapi_attr_first_value_const ()とslapi_attr_next_value_const()を一緒に使用して実行できます。

例4-4 属性値に対する処理の繰返し(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_add(Slapi_PBlock * pb)
{
Slapi_Entry * entry;               /* Entry to add            */
Slapi_Attr  * attribute;           /* Entry attributes        */
Slapi_Value ** values;             /* Modified, duplicate vals*/
int         connId, opId, rc = 0;
long        msgId;

/* Get the entry. */
rc |= slapi_pblock_get(pb, SLAPI_ADD_ENTRY,       &entry);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,         &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,    &opId);

/* Prepend ADD to values of description attribute.            */
rc |= slapi_entry_attr_find(entry, "description", &attribute);
if (rc == 0) {                 /* Found a description, so...  */
int nvals, i, count = 0;
const Slapi_Value * value;

slapi_attr_get_numvalues(attribute, &nvals);
values = (Slapi_Value **)
slapi_ch_malloc((nvals+1)*sizeof(Slapi_Value *));

for (                          /* ...loop for value...    */
i = slapi_attr_first_value_const(attribute, &value);
i != -1;
i = slapi_attr_next_value_const(attribute, i, &value)
) {                            /* ...prepend "ADD ".      */
const char  * string;
char        * tmp;
values[count] = slapi_value_dup(value);
string = slapi_value_get_string(values[count]);
tmp    = slapi_ch_malloc(5+strlen(string));
strcpy(tmp, "ADD ");
strcpy(tmp+4, string);
slapi_value_set_string(values[count], tmp);
slapi_ch_free((void **)&tmp);
++count;
}

values[count] = NULL;

} else {                           /* entry has no desc.      */
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_add in test-preop plug-in",
"Entry has no description attribute.\n"
);
}

rc = slapi_entry_attr_replace_sv(entry, "description", values);
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_add in test-preop plug-in",
"Description attribute(s) not modified.\n"
);
}
slapi_valuearray_free(&values);

return 0;
}

4.4 属性値の追加および削除

この項では、属性とその値を追加および削除する方法について説明します。

4.4.1 属性値の追加

属性名と属性値が文字列の場合、slapi_entry_add_string()を使用できることがあります。次の例では、まずDNを設定し、文字列値とともに属性を追加してエントリを構築しています。

例4-5 文字列属性値の追加(entries.c)

#include "slapi-plugin.h"

int
test_create_entry()
{
Slapi_Entry * entry = NULL;        /* Original entry          */

entry = slapi_entry_alloc();
slapi_entry_set_dn(entry, slapi_ch_strdup("dc=example,dc=com"));
slapi_entry_add_string(entry, "objectclass", "top");
slapi_entry_add_string(entry, "objectclass", "domain");
slapi_entry_add_string(entry, "dc", "example");

/* Add code using the entry you created.....                  */

slapi_entry_free(entry);

return (0);
}

既存の値または文字列ではない値を処理する場合は、次の関数を使用できます。

- slapi_entry_add_values_sv()を使用して、新しい値をエントリの属性に追加します。この関数は、新しい値の複製がすでに存在する場合にエラーを戻します。

- slapi_entry_attr_merge_sv()を使用して、新しい値を複数値属性の既存の値に追加します。この関数は、新しい値の複製がすでに存在する場合にエラーを戻しません。

次の例は、slapi_entry_attr_merge_sv()を示しています。

例4-6 属性値のマージ(entries.c)

#include "slapi-plugin.h"

int
test_ldif()
{
Slapi_Entry * entry = NULL;        /* Entry to hold LDIF      */
Slapi_Value * values[2];           /* Attribute values        */

entry = slapi_entry_alloc();

/* Add code to transform an LDIF representation into an entry.*/

/* Add a description by setting the value of the attribute.
* Although this is overkill when manipulating string values,
* it can be handy when manipulating binary values.           */
values[0] = slapi_value_new_string("Description for the entry.");
values[1] = NULL;
if (slapi_entry_attr_merge_sv(entry,"description",values) != 0)
/* Merge did not work if processing arrives here. */ ;

slapi_entry_free(entry);

return (0);
}

属性値がエントリに存在する場合は、slapi_entry_attr_merge_sv()が指定の値を既存の値のセットにマージします。属性が存在しない場合は、slapi_entry_attr_merge_sv()が指定の値で属性を追加します。

4.4.2 属性値の削除

slapi_entry_delete_string()またはslapi_entry_delete_values_sv()を使用して、属性値を削除します。

4.5 エントリのスキーマ準拠の検証

この項では、Directory Serverに認識されたディレクトリ・スキーマに関してエントリが有効なことをチェックする方法について説明します。slapi_entry_check ()を使用して、エントリのスキーマ準拠を検証します。関数の2つの引数は、次の例に示すように、パラメータ・ブロックへのポインタとエントリへのポインタです。

例4-7 スキーマ準拠のチェック(entries.c)

#include "slapi-plugin.h"

int
test_create_entry()
{
Slapi_Entry * entry = NULL;        /* Original entry          */
Slapi_Entry * ecopy = NULL;        /* Copy entry              */

entry = slapi_entry_alloc();

/* Add code to fill the entry, setting the DN and attributes. */

ecopy = slapi_entry_dup(entry);
slapi_entry_set_dn(ecopy, slapi_ch_strdup("dc=example,dc=org"));
slapi_entry_add_string(ecopy, "description", "A copy of the orig.");

/* Does the resulting copy comply with the schema?            */
if (slapi_entry_schema_check(NULL, ecopy) == 0) {
/* Resulting entry does comply. */ ;
} else {
/* Resulting entry does not comply. */ ;
}

slapi_entry_free(entry);
slapi_entry_free(ecopy);

return (0);
}

パラメータ・ブロックのポインタ引数はNULLであることに注意してください。パラメータ・ブロックのポインタ引数は、ほとんどの場合NULLのままです。プラグインをレプリケート環境で使用する場合は、引数を使用して、レプリケートされた操作に対するスキーマ準拠の検証を回避できます。

4.6 エントリ識別名の処理

この項では、次のことを実行するために識別名(DN)を処理する方法について説明します。

- 指定されたDNの親DNの決定

- エントリDNが関連するサフィックスDNの決定

- ルート・サフィックスがバックエンドから提供されているかどうかの識別

- エントリのDNの設定

- 他のエントリと比較するためのエントリのDNの正規化

- エントリDNが、ディレクトリのスーパーユーザーのDNであるかどうかの判断

4.6.1 親DNおよびサフィックスDNの取得

次の例に示すように、slapi_dn_parent()関数を使用して親を戻し、slapi_dn_beparent()を使用してエントリに関連するサフィックスを戻します。

例4-8 エントリの親およびサフィックスの決定(dns.c)

#include "slapi-plugin.h"

int
test_dns(Slapi_PBlock * pb)
{
char * bind_DN;                    /* DN being used to bind    */
char * parent_DN;                  /* DN of parent entry       */
char * suffix_DN;                  /* DN of suffix entry       */
int    connId, opId, rc = 0;
long   msgId;

rc |= slapi_pblock_get(pb, SLAPI_BIND_TARGET,     &bind_DN);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,         &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,    &opId);
if (rc != 0) return (-1);

/* Get the parent DN of the DN being used to bind.             */
parent_DN = slapi_dn_parent(bind_DN);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_dns in test-dns plug-in",
"Parent DN of %s: %s\n", bind_DN, parent_DN
);

/* Get the suffix DN of the DN being used to bind.             */
suffix_DN = slapi_dn_beparent(pb, bind_DN);
if (suffix_DN != NULL) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_dns in test-dns plug-in",
"Suffix for user (%s) is (%s).\n", bind_DN, suffix_DN
);
}

return rc;
}

ツリーが複雑でない場合、サフィックスDNと親DNは同じになる場合があることに注意してください。たとえば、bind_DNがuid=bjensen,ou=People,dc=example,dc=comの場合、親はou=People,dc=example,dc=comになります。この場合、親はサフィックスと同じになります。

4.6.2 サフィックスがローカルで提供されているかどうかの判断

次の例に示すように、パラメータ・ブロックとルート・サフィックスDNに対するchar *を2つの引数として取る、slapi_dn_isbesuffix()関数を使用します。

例4-9 サフィックスがローカルかどうかの判断(dns.c)

#include "slapi-plugin.h"

int
test_dns(Slapi_PBlock * pb)
{
char * bind_DN;                    /* DN being used to bind    */
char * parent_DN;                  /* DN of parent entry       */
char * suffix_DN;                  /* DN of suffix entry       */

slapi_pblock_get(pb, SLAPI_BIND_TARGET, &bind_DN);

/* Get the suffix DN of the DN being used to bind.             */
suffix_DN = slapi_dn_beparent(pb, bind_DN);

/* Climb the tree to the top suffix and check if it is local.  */
while (suffix_DN != NULL &&
!slapi_dn_isbesuffix(pb, suffix_DN)) {
suffix_DN = slapi_dn_parent(suffix_DN);
}
if (suffix_DN != NULL) {
/* Suffix is served locally. */ ;
} else {
/* Suffix is not served locally. */ ;
}

return 0;
}

slapi_dn_isbesuffix()を使用してツリーを上に移動することに注意してください。また、slapi_dn_parent()は、残っているDNがNULLになるまでDNで機能し続けることにも注意してください。親は、必ずしも実際のエントリに対応しません。

4.6.3 エントリDNの取得および設定

エントリDNを取得および設定するには、それぞれslapi_entry_get_dn()とslapi_entry_set_dn()を使用します。「エントリのスキーマ準拠の検証」では、slapi_entry_set_dn ()を使用してエントリのコピーのDNを変更する方法について説明しています。slapi_ch_strdup ()を使用して、コピーで古いDNが使用されていないことを確認することに注意してください。

4.6.4 DNの正規化

余分な空白や大文字小文字の違いによって比較が失敗しないように、DNを比較する前にDNを正規化できます。次の例に示すように、slapi_dn_normalize()とslapi_dn_normalize_case ()を使用してDNを正規化できます。

例4-10 DNの正規化(dns.c)

#include "slapi-plugin.h"

int
test_norm()
{
char * test_DN;                    /* Original, not normalized */
char * copy_DN;                    /* Copy that is normalized. */

test_DN = "dc=Example,     dc=COM";/* Prior to normalization...*/

/* When normalizing the DN with slapi_dn_normalize() and
* slapi_dn_normalize_case(), the DN is changed in place.
* Use slapi_ch_strdup() to work on a copy.                    */
copy_DN = slapi_ch_strdup(test_DN);
copy_DN = slapi_dn_normalize_case(copy_DN);

return 0;
}

関数slapi_dn_normalize_case()は、引数として渡されたchar *DNに対して直接機能します。これにより、X.500で指定されているものの定義されていない「大文字小文字を区別しない一致」に対して、文字列を準備します。

注意:

元のものを変更しない場合は、slapi_ch_strdup()を使用して最初にコピーを作成します。

4.6.5 ユーザーはディレクトリ・マネージャかどうか

この質問には、slapi_dn_isroot()を使用して回答します。ただし、匿名ユーザーについては、ディレクトリのスーパーユーザーのバインドは、特別なケースとして処理されます。このようなユーザーについては、事前操作のバインド・プラグインをコールする前に、サーバー・フロントエンドがバインドを処理します。

5 プラグインを使用したクライアント・リクエスト処理の拡張

この章では、クライアント向けの操作を実行する前後にDirectory Serverが行う内容を変更するためのプラグインAPIでのサポートについて説明します。

認証はバインド操作に関連していますが、このことについては第6章「プラグインを使用した認証の処理」で個別に説明します。

この章の内容は、次のとおりです。

- 事前操作プラグインと事後操作プラグイン

- バインド操作の拡張

- 検索操作の拡張

- 比較操作の拡張

- 追加操作の拡張

- 変更操作の拡張

- 名前の変更操作の拡張

- 削除操作の拡張

- クライアントに送信される情報の捕捉

5.1 事前操作プラグインと事後操作プラグイン

Directory Serverでは、クライアント・リクエストを処理するとき、およびクライアントに情報を送信するときに、事前操作プラグイン関数と事後操作プラグイン関数をコールします。

5.1.1 事前操作プラグイン

事前操作プラグインは、クライアント・リクエストが処理される前にコールされます。たとえば、属性値を検証し、リクエストで指定された属性に追加および削除するには、事前操作プラグインを使用します。

5.1.2 事後操作プラグイン

事後操作プラグインは、操作が正常に完了したかどうかに関係なく、クライアント・リクエストが処理され、すべての結果がクライアントに送信された後にコールされます。アラートまたはアラームを送信するには、事後操作プラグインを使用します。また、監査作業またはクリーンアップ作業を実行するためにも、事後操作プラグインを使用します。

注意:

Directory Serverは、外部クライアントが関与する場合にのみ、事前操作および事後操作プラグインをコールします。内部的に、Directory Serverは、外部クライアントによって要求されなかった操作も実行します。

これを可能にするために、Directory Serverは外部操作と内部操作を識別します。外部操作は、受信したクライアント・リクエストに応答します。内部操作は、対応するクライアント・リクエストなしで実行されるアクションです。

一部の操作では、事前操作および事後操作プラグイン関数の使用がサポートされています。操作には、中止、追加、バインド、比較、削除、変更、RDNの変更、検索、エントリの送信、参照の送信、結果の送信およびバインド解除が含まれています。プラグインは、クライアント・アプリケーションによって接続されたDirectory Serverフロントエンドに関係なく機能します。

他のプラグイン関数の場合のように、slapi_pblock_set()をプラグインの初期化関数で使用して、事前操作および事後操作プラグイン関数を登録します。slapi_pblock_set()の詳細は、「プラグインAPIリファレンス」を参照してください。

5.1.3 登録識別子

事前操作プラグインの登録では、SLAPI_PLUGIN_PRE_operation_FNの形式のIDを使用します。事後操作の登録では、SLAPI_PLUGIN_POST_operation_FNの形式のIDを使用します。ここで、operationは、ABANDON、ADD、BIND、COMPARE、DELETE、ENTRY (エントリをクライアントに送信)、MODIFY、MODRDN、REFERRAL (参照をクライアントに送信)、RESULT (結果をクライアントに送信)、SEARCHまたはUNBINDのいずれかになります。

注意:

事前操作および事後操作プラグインでは、SLAPI_PLUGIN_START_FNを使用して、Directory Serverが起動するときに実行する関数と、SLAPI_PLUGIN_STOP_FNを使用して、Directory Serverが停止するときに実行する関数を登録することもできます。

これらのIDの詳細は、「プラグインAPIリファレンス」を参照してください。構築時に使用されるIDの完全なリストは、install-path/include/slapi-plugin.hも参照してください。

次の例は、適切な登録IDを使用して関数がDirectory Serverに登録される仕組みを示しています。

例5-1 事後操作関数の登録(testpostop.c)

#include "slapi-plugin.h"

Slapi_PluginDesc postop_desc = {
"test-postop",                     /* plug-in identifier         */
"Oracle Corporation (test)",       /* vendor name                */
"11.1.1.3.0",                      /* plug-in revision number    */
"Sample post-operation plug-in"    /* plug-in description        */
};

static Slapi_ComponentId * postop_id;  /* Used to set log            */

/* Register the plug-in with the server. */
#ifdef _WIN32
__declspec(dllexport)
#endif
int
testpostop_init(Slapi_PBlock * pb)
{
int rc = 0;                        /* 0 means success            */
rc |= slapi_pblock_set(            /* Plug-in API version        */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description        */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &postop_desc
);
rc |= slapi_pblock_set(            /* Open log at startup        */
pb,
SLAPI_PLUGIN_START_FN,
(void *) testpostop_set_log
);
rc |= slapi_pblock_set(            /* Post-op add function       */
pb,
SLAPI_PLUGIN_POST_ADD_FN,
(void *) testpostop_add
);
rc |= slapi_pblock_set(            /* Post-op modify function    */
pb,
SLAPI_PLUGIN_POST_MODIFY_FN,
(void *) testpostop_mod
);
rc |= slapi_pblock_set(            /* Post-op delete function    */
pb,
SLAPI_PLUGIN_POST_DELETE_FN,
(void *) testpostop_del
);
rc |= slapi_pblock_set(            /* Post-op modrdn function    */
pb,
SLAPI_PLUGIN_POST_MODRDN_FN,
(void *) testpostop_modrdn
);
rc |= slapi_pblock_set(            /* Close log on shutdown      */
pb,
SLAPI_PLUGIN_CLOSE_FN,
(void *) testpostop_free_log
);
/* Plug-in identifier is required for internal search.           */
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &postop_id);
return (rc);
}

事後操作関数に加えて、前述の例に示したプラグインが関数を登録します。プラグインは、起動時にログ・ファイルを開きます。プラグインは、停止時にログ・ファイルを閉じます。詳細は、install-path/examples/testpostop.cを参照してください。

5.1.4 プラグインの例の場所

プラグインの例は、install-path/examples/にあります。

5.2 バインド操作の拡張

この項では、クライアントのバインド操作の前にDirectory Serverによってコールされる機能を開発する方法について説明します。

注意:

バインド前プラグイン関数は、認証に対する拡張機能の処理によく使用されます。ただし、ディレクトリのスーパーユーザーと匿名ユーザーによるバインドなどの特別なケースを考慮することが必要となることがあります。場合によっては、同じ事前操作または事後操作プラグイン関数に対する複数のコールを考慮する必要があります。

5.2.1 サンプル・サフィックスを設定するには

実行済でない場合には、サフィックスdc=example,dc=comを使用して、サンプルのLDIFファイルinstall-path/resources/ldif/Example.ldifからロードされたデータを含むディレクトリ・インスタンスを設定します。

1. 新規Directory Serverインスタンスを作成します。
次に例を示します。

$ dsadm create -h localhost -p 1389 /local/ds
Choose the Directory Manager password:
Confirm the Directory Manager password:
$

2. 新規Directory Serverインスタンスを開始します。
次に例を示します。

$ dsadm start /local/ds
Server started: pid=4705
$

3. サフィックスdc=example,dc=comを作成します。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf create-suffix -h localhost -p 1389 dc=example,dc=com
Enter "cn=directory manager" password:
Certificate "CN=defaultCert, CN=hostname:1636" presented by the
server is not trusted.
Type "Y" to accept, "y" to accept just once,
"n" to refuse, "d" for more details: Y
$

4. サンプルLDIFをロードします。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf import -h localhost -p 1389 \
install-path/resources/ldif/Example.ldif dc=example,dc=com
Enter "cn=directory manager" password:
New data will override existing data of the suffix
"dc=example,dc=com".
Initialization will have to be performed on replicated suffixes.
Do you want to continue [y/n] ? y

## Index buffering enabled with bucket size 16
## Beginning import job...
## Processing file "install-path/resources/ldif/Example.ldif"
## Finished scanning file "install-path/resources/ldif/Example.ldif" (160 entries)
## Workers finished; cleaning up...
## Workers cleaned up.
## Cleaning up producer thread...
## Indexing complete.
## Starting numsubordinates attribute generation.
This may take a while, please wait for further activity reports.
## Numsubordinates attribute generation complete. Flushing caches...
## Closing files...
## Import complete. Processed 160 entries in 5 seconds.
(32.00 entries/sec)

Task completed (slapd exit code: 0).
$

関連項目

Directory Service Control Centerを使用して、このタスクを実行できます。

5.2.2 認証方式のロギング

次の例では、バインド認証方式をログに記録しています。完全なサンプル・コードは、install-path/examples/testpreop.cを参照してください。

例5-2 認証方式のロギング(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_bind(Slapi_PBlock * pb)
{
char * auth;                       /* Authentication type     */
char * dn;                         /* Target DN               */
int    method;                     /* Authentication method   */
int    connId, opId, rc = 0;
long   msgId;

/* Get target DN for bind and authentication method used.     */
rc |= slapi_pblock_get(pb, SLAPI_BIND_TARGET,     &dn);
rc |= slapi_pblock_get(pb, SLAPI_BIND_METHOD,     &method);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,         &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,    &opId);
if (rc == 0) {
switch (method) {
case LDAP_AUTH_NONE:   auth = "No authentication";
break;
case LDAP_AUTH_SIMPLE: auth = "Simple authentication";
break;
case LDAP_AUTH_SASL:   auth = "SASL authentication";
break;
default: auth = "Unknown authentication method";
break;
}
} else {
return (rc);
}

/* Log target DN and authentication method info.              */
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_bind in test-preop plug-in",
"Target DN: %s\tAuthentication method: %s\n", dn, auth
);
return (rc);
}

このプラグイン関数によって、認証methodに基づいてauthメッセージが設定されます。この関数による処理は、Directory Serverがバインドを処理する方法に影響しません。

5.2.2.1 プラグインを登録するには

実行済でない場合には、サンプルのプラグイン・ライブラリを作成し、プラグイン情報のロギングとサンプル・プラグインの両方をアクティブ化します。

1. プラグインを構築します。
ヒント: install-path/examples/Makefileまたはinstall-path/examples/Makefile64を使用します。

2. プラグイン情報メッセージがログに記録されるようにDirectory Serverを構成し、プラグインをロードします。

$ dsconf create-plugin -F custom-plugin-init-function -G custom-plugin-argument -H lib-path \
-Y custom-plugin-type "Custom Plugin"
$ dsconf enable-plugin "Custom Plugin"

ヒント: 詳細は、プラグインのソース・ファイルに指定されたコマンドを使用して参照してください。

3. Directory Serverを再起動します。

$ dsadm restart instance-path

5.2.2.2 バインド・ログ・メッセージを生成するには

1. Kirsten Vaughan (例)としてバインドします。

$ ldapsearch -h localhost -p 1389 -b "dc=example,dc=com" \
-D "uid=kvaughan,ou=people,dc=example,dc=com" -w bribery "(uid=*)"

2. instance-path/logs/errorsで、testpreop_bind()関数からの結果メッセージを検索します。
エントリのハウスキーピング情報を無視すると、次の内容に類似した出力が表示されます。

Target DN: uid=kvaughan,ou=people,dc=example,dc=com
Authentication method: Simple authentication

注意が必要なバインド前プラグイン関数の詳細は、第6章「プラグインを使用した認証の処理」を参照してください。

5.2.3 Directory Serverでのバインド処理のバイパス

プラグインが0を戻すと、Directory Serverはバインドを処理し続けます。Directory Serverのバインド処理をバイパスするには、パラメータ・ブロックでSLAPI_CONN_DNを設定し、1などの正の値を戻します。

5.2.4 通常のDirectory Serverのバインド動作

Directory Serverは、LDAPバインド・モデルに従います。少なくとも、サーバーはクライアントを認証します。また、サーバーは、バインド・レスポンスを送信して認証ステータスも示します。詳細は、RFC 1777 (http://www.ietf.org/rfc/rfc1777.txt)『Lightweight Directory Access Protocol』およびRFC 45111 (http://www.ietf.org/rfc/rfc4511.txt)『Lightweight Directory Access Protocol (v3)』を参照してください。

注意:

Lightweight Directory Access Protocol (v2)は廃止されたため、Lightweight Directory Access Protocol (v3)が推奨プロトコルになります。

5.3 検索操作の拡張

この項では、LDAP検索操作の前にDirectory Serverによってコールされる機能を開発する方法について説明します。

5.3.1 検索をリクエストしたユーザーのロギング

次の例では、検索をリクエストするクライアントのDNをログに記録しています。完全なサンプル・コードは、install-path/examples/testbind.cを参照してください。

この項の内容に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定してプラグインを登録します。前述の「バインド操作の拡張」と「プラグインを登録するには」を参照してください。プラグインTest Bindにも、事前検索関数があります。

test_search()関数は、次の例に示すようにリクエストをログに記録します。

例5-3 検索を要求するクライアントのDNの取得(testbind.c)

#include "slapi-plugin.h"

int
test_search(Slapi_PBlock * pb)
{
char * requestor_dn;               /* DN of client searching    */
int    is_repl;                    /* Is this replication?      */
int    is_intl;                    /* Is this an internal op?   */
int    connId, opId, rc = 0;
long   msgId;

rc |=slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,         &msgId);
rc |=slapi_pblock_get(pb, SLAPI_CONN_ID,                 &connId);
rc |=slapi_pblock_get(pb, SLAPI_OPERATION_ID,            &opId);
rc |=slapi_pblock_get(pb, SLAPI_REQUESTOR_DN,            &requestor_dn);
rc |=slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);
rc |=slapi_pblock_get(pb, SLAPI_IS_INTERNAL_OPERATION,   &is_intl);
if (rc != 0) return (rc);

/* Do not interfere with replication and internal operations.   */
if (is_repl || is_intl) return 0;

if (requestor_dn != NULL && *requestor_dn != '\0') {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_search in test-bind plug-in",
"Search requested by %s\n", requestor_dn
);
} else {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_search in test-bind plug-in",
"Search requested by anonymous client.\n"
);
}
return (rc);
}

サーバーでプラグインをアクティブ化した後に検索を実行します。

$ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w bribery \
-h localhost -p 1389 -b dc=example,dc=com uid=bjensen

instance-path/logs/errorsで、結果メッセージを検索します。ログ・エントリの最終フィールドに次のように表示されます。

Directory Serverでアクティブ化されたプラグインを使用して、Kirsten Vaughanとして検索を実行します。

Authenticated: uid=kvaughan,ou=people,dc=example,dc=com

5.3.2 検索フィルタの分類

検索フィルタの分類では、検索フィルタを分類して、フィルタのコンポーネント部分をログに記録します。完全なサンプル・コードは、install-path/examples/testpreop.cを参照してください。

5.3.2.1 コンパクトなコードのLOGマクロ

SLAPI_PLUGIN_PRE_SEARCH_FN関数のコードtestpreop_search()の前には、3つのマクロが付きます。testpreop.cで#define LOG1(format)を検索します。これらのマクロの目的は、その後のロギング文をよりコンパクトにしてコードを解読しやすくすることのみです。LOG1、LOG2およびLOG3の桁は、各マクロが取るパラメータ数を反映しています。ログ関数によってprintf ()のスタイルで文字列をフォーマットできるため、ログ関数に渡す実際のパラメータ数は様々に異なります。

5.3.2.2 パラメータ・ブロック・コンテンツ

検索前関数に渡されるパラメータ・ブロックには、検索のターゲットと範囲の情報が含まれます。次の例は、この情報を取得する方法を示しています。RFC 4511 (http://www.ietf.org/rfc/rfc4511.txt)『Lightweight Directory Access Protocol (v3)』で指定されているように、範囲に次のいずれかを含めることができます。

- ベース・オブジェクト(ベースDNエントリ)

- ベースDNの下の単一レベル

- ベースDNの下のサブツリー全体

例5-4 検索のベースおよび範囲のロギング(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_search(Slapi_PBlock * pb)
{
char          *  base       = NULL;/* Base DN for search      */
int              scope;            /* Base, 1 level, subtree  */
int              rc = 0;

rc |= slapi_pblock_get(pb, SLAPI_SEARCH_TARGET,    &base);
rc |= slapi_pblock_get(pb, SLAPI_SEARCH_SCOPE,     &scope);
if (rc == 0) {
switch (scope) {
case LDAP_SCOPE_BASE:
LOG2("Target DN: %s\tScope: LDAP_SCOPE_BASE\n", base);
break;
case LDAP_SCOPE_ONELEVEL:
LOG2("Target DN: %s\tScope: LDAP_SCOPE_ONELEVEL\n", base);
break;
case LDAP_SCOPE_SUBTREE:
LOG2("Target DN: %s\tScope: LDAP_SCOPE_SUBTREE\n", base);
break;
default:
LOG3("Target DN: %s\tScope: unknown value %d\n", base, scope);
break;
}
} /* Continue processing... */

return 0;
}

X.500検索ターゲットをLDAP検索ターゲットにマップするプラグインの作成中に、検索のためにベースDNを分析して変換することを選択できます。

パラメータ・ブロックには、次の情報も含まれます。

- 検索中に別名が解決される時期

- 検索が消費するように設定されたDirectory Serverリソース

- 戻される属性タイプ

5.3.2.3 検索フィルタ情報

パラメータ・ブロックから取得する検索フィルタを考慮する必要があります。testpreop_search()は、Slapi_Filter構造体のfilterと文字列filter_strの両方としてパラメータ・ブロックからフィルタを取得します。Directory Serverに渡され、Slapi_Filter構造体で取得される検索フィルタの種類に応じて、プラグインは様々な方法でフィルタを分類します。関数が検索前ではなく検索後だった場合、パラメータ・ブロックを介して戻される結果にアクセスすることになります。結果へのアクセスの手順は、「プラグインAPIリファレンス」を参照してください。

プラグインAPIは、検索フィルタを操作するための様々な関数を提供しています。testpreop_search()は、slapi_filter_get_choice ()を使用して、使用されるフィルタの種類を決定します。事前操作検索関数も、slapi_filter_get_subfilt()を使用してフィルタで使用される部分文字列を分類します。事前操作検索関数は、さらに、slapi_filter_get_type()を使用して、属性の有無を検索するときに属性タイプを検出します。事前操作検索関数は、slapi_filter_get_ava()を使用して、比較に使用される属性の型と値を取得します。

次の例は、検索フィルタから情報を取得するコードを示しています。

例5-5 フィルタ情報の取得(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_search(Slapi_PBlock * pb)
{
char          *  attr_type  = NULL;/* For substr and compare  */
char          *  substr_init= NULL;/* For substring filters   */
char          *  substr_final=NULL;
char          ** substr_any = NULL;
int              i, rc =0;
Slapi_Filter  *  filter;

rc |= slapi_pblock_get(pb, SLAPI_SEARCH_FILTER,    &filter);
if (rc == 0) {
filter_type = slapi_filter_get_choice(filter);
switch (filter_type) {
case LDAP_FILTER_AND:
case LDAP_FILTER_OR:
case LDAP_FILTER_NOT:
LOG1("Search filter: complex boolean\n");
break;
case LDAP_FILTER_EQUALITY:
LOG1("Search filter: LDAP_FILTER_EQUALITY\n");
break;
case LDAP_FILTER_GE:
LOG1("Search filter: LDAP_FILTER_GE\n");
break;
case LDAP_FILTER_LE:
LOG1("Search filter: LDAP_FILTER_LE\n");
break;
case LDAP_FILTER_APPROX:
LOG1("Search filter: LDAP_FILTER_APPROX\n");
break;
case LDAP_FILTER_SUBSTRINGS:
LOG1("Search filter: LDAP_FILTER_SUBSTRINGS\n");
slapi_filter_get_subfilt(
filter,
&attr_type,
&substr_init,
&substr_any,
&substr_final
);
if (attr_type != NULL)
LOG2("\tAttribute type: %s\n", attr_type);
if (substr_init != NULL)
LOG2("\tInitial substring: %s\n", substr_init);
if (substr_any != NULL)
for (i = 0; substr_any[i] != NULL; ++i) {
LOG3("\tSubstring# %d: %s\n", i, substr_any[i]);
}
if (substr_final != NULL)
LOG2("\tFinal substring: %s\n", substr_final);
break;
case LDAP_FILTER_PRESENT:
LOG1("Search filter: LDAP_FILTER_PRESENT\n");
slapi_filter_get_attribute_type(filter, &attr_type);
LOG2("\tAttribute type: %s\n", attr_type);
break;
case LDAP_FILTER_EXTENDED:
LOG1("Search filter: LDAP_FILTER_EXTENDED\n");
break;
default:
LOG2("Search filter: unknown type %d\n", filter_type);
break;
}
}
return (rc);
}

ここでの説明に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定してプラグインを登録します。前述の「バインド操作の拡張」と「プラグインを登録するには」を参照してください。

サンプル・サフィックスとプラグインをディレクトリにロードしたら、検索を実行してinstance-path/logs/errorsに出力を生成します。

$ ldapsearch -h localhost -p 1389 -b "dc=example,dc=com" "(uid=*go*iv*)"

エラー・ログのハウスキーピング情報を無視すると、次の例に示すように検索フィルタのブレークダウンが発生します。

例5-6 検索フィルタのブレークダウン

*** PREOPERATION SEARCH PLUG-IN - START ***
Target DN: dc=example,dc=com       Scope: LDAP_SCOPE_SUBTREE
Dereference setting: LDAP_DEREF_NEVER
Search filter: LDAP_FILTER_SUBSTRINGS
Attribute type: uid
Substring# 0: go
Substring# 1: iv
String representation of search filter: (uid=*go*iv*)
*** PREOPERATION SEARCH PLUG-IN - END ***

5.3.2.4 フィルタ情報の構築

フィルタを構築するとき、プラグインAPIは、文字列をSlapi_Filterデータ型に変換するためのslapi_str2filter ()と、単純なフィルタをブール演算子AND、ORまたはNOTと結合するためのslapi_filter_join()を提供します。slapi_filter_free()を使用してフィルタを解放します。詳細は、「プラグインAPIリファレンス」を参照してください。

5.3.2.5 通常のDirectory Serverの検索動作

Directory Serverは、候補エントリのリストを取得し、リストに対して処理を繰り返して検索条件と一致するエントリを確認します。プラグインは、一連の結果をパラメータ・ブロックに配置します。ほとんどの場合、プラグイン内での検索は、一般的に、slapi_search_internal*()のコールを使用して実行されます。

5.4 比較操作の拡張

この項では、クライアントの比較操作の前にDirectory Serverによってコールされる機能を開発する方法について説明します。次の例では、ターゲットDNと、値と比較するエントリの属性をログに記録しています。完全なサンプル・コードは、install-path/examples/testpreop.cを参照してください。

例5-7 プラグインの比較関数(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_cmp(Slapi_PBlock * pb)
{
char * dn;                         /* Target DN               */
char * attr_type;                  /* Type of attr to compare */
/* Attribute value could be lots of things, even a binary file.
* Here, do not try to retrieve the value to compare.         */
int    connId, opId, rc = 0;
long   msgId;

rc |= slapi_pblock_get(pb, SLAPI_COMPARE_TARGET,  &dn);
rc |= slapi_pblock_get(pb, SLAPI_COMPARE_TYPE,    &attr_type);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,         &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,    &opId);
if (rc == 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_cmp in test-preop plug-in",
"Target DN: %s\tAttribute type: %s\n", dn, attr_type
);
}

return (rc);
}

プラグイン関数は、比較に使用するために属性値にアクセスできます。パラメータ・ブロックの属性値は、berval構造体にあります。そのため、値はJPEGイメージなどのバイナリ・データである可能性があります。ログに値は書き込まれません。

次の例は、属性値の取得に使用されるslapi_pblock_get()のコールを示しています。

例5-8 属性値の取得

#include "slapi-plugin.h"

int
my_compare_fn(Slapi_PBlock * pb)
{
int             rc = 0;
struct berval * attr_val;

/* Obtain the attribute value from the parameter block */
rc |= slapi_pblock_get(pb, SLAPI_COMPARE_VALUE, &attr_val);

if (rc != 0) {
rc = LDAP_OPERATIONS_ERROR;
slapi_send_ldap_result(pb, rc, NULL, NULL, 0, NULL);
return 0;
}

/* Do something with the value here.                   */

return 0;
}

ここでの説明に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定してプラグインを登録します。前述の「バインド操作の拡張」と「プラグインを登録するには」を参照してください。

Directory Serverリソース・キットと一緒にインストールされるldapcompareツールを使用して、サンプルのプラグイン関数を試します。

例5-9 比較の実行

$ ldapcompare sn:Jensen uid=bjensen,ou=people,dc=example,dc=com
comparing type: "sn" value: "Jensen" in entry
"uid=bjensen,ou=people,dc=example,dc=com"
compare TRUE

instance-path/logs/errorsのログ・エントリには次の結果が表示されますが、ログ・エントリの最初にハウスキーピング情報は含まれません。

Target DN: uid=bjensen,ou=people,dc=example,dc=com    Attribute type: sn

5.5 追加操作の拡張

この項では、クライアントの追加操作の前後にDirectory Serverによってコールされる機能を開発する方法について説明します。

5.5.1 属性の前への文字列の追加

例39-10では、ディレクトリに追加されるエントリの説明属性の前に文字列ADDを追加しています。完全なサンプル・コードは、instance-path/examples/testpreop.cを参照してください。

ここでの説明に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定してプラグインを登録します。前述の「バインド操作の拡張」と「プラグインを登録するには」を参照してください。

事前操作追加関数を試すには、最近Example.comに加わったQuentin Cubbinsのエントリを追加します。QuentinのLDIFエントリquentin.ldifは、次の例のようになります。

例5-10 LDIFエントリ

dn: uid=qcubbins,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: qcubbins@example.com
userPassword: qcubbins
secretary: uid=bjensen,ou=People,dc=example,dc=com
description: Entry for Quentin Cubbins

次の例では、前への追加を実行しています。

例5-11 エントリの説明の前へのADDの追加(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_add(Slapi_PBlock * pb)
{
Slapi_Entry * entry;               /* Entry to add            */
Slapi_Attr  * attribute;           /* Entry attributes        */
Slapi_Value ** values;             /* Modified, duplicate vals*/
int         connId, opId, rc = 0;
long        msgId;

/* Get the entry. */
rc |= slapi_pblock_get(pb, SLAPI_ADD_ENTRY,       &entry);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,         &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,    &opId);

/* Prepend ADD to values of description attribute.            */
rc |= slapi_entry_attr_find(entry, "description", &attribute);
if (rc == 0) {                 /* Found a description, so...  */
int nvals, i, count = 0;
const Slapi_Value * value;

slapi_attr_get_numvalues(attribute, &nvals);
values = (Slapi_Value **)
slapi_ch_malloc((nvals+1)*sizeof(Slapi_Value *));

for (                          /* ...loop for value...    */
i = slapi_attr_first_value_const(attribute, &value);
i != -1;
i = slapi_attr_next_value_const(attribute, i, &value)
) {                            /* ...prepend "ADD ".      */
const char  * string;
char        * tmp;
values[count] = slapi_value_dup(value);
string = slapi_value_get_string(values[count]);
tmp    = slapi_ch_malloc(5+strlen(string));
strcpy(tmp, "ADD ");
strcpy(tmp+4, string);
slapi_value_set_string(values[count], tmp);
slapi_ch_free((void **)&tmp);
++count;
}

values[count] = NULL;

} else {                           /* entry has no desc.      */
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_add in test-preop plug-in",
"Entry has no description attribute.\n"
);
}

rc = slapi_entry_attr_replace_sv(entry, "description", values);
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_add in test-preop plug-in",
"Description attribute(s) not modified.\n"
);
}
slapi_valuearray_free(&values);

return 0;
}

Quentinのエントリをディレクトリに追加します。たとえば、エントリがquentin.ldifにある場合、次のように入力します。

$ ldapmodify -h localhost -p 1389 -a -f quentin.ldif \
-D uid=kvaughan,ou=people,dc=example,dc=com -w bribery
adding new entry uid=qcubbins,ou=People,dc=example,dc=com

$

ここで、Quentinのエントリについてディレクトリを検索します。

例5-12 エントリの検索

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com uid=qcubbins
version: 1
dn: uid=qcubbins,ou=People,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: qcubbins@example.com
secretary: uid=bjensen,ou=People,dc=example,dc=com
description: ADD Entry for Quentin Cubbins
$

説明属性の値に注意してください。

Quentinのエントリを後で例として再度使用できるように削除します。

$ ldapdelete -D uid=kvaughan,ou=people,dc=example,dc=com -w bribery \
uid=qcubbins,ou=people,dc=example,dc=com

事前操作プラグインをオフにして、追加するすべてのエントリの前にADDが追加されないようにします。

$ dsconf disable-plugin -h localhost -p 1389 "Test Preop"
$ dsadm restart instance-path

5.5.2 追加するエントリのロギング

追加するエントリのロギングでは、追加するエントリをログに記録します。完全なサンプル・コードは、instance-path/examples/testpostop.cを参照してください。

ここでの説明に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定してプラグインを登録します。「バインド操作の拡張」を参照してください。

testpostop_add()関数は、追加されるエントリのDNをログに記録し、プラグインchangelog.txtによって作成されるログにエントリも書き込みます。changelog.txtの場所は、次の例に示すようにプラットフォームによって異なります。プラグインによって管理されるchangelog.txtファイルは、Directory Serverによって管理される他の変更ログには関連付けられません。

例5-13 追加されたエントリの追跡(testpostop.c)

#include "slapi-plugin.h"

int
testpostop_add(Slapi_PBlock * pb)
{
char        * dn;                  /* DN of entry to add         */
Slapi_Entry * entry;               /* Entry to add               */
int           is_repl = 0;         /* Is this replication?       */
int           connId, opId, rc = 0;
long          msgId;

rc |= slapi_pblock_get(pb, SLAPI_ADD_TARGET,              &dn);
rc |= slapi_pblock_get(pb, SLAPI_ADD_ENTRY,               &entry);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,         &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,                 &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,            &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);

if (rc != 0) return (rc);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpostop_add in test-postop plug-in",
"Added entry (%s)\n", dn
);

/* In general, do not interfere in replication operations.       */
/* Log the DN and the entry to the change log file.              */
if (!is_repl) write_changelog(_ADD, dn, (void *) entry, 0);

return (rc);
}

プラグインをアクティブ化した後、Quentinのエントリを追加します。

$ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com \
-h localhost -p 1389 -w bribery -f quentin.ldif
adding new entry uid=qcubbins,ou=People,dc=example,dc=com

$

ログ・メッセージについてinstance-path/logs/errorsを検索します。ハウスキーピング情報を無視する場合は、次のメッセージが表示されます。

Added entry (uid=qcubbins,ou=people,dc=example,dc=com)

changelog.txtに記録されるエントリにも注意してください。次の例に示すように内部使用向けに付加されたタイムスタンプが変更ログにあることを除いて、エントリは、追加されたLDIFに類似しています。

例5-14 changelog.txtエントリの例

time: 21120506172445
dn: uid=qcubbins,ou=people,dc=example,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: qcubbins@example.com
secretary: uid=bjensen,ou=People,dc=example,dc=com
userPassword: qcubbins
creatorsName: cn=Directory Manager
modifiersName: cn=Directory Manager
createTimestamp: 21120506152444Z
modifyTimestamp: 21120506152444Z

5.6 変更操作の拡張

この項では、クライアントの変更操作の後にDirectory Serverによってコールされる機能を開発する方法について説明します。事前操作プラグインは、ここには示されていませんが、install-path/examples/testpreop.cで確認できます。ここで説明されるソース・コードは、install-path/examples/testpostop.cを参照してください。

ここでの説明に従ってプラグイン関数を使用する前に、「追加するエントリのロギング」で説明されているようにDirectory Serverを設定して、Quentinのエントリを忘れずに追加します。

testpostop_mod()関数は、変更されたエントリのDNをログに記録し、プラグインchangelog.txtによって管理されるログにエントリも書き込みます。changelog.txtの場所は、ソース・コードに示すように、プラットフォームによって異なります。

次の例は、ロギングを実行するコードを示しています。

例5-15 変更されたエントリの追跡(testpostop.c)

#include "slapi-plugin.h"

int
testpostop_mod(Slapi_PBlock * pb)
{
char    *  dn;                     /* DN of entry to modify      */
LDAPMod ** mods;                   /* Modifications to apply     */
int        is_repl = 0;            /* Is this replication?       */
int        connId, opId, rc = 0;
long       msgId;

rc |= slapi_pblock_get(pb, SLAPI_MODIFY_TARGET,           &dn);
rc |= slapi_pblock_get(pb, SLAPI_MODIFY_MODS,             &mods);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,         &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,                 &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,            &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);

if (rc != 0) return (rc);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpostop_mod in test-postop plug-in",
"Modified entry (%s)\n", dn
);

/* In general, do not interfere in replication operations.       */
/* Log the DN and the modifications made to the change log file. */
if (!is_repl) write_changelog(_MOD, dn, (void *) mods, 0);

return (rc);
}

まず、Quentinのエントリがディレクトリにあることを確認します。

例5-16 ディレクトリでのエントリの確認

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com uid=qcubbins
version: 1
dn: uid=qcubbins,ou=People,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: qcubbins@example.com
secretary: uid=bjensen,ou=People,dc=example,dc=com

プラグインがDirectory Serverでアクティブ化されたら、Quentinのメール・アドレスを変更します。

例5-17 メール・アドレスの変更

$ ldapmodify -h localhost -p 1389 \
-D uid=kvaughan,ou=people,dc=example,dc=com -w bribery
dn: uid=qcubbins,ou=People,dc=example,dc=com
changetype: modify
replace: mail
mail: quentin@example.com
^D

ログ・メッセージについてinstance-path/logs/errorsを検索します。ハウスキーピング情報を無視する場合は、次のメッセージが表示されます。

Modified entry (uid=qcubbins,ou=people,dc=example,dc=com)

次の例に示すように、changelog.txtに記録される情報にも注意してください。

例5-18 変更後のchangelog.txtの例

time: 21120506181305
dn: uid=qcubbins,ou=people,dc=example,dc=com
changetype: modify
replace: mail
mail: quentin@example.com
-
replace: modifiersname
modifiersname: cn=Directory Manager
-
replace: modifytimestamp
modifytimestamp: 21120506161305Z
-

5.7 名前の変更操作の拡張

この項では、クライアントのRDN変更操作の後にDirectory Serverによってコールされる機能について説明します。事前操作プラグインは、ここには示されていませんが、install-path/examples/testpreop.cで確認できます。ここで説明されるソース・コードは、install-path/examples/testpostop.cを参照してください。

ここでの説明に従ってプラグイン関数を使用する前に、「追加するエントリのロギング」で説明されているようにDirectory Serverを設定して、Quentinのエントリを忘れずに追加します。

testpostop_modrdn()関数は、変更されたエントリのDNをログに記録し、プラグインchangelog.txtによって管理されるログにもエントリを書き込みます。changelog.txtの場所は、ソース・コードに示すように、プラットフォームによって異なります。

次の例は、ロギングを実行するコードを示しています。

例5-19 名前が変更されたエントリの追跡(testpostop.c)

#include "slapi-plugin.h"

int
testpostop_modrdn( Slapi_PBlock *pb )
{
char * dn;                         /* DN of entry to rename      */
char * newrdn;                     /* New RDN                    */
int    dflag;                      /* Delete the old RDN?        */
int    is_repl = 0;                /* Is this replication?       */
int    connId, opId, rc = 0;
long   msgId;

rc |= slapi_pblock_get(pb, SLAPI_MODRDN_TARGET,           &dn);
rc |= slapi_pblock_get(pb, SLAPI_MODRDN_NEWRDN,           &newrdn);
rc |= slapi_pblock_get(pb, SLAPI_MODRDN_DELOLDRDN,        &dflag);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,         &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,                 &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,            &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);

if (rc != 0) return (rc);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpostop_modrdn in test-postop plug-in",
"Modrdn entry (%s)\n", dn
);

/* In general, do not interfere in replication operations.       */
/* Log the DN of the renamed entry, its new RDN, and the flag
* indicating whether the old RDN was removed to the change log. */
if (!is_repl) write_changelog(_MODRDN, dn, (void *) newrdn, dflag);

return (rc);
}

「変更操作の拡張」に示されているように、Quentinのエントリがディレクトリにあることを確認します。

先週末、Quentinは自分の名前をFredに変更することを決めました。彼のユーザーIDは現在fcubbinsのため、彼のエントリの名前を変更する必要があります。Directory Serverでアクティブ化されたこのプラグインを使用して、エントリを変更します。

例5-20 エントリの名前の変更

$ ldapmodify -D uid=kvaughan,ou=people,dc=example,dc=com -w bribery \
-h localhost -p 1389
dn: uid=qcubbins,ou=People,dc=example,dc=com
changetype: modify
replace: givenName
givenName: Fred

dn: uid=qcubbins,ou=People,dc=example,dc=com
changetype: modify
replace: mail
mail: fcubbins@example.com

dn: uid=qcubbins,ou=People,dc=example,dc=com
changetype: modify
replace: cn
cn: Fred Cubbins

dn: uid=qcubbins,ou=People,dc=example,dc=com
changetype: modrdn
newrdn: uid=fcubbins
deleteoldrdn: 1
^D

ログ・メッセージについてinstance-path/logs/errorsを検索します。ハウスキーピング情報を無視する場合は、次のメッセージが表示されます。

Modrdn entry (uid=qcubbins,ou=people,dc=example,dc=com)

changelog.txtに記録される情報にも注意してください。

例5-21 名前を変更された後のchangelog.txtエントリの例

time: 21120506184432
dn: uid=qcubbins,ou=people,dc=example,dc=com
changetype: modrdn
newrdn: uid=fcubbins
deleteoldrdn: 1

5.8 削除操作の拡張

この項では、クライアントの削除操作の後にDirectory Serverによってコールされる機能を開発する方法について説明します。事前操作プラグインは、ここには示されていませんが、install-path/examples/testpreop.cで確認できます。ここで説明されるソース・コードは、install-path/examples/testpostop.cを参照してください。

ここでの説明に従ってプラグイン関数を使用する前に、「追加するエントリのロギング」で説明されているようにDirectory Serverを設定して、Quentinのエントリを忘れずに追加します。

testpostop_modrdn()関数は、変更されたエントリのDNをログに記録し、プラグインchangelog.txtによって管理されるログにもエントリを書き込みます。changelog.txtの場所は、ソース・コードに示すように、プラットフォームによって異なります。

次の例は、ロギングを実行するコードを示しています。

例5-22 エントリの削除の追跡(testpostop.c)

#include "slapi-plugin.h"

int
testpostop_del( Slapi_PBlock *pb )
{
char * dn;                         /* DN of entry to delete      */
int    is_repl = 0;                /* Is this replication?       */
int    connId, opId, rc = 0;
long   msgId;

rc |= slapi_pblock_get(pb, SLAPI_DELETE_TARGET,           &dn);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,         &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,                 &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,            &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);

if (rc != 0) return (rc);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpostop_del in test-postop plug-in",
"Deleted entry (%s)\n", dn
);

/* In general, do not interfere in replication operations.       */
/* Log the DN of the deleted entry to the change log.            */
if (!is_repl) write_changelog(_DEL, dn, NULL, 0);

return (rc);
}

まず、「変更操作の拡張」に示されているように、Quentinのエントリがディレクトリにあることを確認します。

「名前の変更操作の拡張」の説明に従ってエントリの名前を変更した場合は、Quentinの名前がFredになっている可能性があります。

Quentinは主要な顧客に多くの暴言を吐いてExample.comを解雇されたと仮定します。Directory Serverでアクティブ化されたこのプラグインを使用して、彼のエントリを削除します。

$ ldapdelete -D uid=kvaughan,ou=people,dc=example,dc=com -w bribery \
uid=qcubbins,ou=People,dc=example,dc=com

ログ・メッセージについてinstance-path/logs/errorsを検索します。ハウスキーピング情報を無視する場合は、次のメッセージが表示されます。

Deleted entry (uid=qcubbins,ou=people,dc=example,dc=com)

次の例に示すように、changelog.txtに記録される情報にも注意してください。

例5-23 削除後のchangelog.txtの例

time: 21120506185404
dn: uid=qcubbins,ou=people,dc=example,dc=com
changetype: delete

5.9 クライアントに送信される情報の捕捉

この項では、結果コード、参照またはエントリをクライアント・アプリケーションに送信する前にDirectory Serverによってコールされる機能について説明します。ここで説明されるソース・コードは、install-path/examples/testpreop.cを参照してください。

次の例は、操作番号とユーザーDNをログに記録するコードを示しています。

例5-24 クライアントに対するロギングと応答(testpreop.c)

#include "slapi-plugin.h"

int
testpreop_send(Slapi_PBlock * pb)
{
Slapi_Operation * op;              /* Operation in progress   */
char            * connDn;          /* Get DN from connection  */
int               connId, opId, rc = 0;
long              msgId;

rc |= slapi_pblock_get(pb, SLAPI_OPERATION,       &op);
rc |= slapi_pblock_get(pb, SLAPI_CONN_DN,         &connDn);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,         &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,    &opId);
if (rc == 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testpreop_send in test-preop plug-in",
"Operation: %d\tUser: %s\n", slapi_op_get_type(op), connDn
);
}
slapi_ch_free_string(&connDn);

return (rc);
}

操作IDは、プラグイン・ヘッダー・ファイルinstall-path/include/slapi-plugin.hで定義されています。SLAPI_OPERATION_*を検索します。

ここでの説明に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定してプラグインを登録します。前述の「バインド操作の拡張」と「プラグインを登録するには」を参照してください。

Directory Serverでアクティブ化されたプラグインを使用して、Kirsten Vaughanとして検索を実行します。

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com \
-D uid=kvaughan,ou=people,dc=example,dc=com -w bribery \
uid=bcubbins

ログ・メッセージについてinstance-path/logs/errorsを検索します。ハウスキーピング情報なしで、最初のメッセージは次のようにバインド結果を反映します。

Operation: 1 User: uid=kvaughan,ou=people,dc=example,dc=com

次のメッセージは、次のように検索を反映します。

Operation: 4 User: uid=kvaughan,ou=people,dc=example,dc=com

プラグイン関数内で、slapi_op_get_type()を使用して操作タイプを決定します。slapi_op_get_type ()の詳細は「プラグインAPIリファレンス」を参照し、操作タイプのリストはプラグイン・ヘッダー・ファイルinstall-path/include/slapi-plugin.hを参照してください。

6 プラグインを使用した認証処理

この章では、Directory Serverでサポートされている認証メカニズムに追加したり、認証メカニズムをバイパスまたは置き換えるプラグインを作成する方法について説明します。この章では、認証の既存メカニズムの使用例を示します。特定の認証要件が満たされるように、コード例を調整する必要があります。

注意:

これらの例のみでは、セキュアな認証方式は提供されません。

この章の内容は、次のとおりです。

- 認証の仕組み

- プラグインによる認証の変更方法

- 簡易認証プラグインの開発

- SASL認証プラグインの開発

6.1 認証の仕組み

この項では、使用可能な認証方式を示します。また、この項では、クライアントを識別するために、Directory Serverによってどのように認証が処理されるかについても説明します。メカニズムを変更するプラグインを作成するときには、この項で説明するDirectory Serverモデルを考慮してください。

6.1.1 標準方式のサポート

Directory Serverでは、RFC 4511 (http://www.ietf.org/rfc/rfc4511.txt)で説明されている2つの認証方式がサポートされます。1つの方式は簡易認証であり、トランスポートにSecure Socket Layer (SSL)を使用することによって、セキュリティを強化します。もう1つの方式はSASLであり、このテクノロジについては、RFC 2222 (http://www.ietf.org/rfc/rfc2222.txt)の『Simple Authentication and Security Layer (SASL)』で詳しく説明しています。SASLを介して、Directory Serverでは、RFC 1777 (http://www.ietf.org/rfc/rfc1777.txt)の『Lightweight Directory Access Protocol』で説明されているように、LDAPサーバーおよびDirectory System Agent (DSA、X.500用語)についてKerberos認証がサポートされます。

6.1.2 バインド時のクライアント識別

LDAPクライアントの場合、Directory Serverでは、クライアントが接続に使用するDNを介してクライアント・アイデンティティを追跡します。また、サーバーでは、認証方式およびクライアントが接続に使用する外部資格証明を介した追跡も実行します。パラメータ・ブロックにより、関連するクライアント接続情報が保持されます。DNには、slapi_pblock_set()およびslapi_pblock_get()のSLAPI_CONN_DNおよびSLAPI_CONN_AUTHTYPEパラメータを介してアクセスできます。

HTTPを経由して接続するDSMLクライアントの場合、Directory Serverにより、バインドを行うためのアイデンティティ・マッピングが実行されます。結果として、フロントエンド・プロトコルに関係なく、プラグインでは同じクライアント・バインドとしてみなされます。

6.1.3 Directory Serverでのバインド処理

Directory Serverでは、事前操作バインド・プラグインおよび事前操作バインド関数をコールする前に、匿名バインド、ディレクトリ・マネージャによるバインドおよびレプリケーション・ユーザーによるバインドについての認証を完了します。これにより、プラグインをコールすることなくバインドが完了します。

注意:

SASL認証メカニズムの場合は、1つの認証リクエストを実行する間に、事前操作および事後操作のバインド関数を複数回コールできます。

たとえば、DIGEST-MD5の場合は、複数のLDAPバインド操作を使用して認証メカニズムを実装できます。

6.1.3.1 Directory Serverによるバインドの処理方法

Directory Serverでのバインド処理では、次の処理が実行されます。

1. バインド・リクエストを解析します。

2. 認証方式を決定します。

3. バインドDNをローカルに処理するかどうかを決定します。

4. リクエスト情報をパラメータ・ブロックに追加します。

5. フロントエンドでバインドを処理するか、または事前操作バインド・プラグイン関数をコールするかを決定します。

6. バインドを実行するかどうかに関係なく、サーバーのバックエンドからのバインドDNエントリに関する情報を使用します。

各アクションの説明は次のとおりです。

- バインド・リクエストを解析します。バインド・リクエストが到着すると、Directory Serverによって、DN、使用する認証方式および送信されたすべての資格情報(パスワードなど)が取得されます。クライアントがHTTP経由のDSMLを使用してサーバーにアクセスする場合、処理にマッピングが含まれる可能性があります。リクエストがSASL認証LDAP_AUTH_SASLを必要とする場合、Directory ServerによってSASLメカニズムが取得されます。次に、Directory Serverによって、リクエストから取得されたDNが正規化されます。また、サーバーによって、リクエストに含まれるすべてのLDAP v3コントロールも取得されます。

- 認証方式を決定します。場合によっては、方式は簡易認証であるものの、DNまたは資格証明が空であるか、欠落していることがあります。次に、Directory Serverでは、クライアントが匿名でバインドすることを想定して、SLAPI_CONN_DNをNULLに、SLAPI_CONN_AUTHTYPEをSLAPD_AUTH_NONEに設定し、結果LDAP_SUCCESSをクライアントに送信します。方式がSASL認証である場合、Directory Serverでは、まず、メカニズムがサポートされるかどうかを判別します。サポートされない場合、サーバーにより、結果LDAP_AUTH_METHOD_NOT_SUPPORTEDがクライアントに送信されます。

- DNをローカルに処理するかどうかを決定します。DNがローカル・インスタンスに格納されていないものの、デフォルトでDirectory Serverがクライアントを参照している場合、サーバーによって、結果LDAP_REFERRALがクライアントに送信されます。それ以外の場合、サーバーによって、結果LDAP_NO_SUCH_OBJECTがクライアントに送信されます。

- パラメータ・ブロックにリクエスト情報を追加します。Directory Serverによって、バインド・リクエスト情報が次のパラメータ・ブロックに含められます。

- SLAPI_BIND_TARGETにはリクエストから取得されたDN

- SLAPI_BIND_METHODには要求された認証方式

- SLAPI_BIND_CREDENTIALSにはリクエストから取得された資格情報

- SLAPI_BIND_MECHANISMにはSASLメカニズム名(適用可能な場合)

- バインドを処理するか、またはプラグインをコールするかを決定します。Directory Serverによって、ディレクトリのスーパーユーザーまたはレプリケーション・マネージャからのバインド・リクエストが認証され、成功した場合には結果LDAP_SUCCESSが、失敗した場合には結果LDAP_INVALID_CREDENTIALSが送信されます。
この作業がすべて完了した後、サーバーによって、事前操作バインド関数がコールされます。

ディレクトリ・マネージャやレプリケーション・マネージャからのバインド・リクエストまたは匿名バインドに対して、Directory Serverによって事前操作バインド関数がコールされることはありません。

- バックエンド・バインドを実行します。事前操作バインド関数から0が戻されると、Directory Serverではバインド操作を完了します。サーバーでは、バインドに関するディレクトリ・データベース内の情報を確認します。その後、サーバーでは、SLAPI_CONN_DNおよびSLAPI_CONN_AUTHTYPEを適切に設定します。必要に応じて、Directory Serverでは、パスワード関連の結果のコントロールをクライアントに送信します。サーバーは、通常、成功した場合には結果LDAP_SUCCESSを送信し、失敗した場合にはゼロ以外の結果を送信します。

6.2 プラグインによる認証の変更方法

事前操作バインド関数を使用すると、2つのうちいずれかの方法で、Directory Server認証を変更できます。プラグインでは、受信した認証情報とディレクトリ・データベースに格納された認証情報との比較を完全にバイパスするか、またはカスタムSASLメカニズムを実装します。

6.2.1 認証のバイパス

一部のプラグインでは、クライアント・リクエストの認証情報とディレクトリの認証情報との比較をバイパスします。このようなプラグインは、ゼロ以外の値を戻します。値1が戻されると、サーバーでは、事前操作関数の復帰後にバインドを完了できなくなります。LDAPまたはプラグインAPIを介して認証アイデンティティをマッピングすることなく、すべての認証情報をディレクトリの外部に格納する場合には、この方法を使用します。プラグインのその他の検証に加えて、サーバーのアクセス制御メカニズムでプラグインが正常に動作することを検証する必要があります。

例は、「簡易認証プラグインの開発」を参照してください。

6.2.2 カスタムSASLメカニズムの使用

プラグインにカスタムSASLメカニズムが実装されている場合、このメカニズムを使用するクライアントもこのメカニズムをサポートしている必要があります。

プラグインの例は、「SASL認証プラグインの開発」を参照してください。

6.3 簡易認証プラグインの開発

この項では、事前操作バインド・プラグインでのプラグインAPIを使用したユーザーの認証方法について説明します。この項で使用されている例では、パラメータ・ブロックから適切なバインド情報を取得します。次に、この例では、リクエストがLDAP_AUTH_SIMPLE用である場合は認証が処理されますが、認証が成功すると、サーバーはバインドを続行できます。

一部のバインドは、事前操作バインド関数がコールされる前にフロントエンドで実行されます。

6.3.1 簡易認証の例

次の例は、ソース・ファイルinstall-path/examples/testbind.cから抜粋したコードを示しています。

例6-1 事前操作バインド関数(testbind.c)

#include "slapi-plugin.h"

int
test_bind(Slapi_PBlock * pb)
{
char          *  dn;               /* Target DN                 */
int              method;           /* Authentication method     */
struct berval *  credentials;      /* Client SASL credentials   */
Slapi_DN      *  sdn      = NULL;  /* DN used in internal srch  */
char          *  attrs[2] = {      /* Look at userPassword only */
SLAPI_USERPWD_ATTR,
NULL
};
Slapi_Entry   *  entry    = NULL;  /* Entry returned by srch    */
Slapi_Attr    *  attr     = NULL;  /* Pwd attr in entry found   */
int              is_repl;          /* Is this replication?      */
int              is_intl;          /* Is this an internal op?   */
int              connId, opId, rc = 0;
long             msgId;

/* Obtain the bind information from the parameter block.        */
rc |= slapi_pblock_get(pb, SLAPI_BIND_TARGET,             &dn);
rc |= slapi_pblock_get(pb, SLAPI_BIND_METHOD,             &method);
rc |= slapi_pblock_get(pb, SLAPI_BIND_CREDENTIALS,        &credentials);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,         &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,                 &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,            &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);
rc |= slapi_pblock_get(pb, SLAPI_IS_INTERNAL_OPERATION,   &is_intl);

if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_bind in test-bind plug-in",
"Could not get parameters for bind operation (error %d).\n", rc
);
slapi_send_ldap_result(
pb, LDAP_OPERATIONS_ERROR, NULL, NULL, 0, NULL);
return (LDAP_OPERATIONS_ERROR);/* Server aborts bind here.  */
}

/* The following code handles simple authentication, where a
* user offers a bind DN and a password for authentication.
*
* Handling simple authentication is a matter of finding the
* entry corresponding to the bind DN sent in the request,
* then if the entry is found, checking whether the password
* sent in the request matches a value found on the
* userPassword attribute of the entry.                         */

/* Avoid interfering with replication or internal operations.   */
if (!is_repl && !is_intl) switch (method) {
case LDAP_AUTH_SIMPLE:

/* Find the entry specified by the bind DN...               */
sdn = slapi_sdn_new_dn_byref(dn);
rc |= slapi_search_internal_get_entry(
sdn,
attrs,
&entry,
plugin_id
);
slapi_sdn_free(&sdn);

if (rc != 0 || entry == NULL) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Could not find entry: %s\n", dn
);
rc = LDAP_NO_SUCH_OBJECT;
slapi_send_ldap_result(pb, rc, NULL, NULL, 0, NULL);
return (rc);
} else {
/* ...check credentials against the userpassword...         */
Slapi_Value    *  credval; /* Value of credentials      */
Slapi_ValueSet * pwvalues; /* Password attribute values */

rc |= slapi_entry_attr_find(
entry,
SLAPI_USERPWD_ATTR,
&attr
);

if (attr == NULL) {

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Entry %s has no userpassword.\n",
dn
);
rc = LDAP_INAPPROPRIATE_AUTH;
slapi_send_ldap_result(pb, rc, NULL, NULL, 0, NULL);
return (rc);
}

rc |= slapi_attr_get_valueset(
attr,
&pwvalues
);
if (rc != 0 || slapi_valueset_count(pwvalues) == 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Entry %s has no %s attribute values.\n",
dn, SLAPI_USERPWD_ATTR
);
rc = LDAP_INAPPROPRIATE_AUTH;
slapi_send_ldap_result(pb, rc, NULL, NULL, 0, NULL);
slapi_valueset_free(pwvalues);
return (rc);
}

credval = slapi_value_new_berval(credentials);

rc = slapi_pw_find_valueset(pwvalues, credval);

slapi_value_free(&credval);
slapi_valueset_free(pwvalues);

if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Credentials are not correct.\n"
);
rc = LDAP_INVALID_CREDENTIALS;
slapi_send_ldap_result(pb, rc, NULL, NULL, 0, NULL);
return (rc);
}
}

/* ...if successful, set authentication for the connection. */
if (rc != 0) return (rc);
rc |=slapi_pblock_set(pb, SLAPI_CONN_DN, slapi_ch_strdup(dn));
rc |=slapi_pblock_set(pb, SLAPI_CONN_AUTHMETHOD, SLAPD_AUTH_SIMPLE);
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Failed to set connection info.\n"
);
rc = LDAP_OPERATIONS_ERROR;
slapi_send_ldap_result(pb, rc, NULL, NULL, 0, NULL);
return (rc);
} else {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Authenticated: %s\n", dn
);

/* Now that authentication succeeded, the plug-in
* returns a value greater than 0, even though the
* authentication has been successful. A return
* code> 0 tells the server not to continue
* processing the bind. A return code of 0, such
* as LDAP_SUCCESS tells the server to continue
* processing the operation.                            */
slapi_send_ldap_result(
pb, LDAP_SUCCESS, NULL, NULL, 0, NULL);
rc = 1;
}
break;

/* This plug-in supports only simple authentication.            */
case LDAP_AUTH_NONE:
/* Anonymous binds are handled by the front-end before
* pre-bind plug-in functions are called, so this
* part of the code should never be reached.                */
case LDAP_AUTH_SASL:
default:
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"test_bind in test-bind plug-in",
"Plug-in does not handle auth. method: %d\n", method
);
rc = 0;                        /* Let server handle bind.   */
break;
}

return (rc);                       /* Server stops processing
* the bind if rc> 0.       */
}

コードの大部分では、LDAP_AUTH_SIMPLEのケースが処理されます。簡易認証の場合、プラグインではDNおよびパスワードを使用し、プラグインAPIコールを介してバインドするユーザーを認証します。

6.3.2 プラグインの動作の表示

プラグインのデモは、プラグインに関する情報のロギングをオンにすることによって機能します。この操作の様々なステージで、プラグインによって書き込まれたログ・メッセージを参照します。事前操作バインド関数をコールしないで、ディレクトリのスーパーユーザーとしてバインドしている間は、機能のデモを行うことができないため、プラグインを使用する前に、いくつかのサンプル・ユーザーおよびサンプル・データをロードします。

6.3.2.1 サンプル・サフィックスを設定するには

実行済でない場合には、サフィックスdc=example,dc=comを使用して、サンプルのLDIFファイルinstall-path/resources/ldif/Example.ldifからロードされたデータを含むディレクトリ・インスタンスを設定します。

1. 新規Directory Serverインスタンスを作成します。
次に例を示します。

$ dsadm create -h localhost -p 1389 /local/ds
Choose the Directory Manager password:
Confirm the Directory Manager password:
$

2. 新規Directory Serverインスタンスを開始します。
次に例を示します。

$ dsadm start /local/ds
Server started: pid=4705
$

3. サフィックスdc=example,dc=comを作成します。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf create-suffix -h localhost -p 1389 dc=example,dc=com
Enter "cn=directory manager" password:
Certificate "CN=defaultCert, CN=hostname:1636" presented by the
server is not trusted.
Type "Y" to accept, "y" to accept just once,
"n" to refuse, "d" for more details: Y
$

4. サンプルLDIFをロードします。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf import -h localhost -p 1389 \
install-path/resources/ldif/Example.ldif dc=example,dc=com
Enter "cn=directory manager" password:
New data will override existing data of the suffix
"dc=example,dc=com".
Initialization will have to be performed on replicated suffixes.
Do you want to continue [y/n] ? y

## Index buffering enabled with bucket size 16
## Beginning import job...
## Processing file "install-path/resources/ldif/Example.ldif"
## Finished scanning file "install-path/resources/ldif/Example.ldif" (160 entries)
## Workers finished; cleaning up...
## Workers cleaned up.
## Cleaning up producer thread...
## Indexing complete.
## Starting numsubordinates attribute generation.
This may take a while, please wait for further activity reports.
## Numsubordinates attribute generation complete. Flushing caches...
## Closing files...
## Import complete. Processed 160 entries in 5 seconds.
(32.00 entries/sec)

Task completed (slapd exit code: 0).
$

関連項目

Directory Service Control Centerを使用して、このタスクを実行できます。

6.3.2.2 プラグインを登録するには

実行済でない場合には、サンプルのプラグイン・ライブラリを作成し、プラグイン情報のロギングとサンプル・プラグインの両方をアクティブ化します。

1. プラグインを構築します。
ヒント: install-path/examples/Makefileまたはinstall-path/examples/Makefile64を使用します。

2. プラグイン情報メッセージがログに記録されるようにDirectory Serverを構成し、プラグインをロードします。

$ dsconf create-plugin -F custom-plugin-init-function -G custom-plugin-argument -H lib-path \
-Y custom-plugin-type "Custom Plugin"
$ dsconf enable-plugin "Custom Plugin"

ヒント: 詳細は、プラグインのソース・ファイルに指定されたコマンドを使用して参照してください。

3. Directory Serverを再起動します。

$ dsadm restart instance-path

6.3.2.3 プラグインをバイパスするには

サンプル・サフィックスには、数多くのユーザーが含まれています。匿名で、またはディレクトリ・マネージャとして、これらのユーザーのうちの1人Barbara Jensenのエントリを検索する場合、test_bind()プラグインはコールされません。このため、プラグインによって、情報メッセージがerrorsログに記録されることはありません。

プラグインをバイパスする検索を実行します。

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com uid=bjensen sn
version: 1
dn: uid=bjensen, ou=People, dc=example,dc=com
sn: Jensen
$ grep test_bind /local/ds/logs/errors
$

特別なユーザーがバインドを要求すると、サーバーでは、事前操作バインド・プラグインをバイパスします。

6.3.2.4 Example.comユーザーとしてバインドするには

1. Barbara Jensenとしてバインドする場合にerrorsログに記録される内容を確認します。

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com \
-D uid=bjensen,ou=people,dc=example,dc=com -w hifalutin uid=bjensen sn
version: 1
dn: uid=bjensen, ou=People, dc=example,dc=com
sn: Jensen
$ grep test_bind /local/ds/logs/errors
[04/Jan/2006:11:34:31 +0100] - INFORMATION -
test_bind in test-bind plug-in
- conn=4 op=0 msgId=1 -
Authenticated: uid=bjensen,ou=people,dc=example,dc=com
$

2. Barbara Jensenとしてバインドした場合の記録内容を確認したものの、パスワードが不正であると表示されます。

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com \
-D uid=bjensen,ou=people,dc=example,dc=com -w bogus uid=bjensen sn
ldap_simple_bind: Invalid credentials
$ grep test_bind /local/ds/logs/errors | grep -i credentials
[04/Jan/2006:11:36:07 +0100] - INFORMATION -
test_bind in test-bind plug-in
- conn=5 op=0 msgId=1 -  Credentials are not correct.
$

ここで、LDAP結果がコマンドライン・クライアントによって適切に解釈されます。同じ結果についてのプラグイン・メッセージが、errorsログに書き込まれます。

3. Barbaraのパスワードを削除して、再試行します。

$ ldapmodify -h localhost -p 1389 \
-D uid=kvaughan,ou=people,dc=example,dc=com -w bribery
dn: uid=bjensen,ou=people,dc=example,dc=com
changetype: modify
delete: userpassword
modifying entry uid=bjensen,ou=people,dc=example,dc=com
^D
$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com \
-D uid=bjensen,ou=people,dc=example,dc=com -w - uid=bjensen sn
Enter bind password:
ldap_simple_bind: Inappropriate authentication
$ grep test_bind /local/ds/logs/errors | grep -i password
[04/Jan/2006:11:41:25 +0100] - INFORMATION -
test_bind in test-bind plug-in
- conn=8 op=0 msgId=1 -
Entry uid=bjensen,ou=people,dc=example,dc=com has no userpassword.
$

ここで、LDAP結果がコマンドライン・クライアントによって適切に表示されます。プラグイン・メッセージに、Barbaraのバインド時の問題の詳細no userpassword attribute valuesが表示されます。

6.4 SASL認証プラグインの開発

この項では、バインド前操作プラグインによるカスタムSimple Authentication and Security Layer (SASL)メカニズムの実装方法について説明します。このメカニズムを使用すると、既存の認証メカニズムに影響を及ぼすことなく、相互認証を行うことができます。

サンプル・プラグインは、メカニズムmy_sasl_mechanismを使用してSASLバインド・リクエストに対応します。通常、このメカニズムによるバインドは成功します。この例は、SASL認証プラグインがどのように機能するかを示すことのみを目的としており、本番で使用するためのセキュアなメカニズムを示すものではありません。

6.4.1 SASLの例

このSASLの項全体では、例install-path/examples/testsaslbind.cおよびinstall-path/examples/clients/saslclient.cについて説明します。

ここでの説明に従ってプラグイン関数を使用する前に、サンプル・サフィックスを設定します。この設定は、「プラグインの動作の表示」を参照してください。サンプル・ファイルの冒頭にあるコメントの説明に従って、プラグインを登録します。

6.4.2 SASLメカニズムの登録

プラグインを登録する場合と同じ関数slapi_register_supported_saslmechanism()を使用して、SASLメカニズムを登録します。次の例は、プラグインとSASLメカニズムの両方を登録する関数を示しています。

例6-2 カスタムSASLプラグインの登録(testsaslbind.c)

#include "slapi-plugin.h"

Slapi_PluginDesc saslpdesc = {
"test-saslbind",                   /* plug-in identifier          */
"Oracle Corporation (test)",       /* vendor name                 */
"11.1.1.3.0",                      /* plug-in revision number     */
"Sample SASL pre-bind plug-in"     /* plug-in description         */
};

#define TEST_MECHANISM  "my_sasl_mechanism"
#define TEST_AUTHMETHOD SLAPD_AUTH_SASL TEST_MECHANISM

/* Register the plug-in with the server.                              */
#ifdef _WIN32
__declspec(dllexport)
#endif
int
testsasl_init(Slapi_PBlock * pb)
{
int rc = 0;                        /* 0 means success             */
rc |= slapi_pblock_set(
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description         */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &saslpdesc
);
rc |= slapi_pblock_set(            /* Pre-op bind SASL function   */
pb,
SLAPI_PLUGIN_PRE_BIND_FN,
(void *) testsasl_bind
);

/* Register the SASL mechanism.                                   */
slapi_register_supported_saslmechanism(TEST_MECHANISM);
return (rc);
}

slapi_register_supported_saslmechanism ()の使用の詳細は、「プラグインAPIリファレンス」を参照してください。

プラグイン関数testsasl_bind()は、最初にクライアントDN、メソッド、SASLメカニズムおよび資格証明を取得します。クライアントからTEST_MECHANISMの使用を求められない場合、この関数は0を戻し、これにより、サーバーでバインドを処理できます。次の例は、どのように処理が実行されるかを示しています。

例6-3 my_sasl_mechanismバインドの処理(testsaslbind.c)

#include "slapi-plugin.h"

#define TEST_MECHANISM  "my_sasl_mechanism"
#define TEST_AUTHMETHOD SLAPD_AUTH_SASL TEST_MECHANISM

int
testsasl_bind(Slapi_PBlock * pb)
{
char          * dn;                /* Target DN                   */
int             method;            /* Authentication method       */
char          * mechanism;         /* SASL mechanism              */
struct berval * credentials;       /* SASL client credentials     */
struct berval   svrcreds;          /* SASL server credentials     */
int             connId, opId, rc = 0;
long            msgId;

rc |= slapi_pblock_get(pb, SLAPI_BIND_TARGET,        &dn);
rc |= slapi_pblock_get(pb, SLAPI_BIND_METHOD,        &method);
rc |= slapi_pblock_get(pb, SLAPI_BIND_CREDENTIALS,   &credentials);
rc |= slapi_pblock_get(pb, SLAPI_BIND_SASLMECHANISM, &mechanism);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID,    &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID,            &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID,       &opId);
if (rc == 0) {
if (mechanism == NULL || strcmp(mechanism, TEST_MECHANISM) != 0)
return(rc);                /* Client binding another way. */
} else {                           /* slapi_pblock_get() failed!  */
return(rc);
}

/* Using the SASL mechanism that always succeeds, set conn. info. */
rc |= slapi_pblock_set(pb, SLAPI_CONN_DN,         slapi_ch_strdup(dn));
rc |= slapi_pblock_set(pb, SLAPI_CONN_AUTHMETHOD, TEST_AUTHMETHOD);
if (rc != 0) {                     /* Failed to set conn. info!   */
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testsasl_bind in test-saslbind plug-in",
"slapi_pblock_set() for connection information failed.\n"
);
slapi_send_ldap_result(
pb, LDAP_OPERATIONS_ERROR, NULL, NULL, 0, NULL);
return(LDAP_OPERATIONS_ERROR); /* Server tries other mechs.   */
}

/* Set server credentials.                                        */
svrcreds.bv_val = "my credentials";
svrcreds.bv_len = sizeof("my credentials") - 1;

rc |= slapi_pblock_set(pb, SLAPI_BIND_RET_SASLCREDS, &svrcreds);
if (rc != 0) {                     /* Failed to set credentials!  */
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testsasl_bind in test-saslbind plug-in",
"slapi_pblock_set() for server credentials failed.\n"
);
rc |= slapi_pblock_set(pb, SLAPI_CONN_DN,         NULL);
rc |= slapi_pblock_set(pb, SLAPI_CONN_AUTHMETHOD, SLAPD_AUTH_NONE);
return(LDAP_OPERATIONS_ERROR); /* Server tries other mechs.   */
}

/* Send credentials to client.                                    */
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"testsasl_bind in test-saslbind plug-in",
"Authenticated: %s\n", dn
);
slapi_send_ldap_result(pb, LDAP_SUCCESS, NULL, NULL, 0, NULL);
return 1;                          /* Server stops processing the
* bind if the plug-in returns
* a value greater than 0.     */
}

前述の例では、Directory Serverでバインド用に設定されるように、クライアント接続用のDNおよび認証方式を設定しています。SLAPI_CONN_DNおよびSLAPI_CONN_AUTHMETHODの設定は、バインドの主要な手順です。パラメータ・ブロックのこれらの値を使用しない場合、Directory Serverでは、バインドが匿名であるときのようにクライアント・リクエストを処理します。これにより、クライアントには、匿名バインドに対応するアクセス権が残されます。その後、SASLモデルに従って、次に示すように、Directory Serverからクライアントに資格証明が送信されます。

6.4.3 SASLクライアントの開発

プラグインをテストするには、my_sasl_mechanismを使用してバインドを行うクライアントが必要です。ここで説明する例では、このメカニズムおよびDirectory Serverに付属のクライアント・コードsaslclient.cを使用します。

クライアントでは、Directory Serverへの同期バインドのためのサンプルSASLメカニズムを使用することによって認証します。次の例では、Ted Morrisの認証がクライアント側でどのように行われるかを示しています。

例6-4 my_sasl_mechanismを使用したクライアント(clients/saslclient.c)

#include "ldap.h"

/* Use the fake SASL mechanism.                                      */
#define MECH "my_sasl_mechanism"

/* Global variables for client connection information.
* You may set these here or on the command line.                    */
static char * host = "localhost";      /* Server hostname            */
static int    port = 389;              /* Server port                */
/* Load <install-path>/ldif/Example.ldif
* before trying the plug-in with this default user.                 */
static char * user = "uid=tmorris,ou=people,dc=example,dc=com";
/* New value for userPassword                                        */
static char * npwd = "23skidoo";

/* Check for host, port, user and new password as arguments.         */
int get_user_args(int argc, char ** argv);

int
main(int argc, char ** argv)
{
LDAP          * ld;                /* Handle to LDAP connection  */
LDAPMod         modPW, * mods[2];  /* For modifying the password */
char          * vals[2];           /* Value of modified password */
struct berval   cred;              /* Client bind credentials    */
struct berval * srvCred;           /* Server bind credentials    */
int             ldapVersion;

/* Use default hostname, server port, user, and new password
* unless they are provided as arguments on the command line.    */
if (get_user_args(argc, argv) != 0) return 1; /* Usage error     */

/* Get a handle to an LDAP connection.                           */
printf("Getting the handle to the LDAP connection...\n");
if ((ld = ldap_init(host, port)) == NULL) {
perror("ldap_init");
return 1;
}

/* By default, the LDAP version is set to 2.                     */
printf("Setting the version to LDAP v3...\n");
ldapVersion = LDAP_VERSION3;
ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &ldapVersion);

/* Authenticate using the example SASL mechanism.                */
printf("Bind DN is %s...\n", user);
printf("Binding to the server using %s...\n", MECH);
cred.bv_val = "magic";
cred.bv_len = sizeof("magic") - 1;
if (ldap_sasl_bind_s(ld, user, MECH, &cred, NULL, NULL, &srvCred)) {
ldap_perror(ld, "ldap_sasl_bind_s");
return 1;
}

/* Display the credentials returned by the server.               */
printf("Server credentials: %s\n", srvCred->bv_val);

/* Modify the user's password.                                   */
printf("Modifying the password...\n");
modPW.mod_op     = LDAP_MOD_REPLACE;
modPW.mod_type   = "userpassword";
vals[0]          = npwd;
vals[1]          = NULL;
modPW.mod_values = vals;

mods[0] = &modPW; mods[1] = NULL;

if (ldap_modify_ext_s(ld, user, mods, NULL, NULL)) {
ldap_perror(ld, "ldap_modify_ext_s");
return 1;
}

/* Finish up.                                                    */
ldap_unbind(ld);
printf("Modification was successful.\n");
return 0;
}

6.4.4 SASLクライアントの試行

クライアントにより、Directory ServerへのバインドによってTedのパスワードが変更された後、userPassword属性値の変更が要求されます。

サーバーでプラグインをアクティブ化した後、クライアント・コードsaslclient.cをコンパイルします。次に、クライアントを実行して、バインドおよびパスワード変更を行います。

$ ./saslclient
Using the following connection info:
host:    localhost
port:    389
bind DN: uid=tmorris,ou=people,dc=example,dc=com
new pwd: 23skidoo
Getting the handle to the LDAP connection...
Setting the version to LDAP v3...
Bind DN is uid=tmorris,ou=people,dc=example,dc=com...
Binding to the server using my_sasl_mechanism...
Server credentials: my credentials
Modifying the password...
Modification was successful.
$

Directory Server側では、クライアントがプラグインによって認証されたことを示すメッセージは、errorsログに含められます。

$ grep tmorris /local/ds/logs/errors | grep -i sasl
[04/Jan/2006:12:05:30 +0100] - INFORMATION
- testsasl_bind in test-saslbind plug-in
- conn=12 op=0 msgId=1 -
Authenticated: uid=tmorris,ou=people,dc=example,dc=com

7 プラグインを使用した内部操作の実行

この章では、対応するクライアント・リクエストが存在しない検索、変更、DN変更および削除の各操作を実行する方法について説明します。

この章で使用されるプラグインAPI関数の詳細は、第15章「Directory Server関数リファレンス(パートI)」を参照してください。

この章の内容は、次のとおりです。

- 内部操作の使用

- 内部操作例の検索

- 内部操作例を使用する前に

- 内部追加

- 内部変更

- 内部名前変更および移動(DN変更)

- 内部検索

- 内部削除

7.1 内部操作の使用

この章では、内部検索、追加、変更、RDN変更および削除の各操作の使用方法について説明します。

7.1.1 内部操作を使用する場合

内部操作は、クライアントからの外部リクエストによってではなく、プラグインによって内部的に開始されるという意味で内部的です。内部操作コールは、プラグインで、クライアント・リクエストが存在しない操作をDirectory Serverｆで実行する必要がある場合に使用します。

7.1.2 内部操作に関する問題

内部操作を使用する開発においては、パラメータ・ブロックを設定してすべてのメモリー管理を直接処理します。製品に付属のライブラリなどの、最適化されたバイナリを使用したデバッグ・セッションは、冗長になる場合があります。コードは慎重に確認してください。必要に応じて、見逃したエラーを指摘できるパートナと一緒に作業します。内部操作コール前後でのメモリー管理を誤ると、プラグインAPIでの他のコールよりも簡単に、理解が困難なセグメンテーション・フォルトが発生します。

また、内部操作の結果、一部のキャッシュのみが更新されます。たとえば、アクセス制御命令を変更すると、アクセス制御キャッシュが更新されます。CoSおよびロールで使用される属性への内部操作変更により、CoSおよびロールのキャッシュが更新されることはありません。

7.1.3 内部操作例の検索

この章で使用するプラグイン・コードは、install-path/examples/internal.cで見つかります。

7.2 内部操作例を使用する前に

サンプル・プラグインinternal.cを使用する前に、新しいサフィックスdc=example,dc=comを作成して、このサフィックスをサンプル・データに移入します。

7.2.1 サンプル・サフィックスを設定するには

実行済でない場合には、サフィックスdc=example,dc=comを使用して、サンプルのLDIFファイルinstall-path/resources/ldif/Example.ldifからロードされたデータを含むディレクトリ・インスタンスを設定します。

1. 新規Directory Serverインスタンスを作成します。
次に例を示します。

$ dsadm create -h localhost -p 1389 /local/ds
Choose the Directory Manager password:
Confirm the Directory Manager password:
$

2. 新規Directory Serverインスタンスを開始します。
次に例を示します。

$ dsadm start /local/ds
Server started: pid=4705
$

3. サフィックスdc=example,dc=comを作成します。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf create-suffix -h localhost -p 1389 dc=example,dc=com
Enter "cn=directory manager" password:
Certificate "CN=defaultCert, CN=hostname:1636" presented by the
server is not trusted.
Type "Y" to accept, "y" to accept just once,
"n" to refuse, "d" for more details: Y
$

4. サンプルLDIFをロードします。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf import -h localhost -p 1389 \
install-path/resources/ldif/Example.ldif dc=example,dc=com
Enter "cn=directory manager" password:
New data will override existing data of the suffix
"dc=example,dc=com".
Initialization will have to be performed on replicated suffixes.
Do you want to continue [y/n] ? y

## Index buffering enabled with bucket size 16
## Beginning import job...
## Processing file "install-path/resources/ldif/Example.ldif"
## Finished scanning file "install-path/resources/ldif/Example.ldif" (160 entries)
## Workers finished; cleaning up...
## Workers cleaned up.
## Cleaning up producer thread...
## Indexing complete.
## Starting numsubordinates attribute generation.
This may take a while, please wait for further activity reports.
## Numsubordinates attribute generation complete. Flushing caches...
## Closing files...
## Import complete. Processed 160 entries in 5 seconds.
(32.00 entries/sec)

Task completed (slapd exit code: 0).
$

関連項目

Directory Service Control Centerを使用して、このタスクを実行できます。

7.3 内部追加

内部追加の場合、パラメータ・ブロックに領域を割り当てます。slapi_add_entry_internal_set_pb ()を使用して、追加のためのパラメータ・ブロックを設定します。これにより、slapi_add_internal_pb()を起動したときに、エントリがパラメータ・ブロックに含まれます。その後、パラメータ・ブロックを解放します。内部追加では、パラメータ・ブロックによってサーバーに渡されるエントリが使用されます。

例7-1 内部追加操作(internal.c)

#include "slapi-plugin.h"

/* Internal operations require an ID for the plug-in.                   */
static Slapi_ComponentId * plugin_id     = NULL;

int
test_internal()
{
Slapi_DN       * sdn;              /* DN holder for internal ops    */
Slapi_Entry    * entry;            /* Entry holder for internal ops */
Slapi_PBlock   * pb;               /* PBlock for internal ops       */
char           * str = NULL;       /* String holder for internal ops*/
int              len;              /* Length of LDIF from entry     */
int              rc;               /* Return code; 0 means success. */

/* Check that the example suffix exists.                            */
sdn = slapi_sdn_new_dn_byval("dc=example,dc=com");
if (slapi_be_exist(sdn)) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_internal in test-internal plug-in",
"Suffix (%s) does not exist, exiting.\n",
slapi_sdn_get_dn(sdn)
);
slapi_sdn_free(&sdn);
return (0);
}
slapi_sdn_free(&sdn);

/*
* Add an entry for Quentin Cubbins to the example suffix
* using slapi_add_entry_internal().                                */
entry = slapi_entry_alloc();
slapi_entry_set_dn(                /* slapi_entry_set_dn()          */
entry,                         /* requires a copy of the DN.    */
slapi_ch_strdup("uid=qcubbins,ou=People,dc=example,dc=com")
);
/* slapi_entry_add_string()      */
/* does not require a copy.      */
slapi_entry_add_string(entry, "objectclass", "top");
slapi_entry_add_string(entry, "objectclass", "person");
slapi_entry_add_string(entry, "objectclass", "organizationalPerson");
slapi_entry_add_string(entry, "objectclass", "inetOrgPerson");
slapi_entry_add_string(entry, "uid", "qcubbins");
slapi_entry_add_string(entry, "givenName", "Quentin");
slapi_entry_add_string(entry, "sn", "Cubbins");
slapi_entry_add_string(entry, "cn", "Quentin Cubbins");
slapi_entry_add_string(entry, "mail", "qcubbins@example.com");
slapi_entry_add_string(entry, "userPassword", "qcubbins");
slapi_entry_add_string(entry, "secretary",
"uid=bjensen,ou=People,dc=example,dc=com");

pb = slapi_pblock_new();           /* Make a new PBlock...          */
rc = slapi_add_entry_internal_set_pb(
pb,
entry,
NULL,                          /* No controls                   */
plugin_id,
SLAPI_OP_FLAG_NEVER_CHAIN      /* Never chain this operation.   */
);
if (rc != 0) {
slapi_pblock_destroy(pb);
return (-1);
}

str = slapi_entry2str(entry, &len);/* Entry as LDIF for the log.
* Note you have to capture this
* before the internal add, during
* which the entry is consumed.  */
rc = slapi_add_internal_pb(pb);    /* Entry consumed here           */
/* ... get status ...            */
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
if (rc != LDAP_SUCCESS) {
slapi_pblock_destroy(pb);
return (-1);
}

slapi_pblock_destroy(pb);

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_internal in test-internal plug-in",
"\nAdded entry:\n%sEntry length: %d\n", str, len
);

return (0);
}

内部操作には、plugin_idが必要であることに注意してください。示されているように、プラグインIDはグローバル変数です。プラグインIDは、この関数を使用してプラグインの初期化中に設定されます。

slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &plugin_id);

パラメータ・ブロックpbは、プラグイン初期化関数に渡されます。サンプル実装は、internal.cのinternal_init()関数を参照してください。

7.4 内部変更

内部変更の場合、最初に、LDAPMod変更の配列を設定します。配列には、変更する属性タイプに関する情報が含まれます。変更には、属性値も含まれます。次に、内部追加の場合は、パラメータ・ブロックに領域を割り当てます。slapi_modify_internal_set_pb ()を使用して、パラメータ・ブロックを設定します。次に、slapi_modify_internal_pb ()を使用して変更操作を起動します。最後に、使用されたメモリーを解放します。

例7-2 内部変更操作(internal.c)

この例では、ユーザーの電子メール・アドレスの内部変更について説明します。

#include "slapi-plugin.h"

static Slapi_ComponentId * plugin_id     = NULL;

int
test_internal()
{
Slapi_Entry    * entry;            /* Entry holder for internal ops */
Slapi_PBlock   * pb;               /* PBlock for internal ops       */
LDAPMod          mod_attr;         /* Attribute to modify           */
LDAPMod        * mods[2];          /* Array of modifications        */
char           * mail_vals[]  =    /* New mail address              */
{"quentin@example.com", NULL};
int              rc;               /* Return code; 0 means success. */

/* Modify Quentin's entry after his email address changes from
* qcubbins@example.com to quentin@example.com.                     */
mod_attr.mod_type   = "mail";
mod_attr.mod_op     = LDAP_MOD_REPLACE;
mod_attr.mod_values = mail_vals;   /* mail: quentin@example.com     */
mods[0]             = &mod_attr;
mods[1]             = NULL;

pb = slapi_pblock_new();           /* Set up a PBlock...            */
rc = slapi_modify_internal_set_pb(
pb,
"uid=qcubbins,ou=people,dc=example,dc=com",
mods,
NULL,                          /* No controls                   */
NULL,                          /* DN rather than unique ID      */
plugin_id,
SLAPI_OP_FLAG_NEVER_CHAIN      /* Never chain this operation.   */
);
if (rc != 0) {
slapi_pblock_destroy(pb);
return (-1);
}

rc = slapi_modify_internal_pb(pb); /* Unlike internal add,          */
/* nothing consumed here         */
/* ... get status ...            */
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
if (rc != LDAP_SUCCESS) {
slapi_pblock_destroy(pb);
return (-1);
}

slapi_pblock_destroy(pb);          /* ... clean up the PBlock.      */

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_internal in test-internal plug-in",
"\nModified attribute: %s\nNew value: %s\n",
mod_attr.mod_type, mail_vals[0]
);

return (0);
}

mod_attrおよびmail_vals内のデータは、変更後も引き続き使用できます。内部追加とは異なり、内部変更では、パラメータ・ブロックに設定したデータは使用されません。

7.5 内部名前変更および移動(DN変更)

この項では、エントリの名前を変更したり、エントリを移動するプラグインの開発方法について説明します。

内部DN変更操作は、次のステージで実行されます。

1. パラメータ・ブロックに領域を割り当てます。

2. slapi_rename_internal_set_pb ()を使用して、操作を設定します。

3. slapi_modrdn_internal_pb()を使用して、操作を起動します。
操作の最初のステージはrenameです。操作の2番目のステージはmodrdnです。

4. パラメータ・ブロックを解放します。

例7-3 内部名前変更または移動操作(internal.c)

この例では、内部DN変更操作について説明します。内部DN変更では、パラメータ・ブロックに設定したデータは使用されません。

#include "slapi-plugin.h"

static Slapi_ComponentId * plugin_id     = NULL;

int
test_internal()
{
Slapi_PBlock   * pb;               /* PBlock for internal ops       */
int              rc;               /* Return code; 0 means success. */

pb = slapi_pblock_new();           /* Set up a PBlock again...      */
rc = slapi_rename_internal_set_pb(
pb,
"uid=qcubbins,ou=people,dc=example,dc=com", /*Specify target entry*/
"uid=fcubbins",                             /*Specify new RDN     */
"ou=people,dc=example,dc=com",              /*Specify new superior*/
/* The new superior is the same as the old superior.            */
1,                             /* Delete old RDN                */
NULL,                          /* No controls                   */
NULL,                          /* DN rather than unique ID      */
plugin_id,
SLAPI_OP_FLAG_NEVER_CHAIN      /* Never chain this operation.   */
);

if (rc != LDAP_SUCCESS) {
slapi_pblock_destroy(pb);
return (-1);
}

rc = slapi_modrdn_internal_pb(pb); /* Like internal modify,         */
/* nothing consumed here.        */
/* ... get status ...            */
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
if (rc != LDAP_SUCCESS) {
slapi_pblock_destroy(pb);
return (-1);
}

slapi_pblock_destroy(pb);          /* ... cleaning up.              */

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_internal in test-internal plug-in",
"\nNew entry RDN: %s\n", "uid=fcubbins"
);

return (0);
}

7.6 内部検索

内部検索の場合、コールバックを使用して、サーバーによる検出内容を取得します。コールバックを使用すると、外部リクエストによって開始される操作でクライアント・アプリケーションに戻される情報(LDAP結果コード、検出されたエントリおよび参照)を取得できます。

取得するコールバック・データを設定します。また、サーバーによってコールバックされる関数を作成します。

例7-4 検索コールバック(internal.c)

このコードは、サンプル・プラグインinternal.cでコールバックを使用して、検出される最初のエントリのLDIF表現を取得する方法を示しています。エントリは、slapi_entry2str()をコールバック関数として使用し、内部検索中に検出されます。

#include "slapi-plugin.h"

struct cb_data {                       /* Data returned from search     */
char * e_str;                      /* Entry as LDIF                 */
int    e_len;                      /* Length of LDIF                */
};

int
test_internal_entry_callback(Slapi_Entry * entry, void * callback_data)
{
struct cb_data * data;
int              len;

/* This callback could do something more interesting with the
* data such as build an array of entries returned by the search.
* Here, simply log the result.                                     */
data        = (struct cb_data *)callback_data;
data->e_str = slapi_entry2str(entry, &len);
data->e_len = len;
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_internal_entry_callback in test-internal plug-in",
"\nFound entry: %sLength: %d\n", data->e_str, data->e_len
);
return (-1);                       /* Stop at the first entry.      */
}                                      /* To continue, return 0.        */

このコールバックは、最初のエントリが検出されると検索を停止します。プラグインでは、検索によって戻される複数のエントリを処理することが必要な場合があります。このため、プラグインの処理内容に応じて、データへの領域の割当て方法を考慮します。

コールバック・データおよび実装された関数を使用して、内部検索を処理する準備が整いました。最初に、パラメータ・ブロックおよびコールバック・データに領域を割り当て、slapi_search_internal_pb_set ()を使用してパラメータ・ブロックを設定します。次に、slapi_search_internal_pb()を使用して検索を起動し、また、slapi_search_internal_callback_pb()を使用してコールバックを設定します。終了したら、割り当てた領域を解放します。

例7-5 内部検索操作(internal.c)

#include "slapi-plugin.h"

static Slapi_ComponentId * plugin_id     = NULL;

int
test_internal()
{
Slapi_PBlock   * pb;               /* PBlock for internal ops       */
char           * srch_attrs[] =    /* Attr. to get during search    */
{LDAP_ALL_USER_ATTRS, NULL};
struct cb_data   callback_data;    /* Data returned from search     */
int              rc;               /* Return code; 0 means success. */

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"test_internal in test-internal plug-in",
"\nSearching with base DN %s, filter %s...\n",
"dc=example,dc=com", "(uid=fcubbins)"
);

pb = slapi_pblock_new();           /* Set up a PBlock...            */
rc = slapi_search_internal_set_pb(
pb,
"dc=example,dc=com",           /* Base DN for search            */
LDAP_SCOPE_SUBTREE,            /* Scope                         */
"(uid=fcubbins)",              /* Filter                        */
srch_attrs,                    /* Set to get all user attrs.    */
0,                             /* Return attrs. and values      */
NULL,                          /* No controls                   */
NULL,                          /* DN rather than unique ID      */
plugin_id,
SLAPI_OP_FLAG_NEVER_CHAIN      /* Never chain this operation.   */
);

if (rc != LDAP_SUCCESS) {
slapi_pblock_destroy(pb);
return (-1);
}

/* Internal search puts results into the PBlock, but uses callbacks
* to get at the data as it is turned up by the search. In this case,
* what you want to get is the entry found by the search.           */
rc  = slapi_search_internal_pb(pb);
rc |= slapi_search_internal_callback_pb(
pb,
&callback_data,
NULL,                          /* No result callback            */
test_internal_entry_callback,
NULL                           /* No referral callback          */
);

/* ... get status ...            */
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
if (rc != LDAP_SUCCESS) {
slapi_pblock_destroy(pb);
return -1;
}
/* Free the search results when
* finished with them.           */
slapi_free_search_results_internal(pb);
slapi_pblock_destroy(pb);          /* ... done cleaning up.         */

return (0);
}

ここで、callback_dataをローカルに割り当てて解放します。データを別のプラグイン関数に渡す場合は、異なる方法でメモリーを管理できます。

7.7 内部削除

内部削除の場合、パラメータ・ブロックに領域を割り当ててから、slapi_delete_internal_set_pb()を使用してパラメータ・ブロックを設定します。slapi_delete_internal_pb()を使用して削除を起動します。最後に、パラメータ・ブロックを解放します。

内部削除では、パラメータ・ブロックに設定したデータは使用されません。

8 エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインの作成

この章では、Directory Serverがディレクトリ・データベースに対してエントリを書き込むときとエントリを読み取るときの動作を変更するプラグインの作成方法について説明します。

注意:

エントリ・ストア・プラグインとエントリ・フェッチ・プラグインを作成するかわりに、属性の暗号化を使用できます。『Oracle Directory Server Enterprise Edition管理者ガイド』の「属性値の暗号化」を参照してください。

この章の内容は、次のとおりです。

- エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインのコール

- エントリを暗号化するプラグインの作成

8.1 エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインのコール

この項では、エントリ・ストア・プラグインとエントリ・フェッチ・プラグインがコールされる場合について説明します。また、エントリがプラグインによってどのように処理されると予想されているのかも説明します。

サーバーは、データをディレクトリ・データベースに書き込む前に、エントリ・ストア・プラグイン関数をコールします。ディレクトリ・データベースからデータを読み取った後に、エントリ・フェッチ・プラグイン関数をコールします。そのため、エントリ・ストア・プラグインとエントリ・フェッチ・プラグインは、一般的に、ディレクトリ・エントリの暗号化および復号化、または監査作業の実行に使用されることがあります。

8.1.1 LDIF文字列パラメータの使用

他のタイプのプラグインとは異なり、エントリ・ストア・プラグイン関数とエントリ・フェッチ・プラグイン関数は、引数としてパラメータ・ブロックを取りません。かわりに、これらの関数は、エントリのLDIF文字列表現と文字列の長さの2つのパラメータを取ります。Directory Serverは、プラグインが正常に戻された後に、変更されたLDIF文字列を使用します。エントリ・ストア・プラグイン関数のプロトタイプ例は、次のとおりです。

int my_entrystore_fn(char ** entry, unsigned int * length);

プラグイン関数は、必要に応じて文字列を操作できます。エントリ・ストア・プラグインとエントリ・フェッチ・プラグインは、成功するとゼロ(0)を戻します。関数が戻されるとき、Directory Serverは、entryとlengthにパラメータの変更されたバージョンが含まれることを期待します。

8.1.2 エントリ・ストアとエントリ・フェッチの検索例

この章のプラグイン関数の例は、install-path/examples/testentry.cにあります。

次の例は、この章で使用されるエントリ・ストアのスクランブル関数を示しています。この関数は、データベースにエントリを書き込む前にDirectory Serverによってコールされます。

例8-1 エントリ・フェッチのスクランブラ(testentry.c)

#include "slapi-plugin.h"

#ifdef _WIN32
typedef unsigned int uint;
__declspec(dllexport)
#endif
int
testentry_scramble(unsigned char ** entry, uint * len)
{
uint i;

(*len)++;
*entry = slapi_ch_realloc(*entry, *len);
/* Scramble using bitwise exclusive-or on each character.     */
for (i = *len - 1; i> 0; i--) {
(*entry)[i] = (*entry)[i - 1] ^ 0xaa;
}
(*entry)[0] = 0xaa;

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"testentry_scramble in test-entry plug-in",
"Entry data scrambled.\n"
);

return 0;
}

次の例は、この章で使用されるエントリ・ストアのスクランブル解除関数を示しています。関数は、データベースからエントリを読み取った後にサーバーによってコールされます。

例8-2 エントリ・フェッチのアンスクランブラ(testentry.c)

#include "slapi-plugin.h"

#ifdef _WIN32
typedef unsigned int uint;
__declspec(dllexport)
#endif
int
testentry_unscramble(unsigned char ** entry, uint * len)
{
uint i;

/* Return now if the entry is not scrambled.                  */
if (**entry != 0xaa) { return 0; }

/* Unscramble using bitwise exclusive-or on each character.   */
(*len)--;
for (i = 0; i < *len; i++) {
(*entry)[i] = (*entry)[i + 1] ^ 0xaa;
}

slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"testentry_unscramble in test-entry plug-in",
"Entry data unscrambled.\n"
);

return 0;
}

2つの関数間の対称性に注意してください。スクランブル・マスク(バイナリの0xaaまたは10101010)によって、変換はわかりやすくなりますがセキュアにはなりません。セキュアな暗号化メカニズムは、かなり複雑になることがあります。

8.2 エントリを暗号化するプラグインの作成

この項では、エントリ・ストアド・エントリ・フェッチ・プラグインを登録する方法について説明します。ディレクトリ・データベースに書き込まれるディレクトリ・エントリにスクランブルをかけるプラグインを作成する方法を示します。また、ディレクトリ・データベースから読み取られるディレクトリ・エントリのスクランブルを解除する方法も説明します。

注意:

この章の例では、セキュアなエントリ・ストレージ・スキームを構成しません。

次の例は、エントリ・ストア・プラグインとエントリ・フェッチ・プラグインがDirectory Serverに登録される仕組みを示しています。

8.2.1 エントリ・ストア・プラグインおよびエントリ・フェッチ・プラグインの登録

次の例は、エントリ・ストア・プラグインとエントリ・フェッチ・プラグインがDirectory Serverに登録される仕組みを示しています。

例8-3 エントリ・ストア・プラグインとエントリ・フェッチ・プラグインの登録(testentry.c)

#include "slapi-plugin.h"

Slapi_PluginDesc entrypdesc = {
"test-entry",                      /* plug-in identifier      */
"Oracle Corporation (test)",       /* vendor name             */
"11.1.1.3.0",                      /* plug-in revision number */
"Sample entry store/fetch plug-in" /* plug-in description     */
};

int
testentry_init(Slapi_PBlock *pb)
{
int rc = 0;                        /* 0 means success         */
rc |= slapi_pblock_set(            /* Plug-in API version     */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description     */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &entrypdesc    );
rc |= slapi_pblock_set(            /* Entry store function    */
pb,
SLAPI_PLUGIN_ENTRY_STORE_FUNC,
(void *) testentry_scramble
);
rc |= slapi_pblock_set(            /* Entry fetch function    */
pb,
SLAPI_PLUGIN_ENTRY_FETCH_FUNC,
(void *) testentry_unscramble
);
return rc;
}

8.2.2 エントリ・ストアとエントリ・フェッチの試行例

データベース内のスクランブルをかけられたデータとスクランブル解除されたデータの違いを示すことによって、プラグインについて説明します。そのため、すぐにはプラグインを有効にしません。かわりに、スクランブルをかける前に新しいディレクトリ・サフィックスにエントリを追加します。その後、ディスク上のデータベースの結果を観察します。次に、エントリを削除して、スクランブル・プラグインを有効にします。その後、同じエントリを再度追加します。最後に、エントリにスクランブルがかけられた後に結果を観察します。

8.2.2.1 サンプル・サフィックスを設定するには

実行済でない場合には、サフィックスdc=example,dc=comを使用して、サンプルのLDIFファイルinstall-path/resources/ldif/Example.ldifからロードされたデータを含むディレクトリ・インスタンスを設定します。

1. 新規Directory Serverインスタンスを作成します。
次に例を示します。

$ dsadm create -h localhost -p 1389 /local/ds
Choose the Directory Manager password:
Confirm the Directory Manager password:
$

2. 新規Directory Serverインスタンスを開始します。
次に例を示します。

$ dsadm start /local/ds
Server started: pid=4705
$

3. サフィックスdc=example,dc=comを作成します。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf create-suffix -h localhost -p 1389 dc=example,dc=com
Enter "cn=directory manager" password:
Certificate "CN=defaultCert, CN=hostname:1636" presented by the
server is not trusted.
Type "Y" to accept, "y" to accept just once,
"n" to refuse, "d" for more details: Y
$

4. サンプルLDIFをロードします。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf import -h localhost -p 1389 \
install-path/resources/ldif/Example.ldif dc=example,dc=com
Enter "cn=directory manager" password:
New data will override existing data of the suffix
"dc=example,dc=com".
Initialization will have to be performed on replicated suffixes.
Do you want to continue [y/n] ? y

## Index buffering enabled with bucket size 16
## Beginning import job...
## Processing file "install-path/resources/ldif/Example.ldif"
## Finished scanning file "install-path/resources/ldif/Example.ldif" (160 entries)
## Workers finished; cleaning up...
## Workers cleaned up.
## Cleaning up producer thread...
## Indexing complete.
## Starting numsubordinates attribute generation.
This may take a while, please wait for further activity reports.
## Numsubordinates attribute generation complete. Flushing caches...
## Closing files...
## Import complete. Processed 160 entries in 5 seconds.
(32.00 entries/sec)

Task completed (slapd exit code: 0).
$

関連項目

Directory Service Control Centerを使用して、このタスクを実行できます。

8.2.2.2 スクランブル前のデータベースでの文字列の検索

ここでは、エントリ・ストア・プラグインとフェッチ・プラグインをDirectory Serverに登録する前に、Quentin Cubbinsのエントリをサンプル・サフィックスに追加します。Quentinのメール・アドレスが、メール・アドレスの属性値を保持するデータベースで表示できることを確認します。Quentinのエントリquentin.ldifは、次の例のように表示されます。

例8-4 エントリのLDIF表現

dn: uid=qcubbins,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: qcubbins@example.com
userPassword: qcubbins
secretary: uid=bjensen,ou=People,dc=example,dc=com

Quentinのエントリをディレクトリに追加します。たとえば、エントリがquentin.ldifにある場合、次の内容を追加します。

$ ldapmodify -a -h localhost -p 1389 -f quentin.ldif \
-D uid=kvaughan,ou=people,dc=example,dc=com -w bribery

メールの属性値について、ディレクトリ・データベース・ファイルで文字列を検索します。

例8-5 スクランブル前のデータベース・ファイルの属性値

$ cd instance-path/db/example/
$ strings example_mail.db3 | grep example.com
=qcubbins@example.com
=agodiva@example.com
=hfuddnud@example.com
=pblinn@example.com
=scooper@example.com
=bcubbins@example.com
=yyorgens@example.com

ユーザーがデータベース・ファイルにアクセスする場合、Quentinのメール・アドレスが明確に表示されることに注意してください。値がクレジット・カード番号だった場合、セキュリティが問題になります。

8.2.2.3 スクランブル後のデータベースでの文字列の検索

ここでは、エントリ・ストア・プラグインとフェッチ・プラグインをDirectory Serverに登録した後に、Quentin Cubbinsのエントリをサンプル・サフィックスに追加します。Quentinのメール・アドレスが、メール・アドレスの属性値を保持するデータベースで表示されなくなっていることを確認します。

プラグインをロードする前に、Quentinのエントリを削除します。

$ ldapdelete -D uid=kvaughan,ou=people,dc=example,dc=com -w bribery
uid=qcubbins,ou=People,dc=example,dc=com

次に、testentry.cの最初のコメントに従って、プラグインをロードするようにDirectory Serverを構成し、サーバーを再起動します。

エントリ・ストア/フェッチ・プラグインがアクティブな状態で、Quentinのエントリをディレクトリに追加しなおします。

$ ldapmodify -a -h localhost -p 1389 -f quentin.ldif \
-D uid=kvaughan,ou=people,dc=example,dc=com -w bribery

メールの属性値について、ディレクトリ・データベース・ファイルで文字列を再度検索します。

例8-6 スクランブル後のデータベース・ファイルの属性値

$ cd instance-path/db/example/
$ strings example_mail.db3 | grep example.com
=agodiva@example.com
=hfuddnud@example.com
=pblinn@example.com
=scooper@example.com
=bcubbins@example.com
=yyorgens@example.com

Quentinのメール・アドレス値はディレクトリ・データベースに表示されないことに注意してください。適切なアクセス権を持つディレクトリ・ユーザー(この簡単な例では匿名)は、検索中に属性を表示できます。次の例では、属性とその値が強調されています。

例8-7 スクランブル解除された検索結果

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com uid=qcubbins
dn: uid=qcubbins,ou=People,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: qcubbins@example.com
secretary: uid=bcubbins,ou=People,dc=example,dc=com

このように、エントリ・ストア・プラグインとエントリ・フェッチ・プラグインは、ディレクトリ・フロントエンドではなく、エントリが格納される方法にのみ影響することがわかります。

9 拡張操作プラグインの作成

この章では、LDAP v3の拡張操作を活用するためのプラグインの作成方法について説明します。拡張操作は、RFC 4511 (http://www.ietf.org/rfc/rfc4511.txt)で定義されています。RFCには、「デジタル署名操作や結果など、このプロトコルの他の場所で使用できないサービス向けに定義されるその他の操作」と定義されています。

この章の内容は、次のとおりです。

- 拡張操作プラグインのコール

- 拡張操作プラグインの実装

9.1 拡張操作プラグインのコール

この項では、拡張操作がDirectory Serverによって処理される仕組みについて説明します。また、拡張操作プラグインに設定される要件も説明します。

Directory Serverは、オブジェクト識別子(OID)によって拡張操作を識別します。クライアントは、次の項目を指定し、拡張操作リクエストを送信して操作を要求します。

- 拡張操作のOID

- 拡張操作に特有のデータ
拡張操作リクエストを受け取ると、Directory Serverは登録されたプラグインをコールして、リクエストで送信されるOIDを処理します。リクエストを処理するプラグイン関数は、OIDと操作特有のデータを取得します。プラグインは、情報を処理し、OIDと拡張操作に関係するその他のデータを含むクライアントにレスポンスを送信します。

拡張操作のサポートを実装するときは、使用するOIDを決定する必要があります。Internet Assigned Numbers Authorityは、公式OIDの登録に役立ちます。独自のOIDを選択する場合は、他のOIDと競合するOIDを避ける必要があります。特に、Directory Serverによって使用されるLDAPスキーマで定義されたOIDと競合するOIDは使用しないでください。

Directory Serverは、どの拡張操作プラグインがどの拡張操作OIDを起動時に処理するのかを決定します。その後、Directory Serverは、各プラグインの初期化関数をコールします。拡張操作プラグインは、「拡張操作プラグインの初期化」での説明に従って、プラグインが初期化関数の一部として処理する拡張操作OIDを登録します。

起動時にDirectory Serverがプラグイン初期化関数に渡すパラメータを、プラグインの構成エントリに含めることができます。これらのパラメータについては、「プラグインに渡される引数の取得」を参照してください。パラメータでは、プラグイン関数の作成後にOIDが決定される可能性が考慮されます。このようなOIDは、構成エントリ引数として渡されることがあります。

9.2 拡張操作プラグインの実装

この項では、拡張操作をトリガーするために、基本の拡張操作プラグインとクライアント・アプリケーションを実装する方法を示します。

クライアントは、拡張操作を識別するOID (今回は1.2.3.4)を使用して、サーバーに拡張操作リクエストを送信します。また、文字列を保持する値も送信します。サンプル・プラグインでは、クライアントにOIDを送信することによって拡張操作リクエストに応答しています。また、プラグインは、クライアントがリクエストとともに送信した文字列の変更されたバージョンも送信します。

9.2.1 拡張操作の検索例

この章の残りについては、install-path/examples/testextendedop.cのプラグイン・コードと、install-path/examples/clients/reqextop.cのクライアント・コードを参照してください。

9.2.2 拡張操作プラグインの例

この項では、拡張操作プラグインの動作の仕組みについて説明します。

9.2.2.1 拡張操作プラグインの登録

ここでの説明に従ってプラグイン関数を使用する前に、プラグインを構築します。また、プラグインをロードするようにDirectory Serverも構成します。

OID 1.2.3.4は、構成エントリを介して引数として渡されることに注意してください。たとえば、個別のOIDによってそれぞれが識別されている複数の拡張操作をプラグインがサポートしている場合、構成エントリは2つ以上のnsslapd-pluginarg属性を指定できます。

9.2.2.1.1 プラグインを登録するには

実行済でない場合には、サンプルのプラグイン・ライブラリを作成し、プラグイン情報のロギングとサンプル・プラグインの両方をアクティブ化します。

1. プラグインを構築します。
ヒント: install-path/examples/Makefileまたはinstall-path/examples/Makefile64を使用します。

2. プラグイン情報メッセージがログに記録されるようにDirectory Serverを構成し、プラグインをロードします。

$ dsconf create-plugin -F custom-plugin-init-function -G custom-plugin-argument -H lib-path \
-Y custom-plugin-type "Custom Plugin"
$ dsconf enable-plugin "Custom Plugin"

ヒント: 詳細は、プラグインのソース・ファイルに指定されたコマンドを使用して参照してください。

3. Directory Serverを再起動します。

$ dsadm restart instance-path

9.2.2.2 拡張操作プラグインの初期化

他のプラグイン・タイプに関しては、拡張操作プラグインに、プラグインの他の関数をDirectory Serverに登録する初期化関数が含まれています。拡張操作プラグインの場合、この初期化関数は、プラグインによって操作されるOIDも登録します。関数は、関数が初期化関数に渡すパラメータ・ブロックのDirectory Serverで、SLAPI_PLUGIN_EXT_OP_OIDLISTを設定することによってOIDを登録します。

例9-1 プラグイン関数とOIDの登録(testextendedop.c)

この例では、OIDリストの構築方法と登録方法について説明します。

#include "slapi-plugin.h"

Slapi_PluginDesc expdesc = {
"test-extendedop",                 /* plug-in identifier       */
"Oracle Corporation (test)",       /* vendor name              */
"11.1.1.3.0",                      /* plug-in revision number  */
"Sample extended operation plug-in"/* plug-in description      */
};

#ifdef _WIN32
__declspec(dllexport)
#endif
int
testexop_init(Slapi_PBlock * pb)
{
char ** argv;                      /* Args from configuration  */
int     argc;                      /* entry for plug-in.       */
char ** oid_list;                  /* OIDs supported           */
int     rc = 0;                    /* 0 means success          */
int     i;

/* Get the arguments from the configuration entry.             */
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_ARGV, &argv);
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_ARGC, &argc);
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"testexop_init in test-extendedop plug-in",
"Could not get plug-in arguments.\n"
);
return (rc);
}

/* Extended operation plug-ins may handle a range of OIDs.     */
oid_list = (char **)slapi_ch_malloc((argc + 1) * sizeof(char *));
for (i = 0; i < argc; ++i) {
oid_list[i] = slapi_ch_strdup(argv[i]);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"testexop_init in test-extendedop plug-in",
"Registering plug-in for extended operation %s.\n",
oid_list[i]
);
}
oid_list[argc] = NULL;

rc |= slapi_pblock_set(            /* Plug-in API version      */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description      */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &expdesc
);
rc |= slapi_pblock_set(            /* Extended op. handler     */
pb,
SLAPI_PLUGIN_EXT_OP_FN,
(void *) test_extendedop
);
rc |= slapi_pblock_set(            /* List of OIDs handled     */
pb,
SLAPI_PLUGIN_EXT_OP_OIDLIST,
oid_list
);
return (rc);
}

Directory Serverによって渡される引数からOIDを抽出することに注意してください。Directory Serverは、各argv[]要素でslapi_ch_strdup()を使用することによって、構成エントリからパラメータ・ブロックに引数を渡します。OIDリストは、slapi_ch_malloc ()を使用して配列にスペースを割り当て、各oid_list[]要素にOIDを配置することによって構築されます。SLAPI_PLUGIN_EXT_OP_OIDLISTを使用してプラグインOIDリストを登録します。表示のように、SLAPI_PLUGIN_EXT_OP_FNを使用して拡張操作ハンドラ関数test_extendedop ()を登録します。

パラメータ・ブロックの引数とプラグインAPI関数の詳細は、「プラグインAPIリファレンス」を参照してください。

9.2.2.3 拡張操作の処理

プラグイン関数test_extendedop()は、クライアント・リクエストから操作のOIDと値を取得します。その後、関数は、「拡張操作クライアントの開発」に示されているように、クライアントにレスポンスを送信します。

関数がSLAPI_EXT_OP_REQ_OIDとSLAPI_EXT_OP_REQ_VALUEを使用してリクエストからOIDと値を取得する方法に注意してください。関数は、slapi_ch_malloc()を使用し、berval構造体result_bvalへのポインタを介してクライアントに戻す文字列を構成します。異なる拡張操作プラグインは、この時点で完全に異なる内容を実行することがあります。

また、関数は、クライアント・リクエストのOIDとは異なるOIDもクライアントに返信します。たとえば、返信されたOIDを使用して、クライアントに特定の結果を示すことができます。関数は、slapi_send_ldap_result()を使用して成功したことを示し、クライアントにOIDと値も送信します。その後、関数は割り当てられたメモリーを解放します。最後に、関数は、SLAPI_PLUGIN_EXTENDED_SENT_RESULTを戻して、プラグイン関数の処理が完了したことをDirectory Serverに示します。

関数は、クライアントに結果コードを送信しなかった場合、LDAP結果コードをDirectory Serverに戻します。Directory Serverが結果コードをクライアントに送信します。

関数は、指定のOIDを持つ拡張操作を処理できない場合は、SLAPI_PLUGIN_EXTENDED_NOT_HANDLEDを戻します。Directory Serverは、LDAP_PROTOCOL_ERROR結果コードをクライアントに送信します。

9.2.3 拡張操作クライアントの開発

プラグインをテストするには、OID 1.2.3.4を持つ拡張操作を要求するクライアントが必要です。ここで説明する例(reqextop.c)は、製品とともに提供されています。

クライアントは、拡張操作リクエストでDirectory Serverに送信するための短い文字列を設定します。その後、クライアントは、LDAPバージョン3をサポートしているLDAP接続を取得し、Directory Serverにバインドします。クライアントは、拡張操作リクエストを送信し、STDOUTで結果を表示します。

例9-2 拡張操作を要求するクライアント(clients/reqextop.c)

#include <stdlib.h>
#include "ldap.h"

/* Global variables for client connection information.
* You may set these here or on the command line.                  */
static char * host     = "localhost";  /* Server hostname          */
static int    port     = 389;          /* Server port              */
static char * bind_DN  = "cn=Directory Manager"; /* DN to bind as  */
static char * bind_pwd = "23skidoo";   /* Password for bind DN     */

/* Check for connection info as command line arguments.            */
int get_user_args(int argc, char ** argv);

int
main(int argc, char ** argv)
{
/* OID of the extended operation that you are requesting       */
const char    * oidrequest = "1.2.3.4"; /* Ext op OID          */
char          * oidresult;         /* OID in reply from server */
struct berval   valrequest;        /* Request sent             */
struct berval * valresult;         /* Reply received           */
LDAP          * ld;                /* Handle to connection     */
int             version;           /* LDAP version             */

/* Use default connection arguments unless all four are
* provided as arguments on the command line.                  */
if (get_user_args(argc, argv) != 0) return 1; /* Usage error   */

/* Set up the value that you want to pass to the server        */
printf("Setting up value to pass to server...\n");
valrequest.bv_val = "My Value";
valrequest.bv_len = strlen("My Value");

/* Get a handle to an LDAP connection                          */
printf("Getting the handle to the LDAP connection...\n");
if ((ld = ldap_init(host, port)) == NULL) {
perror("ldap_init");
ldap_unbind(ld);
return 1;
}

/* Set the LDAP protocol version supported by the client
to 3. (By default, this is set to 2. Extended operations
are part of version 3 of the LDAP protocol.)                */
printf("Resetting version %d to 3.0...\n", version);
version = LDAP_VERSION3;
ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &version);

/* Authenticate to the directory as the Directory Manager      */
printf("Binding to the directory...\n");
if (ldap_simple_bind_s(ld, bind_DN, bind_pwd) != LDAP_SUCCESS) {
ldap_perror(ld, "ldap_simple_bind_s");
ldap_unbind(ld);
return 1;
}

/* Initiate the extended operation                             */
printf( "Initiating the extended operation...\n" );
if (ldap_extended_operation_s(
ld,
oidrequest,
&valrequest,
NULL,
NULL,
&oidresult,
&valresult
) != LDAP_SUCCESS) {
ldap_perror(ld, "ldap_extended_operation_s failed: ");
ldap_unbind(ld);
return 1;
}

/* Get OID and value from result returned by server.           */
printf("Operation successful.\n");
printf("\tReturned OID: %s\n", oidresult);
printf("\tReturned value: %s\n", valresult->bv_val);

/* Disconnect from the server.                                 */
ldap_unbind(ld);
return 0;
}

この例では、クライアントはOIDからのリクエストを識別しています。また、クライアントは、プロトコルでの拡張操作のサポートを確実にするために、プロトコル・バージョンをLDAP_VERSION3にリセットすることにも注意してください。クライアントがリクエストとともに送信する値valrequestは、berval構造体を指します。また、バインドと拡張操作に使用されるコールは同期であることにも注意してください。非同期のバージョンも使用できます。

9.2.4 拡張操作の試行例

1. サーバーでプラグインをアクティブ化した後、クライアント・コードreqextop.cをコンパイルします。

2. 構成のcn=featuresの下にエントリを追加し、ユーザーが拡張操作にアクセスするようにします。

$ cat myextop.ldif
dn: oid=1.2.3.4,cn=features,cn=config
objectClass: top
objectClass: directoryServerFeature
oid: 1.2.3.4
cn: Fake extended operation
aci: (targetattr != "aci")(version 3.0;acl "Fake extended operation"; allow
( read, search, compare, proxy ) userdn = "ldap:///all";)

$ ldapmodify -h localhost -p 389 -a -D cn=directory\ manager -w - -f myextop.ldif
Enter bind password:
adding new entry uid=qcubbins,ou=People,dc=example,dc=com

$ dsadm restart /local/ds
Waiting for server to stop...
Server stopped
Server started: pid=5658
$

3. クライアントを実行して拡張操作リクエストを送信し、結果を表示します。

$ ./reqextop -w password
Using the following connection info:
host:    localhost
port:    389
bind DN: cn=Directory Manager
pwd:     password
Setting up value to pass to server...
Getting the handle to the LDAP connection...
Resetting version 2 to 3.0...
Binding to the directory...
Initiating the extended operation...
Operation successful.
Returned OID: 5.6.7.8
Returned value: Value from client: My Value

4. Directory Server側で、ロギングを有効にします。
errorsログの次の内容に似たメッセージに、プラグインがクライアント・リクエストを処理したことが表示されます。

[22/May/2112:08:54:15 +0200] - INFORMATION -
test_extendedop in test-extendedop plug-in - conn=0 op=1 msgId=2 -
Request with OID: 1.2.3.4  Value from client: My Value
[22/May/2112:08:54:15 +0200] - INFORMATION -
test_extendedop in test-extendedop plug-in - conn=0 op=1 msgId=2 -
OID sent to client: 5.6.7.8
Value sent to client:
Value from client: My Value

これで、サンプルの拡張操作プラグインがOID 1.2.3.4を持つ拡張操作に対するリクエストを処理することが説明されました。

10 一致ルール・プラグインの作成

この章では、Directory Serverでカスタム一致ルールを処理できるようにするプラグインについて説明します。サーバーでは、近似マッチング検索などのLDAP v3の拡張可能な一致をサポートするために、そのような一致ルール・プラグインを必要とします。

この章に示すコードの抜粋は、概念的に単純な大/小文字の完全一致スキームを示しています。ここで、完全一致とは、DirectoryString属性値間のバイト比較です。概念は単純ですが、プラグインのコードは多数の行に渡ります。プラグインでは、索引付け、検索およびソートを使用可能にするラッパー関数に加えていくつかの関数を提供する必要があります。

注意:

独自のプラグインを実装する前に、一致ルール・プラグインがDirectory Serverでどのように使用されるかを理解する必要があります。この章を読んでから、サンプル・プラグイン・コードを確認してください。新しい一致ルール・プラグインを1から作成することは避けてください。

この章の内容は、次のとおりです。

- 一致ルール・プラグインの動作

- 一致ルール・プラグインのサンプル

- 拡張可能な一致フィルタの操作

- 一致ルールに従ったエントリの索引付け

- 一致ルールに従ったソートの使用可能化

- 不明な一致ルールの処理

10.1 一致ルール・プラグインの動作

この項では、一致ルール・プラグインの概要およびDirectory Serverでそれらのプラグインがどのように処理されるかを説明します。

10.1.1 一致ルールとは

一致ルールでは、特定の構文を持つ属性値を比較する具体的な方法が定義されます。つまり、一致ルールでは、一致の可能性がある属性の比較方法が定義されます。

各一致ルールは、一意のオブジェクト識別子(OID)文字列によって識別されます。検索を要求するクライアント・アプリケーションでは、検索フィルタに一致ルールOIDを指定できます。OIDにより、2つの属性値の一致をチェックする方法がDirectory Serverに示されます。

実際には、クライアント・アプリケーションでは、指定された値に完全に一致する属性値を持つエントリのみが必要な場合があります。サンプル・プラグインでは、そのような状況に対するソリューションの実装方法を示します。別のクライアントでは、特定のロケールのルールに従ってエントリをソートする場合があります。Directory Serverでは実際に一致ルール・プラグインを使用して、ロケール固有の一致を処理します。

『Oracle Directory Server Enterprise Editionリファレンス』の第14章「Directory Serverの国際化サポート」に、一致ルールのリストが示されています。Directory Serverでは、国際化された検索のルールをサポートしています。デフォルト・スキーマを検索することによっても、リストを表示できます。

$ ldapsearch -h localhost -p 1389 -b cn=schema cn=schema matchingRules

10.1.2 一致ルールの要求

特定の属性に対するカスタム一致ルールを要求するために、クライアント・アプリケーションでは検索フィルタに一致ルールOIDを含めます。LDAP v3ではこれらの検索フィルタを拡張可能な一致フィルタと呼びます。拡張可能な一致フィルタは、次のようなものです。

(cn:2.5.13.5:=Quentin)

このフィルタでは、一致ルール2.5.13.5を使用して、エントリの共通名(CN)でQuentinを検索するようサーバーに指示します。この一致ルールは大/小文字の完全一致です。

大/小文字の完全一致ルール・プラグインOID 2.5.13.5を使用すると、Directory Serverで検索を正確に実行できるようになります。Directory Serverではこの一致ルール・プラグイン内のコードをコールし、検索中に一致をチェックします。また、サーバーはこのコードを使用して、大/小文字完全一致検索を高速化する索引を生成します。索引は、そのような検索中に見つかったエントリをソートする際にも役立ちます。

10.1.3 一致ルール・プラグインの機能

一致ルール・プラグインでは、次の操作を実行するためのコードを提供できます。

- 拡張可能な一致検索中の一致のチェック

- ソート制御を使用した拡張可能な一致検索の結果のソート

- 拡張可能な一致検索を高速化するための索引のメンテナンス(オプション)

これらの機能を使用できるようにするために、プラグインでは、特定の一致ルールを含むリクエストを処理するためにDirectory Serverからコールされる一致および索引付けルーチンを実装します。

プラグインではまた、特定の一致ルールを処理する際にコールするルーチンを指定するファクトリ関数も実装します。その結果、プラグインで複数の一致ルールをサポートできるようになります。ただし、一致ルールを1つのみ実装するプラグインでも、索引付けおよび一致ルーチンを折り返すためにファクトリ関数コードが必要です。したがってプラグインには、最小限の一致ルールを処理する場合であっても、多数のコード行および複数の関数が必要です。

次の表に、一致ルール・プラグインで実装できるすべての関数を示します。

表10-1 一致ルール・プラグインに定義された関数

タイプ

パラメータ・ブロック識別子

必須かどうか

フィルタ・ファクトリ

SLAPI_PLUGIN_MR_FILTER_CREATE_FN

必須

フィルタ索引(索引で一致をチェックするために使用)

SLAPI_PLUGIN_MR_FILTER_INDEX_FN

必須ではない

フィルタ一致

SLAPI_PLUGIN_MR_FILTER_MATCH_FN

必須

フィルタ一致リセット

SLAPI_PLUGIN_MR_FILTER_RESET_FN

再使用するためにフィルタをリセットする必要がある場合は必須

フィルタ・オブジェクト・デストラクタ

SLAPI_PLUGIN_DESTROY_FN

メモリーを解放する必要がある場合は必須

インデクサ

SLAPI_PLUGIN_MR_INDEX_FN

必須ではない

インデクサ・ファクトリ

SLAPI_PLUGIN_MR_INDEXER_CREATE_FN

必須ではない

インデクサ・オブジェクト・デストラクタ

SLAPI_PLUGIN_DESTROY_FN

メモリーを解放する必要がある場合は必須

プラグイン初期化関数

使用不可だが、かわりに構成設定で指定される

必須

サーバー停止(クリーンアップ)関数

SLAPI_CLOSE_FN

必須ではない

サーバー起動関数

SLAPI_START_FN

必須ではない

一致ルール・プラグインで使用できるパラメータ・ブロック識別子の詳細は、「プラグインAPIリファレンス」を参照してください。

10.2 一致ルール・プラグインのサンプル

この章に示すサンプル・コード(install-path/examples/matchingrule.cにあります)は、Directory Serverとともにデフォルトでインストールされる機能を模倣しています。このため、独自の一致ルールを実装するようにプラグインを変更する場合を除き、プラグインを構築してロードする必要はありません。サンプルでは、Directory Serverに付属のプラグインのものとは異なるOIDを使用しています。そのため、サンプルをロードするよう選択した場合、サンプル・プラグインが既存のプラグインに干渉することはありません。

10.2.1 一致ルール・プラグインの構成

一致ルール・プラグインのタイプはmatchingruleです。Directory Serverプラグインは、特定のタイプの一致ルール・プラグインに依存する場合があります。Directory Serverでは、プラグインが依存するタイプのプラグインがエラーなしでロードされないかぎり、そのプラグインをロードできません。

Directory Serverへのプラグイン構成エントリのロードの詳細は、「Directory Serverへのライブラリのプラグイン」を参照してください。

10.2.2 一致ルール・プラグインの登録

一致ルール・プラグインにはファクトリ関数が含まれています。ファクトリ関数により、索引付けまたはフィルタ一致ルーチンに対する関数ポインタが動的に提供されます。そのため、ファクトリ関数のみをプラグイン初期化関数の一部として登録します。

索引付けおよび一致の両方を処理するプラグインでは、次の例に示すとおり、ファクトリ関数および説明の両方を登録します。

例10-1 一致ルール・ファクトリ関数の登録(matchingrule.c)

#include "slapi-plugin.h"

static Slapi_PluginDesc plg_desc = {
"caseExactMatchingRule",           /* Plug-in identifier           */
"Oracle Corporation (test)",       /* Vendor name                  */
"11.1.1.3.0",                      /* Plug-in revision number      */
"Case Exact Matching Rule plug-in" /* Plug-in description          */
};

#ifdef _WIN32
__declspec(dllexport)
#endif
int
plg_init(Slapi_PBlock * pb)
{
int                       rc;

/* Matching rule factory functions are registered using
* the parameter block structure. Other functions are then
* registered dynamically by the factory functions.
*
* This means that a single matching rule plug-in may handle
* a number of different matching rules.                           */
rc  = slapi_pblock_set(
pb,
SLAPI_PLUGIN_MR_INDEXER_CREATE_FN,
(void *)plg_indexer_create
);
rc |= slapi_pblock_set(
pb,
SLAPI_PLUGIN_MR_FILTER_CREATE_FN,
(void *)plg_filter_create
);
rc |= slapi_pblock_set(
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *)&plg_desc
);

/* Register the matching rules themselves. */

return rc;
}

ここで、plg_init()はプラグイン初期化関数、plg_indexer_create()はインデクサ・ファクトリ、plg_filter_create ()はフィルタ・ファクトリおよびplg_descはプラグイン説明構造体です。

プラグインでプライベート・データを使用する場合は、パラメータ・ブロックでSLAPI_PLUGIN_PRIVATEをプライベート・データ構造体に対するポインタとして設定してください。

例10-2 一致ルールの登録(matchingrule.c)

初期化関数でslapi_pblock_set()を使用するのではなく、ここに示すとおりslapi_matchingrule_register()を使用して一致ルールを登録します。

#include "slapi-plugin.h"

#define PLG_DESC      "Case Exact Matching on Directory String" \
" [defined in X.520]"
#define PLG_NAME      "caseExactMatch"
/* This OID is for examples only and is not intended for reuse. The
* official OID for this matching rule is 2.5.13.5.                    */
#define PLG_OID       "1.3.6.1.4.1.42.2.27.999.4.1"

#ifdef _WIN32
__declspec(dllexport)
#endif
int
plg_init(Slapi_PBlock * pb)
{
Slapi_MatchingRuleEntry * mrentry = slapi_matchingrule_new();
int                       rc;

/* Register matching rule factory functions.*/

/* Matching rules themselves are registered using a
* Slapi_MatchingRuleEntry structure, not the parameter
* block structure used when registering plug-in functions.
*
* This plug-in registers only one matching rule. Yours
* may register many matching rules.                               */
rc |= slapi_matchingrule_set(
mrentry,
SLAPI_MATCHINGRULE_DESC,
(void *)slapi_ch_strdup(PLG_DESC)
);
rc |= slapi_matchingrule_set(
mrentry,
SLAPI_MATCHINGRULE_NAME,
(void *)slapi_ch_strdup(PLG_NAME)
);
rc |= slapi_matchingrule_set(
mrentry,
SLAPI_MATCHINGRULE_OID,
(void *)slapi_ch_strdup(PLG_OID)
);
rc |= slapi_matchingrule_set(
mrentry,
SLAPI_MATCHINGRULE_SYNTAX,     /* Here you use DirectoryString.*/
(void *)slapi_ch_strdup("1.3.6.1.4.1.1466.115.121.1.15")
);
rc |= slapi_matchingrule_register(mrentry);
slapi_matchingrule_free(&mrentry, 1);

return rc;
}

- PLG_DESCは、一致ルールを説明する文字列です。

- PLG_NAMEは一致ルールの文字列識別子です。

- PLG_OIDは一致ルールのオブジェクト識別子です。
サンプル・プラグインではすべての項目が#define (定義)されます。プラグインで複数の一致ルールを実装する場合、初期化関数では各項目を登録する必要があります。

プラグインでは、slapi_pblock_set()を使用してファクトリ関数を個別に登録する必要があることに注意してください。

10.3 拡張可能な一致フィルタの操作

この項では、一致ルールに対応する拡張可能な一致フィルタの操作方法を具体的に説明します。すべての一致ルール・プラグインで、フィルタ一致を使用可能にする必要があります。

10.3.1 Directory Serverによる拡張可能な一致検索の処理方法

次のプロセスは、Directory Serverによる拡張可能な一致検索の処理方法を示しています。

1. Directory Serverでは、拡張可能な一致フィルタを含む検索リクエストを受け取ると、対応する一致ルールを処理するプラグイン内のフィルタ・ファクトリ関数をコールします。サーバーからフィルタ・ファクトリに、拡張可能な一致フィルタ情報を含むパラメータ・ブロックが渡されます。

2. フィルタ・ファクトリ関数により、フィルタ・オブジェクトが構築されます。続けて関数によって、オブジェクトに対するポインタおよび適切なフィルタ一致およびフィルタ索引関数が設定されます。

3. サーバーでは、ディレクトリ全体を検索するのではなく、1つの索引内で一連の結果を検索しようとします。
索引を読み取るために、サーバーでは、適切なインデクサ関数を見つけるために役立つフィルタ索引関数をコールします。

Directory Serverではディレクトリ内の全エントリのみが考慮されるため、次のいずれかの状況が当てはまる場合、検索速度が大幅に低下する可能性があります。

- 検索に適用される既存の索引がない場合

- プラグインでインデクサ関数が指定されていない場合

- 指定された値に対するキーがプラグインにより生成されない場合

Directory Serverでは、インデクサ関数をコールしてキーを生成します。この関数の詳細は、「インデクサ関数」を参照してください。

4. Directory Serverにより、候補エントリのリストが作成されます。

5. エントリが検索結果としてクライアントに戻される前に、Directory Serverによって、エントリが検索範囲内にあることが検証されます。

6. Directory Serverによって、操作に割り当てられていたメモリーが解放されます。

次の図は、Directory Serverによる検索リクエストの処理方法を示します。

図10-1 Directory Serverによる拡張可能な一致検索の実行

「図10-1 Directory Serverによる拡張可能な一致検索の実行」の説明

主なフィルタ関数は次のとおりです。

- フィルタ一致関数

- フィルタ索引関数

- フィルタ・ファクトリ関数

- フィルタ・オブジェクト・デストラクタ関数

10.3.2 フィルタ一致関数

フィルタ一致関数では、フィルタ・オブジェクト、エントリおよび最初の属性へのポインタを取得して一致をチェックします。

次の図に、Directory Serverによるフィルタ一致関数の使用方法を示します。

図10-2 フィルタ一致関数のコンテキスト

「図10-2 フィルタ一致関数のコンテキスト」の説明

フィルタ一致関数からは、処理された各エントリについて0 (一致)、-1 (一致なし)またはLDAPエラー・コードが戻されることに注意してください。

例10-3 フィルタ一致関数(matchingrule.c)

この例では、2つのberval構造体が一致した場合に一致が発生する、大/小文字の完全一致ルールのフィルタ一致関数を示しています。

#include "slapi-plugin.h"

typedef struct plg_filter_t            /* For manipulating filter obj. */
{   char          *  f_type;           /* Attribute type to match      */
int              f_op;             /* Type of comparison
* (<, <=, ==,>=,>, substr)
* for the filter.              */
struct berval ** f_values;         /* Array of values to match     */
} plg_filter_t;

/* Check for a match against the filter.
* Returns:  0 filter matched
*          -1 filter did not match
*        > 0 an LDAP Error code                                      */
static int
plg_filter_match(
void        * obj,                 /* Matching rule object         */
Slapi_Entry * entry,               /* Entry to match               */
Slapi_Attr  * attr                 /* Attributes to match          */
)
{
plg_filter_t  * fobj  = (plg_filter_t *)obj;
struct berval * mrVal = NULL;      /* Values handled as bervals... */
Slapi_Value   * sval;              /* ...and as Slapi_Value structs*/
int             rc    = -1;        /* No match                     */

if (fobj && fobj->f_type && fobj->f_values && fobj->f_values[0]) {

mrVal = fobj->f_values[0];

/* Iterate through the attributes, matching subtypes.          */
for (; attr != NULL; slapi_entry_next_attr(entry, attr, &attr)) {

char * type = NULL;        /* Attribute type to check      */

if ((slapi_attr_get_type(attr, &type) == 0) &&
(type != NULL)                          &&
(slapi_attr_type_cmp(fobj->f_type, type, 2) == 0)
) { /* slapi_attr_type_cmp(type1, type2, ==>2<==)
* matches subtypes, too. Refer to the reference
* documentation for details.                          */

/* Type and subtype match, so iterate through the
* values of the attribute.                            */
int hint = slapi_attr_first_value(attr, &sval);
while (hint != -1) {
const struct berval * val =
slapi_value_get_berval(sval);

/* The case exact matching rule
* compares the two bervals.
*
* Your matching rule may do
* lots of different checks here.                  */
rc = slapi_berval_cmp(val, mrVal);
if (rc == 0)  {    /* Successful match             */
/* If you have allocated memory for a custom
* matching rule, do not forget to release it.     */
return 0;
}

hint = slapi_attr_next_value(attr, hint, &sval);
}
}
}
}
return rc;
}

大/小文字の完全一致のチェックには、バイトごとの比較を実行するslapi_berval_cmp ()のみが関与することに注意してください。ユーザー独自のプラグインでは、比較のためにより複雑な処理が実行される場合があります。

10.3.2.1 サブタイプの一致

属性を反復するコードで、slapi_attr_type_cmp ()が、その3番目の引数としてSLAPI_TYPE_CMP_SUBTYPEに割り当てられた値である2を取得することに注意してください。引数によって、属性のタイプに加えて、属性のロケールといった属性のサブタイプの比較が強制されます。プラグインAPI関数およびその引数の詳細は、「プラグインAPIリファレンス」を参照してください。

10.3.2.2 スレッド・セーフティおよびフィルタ一致関数

Directory Serverでは、同じフィルタ・オブジェクトのフィルタ一致関数を同時にコールすることはありません。ただし、Directory Serverでは、異なるフィルタ・オブジェクトの関数を同時にコールすることはできます。グローバル変数を使用する場合は、フィルタ一致関数でそれらの変数が安全に処理されることを確認してください。

10.3.3 フィルタ索引関数

フィルタ索引関数では、Directory Serverからパラメータ・ブロックを取得します。また、この関数では、パラメータ・ブロック内にポインタを設定して、サーバーが索引を読み取ることができるようにします。

例10-4 フィルタ索引関数(matchingrule.c)

この例では、値としてキーが等しい大/小文字の完全一致ルールのフィルタ索引関数を示します。

#include "slapi-plugin.h"

#define PLG_OID       "1.3.6.1.4.1.42.2.27.999.4.1"
#define SUBSYS        "CaseExactMatching Plugin"

typedef struct plg_filter_t            /* For manipulating filter obj. */
{   char          *  f_type;           /* Attribute type to match      */
int              f_op;             /* Type of comparison
* (<, <=, ==,>=,>, substr)
* for the filter.              */
struct berval ** f_values;         /* Array of values to match     */
} plg_filter_t;

static int
plg_filter_index(Slapi_PBlock * pb)
{
int            rc       = LDAP_UNAVAILABLE_CRITICAL_EXTENSION;
void         * obj      = NULL;    /* Server lets the plug-in      */
plg_filter_t * fobj;               /* handle the object type.      */
int            query_op = SLAPI_OP_EQUAL; /* Only exact matches    */

if (!slapi_pblock_get(pb, SLAPI_PLUGIN_OBJECT, &obj)) {

fobj = (plg_filter_t *)obj;

/* Case exact match requires no modifications to
* the at this point. Your plug-in may however
* modify the object, then set it again in the
* parameter block.                                            */
rc  = slapi_pblock_set(        /* This is for completeness.    */
pb,                        /* Your plug-in may modify      */
SLAPI_PLUGIN_OBJECT,       /* the object if necessary.     */
fobj
);
rc |= slapi_pblock_set(        /* Set attr type to match.      */
pb,
SLAPI_PLUGIN_MR_TYPE,
fobj->f_type
);
rc |= slapi_pblock_set(        /* Set fcn to obtain keys.      */
pb,
SLAPI_PLUGIN_MR_INDEX_FN,
(void*)plg_index_entry
);
rc |= slapi_pblock_set(        /* Set values to obtain keys.   */
pb,
SLAPI_PLUGIN_MR_VALUES,
fobj->f_values
);
rc |= slapi_pblock_set(        /* This is for completeness.    */
pb,                        /* Your plug-in may set a       */
SLAPI_PLUGIN_MR_OID,       /* different MR OID than the    */
PLG_OID                    /* one in the parameter block   */
);
rc |= slapi_pblock_set(        /* <, <=, ==,>=,>, substr     */
pb,                        /* In this case, ==             */
SLAPI_PLUGIN_MR_QUERY_OPERATOR,
&query_op
);
}

return rc;
}

このコードでは、次の変数およびマクロを使用します。

- fobj->ftypeは、フィルタで指定された属性タイプを示します。

- plg_index_entry()は、値からキーを生成するためのインデクサ関数を示します。

- fobj->valuesは、属性値のberval配列を指します。

- PLG_OIDは、一致ルールのオブジェクト識別子です。

- query_opは、フィルタの問合せ演算子を示します。

10.3.3.1 フィルタ索引関数の入力パラメータ

フィルタ索引関数では、パラメータ・ブロック内のSLAPI_PLUGIN_OBJECTからフィルタ・オブジェクトへのポインタを取得できます。

10.3.3.2 フィルタ索引関数の出力パラメータ

フィルタ索引関数では、Directory Serverに制御を戻す前に、少なくとも次の項目の値をパラメータ・ブロックに設定する必要があります。

- SLAPI_PLUGIN_MR_INDEX_FN (キーを生成するためのインデクサへのポインタ)

- SLAPI_PLUGIN_MR_OID

- SLAPI_PLUGIN_MR_QUERY_OPERATOR

- SLAPI_PLUGIN_MR_TYPE

- SLAPI_PLUGIN_MR_VALUES

- SLAPI_PLUGIN_OBJECT (ユーザーの関数により変更されている場合)

詳細は、第17章「パラメータ・ブロックのリファレンス」を参照してください。

10.3.3.3 スレッド・セーフティおよびフィルタ索引関数

Directory Serverでは、同じフィルタ・オブジェクトのフィルタ索引関数を同時にコールすることはありません。ただし、Directory Serverでは、異なるフィルタ・オブジェクトの関数を同時にコールすることはできます。グローバル変数を使用する場合は、使用する関数でそれらの変数が安全に処理されることを確認してください。

10.3.4 フィルタ・ファクトリ関数

フィルタ・ファクトリ関数では、Directory Serverからパラメータ・ブロックを取得します。次に、関数により、Directory Serverで一致をチェックする候補である候補エントリのリストをサーバーで作成できるようにパラメータが設定されます。

次の図は、フィルタ・ファクトリ関数の動作を示しています。

図10-3 フィルタ・ファクトリ関数のコンテキスト

「図10-3 フィルタ・ファクトリ関数のコンテキスト」の説明

次の例では、大/小文字の完全一致ルールのフィルタ・ファクトリ関数を示しています。

例10-5 フィルタ・ファクトリ関数(matchingrule.c)

#include "slapi-plugin.h"

#define PLG_OID       "1.3.6.1.4.1.42.2.27.999.4.1"
#define SUBSYS        "CaseExactMatching Plugin"

/* Functions to obtain connection information for logging.             */
static long mypblock_get_msgid( Slapi_PBlock * pb);
static int  mypblock_get_connid(Slapi_PBlock * pb);
static int  mypblock_get_opid(  Slapi_PBlock * pb);

typedef struct plg_filter_t            /* For manipulating filter obj. */
{   char          *  f_type;           /* Attribute type to match      */
int              f_op;             /* Type of comparison
* (<, <=, ==,>=,>, substr)
* for the filter.              */
struct berval ** f_values;         /* Array of values to match     */
} plg_filter_t;

static int
plg_filter_create(Slapi_PBlock * pb)
{
int             rc       = LDAP_UNAVAILABLE_CRITICAL_EXTENSION;
char          * mr_oid   = NULL;   /* MR OID from the server       */
char          * mr_type  = NULL;   /* Attr type to match           */
struct berval * mr_value = NULL;   /* Attr value to match          */
plg_filter_t  * fobj     = NULL;   /* Object to create             */

if (
slapi_pblock_get(pb, SLAPI_PLUGIN_MR_OID, &mr_oid) ||
(mr_oid == NULL)
) {
slapi_log_error_ex(
-1, /* errorId */
mypblock_get_msgid(pb),
mypblock_get_connid(pb),
mypblock_get_opid(pb),
SUBSYS,
SLAPI_INTERNAL_ERROR,
"plg_filter_create failed: NULL OID values are invalid.\n"
);
}
else if (strcmp(mr_oid, PLG_OID) == 0) {
/* The MR OID from the server is handled by this plug-in.      */
if (
(slapi_pblock_get(pb, SLAPI_PLUGIN_MR_TYPE,  &mr_type) == 0)  &&
(mr_type  != NULL)                                            &&
(slapi_pblock_get(pb, SLAPI_PLUGIN_MR_VALUE, &mr_value) == 0) &&
(mr_value != NULL)
) { /* ...provide a pointer to a filter match function.        */
int op            = SLAPI_OP_EQUAL;
fobj              = (plg_filter_t *)slapi_ch_calloc(
1,
sizeof (plg_filter_t)
);
fobj->f_type      = slapi_ch_strdup(mr_type);
fobj->f_op        = op;
fobj->f_values    = (struct berval **)slapi_ch_malloc(
2 * sizeof(struct berval *)
);
fobj->f_values[0] = slapi_ch_bvdup(mr_value);
fobj->f_values[1] = NULL;

rc  = slapi_pblock_set(        /* Set object destructor.   */
pb,
SLAPI_PLUGIN_DESTROY_FN,
(void *)plg_filter_destroy
);
rc |= slapi_pblock_set(        /* Set object itself.       */
pb,
SLAPI_PLUGIN_OBJECT,
(void  *)fobj
);
rc |= slapi_pblock_set(        /* Set filter match fcn.    */
pb,
SLAPI_PLUGIN_MR_FILTER_MATCH_FN,
(void *)plg_filter_match
);
rc |= slapi_pblock_set(        /* Set sorting function.    */
pb,
SLAPI_PLUGIN_MR_FILTER_INDEX_FN,
(void *)plg_filter_index
);

if (rc == 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
mypblock_get_msgid(pb),
mypblock_get_connid(pb),
mypblock_get_opid(pb),
SUBSYS,
"plg_filter_create (oid %s; type %s) OK\n",
mr_oid, mr_type
);
} else {
slapi_log_error_ex(
-1, /* errorId */
mypblock_get_msgid(pb),
mypblock_get_connid(pb),
mypblock_get_opid(pb),
SUBSYS,
SLAPI_INTERNAL_ERROR,
"plg_filter_create (oid %s; type %s) - pblock error \n",
mr_oid, mr_type
);
}
} else { /* Missing parameters in the pblock                   */
slapi_log_error_ex(
-1,
mypblock_get_msgid(pb),
mypblock_get_connid(pb),
mypblock_get_opid(pb),
SUBSYS,
"Parameter errors ",
"plg_filter_create: invalid input pblock.\n"
);
}
}

return rc;
}

この関数では、パラメータ・ブロックで一致ルールOIDを処理しない場合、LDAP_UNAVAILABLE_CRITICAL_EXTENSIONを戻すことに注意してください。「不明な一致ルールの処理」を参照してください。

10.3.4.1 フィルタ・ファクトリ関数の入力パラメータ

フィルタ・ファクトリ関数では、パラメータ・ブロックから次の項目の値を取得できます。

- SLAPI_PLUGIN_MR_OID

- SLAPI_PLUGIN_MR_TYPE

- SLAPI_PLUGIN_MR_VALUE

- SLAPI_PLUGIN_PRIVATE (プラグイン初期化関数で指定されたプライベート・データがプラグインで使用されている場合)

10.3.4.2 フィルタ・ファクトリ関数の出力パラメータ

インデクサ・ファクトリ関数では、Directory Serverに制御を戻す前に、次の項目の値をパラメータ・ブロックに設定する必要があります。

- SLAPI_PLUGIN_DESTROY_FN (フィルタ・オブジェクトのデストラクタへのポインタ)

- SLAPI_PLUGIN_MR_FILTER_INDEX_FN (フィルタ索引関数へのポインタ)

- SLAPI_PLUGIN_MR_FILTER_MATCH_FN (フィルタ一致関数へのポインタ)

- SLAPI_PLUGIN_MR_FILTER_RESET_FN (必要な場合、フィルタ・リセット関数へのポインタ)

- SLAPI_PLUGIN_MR_FILTER_REUSABLE (フィルタの再利用が可能であることを指定する必要がある場合)

- SLAPI_PLUGIN_OBJECT (フィルタ・オブジェクトへのポインタ)

詳細は、第17章「パラメータ・ブロックのリファレンス」を参照してください。

10.3.4.3 スレッド・セーフティおよびフィルタ・ファクトリ関数

この関数はスレッド・セーフである必要があります。Directory Serverでは、この関数を同時にコールできます。

10.3.5 フィルタ・オブジェクト・デストラクタ関数

フィルタ・オブジェクト・デストラクタ関数では、フィルタ・ファクトリ関数によって設定されたフィルタ・オブジェクトに割り当てられていたメモリーを解放します。操作の完了後、Directory Serverによりデストラクタがコールされ、フィルタ・オブジェクトをSLAPI_PLUGIN_OBJECTの値として示すパラメータ・ブロックが渡されます。

Directory Serverにより、同じオブジェクトのデストラクタが同時にコールされることはありません。

例10-6 フィルタ・オブジェクトおよびデストラクタ(matchingrule.c)

このコードは、サンプル・オブジェクトおよびデストラクタを示します。

#include "slapi-plugin.h"

typedef struct plg_filter_t            /* For manipulating filter obj. */
{   char          *  f_type;           /* Attribute type to match      */
int              f_op;             /* Type of comparison
* (<, <=, ==,>=,>, substr)
* for the filter.              */
struct berval ** f_values;         /* Array of values to match     */
} plg_filter_t;

/* Free memory allocated for the filter object.                        */
static int
plg_filter_destroy(Slapi_PBlock * pb)
{
void         * obj  = NULL;        /* Server lets the plug-in      */
plg_filter_t * fobj = NULL;        /* handle the object type.      */

if (!slapi_pblock_get(pb, SLAPI_PLUGIN_OBJECT, &obj))
{
fobj = (plg_filter_t *)obj;
if (fobj){
slapi_ch_free((void **)&fobj->f_type);
if (fobj->f_values){
ber_bvecfree(fobj->f_values);
}
slapi_ch_free((void **)&fobj);
}
}
return 0;
}

10.4 一致コールに従ったエントリの索引付け

この項では、一致ルールに基づくディレクトリ索引にプラグイン・サポートを提供する方法について説明します。プラグインでサポートされる一致ルールの索引付けを使用可能にするために、一致ルール・プラグインは必要ありません。

注意:

Directory Serverでは、ユーザーのプラグインに索引付け機能がない場合であっても、拡張可能な一致検索にそのプラグインを使用できます。

ただし、索引付けのサポートがない場合、Directory Serverではディレクトリ全体から検索結果を生成する必要があり、これは検索パフォーマンスに深刻な影響を与えます。

ディレクトリ索引によってクライアント検索が高速化します。Directory Serverでは、ディレクトリ全体を検索するのではなく、索引を通じて検索することにより、検索結果エントリのリストを作成できます。ディレクトリに多数のエントリが含まれている場合、索引によって検索パフォーマンスが大幅に向上します。したがって、ディレクトリ管理者は、定期的に検索される属性の索引をメンテナンスするようにディレクトリを構成します。

10.4.1 Directory Serverによる索引の処理方法

プラグインでサポートされるカスタム一致ルールの索引をメンテナンスするために、サーバーではインデクサ関数を必要とします。インデクサ関数では、属性値の索引キーへの変換が可能です。Directory Serverによって索引を作成するためにインデクサ関数がコールされ、その後は、索引に影響する可能性のある、属性値の追加、変更または削除といった変更時にコールされます。

カスタム一致ルールの索引を読み取るために、Directory Serverではフィルタ索引関数を必要とします。フィルタ・ファクトリ関数により、この関数へのポインタが提供されます。詳細は、「拡張可能な一致フィルタの操作」および「フィルタ索引関数」を参照してください。

Directory Serverでは、プラグインのインデクサ・ファクトリ関数を利用して索引付けオブジェクトを設定し、適切なインデクサ関数へのポインタを提供します。

次の図は、Directory Serverによる一致ルールに基づく索引付けの実行方法を示しています。

図10-4 Directory Serverによる一致ルールを使用した索引のメンテナンス

「図10-4 Directory Serverによる一致ルールを使用した索引のメンテナンス」の説明

図10-4に示したプロセスの概要は次のとおりです。

1. Directory Serverによりパラメータ・ブロックが作成され、一致させる一致ルールOIDおよび属性タイプを示すようにパラメータが設定されます。続けて、Directory Serverによりインデクサ・ファクトリ関数がコールされます。

2. インデクサ・ファクトリ関数によりパラメータ・ブロックが調べられ、必要に応じてインデクサ・オブジェクトが割り当てられます。関数によって、インデクサおよびフィルタ索引関数へのポインタも設定されます。必要な場合、関数では、Directory Serverに制御を戻す前に、デストラクタへのポインタを設定してインデクサ・オブジェクトを解放します。

3. Directory Serverにより、キーに変換する属性値を示すようにパラメータ・ブロックが設定され、インデクサ関数がコールされます。

4. インデクサ関数により値がキーに変換されます。インデクサが戻されたら、Directory Serverではキーを使用して索引を更新します。

5. Directory Serverによりパラメータ・ブロックが解放されます。必要に応じて、サーバーでは指定されたデストラクタを使用してインデクサ・オブジェクトを解放します。

Directory Serverではインデクサ・ファクトリ関数を同時にコールできることに注意してください。そのため、インデクサ・ファクトリ関数はスレッド・セーフである必要があります。

主なフィルタ関数は次のとおりです。

- インデクサ関数

- インデクサ・ファクトリ関数

- インデクサ・オブジェクト・デストラクタ関数

10.4.2 インデクサ関数

インデクサ関数では、属性値のberval配列へのポインタを含むパラメータ・ブロックをDirectory Serverから取得します。関数では続けて、値から対応するキーのberval配列を生成します。最後に、関数により、パラメータ・ブロックにキーへのポインタが設定されます。

次の図に、Directory Serverによるインデクサ関数の使用方法を示します。

図10-5 インデクサ関数のコンテキスト

「図10-5 インデクサ関数のコンテキスト」の説明

次の例では、値としてキーが等しい大/小文字の完全一致ルールのインデクサ関数を示します。

例10-7 インデクサ関数(matchingrule.c)

#include "slapi-plugin.h"

typedef struct plg_filter_t            /* For manipulating filter obj. */
{   char          *  f_type;           /* Attribute type to match      */
int              f_op;             /* Type of comparison
* (<, <=, ==,>=,>, substr)
* for the filter.              */
struct berval ** f_values;         /* Array of values to match     */
} plg_filter_t;

static int
plg_index_entry(Slapi_PBlock * pb)
{
int              rc     = LDAP_OPERATIONS_ERROR;
void          *  obj    = NULL;    /* Server lets the plug-in      */
plg_filter_t  *  fobj;             /* handle the object type.      */
struct berval ** values;           /* Values from server           */

if (slapi_pblock_get(pb, SLAPI_PLUGIN_OBJECT, &obj) == 0) {
fobj = (plg_filter_t *)obj;
if (
(slapi_pblock_get(pb, SLAPI_PLUGIN_MR_VALUES, &values) == 0) &&
(values != NULL)
) {

/* The case exact match builds the index keys
* from the values by copying the values because
* the keys and values are the same.
*
* Your matching rule may do something quite
* different before setting the keys associated
* with the values in the parameter block.                 */
rc = slapi_pblock_set(     /* Set keys based on values.    */
pb,
SLAPI_PLUGIN_MR_KEYS,
slapi_ch_bvecdup(values)
);
}
}

return rc;
}

ここで、objはインデクサ・オブジェクトを指し、valuesは属性値のberval配列を指します。失敗した場合、関数からLDAP_OPERATIONS_ERRORが戻されることに注意してください。厳密には、LDAP_OPERATIONS_ERRORはLDAP操作の順序付けが間違っていることを示します。歴史的な理由により、このコンテキストで使用される場合、このエラーは内部エラーを示します。

10.4.2.1 インデクサの入力パラメータ

インデクサ関数では、パラメータ・ブロックから次の項目の値を取得できます。

- SLAPI_PLUGIN_MR_VALUES

- SLAPI_PLUGIN_MR_OBJECT

10.4.2.2 インデクサの出力パラメータ

インデクサ関数では、キーのberval配列を生成する必要があります。関数では、Directory Serverに制御を戻す前に、パラメータ・ブロックでSLAPI_PLUGIN_MR_KEYSを設定する必要があります。詳細は、「プラグインAPIリファレンス」を参照してください。

10.4.2.3 スレッド・セーフティおよびインデクサ

Directory Serverにより、同じインデクサ・オブジェクトのインデクサが同時にコールされることはありません。ただし、Directory Serverでは、異なるインデクサ・オブジェクトの関数を同時にコールすることはできます。グローバル変数を使用する場合は、使用する関数でそれらの変数が安全に処理されることを確認してください。

10.4.3 インデクサ・ファクトリ関数

インデクサ・ファクトリ関数では、Directory Serverからパラメータ・ブロックを取得します。関数により、Directory Serverで一致ルールに基づいて索引を更新したり結果をソートできるようにパラメータが設定されます。

次の図に、Directory Serverによるインデクサ・ファクトリ関数の使用方法を示します。

図10-6 インデクサ・ファクトリ関数のコンテキスト

「図10-6 インデクサ・ファクトリ関数のコンテキスト」の説明

次の例では、大/小文字の完全一致ルールのインデクサ・ファクトリ関数を示しています。

例10-8 インデクサ・ファクトリ関数(matchingrule.c)

#include "slapi-plugin.h"

#define PLG_OID       "1.3.6.1.4.1.42.2.27.999.4.1"
#define SUBSYS        "CaseExactMatching Plugin"

/* Functions to obtain connection information for logging.             */
static long mypblock_get_msgid( Slapi_PBlock * pb);
static int  mypblock_get_connid(Slapi_PBlock * pb);
static int  mypblock_get_opid(  Slapi_PBlock * pb);

static int
plg_indexer_create(Slapi_PBlock * pb)
{
int    rc     = LDAP_UNAVAILABLE_CRITICAL_EXTENSION; /* Init failed*/
char * mr_oid = NULL;              /* MR OID from the server       */

if (slapi_pblock_get(pb, SLAPI_PLUGIN_MR_OID, mr_oid) ||
(mr_oid == NULL)) {
slapi_log_error_ex(
-1, /* errorId */
mypblock_get_msgid(pb),
mypblock_get_connid(pb),
mypblock_get_opid(pb),
SUBSYS,
SLAPI_INTERNAL_ERROR,
"plg_indexer_create failed: NULL OID values are invalid.\n"
);
} else if (strcmp(mr_oid, PLG_OID) == 0) {
if ( /* The MR OID from the server is handled by this plug-in. */
(slapi_pblock_set(         /* This is for completeness.    */
pb,                    /* Your plug-in may set a       */
SLAPI_PLUGIN_MR_OID,   /* different OID than the one   */
PLG_OID                /* provided by the server.      */
) == 0) &&
(slapi_pblock_set(         /* Provide an appropriate       */
pb,                    /* indexer function pointer.    */
SLAPI_PLUGIN_MR_INDEX_FN,
(void *)plg_index_entry
) == 0) &&
(slapi_pblock_set(         /* Set the object destructor.   */
pb,
SLAPI_PLUGIN_DESTROY_FN,
(void *)plg_filter_destroy
) == 0)) {
rc = LDAP_SUCCESS;
} else {
slapi_log_error_ex(
-1, /* errorId */
mypblock_get_msgid(pb),
mypblock_get_connid(pb),
mypblock_get_opid(pb),
SUBSYS,
SLAPI_INTERNAL_ERROR,
"plg_indexer_create failed %d \n", rc
);
}
}

return rc;
}

ここで、PLG_OIDは一致ルールのオブジェクト識別子です。plg_index_entry()はインデクサです。plg_filter_destroy ()はデストラクタです。失敗した場合、関数からLDAP_UNAVAILABLE_CRITICAL_EXTENSIONが戻されることに注意してください。

10.4.3.1 インデクサ・ファクトリ関数の入力パラメータ

インデクサ・ファクトリ関数では、パラメータ・ブロックから次の項目の値を読み取ることができます。

- SLAPI_PLUGIN_MR_OID

- SLAPI_PLUGIN_MR_TYPE

- SLAPI_PLUGIN_MR_USAGE (結果をソートする必要があるかどうかを示します)

- SLAPI_PLUGIN_PRIVATE (プラグイン初期化関数で指定するプライベート・データがプラグインで使用される場合)

10.4.3.2 インデクサ・ファクトリ関数の出力パラメータ

インデクサ・ファクトリ関数では、Directory Serverに制御を戻す前に、少なくとも次の項目の値をパラメータ・ブロックに設定する必要があります。

- SLAPI_PLUGIN_DESTROY_FN (インデクサ・オブジェクト・デストラクタへのポインタ)

- SLAPI_PLUGIN_MR_INDEX_FN (インデクサへのポインタ)

- SLAPI_PLUGIN_OBJECT (インデクサ・オブジェクトへのポインタ)

パラメータ・ブロックの詳細は、第17章「パラメータ・ブロックのリファレンス」を参照してください。

10.4.3.3 スレッド・セーフティおよびインデクサ・ファクトリ関数

この関数はスレッド・セーフである必要があります。Directory Serverでは、この関数を同時にコールできます。

10.4.4 インデクサ・オブジェクト・デストラクタ関数

インデクサ・オブジェクト・デストラクタ関数では、インデクサ・ファクトリ関数によって設定されたインデクサ・オブジェクトに割り当てられていたメモリーを解放します。Directory Serverでは、索引操作の完了後にデストラクタをコールします。

インデクサ・オブジェクト・デストラクタでは、フィルタ・オブジェクト・デストラクタと同様に、パラメータ・ブロックを唯一の引数として取得します。パラメータ・ブロックでは、オブジェクトへのポインタをSLAPI_PLUGIN_OBJECTに保持します。詳細は、「フィルタ・オブジェクト・デストラクタ関数」を参照してください。

Directory Serverにより、同じオブジェクトのデストラクタが同時にコールされることはありません。

10.5 一致ルールに従ったソートの使用可能化

クライアントでは、拡張可能な一致検索からの結果をソートするようにDirectory Serverに要求できます。この項では、一致ルールに基づいてソートを使用可能にする方法について説明します。

10.5.1 Directory Serverによる一致ルールに従ったソートの実行方法

Directory Serverでは、索引付けのバリエーションとしてソートを実行し、インデクサ関数によって生成されたキーを使用して結果をソートします。このプロセスは、次のとおりです。

1. Directory Serverにより索引付け用のパラメータ・ブロックが作成され、そのパラメータ・ブロックをインデクサ・ファクトリ関数に渡す前にSLAPI_PLUGIN_MR_USAGEがSLAPI_PLUGIN_MR_USAGE_SORTに設定されます。

2. インデクサ・ファクトリ関数では、索引付けに関するパラメータをパラメータ・ブロックに設定する必要があります。
ソート関数が通常のインデクサ関数とは異なる場合は、その関数でSLAPI_PLUGIN_MR_USAGEの値がチェックされることを確認し、SLAPI_MR_INDEXER_FNを適宜設定します。

3. Directory Serverにより、パラメータ・ブロックで、SLAPI_PLUGIN_MR_VALUESがソートされる値へのポインタとして設定されます。続けてDirectory Serverからパラメータ・ブロックにインデクサ関数が渡されます。

4. Directory Serverで、インデクサ関数によりSLAPI_PLUGIN_MR_KEYSに設定されたキーに基づいて結果がソートされます。

5. Directory Serverによって、操作に割り当てられていたメモリーが解放されます。
一致ルール・プラグインにより、どのようにして、Directory Serverで一致ルールに基づく索引付けの実行が可能になるかの詳細は、「一致ルールに従ったエントリの索引付け」を参照してください。

10.6 不明な一致ルールの処理

この項では、Directory Serverにより認識されない一致ルールOIDのプラグインをDirectory Serverで見つける方法について説明します。

10.6.1 対応の内部リスト

Directory Serverでは、OIDにより一致ルールを識別します。サーバーでは、どの一致ルール・プラグインで、どのOIDが処理されるかの内部リストを保持します。

Directory Serverでは、一致ルールOIDを含む拡張可能な一致フィルタ検索リクエストをサーバーで受け取ったときに、どのプラグインをコールするかを、内部リストを使用して決定します。Directory Serverでは最初に、プラグイン初期化関数内のslapi_matchingrule_register()を使用してプラグインで処理されるOIDが、一致ルール・プラグインにより登録されるときにリストを作成します。

10.6.2 内部リストに含まれないOID

リストに含まれない一致ルールOIDが検出された場合、Directory Serverでは登録済のファクトリ関数を使用して各一致ルール・プラグインを問い合せます。一致ルール・プラグインごとに、OIDを含むパラメータ・ブロックがDirectory Serverから一致ルール・ファクトリ関数に渡されます。サーバーでは次に、ファクトリ関数にパラメータ・ブロック内のポインタが戻されているかどうかをチェックします。このポインタにより、OIDの適切な索引付けまたは一致関数が識別されます。

ファクトリ関数により適切な関数へのポインタが設定されている場合、Directory Serverではプラグインが一致ルールをサポートしているとみなします。

プラグインにより特定のフィルタ一致操作が処理されるかどうかをDirectory Serverでチェックする方法は、次のとおりです。索引付けのプロセスは、一致のプロセスと非常に類似しています。

図10-7 一致ルール・プラグインでの不明なOIDの検索

「図10-7 一致ルール・プラグインでの不明なOIDの検索」の説明

図10-7に示したプロセスの概要は次のとおりです。

1. Directory Serverにより、OIDを処理するためのプラグインの内部リストで一致が検出されません。そのためサーバーでは、パラメータ・ブロックを作成し、SLAPI_PLUGIN_MR_OIDなどのファクトリの適切なパラメータを設定します。

2. Directory Serverによりファクトリ関数がコールされます。ファクトリ関数により、一致コールを処理するための適切な関数へのポインタがパラメータ・ブロックに設定されるか、ポインタがNULLのままにされます。

3. Directory Serverにより、ファクトリ関数が戻された後でパラメータがチェックされます。ファクトリ関数によりパラメータ・ブロックに関数ポインタが設定されている場合、Directory Serverで内部リストが更新されます。これにより、関数で、OIDに関連付けられている一致ルール操作をサポートするプラグインが示されます。そうでない場合、ポインタはNULLのままになり、Directory Serverでは登録されている次の一致ルール・プラグインで再度処理を試みます。
すべての一致ルール・プラグインをコールしても、Directory Serverにより一致ルールOIDを処理するためのプラグインが見つからない場合、サーバーからクライアントにLDAP_UNAVAILABLE_CRITICAL_EXTENSIONが戻されます。

4. Directory Serverによって、操作に割り当てられていたメモリーが解放されます。
Directory Serverでは、対応の内部リストを拡張する目的で、プラグイン・ファクトリ関数がコールされることに注意してください。

11 パスワード記憶スキーム・プラグインの作成

この章では、Directory Serverがパスワード属性値を格納する仕組みを変更できるプラグインの作成方法について説明します。

この章の内容は、次のとおりです。

- パスワード記憶スキーム・プラグインのコール

- パスワード記憶スキーム・プラグインの作成

11.1 パスワード記憶スキーム・プラグインのコール

この項では、Directory Serverがパスワード記憶スキーム・プラグインをコールする状況について説明します。また、パスワード値がプラグインによってどのように処理されることが期待されているのかについても説明します。

11.1.1 パスワード記憶スキーム・プラグインのタイプ

pwdstorageschemeとreverpwdstorageschemeの2つのタイプのパスワード記憶スキーム・プラグインが、Directory Serverで機能します。pwdstorageschemeタイプは、一方向です。サーバーがパスワードをエンコードおよび格納した後、パスワードはデコードされません。そのため、pwdstorageschemeタイプには、格納されるパスワードをエンコードしたり、受信するパスワードをエンコードおよび格納されたパスワードと比較するためのプラグイン関数のみが含まれています。reverpwdstorageschemeタイプは可逆であるため、プラグインによってDirectory Serverは値をエンコードおよびデコードできます。そのため、可逆のタイプには、エンコード、比較およびデコード・プラグイン関数が含まれます。

注意:

この章では、一方向のpwdstorageschemeタイプのプラグインについて説明します。

可逆のタイプは、内部使用のみです。

11.1.2 事前インストールされるスキーム

Directory Serverによって提供される既存のスキームは、パスワード記憶スキーム・プラグインとして提供されています。cn=configで、DNにcn=Password Storage Schemesが含まれるエントリを検索します。デフォルトのパスワード記憶スキームは、Salted Secure Hashing Algorithm (SSHA)を使用します。

ユーザー・パスワードのエンコードに使用されるパスワード記憶スキームを変更できます。詳細は、『Oracle Directory Server Enterprise Edition管理者ガイド』の第7章「Directory Serverのパスワード・ポリシー」を参照してください。

11.1.3 パスワード属性値に対する影響

パスワード記憶スキーム・プラグイン関数は、userPassword属性値に影響します。Directory Serverは、起動時にパスワード記憶スキーム・プラグインを登録します。起動後、登録されて有効になったパスワード記憶スキーム・プラグインを使用して、パスワード値をエンコードできます。また、プラグインを使用して、受信するパスワードとエンコードされた値を比較することもできます。Directory Serverがどのプラグインを起動するかは、該当のエントリに使用されているパスワード記憶スキームによって異なります。

11.1.4 追加および変更リクエストの起動

追加および変更リクエストは、Directory Serverが入力パスワードをエンコードし、ディレクトリに格納することを示します。まず、Directory Serverは、パスワード値の記憶スキームを決定します。次に、適切なスキームのプラグイン・エンコード関数を呼び出します。エンコード関数は、エンコードされたパスワードをDirectory Serverに戻します。

11.1.5 バインド・リクエストの起動

バインド・リクエストは、Directory Serverが入力パスワード値と格納されたパスワード値を比較することを示します。追加および変更リクエストと同様に、Directory Serverは、パスワード値の記憶スキームを決定します。次に、サーバーは、適切なスキームのプラグイン比較関数を呼び出します。比較スキームは、「パスワードの比較」の説明に従って、2つのパスワードが一致するかどうかをDirectory Serverに伝えるintを戻します。

11.1.6 パスワード・ポリシーの一部

パスワード記憶スキーム・プラグインは、通常、パスワードをエンコードし、入力パスワードを格納およびエンコードされたパスワードと比較するのみです。つまり、プラグインは、広範なパスワード・ポリシーの一部のみを表しています。セキュアなディレクトリ・サービスの設計に関する提案については、『Oracle Directory Server Enterprise Editionデプロイメント・プランニング・ガイド』を参照してください。

11.2 パスワード記憶スキーム・プラグインの作成

この項では、パスワードをエンコードするプラグインの作成方法について説明します。プラグインによって、Directory Serverは、格納されたパスワードとクライアント・アプリケーションによって提供されたパスワードを比較することもできます。

注意:

この章の例では、セキュアなパスワード記憶スキームを構成しません。

この章で参照されるサンプル・プラグインのソースは、install-path/examples/testpwdstore.cにあります。エンコードと比較の場合、プラグインは、パスワードの各文字に対して42との排他的orを実行します。

11.2.1 パスワードのエンコード

Directory Serverは、パスワード記憶スキーム・プラグインのエンコード関数をコールする場合、その関数に入力パスワードchar *を渡し、エンコードされたパスワードchar *が戻ることを期待します。エンコード関数xorenc()の例のプロトタイプは、次のとおりです。

static char * xorenc(char * pwd);

正規のmalloc()ではなく、slapi_ch_malloc()を使用してエンコードされたパスワード用の領域を割り当てます。slapi_ch_free()によって割当てでメモリーが不足する場合、Directory Serverは"メモリー不足"メッセージを表示して終了できます。

通常、エンコードされたパスワードの前に、中カッコ{および}で囲まれたパスワード記憶スキームの名前を付けます。つまり、サンプル・プラグインは、XORと呼ばれます。

例では、次のように名前が宣言されています。

static char * name = "XOR";   /* Storage scheme name */

接頭辞{XOR}が付いたエンコードされた文字列を戻します。また、その名前をDirectory Serverに登録します。

例11-1 userPassword値のエンコード(testpwdstore.c)

#include "slapi-plugin.h"

static char * name           ="XOR";   /* Storage scheme name */

#define PREFIX_START '{'
#define PREFIX_END   '}'

static char *
xorenc(char * pwd)
{
char * tmp    = NULL;              /* Used for encoding   */
char * head   = NULL;              /* Encoded password    */
char * cipher = NULL;              /* Prefix, then pwd    */
int i, len;

/* Allocate space to build the encoded password           */
len = strlen(pwd);
tmp = slapi_ch_malloc(len + 1);
if (tmp == NULL) return NULL;

memset(tmp, '\0', len + 1);
head = tmp;

/* Encode. This example is not secure by any means.       */
for (i = 0; i < len; i++, pwd++, tmp++) *tmp = *pwd ^ 42;

/* Add the prefix to the cipher                           */
if (tmp != NULL) {
cipher = slapi_ch_malloc(3 + strlen(name) + strlen(head));
if (cipher != NULL) {
sprintf(cipher,"%c%s%c%s",PREFIX_START,name,PREFIX_END,head);
}
}
slapi_ch_free((void **) &head);

return (cipher);                   /* Server frees cipher */
}

一時的な使用に割り当てられたメモリーのみを解放することに注意してください。Directory Serverは、プラグインではなく、戻されるchar *のメモリーを解放します。slapi_ch_malloc()とslapi_ch_free()の詳細は、第15章「Directory Server関数リファレンス(パートI)」を参照してください。

11.2.2 パスワードの比較

Directory Serverは、パスワード記憶スキーム・プラグインの比較関数をコールする場合、その関数に入力パスワードchar *と、ディレクトリからの格納およびエンコードされたパスワードchar *を渡します。入力パスワードがディレクトリからのパスワードと一致する場合、比較関数はゼロ(0)を戻します。それ以外の場合、関数は1を戻します。比較関数xorcmp()の例のプロトタイプは、次のとおりです。

static int xorcmp(char * userpwd, char * dbpwd);

ここで、userpwdは入力パスワードです。dbpwdは、ディレクトリからのパスワードです。比較関数は、入力パスワードをエンコードし、結果をディレクトリからのパスワードと比較する必要があります。

例11-2 userPassword値の比較(testpwdstore.c)

#include "slapi-plugin.h"

static int
xorcmp(char * userpwd, char * dbpwd)
{
/* Check the correspondence of the two char by char       */
int i, len = strlen(userpwd);
for (i = 0; i < len; i++) {
if ((userpwd[i] ^ 42) != dbpwd[i])
return 1;                  /* Different passwords */
}
return 0;                          /* Identical passwords */
}

Directory Serverは値を比較関数に渡す前に、パスワードから接頭辞を削除することに注意してください。つまり、この場合、{XOR}を考慮する必要はありません。

すべてのエンコーディング・アルゴリズムに、このような単純な比較関数があるわけではありません。

11.2.3 パスワード記憶スキーム・プラグインの登録

次の4つのパスワード記憶スキーム固有の項目をDirectory Serverに登録する必要があります。

- 接頭辞に使用される記憶スキームの名前

- エンコード関数

- 比較関数

- デコード関数

デコード関数は提供しないことに注意してください。この場合、Directory Serverは、ユーザー・パスワードを格納した後、それらをデコードしません。

例11-3 パスワード記憶スキーム・プラグインの登録(testpwdstore.c)

#include "slapi-plugin.h"

static char * name           ="XOR";   /* Storage scheme name */

static Slapi_PluginDesc desc = {
"xor-password-storage-scheme",     /* Plug-in identifier  */
"Oracle Corporation (test)",       /* Vendor name         */
"11.1.1.3.0",                      /* Revision number     */
"Exclusive-or example (XOR)"       /* Plug-in description */
};

#ifdef _WIN32
__declspec(dllexport)
#endif
int
xor_init(Slapi_PBlock * pb)
{
int rc = 0;                        /* 0 means success     */
rc |= slapi_pblock_set(            /* Plug-in API version */
pb,
SLAPI_PLUGIN_VERSION,
(void *) SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &desc
);
rc |= slapi_pblock_set(            /* Storage scheme name */
pb,
SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME,
(void *) name
);
rc |= slapi_pblock_set(            /* Encode password     */
pb,
SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN,
(void *) xorenc
);
rc |= slapi_pblock_set(            /* Compare password    */
pb,
SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN,
(void *) xorcmp
);
rc |= slapi_pblock_set(            /* Never decode pwd    */
pb,
SLAPI_PLUGIN_PWD_STORAGE_SCHEME_DEC_FN,
NULL
);
return rc;
}

11.2.4 パスワード記憶スキーム・プラグインの設定

まだ実行していない場合は、ディレクトリ・インスタンスを設定してプラグインを構築します。

11.2.4.1 プラグインを登録するには

実行済でない場合には、サンプルのプラグイン・ライブラリを作成し、プラグイン情報のロギングとサンプル・プラグインの両方をアクティブ化します。

1. プラグインを構築します。
ヒント: install-path/examples/Makefileまたはinstall-path/examples/Makefile64を使用します。

2. プラグイン情報メッセージがログに記録されるようにDirectory Serverを構成し、プラグインをロードします。

$ dsconf create-plugin -F custom-plugin-init-function -G custom-plugin-argument -H lib-path \
-Y custom-plugin-type "Custom Plugin"
$ dsconf enable-plugin "Custom Plugin"

ヒント: 詳細は、プラグインのソース・ファイルに指定されたコマンドを使用して参照してください。

3. Directory Serverを再起動します。

$ dsadm restart instance-path

11.2.5 パスワード記憶スキーム・サンプルの試行

この項では、この章のサンプル・プラグインについて説明します。

11.2.5.1 クイック・テストの実行

まだ実行していない場合は、XORパスワード記憶スキームをDirectory Serverに接続します。

他のことを実行する前に、Directory Serverが期待どおりにプラグイン・エンコード関数をコールしていることを簡単にチェックします。このクイック・テストを実行するには、pwdhashツールを使用します。pwdhashツールによって、Directory Serverはパスワードをエンコードし、その結果を表示します。

例11-4 パスワード記憶スキームのテスト

$ pwdhash -D /local/ds -s XOR password
{XOR}ZKYY]EXN

結果として生じるエンコードされたパスワードの正確な値は気にしないでください。ただし、出力は{XOR}で始まる必要があります。

Directory Serverは動的にエンコード関数をコールするため、プラグイン・ライブラリを修正できます。Directory Serverに対して何も実行せずに、pwdhashを試行します。このクイック・テストが機能しない場合は、サンプルを修正します。

11.2.5.1.1 XORスキームを使用してパスワードをエンコードするには

ここでは、XORスキームを使用して、Barbara Jensenの新しいパスワードをエンコードします。

1. サフィックスのパスワード記憶スキームをXORに変更します。

$ dsconf set-server-prop -h localhost -p 1389 pwd-storage-scheme:XOR

2. Barbaraのパスワードをpasswordに変更します。

3. Barbaraの新しくエンコードされたパスワードを表示します。

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com uid=bjensen
version: 1
dn: uid=bjensen, ou=People, dc=example,dc=com
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
givenName: Barbara
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
ou: Product Development
ou: People
l: Cupertino
uid: bjensen
mail: bjensen@example.com
telephoneNumber: +1 408 555 1862
facsimileTelephoneNumber: +1 408 555 1992
roomNumber: 0209
userPassword: {XOR}ZKYY]EXN

BarbaraのパスワードはXORエンコードされていることに注意してください。

11.2.5.2 XORエンコードされたパスワードの比較

Barbaraには、dc=example,dc=comの下の他のエントリを検索する権限があります。ここでは、bjensenとしてKirsten Vaughanのエントリを検索します。

例11-5 新しいパスワードを使用したバインド

$ ldapsearch -h localhost -p 1389 -b dc=example,dc=com
-D uid=bjensen,ou=People,dc=example,dc=com -w password uid=kvaughan
version: 1
dn: uid=kvaughan, ou=People, dc=example,dc=com
cn: Kirsten Vaughan
sn: Vaughan
givenName: Kirsten
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
ou: Human Resources
ou: People
l: Sunnyvale
uid: kvaughan
mail: kvaughan@example.com
telephoneNumber: +1 408 555 5625
facsimileTelephoneNumber: +1 408 555 3372
roomNumber: 2871

Directory Serverはプラグインを使用して、バインド中にBarbaraのパスワードをチェックします。このように、BarbaraのパスワードはXORエンコードされたことがわかっているため、Directory ServerはXORプラグインを使用している必要があります。すべてのプロセスが実行中と思われる場合は、比較関数も機能していると結論付けることができます。

12 パスワード品質チェック・プラグインの作成

Directory Serverは、構成可能なパスワード品質チェック・プラグインを提供しています。プラグインによって、ユーザーが一般的な英語言語の辞書攻撃を受けやすい値にパスワードを変更しないようにすることができます。しかし、パスワード品質チェックをさらに拡張することを決定する場合もあります。この章では、パスワードを変更するときにパスワード品質をチェックするカスタム・プラグインの作成方法について説明します。

この章の内容は、次のとおりです。

- Directory Serverがパスワード品質チェック・プラグインを使用する仕組み

- カスタム・パスワード品質チェック・プラグインの作成

12.1 Directory Serverがパスワード品質チェック・プラグインを使用する仕組み

この項では、Directory Serverのパスワード・ポリシー構成がどのようにパスワード品質チェックに影響するのかを説明します。また、作成するパスワード品質チェック・プラグインに対するDirectory Serverの実行要件についても説明します。

12.1.1 パスワード品質をチェックするパスワード・ポリシー

パスワード・ポリシーには、品質基準を満たさないパスワードを拒否するという側面があります。ユーザーがパスワード値を送信すると、その値はuserPassword属性のエントリに格納されます。パスワード値が推測または検出されにくいものであるかをサーバーで確認したい場合があります。また、サーバーで、弱いパスワードが受け入れられたときに警告を記録したり、弱いパスワードを拒否するようにしたい場合があります。パスワード・ポリシーを設定する際には、何を実行するかを決定します。

サーバーがパスワード品質をどの程度までチェックするかを制御するパスワード・ポリシー・エントリ属性は、pwdCheckQualityです。この属性がパスワード品質をチェックするよう設定されている場合、サーバーはそのためのプラグインをコールできます。この章では、パスワード品質をチェックするプラグインの作成方法について説明します。

パスワード・ポリシー構成の詳細は、『Oracle Directory Server Enterprise Edition管理者ガイド』の第7章「Directory Serverのパスワード・ポリシー」を参照してください。

12.1.2 パスワード・チェック・プラグインを実装するかどうか

Directory Serverとともに提供される強固なパスワード・チェック・プラグインを使用してパスワード・ポリシー要件を達成できる場合は、独自のプラグインを作成しないでください。

Directory Serverとともに提供される強固なパスワード・チェック・プラグインは、デプロイメント用に構成でき、重要と思われるパスワード品質の側面をチェックします。次の項目を設定できます。

- パスワード値に必要な小文字、大文字、数値および特殊文字の数
特別な構成設定によって、文字の混在を強制することもできます。

- 辞書ファイルから読み取られる、禁止文字列がないこと
提供されているデフォルトの英語言語ファイルを使用できます。または、独自のファイルを追加したり、それで置き換えることができます。

これらの構成設定は、その他のチェックに加えて行われるものです。そのようなチェックでは、パスワード長、パスワードがエントリの共通属性に一致しているかどうかなどが制御されます。

多くの場合は、独自のパスワード・チェック・プラグインを作成しなくても済みます。

12.1.3 パスワード・チェック・プラグインが実行する必要があること

独自のパスワード・チェック・プラグインを実装することを決定した場合、タイプをpasswordcheckにする必要があります。プラグインは、少なくとも、パスワード・チェック関数SLAPI_PLUGIN_PASSWDCHECK_FNを実装する必要があります。この関数は、パラメータ・ブロック配列SLAPI_PASSWDCHECK_VALSに指定されたすべてのパスワードが品質チェックを満たしていることを確認します。SLAPI_PASSWDCHECK_VALSには、2つ以上のパスワード値が含まれることがあります。

チェックするパスワード値に応じて、関数は次の値を戻す必要があります。

-1

品質チェックの失敗以外の理由で、クライアント・アプリケーションに失敗結果を送信する必要がある場合はこの値を戻します。たとえば、サーバーが大きな辞書ファイルのロードによりビジー状態の場合にこの値を戻すことができます。この場合、サーバーは、パスワード品質チェックの準備が整っていません。

この値を戻すと、サーバーは進行中の追加または変更操作を中止します。

0

SLAPI_PASSWDCHECK_VALSのすべてのパスワードがパスワード品質チェックを満たす場合は、この値を戻します。

>0

SLAPI_PASSWDCHECK_VALSの少なくとも1つのパスワードがパスワード品質チェックに失敗した場合は、正の整数を戻します。

正の整数を戻す場合、slapi_pblock_set ()を使用してパラメータ・ブロックのSLAPI_RESULT_TEXTを介してエラー・メッセージを渡します。slapi_ch_malloc()を使用してメッセージ用の領域を割り当てます。メッセージに割り当てられたメモリーの解放はサーバーによって行われます。

メッセージ文字列は、ここで示すとおり、invalid password syntax:で始める必要があります。

サーバーは、クライアント・アプリケーションにLDAP_CONSTRAINT_VIOLATIONの結果、19を送信します。ただし、ディレクトリ・ルートDNユーザーを含むパスワード管理者がパスワード・ポリシー・チェックに関係なくパスワードを変更できるようにpasswordRootdnMayBypassModsChecksが設定されている場合、サーバーはそのユーザーによる変更を許可します。

この章で使用される単純なケースでは、作業は最小限です。ただし実際には、特に独自の辞書チェックを実装する場合は、作業が膨大になることがあります。独自の辞書チェックを実装する場合は、プラグインが大きなファイルから辞書コンテンツをキャッシュすることがあります。この場合、プラグイン初期化の一部ではなく、プラグイン開始関数の一部として辞書をロードします。キャッシュの構成中は、サーバーの起動を阻止しないようにします。

12.2 カスタム・パスワード品質チェック・プラグインの作成

この項では、単純なパスワード品質チェックを実行するプラグインの作成方法について説明します。

この章では、コードのみを示します。完全なサンプル・コードは、Directory Serverをインストールしたinstall-path/examples/pwdcheck.cにあります。

12.2.1 パスワード値のチェック

Directory ServerがuserPassword値を追加または変更するリクエストを受け取ると、サーバーは登録されたpasswordcheckプラグインをコールします。サーバーは、パラメータ・ブロックの一連のSlapi_Value構造体として1つ以上の値を渡します。slapi_pblock_get ()を使用してこれらの値を取得できます。

#include "slapi-plugin.h"

static int
check_pwd(Slapi_PBlock * pb)
{
Slapi_Value ** pwdvals = NULL;
slapi_pblock_get(pb, SLAPI_PASSWDCHECK_VALS, &pwdvals;);
}

パスワード値が受入れ可能なら、コードはゼロ(0)を戻す必要があります。パスワード値が受け入れられないときは、コードはゼロ以外を戻す必要があります。この単純なケースでは、不正なパスワード値がsecret12と等しい値のみであるため、コードは迅速なstrcmpになります。

#include "slapi-plugin.h"

/* Reject password values equal to secret12.               */
static int
check_pwd(Slapi_PBlock * pb)
{
Slapi_Value ** pwdvals = NULL;

…

/* Do not check values if none exist. */
if (pwdvals == NULL) return 0;

for (i=0 ; pwdvals[i] != NULL; i++) {
const char * password = slapi_value_get_string(pwdvals[i]);
if (strcmp("secret12", password) == 0) {
slapi_pblock_set(pb, SLAPI_RESULT_TEXT,
slapi_ch_strdup("invalid password syntax: Bad password!"));
return 1;
}
}
return 0;
}

これで、値がsecret12の場合のみ、コードによってDirectory Serverがパスワードを拒否します。

12.2.2 パスワード・チェック・プラグインの初期化

パスワード・チェック・プラグインは、初期化中にパスワード・チェック関数SLAPI_PLUGIN_PASSWDCHECK_FNをサーバーに登録します。

#include "slapi-plugin.h"

int
pwdcheck_init(Slapi_PBlock * pb)
{
int rc = 0;
rc |=   slapi_pblock_set(
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);

rc |=   slapi_pblock_set(
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &pwd_desc; /* See the code for pwd_desc. */
);

rc |=   slapi_pblock_set(
pb,
SLAPI_PLUGIN_PASSWDCHECK_FN,
(void *) check_pwd
);
return rc;
}

大きなファイルから辞書コンテンツをキャッシュする独自の辞書チェックを実装できます。この場合、プラグイン初期化の一部ではなく、プラグイン開始関数の一部として辞書をロードします。キャッシュの構成中は、サーバーの起動を阻止しないようにします。

12.2.3 パスワード・チェック・プラグインのテスト

Directory Serverとともに提供されるサンプル・データを使用してプラグインをテストします。プラグインを設定および登録するには、コマンドライン・ツールを使用します。

12.2.3.1 サンプル・サフィックスを設定するには

実行済でない場合には、サフィックスdc=example,dc=comを使用して、サンプルのLDIFファイルinstall-path/resources/ldif/Example.ldifからロードされたデータを含むディレクトリ・インスタンスを設定します。

1. 新規Directory Serverインスタンスを作成します。
次に例を示します。

$ dsadm create -h localhost -p 1389 /local/ds
Choose the Directory Manager password:
Confirm the Directory Manager password:
$

2. 新規Directory Serverインスタンスを開始します。
次に例を示します。

$ dsadm start /local/ds
Server started: pid=4705
$

3. サフィックスdc=example,dc=comを作成します。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf create-suffix -h localhost -p 1389 dc=example,dc=com
Enter "cn=directory manager" password:
Certificate "CN=defaultCert, CN=hostname:1636" presented by the
server is not trusted.
Type "Y" to accept, "y" to accept just once,
"n" to refuse, "d" for more details: Y
$

4. サンプルLDIFをロードします。
たとえば、長い行は印刷ページに合わせて折り返します。

$ dsconf import -h localhost -p 1389 \
install-path/resources/ldif/Example.ldif dc=example,dc=com
Enter "cn=directory manager" password:
New data will override existing data of the suffix
"dc=example,dc=com".
Initialization will have to be performed on replicated suffixes.
Do you want to continue [y/n] ? y

## Index buffering enabled with bucket size 16
## Beginning import job...
## Processing file "install-path/resources/ldif/Example.ldif"
## Finished scanning file "install-path/resources/ldif/Example.ldif" (160 entries)
## Workers finished; cleaning up...
## Workers cleaned up.
## Cleaning up producer thread...
## Indexing complete.
## Starting numsubordinates attribute generation.
This may take a while, please wait for further activity reports.
## Numsubordinates attribute generation complete. Flushing caches...
## Closing files...
## Import complete. Processed 160 entries in 5 seconds.
(32.00 entries/sec)

Task completed (slapd exit code: 0).
$

関連項目

Directory Service Control Centerを使用して、このタスクを実行できます。

12.2.3.2 プラグインを登録するには

実行済でない場合には、サンプルのプラグイン・ライブラリを作成し、プラグイン情報のロギングとサンプル・プラグインの両方をアクティブ化します。

1. プラグインを構築します。
ヒント: install-path/examples/Makefileまたはinstall-path/examples/Makefile64を使用します。

2. プラグイン情報メッセージがログに記録されるようにDirectory Serverを構成し、プラグインをロードします。

$ dsconf create-plugin -F custom-plugin-init-function -G custom-plugin-argument -H lib-path \
-Y custom-plugin-type "Custom Plugin"
$ dsconf enable-plugin "Custom Plugin"

ヒント: 詳細は、プラグインのソース・ファイルに指定されたコマンドを使用して参照してください。

3. Directory Serverを再起動します。

$ dsadm restart instance-path

12.2.3.3 パスワード・チェック・プラグインを使用するには

開始する前に

サフィックスdc=example,dc=comをサンプル・データに移入します。また、プラグインをDirectory Serverに登録します。

1. Directory Serverがパスワード・チェック・プラグインをコールするように、パスワード品質チェックを実施します。

$ dsconf set-server-prop -h localhost -p 1389 \
pwd-check-enabled:on pwd-strong-check-enabled:off

2. 情報メッセージのロギングを有効にします。

$ dsconf set-log-prop -h localhost -p 1389 error level:err-plugins

3. パスワード品質チェックをテストするエントリを準備します。

$ cat quentin.ldif
dn: uid=qcubbins,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: quentin.cubbins@example.com
userPassword: secret12

4. ディレクトリにエントリを追加します。

$ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com \
-w bribery -h localhost -p 1389 -f quentin.ldif

adding new entry uid=qcubbins,ou=People,dc=example,dc=com
ldap_add_s: Constraint violation

5. その他の情報についてerrorsログをチェックします。

$ grep secret12 /local/ds/logs/errors
[16/Feb/2006:18:13:06 +0100] - INFORMATION -
Sample password check plug-in - conn=0 op=1 msgId=2 -
Invalid password: secret12

示されているログ・メッセージの例は、読みやすいようにこの文書の印刷版に含まれています。

13 算出属性プラグインの作成

この章では、属性値がクライアント・アプリケーションによって要求されるときにその値を計算するプラグインについて説明します。

この章の内容は、次のとおりです。

- 算出属性とパフォーマンス

- 算出属性プラグインの作成

13.1 算出属性とパフォーマンス

Directory Serverのほとんどの属性とは異なり、算出属性にはDirectory Serverデータベースに格納された値がありません。算出属性は、値が要求されたときに使用可能になります。そのため、値の要求ごとに、要求時に属性値を算出する必要があります。

そのため、一般的に、算出属性はすぐに処理する必要があります。大規模な内部検索に依存するか、またはディレクトリに含まれていないデータにアクセスする算出属性は、生成が高コストになる可能性があります。そのため、そのような属性は、算出属性の理想的な候補ではありません。

かわりに、手近なデータからすばやく値を生成する算出属性が、より一般的です。たとえば、エントリ内の他の属性の値をカウントまたは処理するために、算出属性を使用することがあります。この章では、エントリを読み取るときにAPIを使用して現在の時間を取得する単純で擬似的な例を示します。

13.2 算出属性プラグインの作成

この項では、属性値currentTimeを生成するプラグインの作成方法について説明します。

この章では、コードのみを示します。完全なサンプル・コードは、Directory Serverをインストールしたinstall-pathCaret/examples/computed.cにあります。

13.2.1 算出属性プラグインの初期化

属性値を計算するプラグインは、slapi_compute_callback_t型の関数を登録し、サーバーでの初期化中にslapi_compute_add_evaluator ()を使用して属性を計算します。

#include "slapi-plugin.h"

int
compute_init(Slapi_PBlock * pb)
{
int rc = 0;                        /* 0 means success             */
rc |= slapi_pblock_set(            /* Plug-in API version         */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set(            /* Plug-in description         */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &comp_desc;           /* See the code for comp_desc. */
);
rc |= slapi_compute_add_evaluator(compute_attrs);
return rc;
}

ここで、compute_attrs()は、属性値を計算する関数となります。

13.2.2 属性値の計算

Directory Serverが算出属性値の要求を受け取ると(今回はcurrentTime)、サーバーは属性を計算するために登録される関数をコールします。Directory Serverは、属性を計算するためのコンテキスト、属性タイプおよびエントリを関数に提供します。

そのため、関数は、属性タイプをチェックして、関数が計算を処理するかどうかを確認する必要があります。関数が問題の属性タイプを処理しない場合は、-1を戻します。関数が属性を処理できる場合は、関数が属性値を決定する必要があります。関数は、サーバーが戻す結果に算出コンテンツを追加する必要があります。次のコードは、属性値の現在の時間の文字列を生成するcompute_attrs ()関数を示しています。

#include "slapi-plugin.h"

/* Compute an attribute called currentTime                        */
static int
compute_attrs(
computed_attr_context  * context,
char                   * type,
Slapi_Entry            * entry,
slapi_compute_output_t   outfn
)
{
/* If the attribute type is not recognized return -1.         */
int rc = -1;

if (slapi_attr_type_cmp("currentTime", type, 2) == 0) {
Slapi_Attr  * time_attr;
time_t        now;
char          current_time[30];
Slapi_Value * time_value;
int           rc = 0;

/* Construct the computed attribute.                      */
time_attr = slapi_attr_new();
slapi_attr_init(time_attr, type);
now = time(NULL);
ctime_r(&now;, current_time, 30);
current_time[(int)strlen(current_time) - 1] = '\0';
time_value = slapi_value_new_string(current_time);
slapi_attr_add_value(time_attr, time_value);
slapi_value_free(&time_value;);

/* Add the attribute to the result returned.              */
rc = (*outfn)(context, time_attr, entry);
attr_done(time_attr);
return rc;

/* Handle other computed attributes...
} else if (slapi_attr_type_cmp("myCompAttr", type, 2) == 0) {
*/

}
return rc;
}

戻される結果に属性を追加するコードの行に注意してください。この場合の出力関数は、slapi_compute_output_t型です。

算出属性値を構成するときは、compute_attrs()関数がctime_r()関数の文字列から改行文字を削除することにも注意してください。この削除によって、値がldapsearchコマンドで表示されるときに属性値がbase64でエンコードされなくなります。

13.2.3 算出属性プラグインのテスト

ldapsearchコマンドを使用してプラグインをテストする前に、プラグインをDirectory Serverに登録する必要があります。

13.2.3.1 プラグインを登録するには

実行済でない場合には、サンプルのプラグイン・ライブラリを作成し、プラグイン情報のロギングとサンプル・プラグインの両方をアクティブ化します。

1. プラグインを構築します。
ヒント: install-path/examples/Makefileまたはinstall-path/examples/Makefile64を使用します。

2. プラグイン情報メッセージがログに記録されるようにDirectory Serverを構成し、プラグインをロードします。

$ dsconf create-plugin -F custom-plugin-init-function -G custom-plugin-argument -H lib-path \
-Y custom-plugin-type "Custom Plugin"
$ dsconf enable-plugin "Custom Plugin"

ヒント: 詳細は、プラグインのソース・ファイルに指定されたコマンドを使用して参照してください。

3. Directory Serverを再起動します。

$ dsadm restart instance-path

13.2.3.2 算出属性プラグインを使用するには

開始する前に

算出属性プラグインをDirectory Serverに登録します。

ルートDSEで検索を実行します。

$ ldapsearch -h localhost -p 1389 -b "" -s base "(objectclass=*)" currentTime
version: 1
dn:
currentTime: Fri Feb 17 09:30:28 2006

第II部

プラグインAPIリファレンス

Directory ServerプラグインAPIによって、プラグイン、つまりDirectory Serverインスタンスに登録され、サーバー機能をカスタマイズおよび拡張するライブラリを開発できます。ここでは、APIに対する完全なリファレンスを提供します。

次の章で構成されています。

- 第14章「データ型と構造体のリファレンス」: サーバー・パラメータ・ブロックを含まない主要なデータ構造体について説明します。

- 第15章「Directory Server関数リファレンス(パートI)」: 機能領域とアルファベット順の両方で、プラグインAPI関数について説明します。

- 第16章「Directory Server関数リファレンス(パートII)」: アルファベット順で、プラグインAPI関数についての説明を続けます。

- 第17章「パラメータ・ブロック・リファレンス」: 特定の操作に関係するデータを保持するサーバー・パラメータ・ブロックについて説明します。

Directory Serverプラグインの開発に関するヘルプは、「プラグインAPIガイド」を参照してください。

14 データ型と構造体のリファレンス

この章では、プラグイン関数で使用するデータ型と構造体について説明します。表14-1には、使用可能なデータ構造体のリストがまとめられています。表14-2には、コールバックのリストがまとめられています。

14.1 クイック・リファレンス表

表14-1 データ構造体に対するクイック・リファレンス

データ構造体またはコールバック

簡単な説明

berval

基本エンコーディング・ルールを使用してエンコードされるバイナリ・データ

computed_attr_context

算出属性を処理するときに使用する情報

LDAPControl

LDAP操作に関連付けられたLDAP v3コントロール

LDAPMod

ディレクトリ・エントリ属性に対する変更セット

Slapi_Attr

ディレクトリ・エントリ属性

Slapi_Backend

サーバー・バックエンド

Slapi_ComponentId

サーバーに割り当てられた識別子(内部操作に使用される)

Slapi_CondVar

スレッド同期の条件変数

Slapi_Connection

クライアント接続

Slapi_DN

識別名

Slapi_Entry

ディレクトリ・エントリ

Slapi_Filter

検索フィルタ

Slapi_MatchingRuleEntry

プラグインによって処理される一致ルール

Slapi_Mod

個々の属性に対する変更

Slapi_Mods

ディレクトリ・エントリに対する変更セット

Slapi_Mutex

スレッド同期のMutex

Slapi_Operation

保留中のLDAP操作

Slapi_PBlock

LDAP操作データを含むパラメータ・ブロック

Slapi_PluginDesc

提供するプラグインの説明

Slapi_RDN

相対識別名

Slapi_Value

個々の属性値

Slapi_ValueSet

属性値セット

vattr_type_thang

仮想の可能性がある属性

表14-2 コールバックに対するクイック・リファレンス

データ構造体またはコールバック

簡単な説明

mrFilterMatchFn

拡張可能な一致フィルタを処理する。

plugin_referral_entry_callback

内部検索で検出される参照を処理する。

plugin_result_callback

内部検索後に送信される結果を処理する。

plugin_search_entry_callback

内部検索で検出されるエントリを処理する。

roles_get_scope_fn_type

ロールの範囲を決定する。

send_ldap_referral_fn_ptr_t

参照をクライアントに送信する前に変更する。

send_ldap_result_fn_ptr_t

結果をクライアントに送信する前に変更する。

send_ldap_search_entry_fn_ptr_t

エントリをクライアントに送信する前に変更する。

slapi_compute_callback_t

算出属性を処理する。

slapi_compute_output_t

算出属性を計算する。

slapi_extension_constructor_fnptr

オブジェクト拡張の作成を処理する。

slapi_extension_destructor_fnptr

オブジェクト拡張の破棄を処理する。

slapi_plugin_init_fnptr

再帰的なプラグイン登録を処理する。

14.2 データ型と構造体(アルファベット順)

14.2.1 berval

簡素化された基本エンコーディング・ルール(BER)を使用してエンコードされたバイナリ・データを表します。

JPEGまたはオーディオ・ファイルなどのバイナリ属性値を使用するときにberval構造体を使用します。

14.2.1.1 構文

/* Defined in ldap.h, which is included by slapi-plugin.h */
#include "slapi-plugin.h"
struct berval {
unsigned long   bv_len;
char          * bv_val;
};

14.2.1.2 フィールド

この構造体には、次のフィールドがあります。

表14-3 bervalのフィールド

フィールド

説明

bv_len

エンコードされたデータのサイズ

bv_val

エンコードされたデータ自体

14.2.2 computed_attr_context

計算される属性の属性タイプ、現在のBERエンコーディングされたリクエストおよびパラメータ・ブロック・コンテキストなどの情報を表す不透明な構造体です。

14.2.2.1 構文

#include "slapi-plugin.h"
typedef struct _computed_attr_context computed_attr_context;

14.2.2.2 説明

サーバーは、クライアント・アプリケーションにエントリを送信する前に、計算される属性があるかどうかを決定します。該当する場合、サーバーはこれらの属性を生成し、エントリに含めます。

このプロセスの一部として、サーバーは、computed_attr_context構造体を作成し、属性値を生成する関数に関連情報を渡します。

14.2.3 LDAPControl

LDAP v3で指定されているように、LDAP操作に関連付けられたクライアントまたはサーバー・コントロールを表します。

クライアントおよびサーバー・コントロールは、LDAP操作の機能を拡張するために使用されることがあります。

14.2.3.1 構文

/* Defined in ldap.h, which is included by slapi-plugin.h */
#include "slapi-plugin.h"
typedef struct ldapcontrol {
char          * ldctl_oid;
struct berval   ldctl_value;
char            ldctl_iscritical;
} LDAPControl, * PLDAPControl;

14.2.3.2 フィールド

この構造体には、次のフィールドがあります。

表14-4 LDAPControlのフィールド

フィールド

説明

ldctl_oid

コントロールのオブジェクト識別子(OID)。

ldctl_value

操作のコントロールによって使用される値を含むberval構造体。

ldctl_iscritical

LDAP_OPT_ONは、コントロールが操作にとって重要であることを示す。コントロールが操作にとって重要であるもののサポートされていない場合、サーバーはLDAP_UNAVAILABLE_CRITICAL_EXTENSIONを戻す。

LDAP_OPT_OFFは、コントロールが重要ではないことを示す。

14.2.4 LDAPMod

ディレクトリ・エントリの属性に対する変更を表します。

14.2.4.1 構文

/* Defined in ldap.h, which is included by slapi-plugin.h */
#include "slapi-plugin.h"
typedef struct ldapmod {
int                  mod_op;
char               * mod_type;
union {
char          ** modv_strvals;
struct berval ** modv_bvals;
} mod_vals;
} LDAPMod;
#define mod_values  mod_vals.modv_strvals
#define mod_bvalues mod_vals.modv_bvals

14.2.4.2 フィールド

この構造体には、次のフィールドがあります。

表14-5 LDAPModのフィールド

フィールド

説明

mod_op

実行する操作と属性値のデータ型。

mod_opフィールドは、実行する操作を指定する次の値を取る。

- LDAP_MOD_ADD: エントリに属性値を追加する。

- LDAP_MOD_DELETE: エントリから属性値を削除する。

- LDAP_MOD_REPLACE: 既存の属性値を置換する。
バイナリ値を指定するには、ビット単位OR演算子およびマクロLDAP_MOD_BVALUESを操作タイプ識別子とともに使用する。

mod->mod_op = LDAP_MOD_ADD|LDAP_MOD_BVALUES;

mod_type

変更する属性タイプ。

mod_values

属性の文字列値のNULL終了配列へのポインタ。

mod_bvalues

属性のberval構造体のNULL終了配列へのポインタ。

14.2.4.3 例

例14-1では、メール・アドレスを変更するようにLDAPModを設定しています。

例14-1 エントリに対する変更の準備

#include "slapi-plugin.h"
/* Declare the appropriate structures.                       */
LDAPMod          mod_attr;         /* Attribute to modify    */
LDAPMod        * mods[2];          /* Array of modifications */
char           * mail_vals[] =     /* New mail address       */
{"quentin@example.com", NULL};

/* Set up the LDAPMod structure used to modify the entry.    */
mod_attr.mod_type   = "mail";
mod_attr.mod_op     = LDAP_MOD_REPLACE;
mod_attr.mod_values = mail_vals;   /* "quentin@example.com"  */
mods[0]             = &mod_attr;
mods[1]             = NULL;

/* Modify the entry using slapi_modify_internal_set_pb()...  */

例14-2では、パラメータ・ブロックの内容に任意でさらに変更を追加しています。たとえば、このコードは、事前操作変更プラグイン関数の一部になることがあります。

例14-2 さらなる変更の追加

#include "slapi-plugin.h"

/*
* Set up an LDAPMod array, modify_mods, of additional modifications.
*/

if (modify_mods != NULL) {
LDAPMod ** mods;
Slapi_Mods smods;
int        i;

slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &mods);
slapi_mods_init_passin(&smods, mods);

for (i = 0; modify_mods[i] != NULL; i++) {
/* Do not copy mods.                                        */
slapi_mods_add_ldapmod(&smods, modify_mods[i]);
}

mods = slapi_mods_get_ldapmods_passout(&smods);
slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
slapi_mods_done(&smods);

/* Release container only. Content is still pointed to by mods. */
slapi_ch_free((void **)&modify_mods);
}

14.2.5 mrFilterMatchFn

フィルタ一致のコールバック関数を指定します。サーバーは、検索操作を処理するときに、拡張可能な一致検索フィルタと一致する候補ごとに1回この関数をコールします。

14.2.5.1 構文

#include "slapi-plugin.h"
typedef int (*mrFilterMatchFn) (void* filter, Slapi_Entry* entry,
Slapi_Attr* vals);

14.2.5.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-6 mrFilterMatchFnのパラメータ

パラメータ

説明

filter

フィルタ・ファクトリ関数によって作成されたフィルタ。

entry

サーバーによってチェックされる候補エントリを表すSlapi_Entry。

vals

エントリ内の最初の属性を表すSlapi_Attr。

残りの属性に対して処理を繰り返すには、slapi_entry_next_attr()をコールする。

14.2.5.3 説明

サーバーは、一致ルール・プラグインを使用して拡張可能な一致フィルタを処理するときに、このフィルタ一致関数をコールします。拡張可能な一致フィルタは、一致するエントリが検出される仕組みを示した一致ルールのOIDか属性タイプのいずれか、またはその両方を指定します。たとえば、よく似た一致ルールを実装して、指定された値に類似するすべてのエントリを検出することができます。

一致ルールに対して拡張可能な一致フィルタを処理するには、このコールバックと、フィルタ構造体filterを作成するフィルタ・ファクタの両方を実装します。コールバックは、この構造体から属性タイプや値などのフィルタに関する情報を取得し、この情報を候補entry内の属性タイプや値と比較します。

14.2.5.4 戻り値

コールバックは、フィルタが一致する場合は0、フィルタが一致しない場合は-1を戻す必要があります。エラー発生時は、RFC 4511『Lightweight Directory Access Protocol (v3)』の「Result Message」の項に示されているように、LDAPエラー・コードを戻すことがあります。

14.2.6 plugin_referral_entry_callback

参照のコールバック関数を指定します。サーバーは、このコールバックをトリガーするために実装された内部検索がLDAP v3参照を検出すると、この関数をコールします。

14.2.6.1 構文

#include "slapi-plugin.h"
typedef int (*plugin_referral_entry_callback)(char * referral,
void *callback_data);

14.2.6.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-7 plugin_referral_entry_callbackのパラメータ

パラメータ

説明

referral

検索によって検出される参照のURL。

callback_data

内部検索操作に渡されるポインタ。

コールバック関数とプラグイン本体の間でデータを渡すにはこれを使用する。

14.2.6.3 説明

これをslapi_search_internal_callback_pb()のprecパラメータとして渡します。内部検索は、参照エントリを検出するたびに、この関数をコールします。

14.2.6.4 戻り値

サーバーは、コールバックの戻り値を使用しません。

14.2.7 plugin_result_callback

検索結果のコールバック関数を指定します。サーバーは、このコールバックをトリガーするために実装された内部検索がLDAP結果を戻すと、この関数をコールします。

14.2.7.1 構文

#include "slapi-plugin.h"
typedef void (*plugin_result_callback)(int rc, void *callback_data);

14.2.7.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-8 plugin_result_callbackのパラメータ

パラメータ

説明

rc

検索によって戻されるLDAP結果コード。

callback_data

内部検索操作に渡されるポインタ。

コールバック関数とプラグイン本体の間でデータを渡すにはこれを使用する。

14.2.7.3 説明

これをslapi_search_internal_callback_pb()のprcパラメータとして渡します。サーバーは、検索が中止されなければ、検索操作ごとに1回この関数をコールします(中止された場合、関数はコールされません)。

14.2.8 plugin_search_entry_callback

エントリのコールバック関数を指定します。サーバーは、このコールバックをトリガーするために実装された内部検索がLDAPエントリを検出すると、この関数をコールします。

14.2.8.1 構文

#include "slapi-plugin.h"
typedef int (*plugin_search_entry_callback)(Slapi_Entry *e,
void *callback_data);

14.2.8.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-9 plugin_search_entry_callbackのパラメータ

パラメータ

説明

e

検索によって検出されるエントリへのポインタ。

callback_data

内部検索操作に渡されるポインタ。

コールバック関数とプラグイン本体の間でデータを渡すにはこれを使用する。

14.2.8.3 説明

これをslapi_search_internal_callback_pb()のpsecパラメータとして渡します。内部検索は、参照エントリを検出するたびに、この関数をコールします。

14.2.8.4 戻り値

コールバックは、検索を続けるには0を、検索を中断するには-1を戻す必要があります。

14.2.9 roles_get_scope_fn_type

ある範囲のロールを決定するためのコールバック関数を指定します。プラグインは、slapi_role_get_scope()を使用してこのコールバックをトリガーします。

14.2.9.1 構文

#include "slapi-plugin.h"
typedef int (*roles_get_scope_fn_type)(Slapi_Entry *role_entry,
Slapi_DN ***scope, int *nb_scope);

14.2.9.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-10 roles_get_scope_fn_typeのパラメータ

パラメータ

説明

role_entry

ロールを定義するエントリ。

scope

範囲のベースでエントリの識別名に設定する。

nb_scope

LDAP_SCOPE_BASE、LDAP_SCOPE_ONELEVELまたはLDAP_SCOPE_SUBTREEなどの値に設定する。

14.2.9.3 説明

このコールバックは、role_entryによって識別される範囲のロールを決定します。slapi_register_role_get_scope()を使用して、サーバーにコールバックを登録します。

14.2.9.4 戻り値

成功した場合は0、それ以外の場合は-1を戻します。

14.2.10 send_ldap_referral_fn_ptr_t

サーバーが結果をクライアントに送信する前にトリガーされるコールバックを指定します。

14.2.10.1 構文

#include "slapi-plugin.h"
typedef int (*send_ldap_referral_fn_ptr_t)( Slapi_PBlock *pb,
Slapi_Entry *e, struct berval **refs, struct berval ***urls );

14.2.10.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-11 send_ldap_referral_fn_ptr_tのパラメータ

パラメータ

説明

pb

操作の現在のパラメータ・ブロック

e

操作の現在のエントリ

refs

エントリで検出されるLDAP v3参照(検索結果の参照)を含むberval構造体のNULL終了配列へのポインタ

urls

LDAP v2クライアントのLDAP参照の収集に使用されるberval構造体の配列へのポインタ

14.2.10.3 説明

このコールバックによって、クライアントに戻される参照を変更できます。slapi_search_internal_callback_pb()を使用して、サーバーにコールバックを登録します。

14.2.10.4 戻り値

成功した場合は0、そうでない場合は-1を戻します。

14.2.11 send_ldap_result_fn_ptr_t

サーバーが結果をクライアントに送信する前にトリガーされるコールバックを指定します。

14.2.11.1 構文

#include "slapi-plugin.h"
typedef void (*send_ldap_result_fn_ptr_t)( Slapi_PBlock *pb,
int err, char *matched, char *text, int nentries,
struct berval **urls );

14.2.11.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-12 send_ldap_result_fn_ptr_tのパラメータ

パラメータ

説明

pb

操作の現在のパラメータ・ブロック

err

結果コード。

matched

LDAP_NO_SUCH_OBJECT結果コードを返信するときに、この引数を使用して、一致する可能性があるターゲットDNの部分を指定する。(他の状況ではNULLを渡す。)

text

クライアントに返信するエラー・メッセージ。(エラー・メッセージを返信しない場合はNULLを渡す。)

nentries

LDAP検索操作の結果コードを返信するときに、この引数を使用して、検出された一致エントリの数を指定する。

urls

LDAP_PARTIAL_RESULTS結果コードをLDAP v2クライアントに返信するとき、またはLDAP_REFERRAL結果コードをLDAP v3クライアントに返信するときに、この引数を使用して、参照URLを含むberval構造体の配列を指定する。(他の状況ではNULLを渡す。)

14.2.11.3 説明

このコールバックによって、クライアントに戻される結果を変更できます。slapi_search_internal_callback_pb()を使用して、サーバーにコールバックを登録します。

14.2.11.4 戻り値

成功した場合は0、そうでない場合は-1を戻します。

14.2.12 send_ldap_search_entry_fn_ptr_t

検索によって戻されるエントリをサーバーがクライアントに送信する前にトリガーされるコールバックを指定します。

14.2.12.1 構文

#include "slapi-plugin.h"
typedef int (*send_ldap_search_entry_fn_ptr_t)( Slapi_PBlock *pb,
Slapi_Entry *e, LDAPControl **ectrls, char **attrs,
int attrsonly );

14.2.12.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-13 send_ldap_search_entry_fn_ptr_tのパラメータ

パラメータ

説明

pb

操作の現在のパラメータ・ブロック

e

検索によって戻されるエントリ。

ectrls

操作のコントロールの配列。

attrs

検索結果で戻すための属性タイプの配列。

attrsonly

- 0: 値とタイプの両方を戻す。

- 1: 属性タイプのみを戻す。

14.2.12.3 説明

このコールバックによって、クライアントに戻される内容を変更できます。slapi_search_internal_callback_pb()を使用して、サーバーにコールバックを登録します。

14.2.12.4 戻り値

成功した場合は0、そうでない場合は-1を戻します。

14.2.13 Slapi_Attr

ディレクトリ・エントリ属性を表す不透明な構造体です。

14.2.13.1 構文

#include "slapi-plugin.h"
typedef struct slapi_attr Slapi_Attr;

14.2.13.2 関連項目

Slapi_Entry

14.2.14 Slapi_Backend

サーバー・バックエンドを表す不透明な構造体です。

14.2.14.1 構文

#include "slapi-plugin.h"
typedef struct backend Slapi_Backend;

14.2.14.2 関連項目

表15-18

14.2.15 Slapi_ComponentId

内部操作を処理するときに、プラグインを識別するためにサーバーによって使用されるコンポーネント識別子を表す不透明な構造体です。

14.2.15.1 構文

#include "slapi-plugin.h"
typedef struct slapi_componentid Slapi_ComponentId;

14.2.15.2 例

次のコードでは、内部検索中に使用されるプラグイン・コンポーネント識別子を設定しています。

例14-3 内部操作で使用するプラグイン識別子の設定

#include "slapi-plugin.h"
/* Declare the identifier as global to the plug-in.                 */
static Slapi_ComponentId * postop_id;

/* Assign a value as part of plug-in initialization.                */
int
testpostop_init(Slapi_PBlock * pb)
{
int rc = 0;
/* Register description, other functions, and so forth.         */
rc |= slapi_pblock_set(
pb,
SLAPI_PLUGIN_START_FN,
(void *) testpostop_set_log
);
/* Assign a value to the identifier.                            */
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &postop_id);
return (rc);
}

/* The server uses the identifier when processing
* internal operations, such as an internal search.                 */
int
testpostop_set_log(Slapi_PBlock * pb)
{
Slapi_DN    * confdn = NULL;       /* DN for configuration entry */
Slapi_Entry * config = NULL;       /* Configuration entry        */
int rc = 0;

confdn = slapi_sdn_new_dn_byval("cn=config");
rc |= slapi_search_internal_get_entry(confdn, NULL, &config, postop_id);
/* Use the results of the search.                                */
return(rc);
}

14.2.16 slapi_compute_callback_t

算出属性に値を指定するためにコールされる関数を決定するための関数を指定します。

14.2.16.1 構文

typedef int (*slapi_compute_callback_t)(computed_attr_context *c,
char* type,Slapi_Entry *e,slapi_compute_output_t outputfn);

14.2.16.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-14 slapi_compute_callback_tのパラメータ

フィールド

説明

c

コールバックのコンテキスト

type

outputfnによって値が計算される属性タイプ

e

算出属性を含むエントリ(このコールバックが戻された後にクライアントに戻される)

outputfn

属性値を計算するためのコールバック

14.2.16.3 説明

このコールバックは、指定のコンテキストc、エントリeのタイプtypeの属性の値を計算する関数を選択します。サーバーは、この関数をコールして、操作を要求したクライアントにエントリeを戻す前に属性値を計算するための関数を取得します。

この関数は、プラグイン初期化関数でslapi_compute_add_evaluator()を使用して、サーバーに登録されます。

14.2.16.4 戻り値

この関数は、成功すると0を戻します。typeで渡された属性タイプを処理しない場合は、-1を戻します。それ以外の場合は、LDAPエラー・コードを戻します。

14.2.17 slapi_compute_output_t

算出属性の値を決定するためのコールバック関数を指定します。

14.2.17.1 構文

typedef int (*slapi_compute_output_t)(computed_attr_context *c,
Slapi_Attr *a , Slapi_Entry *e);

14.2.17.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-15 slapi_compute_output_tのパラメータ

パラメータ

説明

c

コールバックのコンテキスト

a

コールバックが値を計算する属性

e

算出属性を含むエントリ(このコールバックが戻された後にクライアントに戻される)

14.2.17.3 説明

このコールバックは、指定のコンテキストc、エントリeの属性aの値を計算します。slapi_compute_add_evaluator()を使用して登録するslapi_compute_callback_t関数は、この関数をコールして、サーバーにエントリeを戻す前にaの値を計算します。

14.2.17.4 戻り値

この関数は、成功すると0を戻します。aで渡された属性タイプを処理しない場合は、-1を戻します。それ以外の場合は、LDAPエラー・コードを戻します。

14.2.18 Slapi_CondVar

スレッド同期を処理するためにプラグインによって使用される条件変数を表す不透明な構造体です。

14.2.18.1 構文

#include "slapi-plugin.h"
typedef struct slapi_condvar Slapi_CondVar;

14.2.18.2 関連項目

slapi_destroy_condvar()

slapi_new_condvar()

slapi_notify_condvar()

slapi_wait_condvar()

14.2.19 Slapi_Connection

サーバーへの接続を表す不透明な構造体です。

14.2.19.1 構文

#include "slapi-plugin.h"
typedef struct conn Slapi_Connection;

14.2.20 Slapi_DN

識別名(DN)を表す不透明な構造体です。構造体は、元のDNを保持し、slapi_sdn_get_ndn()がコールされた後に正規化されたバージョンも保持できます。

14.2.20.1 構文

#include "slapi-plugin.h"
typedef struct slapi_dn Slapi_DN;

14.2.20.2 関連項目

表15-7および表15-19

14.2.21 Slapi_Entry

ディレクトリ・エントリを表す不透明な構造体です。

14.2.21.1 構文

#include "slapi-plugin.h"
typedef struct slapi_entry Slapi_Entry;

14.2.21.2 関連項目

Slapi_Attr

表15-8

14.2.22 slapi_extension_constructor_fnptr

オブジェクト拡張のコールバック関数を指定します。

14.2.22.1 構文

#include "slapi-plugin.h"
typedef void *(*slapi_extension_constructor_fnptr)
(void *object, void *parent);

14.2.22.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-16 slapi_extension_constructor_fnptrのパラメータ

パラメータ

説明

object

拡張されたオブジェクト

parent

拡張の親オブジェクト

14.2.22.3 説明

このコールバックは、slapi_get_object_extension()を使用して取得できるオブジェクト拡張を登録します。

オブジェクト拡張が存在しない場合、このコールバックがオブジェクト拡張のみを作成することを確認します。

コールバックは、実際のプラグイン初期化関数の一部としてslapi_register_object_extension()を使用してサーバーに登録されます。

14.2.22.4 戻り値

このコールバックは、拡張へのポインタを戻します。それ以外の場合は、NULLを戻します。

14.2.23 slapi_extension_destructor_fnptr

オブジェクト拡張に割り当てられたメモリーを解放するためのコールバック関数を指定します。

14.2.23.1 構文

#include "slapi-plugin.h"
typedef void (*slapi_extension_destructor_fnptr)(void *extension,
void *object, void *parent);

14.2.23.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-17 slapi_extension_destructor_fnptrのパラメータ

パラメータ

説明

extension

オブジェクト拡張

object

拡張されたオブジェクト

parent

拡張の親

14.2.23.3 説明

このコールバックは、オブジェクト拡張に割り当てられたメモリーを解放します。関数は、プラグイン初期化関数でslapi_register_object_extension()を使用して、サーバーに登録されます。

14.2.24 Slapi_Filter

検索フィルタを表す不透明な構造体です。

14.2.24.1 構文

#include "slapi-plugin.h"
typedef struct slapi_filter Slapi_Filter;

14.2.24.2 関連項目

表15-10

14.2.25 Slapi_MatchingRuleEntry

プラグインによって処理されるLDAP v3一致ルールを表す不透明な構造体です。

14.2.25.1 構文

#include "slapi-plugin.h"
typedef struct slapi_matchingRuleEntry Slapi_MatchingRuleEntry;

14.2.25.2 関連項目

表15-12

14.2.26 Slapi_Mod

ディレクトリ・エントリ属性の変更を表す不透明な構造体です。

パラメータ・ブロックは、Slapi_Mod構造体ではなくLDAPMod構造体を使用します。後者のタイプは、幅広く変更を処理するプラグインに便利です。

14.2.26.1 構文

#include "slapi-plugin.h"
typedef struct slapi_mod Slapi_Mod;

14.2.26.2 関連項目

LDAPMod

表15-13

14.2.27 Slapi_Mods

ディレクトリ・エントリに対する一連の変更を表す不透明な構造体です。

パラメータ・ブロックは、Slapi_Mods構造体ではなくLDAPMod構造体の配列を使用します。後者のタイプは、幅広く変更を処理するプラグインに便利です。

14.2.27.1 構文

#include "slapi-plugin.h"
typedef struct slapi_mods Slapi_Mods;

14.2.27.2 関連項目

LDAPMod

表15-13

14.2.28 Slapi_Mutex

プラグインによって使用されるmutexロックを表す不透明な構造体です。

14.2.28.1 構文

#include "slapi-plugin.h"
typedef struct slapi_mutex Slapi_Mutex;

14.2.28.2 関連項目

slapi_destroy_mutex()

slapi_lock_mutex()

slapi_new_mutex()

slapi_UTF-8STRTOLOWER()

14.2.29 Slapi_Operation

LDAPクライアントからの保留中の操作を表す不透明な構造体です。

構造体は、他のデータとの間で、要求された操作のタイプを記録します。

14.2.29.1 構文

#include "slapi-plugin.h"
typedef struct op Slapi_Operation;

14.2.29.2 関連項目

slapi_op_abandoned()

slapi_op_get_type()

14.2.30 Slapi_PBlock

パラメータ・ブロックと呼ばれ、サーバー操作のコンテキストで更新された名前/値ペアを含む不透明な構造体です。

14.2.30.1 構文

#include "slapi-plugin.h"
typedef struct slapi_pblock Slapi_PBlock;

14.2.30.2 説明

プラグイン関数のほとんどのタイプは、サーバーによって、処理される操作に関連するデータを含むパラメータ・ブロック(Slapi_PBlock)で渡されます。slapi_pblock_get()を使用してデータにアクセスします。

プラグイン初期化関数は、slapi_pblock_set()を使用して、少なくともプラグインAPIバージョン、プラグインの説明およびその他のプラグイン関数を登録します。

Slapi_PBlock構造体で使用可能な特定のパラメータは、プラグイン関数のタイプとLDAP操作のコンテキストに依存します。プラグイン関数の特定のタイプに使用可能な名前/値ペアの詳細は、335ページの「パラメータ・ブロック・リファレンス」を参照してください。

14.2.30.3 関連項目

表15-1

第14章「データ型と構造体のリファレンス」

Slapi_PBlockの使用例は、$INSTALL_DIR/examples/の下のサンプル・プラグインを参照してください。

14.2.31 Slapi_PluginDesc

プラグインを識別するために指定するプラグインの説明を表します。

プラグイン初期化関数は、この情報をサーバーに登録する必要があります。

14.2.31.1 構文

#include "slapi-plugin.h"
typedef struct slapi_plugindesc {
char * spd_id;
char * spd_vendor;
char * spd_version;
char * spd_description;
} Slapi_PluginDesc;

14.2.31.2 フィールド

この構造体には、次のフィールドがあります。

表14-18 Slapi_PluginDescのフィールド

フィールド

説明

spd_id

プラグインの一意(サーバー全体)の識別子

spd_vendor

Oracle CorporationCaretなどのプラグインを供給するベンダーの名前

spd_version

5.2などのプラグイン・バージョン番号(プラグインによってサポートされているプラグインAPIバージョンを指定するSLAPI_PLUGIN_VERSIONと混同しないこと)

spd_description

Sample post-operation plug-inなどのプラグインの簡単な説明

14.2.31.3 関連項目

Slapi_PluginDescの使用例は、$INSTALL_DIR/examples/の下のサンプル・プラグインを参照してください。

14.2.32 slapi_plugin_init_fnptr

他のプラグインを登録するためのコールバック関数を指定します。

14.2.32.1 構文

#include "slapi-plugin.h"
typedef int (*slapi_plugin_init_fnptr)( Slapi_PBlock *pb );

14.2.32.2 パラメータ

コールバックは、次のパラメータを取ります。

表14-19 slapi_plugin_init_fnptrのパラメータ

パラメータ

説明

pb

初期化関数に渡されるパラメータ・ブロック

14.2.32.3 説明

このコールバックは、プラグイン初期化関数を模倣し、1つのプラグインが他のプラグインを登録することを許可します。関数は、実際のプラグイン初期化関数の一部としてslapi_register_plugin()を使用してサーバーに登録されます。

14.2.32.4 戻り値

このコールバックは、成功すると0を戻します。そうでない場合は、-1を戻します。

14.2.32.5 関連項目

プラグイン初期化関数の例は、$INSTALL_DIR/examples/の下のサンプル・プラグインを参照してください。

14.2.33 Slapi_RDN

同じ親を持つ他のエントリとそのエントリを差別化するDNの一部である相対識別名(RDN)を表す不透明な構造体です。

14.2.33.1 構文

#include "slapi-plugin.h"
typedef struct slapi_rdn Slapi_RDN;

14.2.33.2 関連項目

表15-20

14.2.34 Slapi_Value

個々の属性値を表す不透明な構造体です。

一度に属性のすべての値を処理するときは、かわりにSlapi_ValueSetを使用します。

14.2.34.1 構文

#include "slapi-plugin.h"
typedef struct slapi_value Slapi_Value;

14.2.34.2 関連項目

表15-21

14.2.35 Slapi_ValueSet

属性の値セットを表す不透明な構造体です。

個々の属性値を処理するときは、かわりにSlapi_Valueを使用します。

14.2.35.1 構文

#include "slapi-plugin.h"
typedef struct slapi_value_set Slapi_ValueSet;

14.2.35.2 関連項目

表15-22

14.2.36 vattr_type_thang

エントリの実際の属性と仮想属性の両方を表す不透明な構造体です。

14.2.36.1 構文

#include "slapi-plugin.h"
typedef struct _vattr_type_thang vattr_type_thang;

14.2.36.2 関連項目

表15-25

15 Directory ServerFunctionリファレンス(パートI)

この章は、書込みプラグインのパブリック関数に関するリファレンスの前半部分です。リファレンスの後半部分は、次の章を参照してください。この章では、次の項目について説明します。

- 機能領域別の関数

- 関数の説明(パートI)

関数の説明では、各関数の詳しい説明の他に、関数のヘッダー・ファイルと構文、関数のパラメータ、関数の戻り値およびメモリーに関する注意事項について説明します。

15.1 機能領域別の関数

この項では、プラグインの関数を機能領域別に分類します。

表15-1 パラメータ・ブロック処理の関数

関数

説明

slapi_pblock_destroy()

パラメータ・ブロックをメモリーから解放します。

slapi_pblock_get()

パラメータ・ブロックから値を取得します。

slapi_pblock_new()

新しいパラメータ・ブロックを作成します。

slapi_pblock_set()

パラメータ・ブロックの値を設定します。

表15-2 メモリー処理の関数

関数

説明

slapi_ch_array_free()

既存の配列を解放します。

slapi_ch_bvdup()

既存のberval構造体のコピーを作成します。

slapi_ch_bvecdup()

既存のberval構造体の配列のコピーを作成します。

slapi_ch_calloc()

指定されたサイズの要素数を持つ配列に領域を割り当てます。

slapi_ch_free()

slapi_ch_malloc()、slapi_ch_realloc()およびslapi_ch_calloc()の各関数によって割り当てられた領域を解放します。

slapi_ch_free_string()

既存の文字列を解放します。

slapi_ch_malloc()

メモリーに領域を割り当てます。

slapi_ch_realloc()

割り当てられたメモリー・ブロックのサイズを変更します。

slapi_ch_strdup()

既存の文字列のコピーを作成します。

表15-3 アクセス制御処理の関数

関数

説明

slapi_access_allowed()

現在の操作を要求しているユーザーに、指定されたエントリ、属性または値に操作を実行するアクセス権があるかどうかを確認します。

slapi_acl_check_mods()

指定された変更をエントリに実行する権限がユーザーにあるかどうかを確認します。

slapi_acl_verify_aci_syntax()

エントリのアクセス制御項目(ACI)が有効であるかどうかを確認します。

表15-4 属性処理の関数

関数

説明

slapi_attr_add_value()

属性に値を追加します。

slapi_attr_basetype()

属性のベース型を戻します。

slapi_attr_dup()

属性を複製します。

slapi_attr_first_value_const()

属性の最初の値を取得します。

slapi_attr_flag_is_set()

特定のフラグが設定されているかどうかを判別します。

slapi_attr_free()

属性を解放します。

slapi_attr_get_bervals_copy()

属性に格納されている値をberval構造体の配列に格納します。

slapi_attr_get_flags()

属性に関連付けられているフラグを取得します。

slapi_attr_get_numvalues()

属性が持つ値の数を整数に格納します。

slapi_attr_get_oid_copy()

属性タイプを検索し、そのOID文字列を取得します。

slapi_attr_get_type()

属性タイプの名前を取得します。

slapi_attr_get_valueset()

属性の値を値セットにコピーします。

slapi_attr_init()

空の属性を初期化します。

slapi_attr_new()

新しい属性を作成します。

slapi_attr_next_value_const()

属性の次の値を取得します。

slapi_attr_syntax_normalize()

正規化された属性タイプのコピーを戻します。

slapi_attr_type_cmp()

2つの属性を比較します。

slapi_attr_types_equivalent()

2つの属性名を比較し、それらが同じ属性を表すかどうかを判別します。

slapi_attr_value_cmp()

2つの属性値を比較します。

slapi_attr_value_find()

指定された値が属性に含まれているかどうかを確認します。

表15-5 基本エンコーディング・ルール値処理の関数

関数

説明

slapi_berval_cmp()

2つのberval構造体を比較します。

slapi_ch_bvdup()

既存のberval構造体のコピーを作成します。

slapi_ch_bvecdup()

既存のberval構造体の配列のコピーを作成します。

表15-6 コントロール処理の関数

関数

説明

slapi_build_control()

BerElement、OIDおよび重大性フラグに基づいて、LDAPControl構造体を作成します。

slapi_entry_get_uniqueid()

Directory Serverがサポートするコントロールを示す、オブジェクト識別子(OID)の割当て済配列を取得します。

slapi_control_present()

指定されたオブジェクト識別子(OID)が、コントロールのリストに存在するコントロールを示すかどうかを判別します。

slapi_dup_control()

LDAPControlの割当て済コピーを作成します。

slapi_register_supported_control()

指定されたコントロールをサーバーに登録します。この関数により、コントロールがオブジェクト識別子(OID)に関連付けられます。

表15-7 識別名文字列処理の関数

関数

説明

slapi_dn_beparent()

エントリの親のDNのコピーを取得します。

slapi_dn_ignore_case()

DNのすべての文字を小文字に変換します。

slapi_dn_isbesuffix()

DNがローカル・データベースのサフィックスであるかどうかを判別します。

slapi_dn_isbesuffix_norm()

DNがローカル・データベースのサフィックスであるかどうかを判別します。

slapi_dn_isparent()

DNが特定DNの親であるかどうかを判別します。

slapi_dn_isroot()

DNがローカル・データベースのルートDNであるかどうかを判別します。

slapi_dn_issuffix()

DNが指定されたサフィックスと等しいかどうかを判別します。

slapi_dn_normalize()

DNを正規のフォーマットに変換します。

slapi_dn_normalize_case()

DNを正規のフォーマットに変換し、すべての文字を小文字に変換します。

slapi_dn_normalize_to_end()

DN値の一部を正規化します。

slapi_dn_parent()

エントリの親のDNを取得します。

slapi_dn_plus_rdn()

RDNをDNに追加します。

表15-8 エントリ処理の関数

関数

説明

slapi_entry2str()

LDIF文字列表現を生成します。

slapi_entry2str_with_options()

オプションを指定してLDIF文字列表現を生成します。

slapi_entry_add_rdn_values()

エントリのRDN内のコンポーネントを追加します。

slapi_entry_add_string()

エントリの属性に文字列値を追加します。

slapi_entry_add_values_sv()

エントリの属性にデータ値を追加します。

slapi_entry_add_valueset()

エントリの属性にデータ値を追加します。

slapi_entry_alloc()

新しいエントリにメモリーを割り当てます。

slapi_entry_attr_delete()

エントリから属性を削除します。

slapi_entry_attr_find()

特定の属性がエントリに含まれているかどうかをチェックします。

slapi_entry_attr_get_charptr()

最初の値を文字列として取得します。

slapi_entry_attr_get_int()

最初の値を整数として取得します。

slapi_entry_attr_get_long()

最初の値をLong整数として取得します。

slapi_entry_attr_get_uint()

最初の値を符号なし整数として取得します。

slapi_entry_attr_get_ulong()

最初の値を符号なしLong整数として取得します。

slapi_entry_attr_hasvalue()

エントリの属性に値が含まれているかどうかをチェックします。

slapi_entry_attr_merge_sv()

エントリの属性値に配列を追加します。

slapi_entry_attr_replace_sv()

エントリの属性値を置換します。

slapi_entry_attr_set_charptr()

属性の値を文字列で置換します。

slapi_entry_attr_set_int()

属性の値を整数で置換します。

slapi_entry_attr_set_long()

属性の値をLong整数で置換します。

slapi_entry_attr_set_uint()

属性の値を符号なし整数で置換します。

slapi_entry_attr_set_ulong()

属性の値を符号なしLong整数で置換します。

slapi_entry_delete_string()

属性から文字列を削除します。

slapi_entry_delete_values_sv()

属性からSlapi_Value配列を削除します。

slapi_entry_dup()

エントリおよびそのDNと属性をコピーします。

slapi_entry_first_attr()

エントリの最初の属性を検索します。

slapi_entry_free()

メモリーからエントリを解放します。

slapi_entry_get_dn()

エントリからDNを取得します。

slapi_entry_get_dn_const()

エントリのDNを定数として戻します。

slapi_entry_get_ndn()

エントリのNDNを戻します。

slapi_entry_get_sdn()

エントリからSlapi_DNを戻します。

slapi_entry_get_sdn_const()

エントリからSlapi_DNを定数として戻します。

slapi_entry_get_uniqueid()

エントリから一意のIDを取得します。

slapi_entry_has_children()

指定したエントリに子エントリがあるかどうかを判別します。

slapi_entry_init()

エントリの値を初期化します。

slapi_entry_isroot()

エントリがディレクトリ・スーパーユーザーのエントリであるかどうかを判別します。

slapi_entry_merge_values_sv()

エントリの属性にデータ値の配列を追加します。

slapi_entry_next_attr()

エントリの次の属性を検索します。

slapi_entry_rdn_values_present()

エントリのRDNに存在する値が、属性値としても存在するかどうかをチェックします。

slapi_entry_schema_check()

エントリがオブジェクト・クラスのスキーマに準拠しているかどうかを判別します。

slapi_entry_schema_check_ext ()

エントリに対する一連の変更がスキーマに準拠しているかどうかを判別します。

slapi_entry_set_dn()

エントリのDNを設定します。

slapi_entry_set_sdn()

エントリにSlapi_DN値を設定します。

slapi_entry_size()

エントリのサイズを戻します。

slapi_entry_syntax_check()

エントリの属性が属性構文ルールに準拠しているかどうかを判別します。

slapi_entry_vattr_find()

エントリ内の指定された仮想属性を検索します。

slapi_is_rootdse()

エントリがルートDSEであるかどうかを判別します。

slapi_str2entry()

LDIF表現をエントリに変換します。

表15-9 拡張操作処理の関数

関数

説明

slapi_get_supported_extended_ops_copy()

拡張操作のオブジェクトID (OID)のコピーを取得します。

表15-10 フィルタ処理の関数

関数

説明

slapi_filter_compare()

2つのフィルタが同一であるかどうかを判別します。

slapi_filter_free()

指定されたフィルタを解放します。

slapi_filter_get_attribute_type()

すべての種類の単純なフィルタの属性タイプを取得します。

slapi_filter_get_ava()

フィルタから属性タイプおよび値を取得します。

slapi_filter_get_choice()

指定されたフィルタのタイプを取得します。

slapi_filter_get_subfilt()

フィルタから部分文字列値を取得します。

slapi_filter_get_type()

フィルタで指定された属性タイプを取得します。

slapi_filter_join()

指定された2つのフィルタを結合します。

slapi_filter_list_first()

指定されたフィルタを構成する最初のフィルタを取得します。

slapi_filter_list_next()

次のフィルタを取得します。

slapi_filter_test()

指定されたエントリが特定のフィルタに一致するかどうかを判別します。

slapi_filter_test_ext()

エントリが指定されたフィルタに一致するかどうかを判別します。

slapi_filter_test_simple()

エントリがフィルタに一致するかどうかを判別します。

slapi_str2filter()

検索フィルタの文字列表現をSlapi_Filterタイプのフィルタに変換します。

表15-11 内部操作処理の関数

関数

説明

slapi_add_entry_internal_set_pb()

Slapi_Entry構造を含む、内部追加操作用のSlapi_PBlock構造体を準備します。

slapi_add_internal_pb()

パラメータ・ブロックに基づいてLDAP追加操作を追加し、新しいディレクトリ・エントリを追加します。

slapi_add_internal_set_pb()

内部追加操作のSlapi_PBlock構造体を準備します。

slapi_delete_internal_pb()

パラメータ・ブロックに基づいてLDAP削除操作を実行し、ディレクトリ・エントリを削除します。

slapi_delete_internal_set_pb()

内部削除操作のSlapi_PBlock構造体を準備します。

slapi_free_search_results_internal()

検索結果を解放します。

slapi_modify_internal_pb()

パラメータ・ブロックに基づいてLDAP変更操作を実行し、ディレクトリ・エントリを変更します。

slapi_modify_internal_set_pb()

内部変更操作のSlapi_PBlock構造体を準備します。

slapi_modrdn_internal_pb()

パラメータ・ブロックに基づいてLDAP変更RDN操作を実行し、ディレクトリ・エントリの名前を変更します。

slapi_rename_internal_set_pb()

内部変更RDN操作のSlapi_PBlock構造体を準備します。

slapi_search_internal_callback_pb()

パラメータ・ブロックに基づいてLDAP検索操作を実行し、ディレクトリを検索します。

slapi_search_internal_get_entry()

内部検索操作を実行し、1つのエントリを読み取ります。

slapi_search_internal_pb()

パラメータ・ブロックに基づいてLDAP検索操作を実行し、ディレクトリを検索します。

slapi_search_internal_set_pb()

内部検索操作のSlapi_PBlock構造体を準備します。

表15-12 一致ルール処理の関数

関数

説明

slapi_matchingrule_free()

一致ルールの登録後にSlapi_MatchingRuleEntryを解放します。

slapi_matchingrule_get()

Slapi_MatchingRuleEntryにアクセスします。

slapi_matchingrule_new()

Slapi_MatchingRuleEntry構造体を割り当てます。

slapi_matchingrule_register()

一致ルールをサーバーに登録します。

slapi_matchingrule_set()

Slapi_MatchingRuleEntryを変更します。

slapi_mr_filter_index()

一致ルールのフィルタ索引関数をコールします。

slapi_mr_indexer_create()

一致ルールのインデクサ・ファクトリ関数へのポインタを取得します。

表15-13 変更処理の関数

関数

説明

slapi_entry2mods()

Slapi_EntryからLDAPModの配列を作成します。

slapi_ldapmods_syntax_check ()

指定されたエントリの変更が属性構文ルールに準拠しているかどうかを判別します。

slapi_mod_add_value()

Slapi_Mod構造体に値を追加します。

slapi_mod_done()

Slapi_Mod構造体の内部を解放します。

slapi_mod_dump()

LDAPModの内容をサーバー・ログにダンプします。

slapi_mod_free()

Slapi_Mod構造体を解放します。

slapi_mod_get_first_value()

Slapi_Modイテレータを初期化し、最初の属性値を戻します。

slapi_mod_get_ldapmod_byref()

Slapi_Mod構造体のLDAPModへの参照を取得します。

slapi_mod_get_ldapmod_passout()

Slapi_Mod構造体に格納されているLDAPModを取得します。

slapi_mod_get_next_value()

Slapi_Modイテレータを増分し、次の属性値を戻します。

slapi_mod_get_num_values()

Slapi_Mod構造体の値の数を取得します。

slapi_mod_get_operation()

Slapi_Mod構造体の操作タイプを取得します。

slapi_mod_get_type()

Slapi_Mod構造体の属性タイプを取得します。

slapi_mod_init()

Slapi_Mod構造体を初期化します。

slapi_mod_init_byref()

既存のLDAPModのラッパーであるSlapi_Mod構造体を初期化します。

slapi_mod_init_byval()

LDAPModのコピーを使用してSlapi_Mod構造体を初期化します。

slapi_mod_init_passin()

LDAPModからSlapi_Modを初期化します。

slapi_mod_isvalid()

Slapi_Mod構造体が有効であるかどうかを判別します。

slapi_mod_new()

新しいSlapi_Mod構造体を割り当てます。

slapi_mod_remove_value()

Slapi_Modイテレータの現在位置で値を削除します。

slapi_mod_set_operation()

Slapi_Mod構造体の操作タイプを設定します。

slapi_mod_set_type()

Slapi_Modの属性タイプを設定します。

slapi_mods2entry()

LDAPModの配列からSlapi_Entryを作成します。

slapi_mods_add()

1つの属性値を持つ新しいmodをSlapi_Mods構造体に追加します。

slapi_mods_add_ldapmod()

LDAPModをSlapi_Mods構造体に追加します。

slapi_mods_add_mod_values()

Slapi_Valueの配列として指定された属性値を使用して、新しいmodをSlapi_Mods構造体に追加します。

slapi_mods_add_modbvps()

bervalの配列として指定された属性値を使用して、新しいmodをSlapi_Mods構造体に追加します。

slapi_mods_add_smod()

Slapi_ModをSlapi_Mods構造体に追加します。

slapi_mods_add_string()

文字列として指定された1つの属性値を使用して、新しいmodをSlapi_Mods構造体に追加します。

slapi_mods_done()

Slapi_Mods構造体の内部を解放します。

slapi_mods_dump()

Slapi_Mods構造体の内容をサーバー・ログにダンプします。

slapi_mods_free()

Slapi_Mods構造体を解放します。

slapi_mods_get_first_mod()

Slapi_Modsイテレータを初期化し、最初のLDAPModを戻します。

slapi_mods_get_first_smod()

Slapi_Modsイテレータを初期化し、Slapi_Mods構造体にラップされた最初のmodを戻します。

slapi_mods_get_ldapmods_byref()

Slapi_Mods構造体のLDAPModの配列への参照を取得します。

slapi_mods_get_ldapmods_passout()

Slapi_Mods構造体に格納されているLDAPModの配列を取得します。

slapi_mods_get_next_mod()

Slapi_Modsイテレータを増分し、次のLDAPModを戻します。

slapi_mods_get_next_smod()

Slapi_Modsイテレータを増分し、Slapi_Modsにラップされた次のmodを戻します。

slapi_mods_get_num_mods()

Slapi_Mods構造体の変更の数を取得します。

slapi_mods_init()

Slapi_Modsを初期化します。

slapi_mods_init_byref()

既存のLDAPModの配列のラッパーであるSlapi_Modsを初期化します。

slapi_mods_init_passin()

LDAPModの配列からSlapi_Mods構造体を初期化します。

slapi_mods_insert_after()

イテレータの現在位置より後のSlapi_Mods構造体にLDAPModを挿入します。

slapi_mods_insert_at()

Slapi_Modsの任意の場所にLDAPModを挿入します。

slapi_mods_insert_before()

イテレータの現在位置より前のSlapi_Mods構造体にLDAPModを挿入します。

slapi_mods_insert_smod_at()

Slapi_Modsの任意の場所にSlapi_Modを挿入します。

slapi_mods_insert_smod_before()

イテレータの現在位置より前のSlapi_Mods構造体にSlapi_Modを挿入します。

slapi_mods_iterator_backone()

Slapi_Modsイテレータの現在位置を減分します。

slapi_mods_new()

初期化されていない新しいSlapi_Mods構造体を割り当てます。

slapi_mods_remove()

Slapi_Modsイテレータの現在位置でmodを削除します。

slapi_mods_remove_at()

指定されたSlapi_Modsイテレータの位置でmodを削除します。

表15-14 操作処理の関数

関数

説明

slapi_op_abandoned()

クライアントが現在の操作を中止したかどうかを判別します。

slapi_op_get_type()

Slapi_Operationのタイプを取得します。

表15-15 パスワード処理の関数

関数

説明

slapi_pw_find_sv()

指定されたパスワードが、属性のハッシュ値のいずれかと一致するかどうかを判別します。

slapi_pw_find_valueset()

指定されたパスワードが、属性のハッシュ値のいずれかと一致するかどうかを判別します。

表15-16 ロール処理の関数

関数

説明

slapi_register_role_get_scope()

ロールの有効範囲を決定するコールバックを登録します。

slapi_role_check()

参照されたエントリに、指定されたロールが含まれているかどうかをチェックします。

slapi_role_get_scope()

ロールの有効範囲を指定します。

表15-17 SASLメカニズム処理の関数

関数

説明

slapi_get_supported_saslmechanisms_copy()

サポートされているSimple Authentication and Security Layer (SASL)メカニズムの名前の配列を取得します。

slapi_register_supported_saslmechanism()

指定されたSimple Authentication and Security Layer (SASL)メカニズムをサーバーに登録します。

表15-18 Slapi_Backend構造体処理の関数

関数

説明

slapi_be_exist()

指定されたDNを含むバックエンドが存在するかどうかをチェックします。

slapi_be_get_name()

指定されたバックエンドの名前を戻します。

slapi_be_get_readonly()

バックエンドに関連付けられたデータベースが読取り専用モードであるかどうかを示します。

slapi_be_getsuffix()

指定されたバックエンドに関連付けられたn+1サフィックスを戻します。

slapi_be_gettype()

バックエンドのタイプを戻します。

slapi_be_is_flag_set()

バックエンド構成にフラグが設定されているかどうかをチェックします。

slapi_be_issuffix()

指定されたサフィックスが、登録されているバックエンド・サフィックスと一致することを検証します。

slapi_be_logchanges()

バックエンドに適用された変更を変更ログに記録する必要があるかどうかを示します。

slapi_be_private()

バックエンドがプライベートであるかどうかを検証します。

slapi_be_select()

指定されたDNを含むエントリの処理に使用する必要のあるバックエンドを検索します。

slapi_be_select_by_instance_name()

データベースの処理に使用されるバックエンドを検索します。

slapi_get_first_backend()

最初のバックエンドのバックエンド構造体へのポインタを戻します。

slapi_get_next_backend()

次のバックエンドへのポインタを戻します。

slapi_is_root_suffix()

サフィックスがDITのルート・サフィックスであるかどうかをチェックします。

表15-19 Slapi_DN構造体処理の関数

関数

説明

slapi_moddn_get_newdn()

エントリの新しいDNを構築します。

slapi_sdn_compare()

2つのDNを比較します。

slapi_sdn_copy()

DNをコピーします。

slapi_sdn_done()

Slapi_DN構造体を消去します。

slapi_sdn_dup()

Slapi_DN構造体を複製します。

slapi_sdn_free()

Slapi_DN構造体を解放します。

slapi_sdn_get_backend_parent()

特定のバックエンド内の親のDNを取得します。

slapi_sdn_get_dn()

Slapi_DN構造体からDNを取得します。

slapi_sdn_get_ndn()

Slapi_DN構造体の正規化されたDNを取得します。

slapi_sdn_get_ndn_len()

Slapi_DN構造体の正規化されたDNの長さを取得します。

slapi_sdn_get_parent()

指定されたSlapi_DN構造体の親DNを取得します。

slapi_sdn_get_rdn()

DNからRDNを取得します。

slapi_sdn_get_suffix()

DNによって指定されたエントリを保持するサフィックスを取得します。

slapi_sdn_isempty()

Slapi_DN構造体にDN値が格納されているかどうかをチェックします。

slapi_sdn_isgrandparent()

DNが、あるDNの親の親であるかどうかをチェックします。

slapi_sdn_isparent()

DNが、あるDNの親であるかどうかをチェックします。

slapi_sdn_issuffix()

Slapi_DN構造体に別のサフィックスが含まれているかどうかをチェックします。

slapi_sdn_new()

新しいSlapi_DN構造体を割り当てます。

slapi_sdn_new_dn_byref()

既存のDN文字列を参照して新しいSlapi_DN構造体を作成します。

slapi_sdn_new_dn_byval()

既存のDN文字列をコピーして新しいSlapi_DN構造体を作成します。

slapi_sdn_new_dn_passin()

DN文字列の新しいコピーを参照して新しいSlapi_DN構造体を作成します。

slapi_sdn_new_ndn_byref()

既存の正規化されたDNを参照して新しいSlapi_DN構造体を作成します。

slapi_sdn_new_ndn_byval()

既存の正規化されたDNをコピーして新しいSlapi_DN構造体を作成します。

slapi_sdn_scope_test()

エントリが特定のベースDNの有効範囲内にあるかどうかをチェックします。

slapi_log_info_ex()

既存のDN文字列を参照してSlapi_DN構造体にDN値を設定します。

slapi_sdn_set_dn_byval()

既存のDN文字列をコピーしてSlapi_DN構造体にDN値を設定します。

slapi_sdn_set_dn_passin()

DN文字列の新しいコピーを参照してSlapi_DN構造体にDN値を設定します。

slapi_sdn_set_ndn_byref()

既存の正規化されたDN文字列を参照してSlapi_DN構造体に正規化されたDNを設定します。

slapi_sdn_set_ndn_byval()

既存の正規化されたDN文字列をコピーしてSlapi_DN構造体に正規化されたDNを設定します。

slapi_sdn_set_parent()

エントリに新しい親を設定します。

slapi_sdn_set_rdn()

エントリに新しいRDNを設定します。

表15-20 Slapi_RDN構造体処理の関数

関数

説明

slapi_rdn_add()

既存のRDN構造体に新しいRDNを追加します。

slapi_rdn_compare()

2つのRDNを比較します。

slapi_rdn_contains()

Slapi_RDN構造体が、指定されたタイプ/値ペアに一致するRDNを保持しているかどうかをチェックします。

slapi_rdn_contains_attr()

Slapi_RDN構造体に、指定されたタイプに一致するRDNが含まれているかどうかをチェックします。

slapi_rdn_done()

Slapi_RDN構造体を消去します。

slapi_rdn_free()

Slapi_RDN構造体を解放します。

slapi_rdn_get_first()

最初のRDNのタイプ/値のペアを取得します。

slapi_rdn_get_index()

RDNの索引を取得します。

slapi_rdn_get_index_attr()

最初のRDNの位置および属性値を取得します。

slapi_rdn_get_next()

RDNからのRDNタイプ/値のペアを取得します。

slapi_rdn_get_num_components()

RDNタイプ/値のペアの数を取得します。

slapi_rdn_get_rdn()

Slapi_RDN構造体からRDNを取得します。

slapi_rdn_init()

Slapi_RDN構造体をNULL値で初期化します。

slapi_rdn_init_dn()

既存のDN文字列からSlapi_RDN構造体を初期化します。

slapi_rdn_init_rdn()

既存のSlapi_RDN構造体からSlapi_RDN構造体を初期化します。

slapi_rdn_init_sdn()

既存のSlapi_DN構造体からSlapi_RDN構造体を初期化します。

slapi_rdn_isempty()

Slapi_RDN構造体にRDN値が格納されているかどうかをチェックします。

slapi_rdn_new()

新しいSlapi_RDN構造体を作成します。

slapi_rdn_new_dn()

新しいSlapi_RDN構造体を作成します。

slapi_rdn_new_rdn()

新しいSlapi_RDN構造体を作成します。

slapi_rdn_new_sdn()

新しいSlapi_RDN構造体を作成します。

slapi_rdn_syntax_check()

RDNが属性構文ルールに準拠しているかどうかを判別します。

表15-21 Slapi_Value構造体処理の関数

関数

説明

slapi_value_compare()

2つの値を比較します。

slapi_value_done()

値の内部を解放します。

slapi_value_dup()

値を複製します。

slapi_value_free()

メモリーからSlapi_Value構造体を解放します。

slapi_value_get_berval()

値のberval構造体を取得します。

slapi_value_get_int()

整数の値を変換します。

slapi_value_get_length()

値の長さを取得します。

slapi_value_get_long()

値をLong整数に変換します。

slapi_value_get_string()

値を文字列として返します。

slapi_value_get_uint()

値を符号なし整数に変換します。

slapi_value_get_ulong()

値を符号なしLong整数に変換します。

slapi_value_init()

値を使用せずにSlapi_Value構造体を初期化します。

slapi_value_init_berval()

berval構造体からSlapi_Value構造体を初期化します。

slapi_value_init_string()

文字列からSlapi_Value構造体を初期化します。

slapi_value_init_string_passin()

文字列に含まれている値を使用してSlapi_Value構造体を初期化します。

slapi_value_new()

新しいSlapi_Value構造体を割り当てます。

slapi_value_new_berval()

berval構造体から新しいSlapi_Value構造体を割り当てます。

slapi_value_new_string()

文字列から新しいSlapi_Value構造体を割り当てます。

slapi_value_new_string_passin()

新しいSlapi_Value構造体を割り当て、この構造体を文字列から初期化します。

slapi_value_new_value()

別のSlapi_Value構造体から新しいSlapi_Valueを割り当てます。

slapi_value_set()

値を設定します。

slapi_value_set_berval()

berval構造体からSlapi_Value構造体に値をコピーします。

slapi_value_set_int()

Slapi_Value構造体の整数値を設定します。

slapi_value_set_string()

文字列を値にコピーします。

slapi_value_set_string_passin()

値を設定します。

slapi_value_set_value()

Slapi_Value構造体の値を別のSlapi_Value構造体にコピーします。

表15-22 Slapi_ValueSet構造体処理の関数

関数

説明

slapi_valueset_add_value_optimised()

Slapi_ValueSet構造体にSlapi_Valueを追加します。

slapi_valueset_count()

Slapi_ValueSet構造体に格納されている値の数を戻します。

slapi_valueset_done()

Slapi_ValueSet構造体に格納されている値を解放します。

slapi_valueset_find_const()

属性の構文を使用して、値セット内の値を検索します。

slapi_valueset_first_value_const()

Slapi_ValueSet構造体の最初の値を取得します。

slapi_valueset_free()

指定されたSlapi_ValueSet構造体およびそのメンバーをメモリーから解放します。

slapi_valueset_init()

Slapi_ValueSet構造体を値のない状態にリセットします。

slapi_valueset_new()

新しいSlapi_ValueSet構造体を割り当てます。

slapi_valueset_next_value_const()

Slapi_ValueSet構造体から次の値を取得します。

slapi_valueset_set_from_smod()

Slapi_Mod構造体の値をSlapi_ValueSet構造体にコピーします。

slapi_valueset_set_valueset_optimised()

別のSlapi_ValueSet構造体からSlapi_ValueSet構造体を初期化します。

表15-23 UTF-8文字列処理の関数

関数

説明

slapi_has8thBit()

文字列に8ビット文字が含まれているかどうかをチェックします。

slapi_UTF-8CASECMP()

2つのUTF-8文字列を比較します。

slapi_UTF-8NCASECMP()

指定されたUTF-8文字数を比較します。

slapi_UTF-8ISLOWER()

UTF-8文字が小文字かどうかを確認します。

slapi_UTF-8ISUPPER()

1つのUTF-8文字が大文字かどうかを確認します。

slapi_UTF-8STRTOLOWER()

UTF-8文字列を小文字に変換します。

slapi_UTF-8STRTOUPPER()

UTF-8文字で構成される文字列を変換し、それを大文字に変換します。

slapi_UTF-8TOLOWER()

UTF-8文字を小文字に変換します。

slapi_UTF-8TOUPPER()

小文字のUTF-8文字を大文字に変換します。

表15-24 ログ・メッセージ書込み関数

関数

説明

slapi_log_error_ex()

サーバー・エラー・ログにエラー・メッセージを書き込みます。

slapi_log_info_ex()

サーバー・エラー・ログに情報メッセージを書き込みます。

slapi_log_warning_ex()

サーバー・エラー・ログに警告メッセージを書き込みます。

表15-25 仮想属性処理の関数

関数

説明

slapi_vattr_is_virtual()

指定された属性タイプの値が仮想的に生成されているかどうかを判別します。

slapi_vattr_value_compare()

指定されたエントリの属性タイプおよび名前を比較します。

slapi_vattr_values_free()

値セットおよびタイプ名を解放します。

slapi_vattr_values_get_ex()

エントリから属性タイプの値を戻します。

表15-26 エントリ、参照および結果をクライアントに送信する関数

関数

説明

slapi_send_ldap_referral()

エントリのLDAP v3参照を処理します。

slapi_send_ldap_result()

結果コードをクライアントに返信します。

slapi_send_ldap_search_entry()

検索で見つかったエントリをクライアントに返信します。

表15-27 プラグイン登録の関数

関数

説明

slapi_register_plugin()

別のプラグインを登録します。

15.2 関数の説明(パートI)

以降の項では、slapi_access_allowed()からslapi_moddn_get_newdn()までのプラグインAPI関数について、アルファベット順に説明します。

slapi_modify_internal_pb()からslapi_wait_condvar()のプラグインAPI関数については、次の章で後続の項を説明します。

15.3 関数(アルファベット順)、第I部

15.3.1 slapi_access_allowed()

現在の操作を要求しているユーザーに、指定されたエントリ、属性または値に操作を実行するアクセス権があるかどうかを確認します。

15.3.1.1 構文

#include "slapi-plugin.h"
int slapi_access_allowed( Slapi_PBlock *pb, Slapi_Entry *e,
char *attr, struct berval *val, int access );

15.3.1.2 パラメータ

この関数は、次のパラメータを取ります。

pb

この関数に渡されるパラメータ・ブロックです。

e

アクセス権をチェックするエントリです。

attr

アクセス権をチェックする属性です。

val

アクセス権をチェックする値を含むberval構造体へのポインタです。

access

チェックするアクセス権のタイプです。たとえば、書込みアクセスをチェックするには、この引数の値としてSLAPI_ACL_WRITEを渡します。

access引数の値には、次のいずれかを指定できます。

SLAPI_ACL_ADD

指定されたエントリを追加する権限です。

SLAPI_ACL_COMPARE

エントリの属性の指定された値を比較する権限です。

SLAPI_ACL_DELETE

指定されたエントリを削除する権限です。

SLAPI_ACL_READ

指定された属性を読み取る権限です。

SLAPI_ACL_SEARCH

指定された属性または値を検索する権限です。

SLAPI_ACL_WRITE

指定されたエントリの名前を変更するために、指定された属性、値または権限を書き込む権限です。

15.3.1.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- エントリ、属性または値に対して、指定された権限がユーザーにある場合はLDAP_SUCCESS

- エントリ、属性または値に対して、指定された権限がユーザーにない場合はLDAP_INSUFFICIENT_ACCESS

- 処理中に問題が発生した場合、この関数は次のいずれかのエラー・コードを戻します。

LDAP_OPERATIONS_ERROR

操作の実行中にエラーが発生しました。

このエラーは、指定されたアクセス権のタイプがサーバーで認識されていない場合などに発生します。つまり、以前のテーブルから値が渡されていません。

LDAP_INVALID_SYNTAX

無効な構文が指定されました。

このエラーは、エントリ、属性または値に関連するACLで誤った構文が使用されている場合に発生します。

LDAP_UNWILLING_TO_PERFORM

DSA (このDirectory Serverインスタンス)が、指定された操作を実行できません。

このエラーは、読取り専用データベースに書込みアクセスを要求した場合などに発生します。

15.3.1.4 説明

指定されたエントリ、属性または値に対するアクセス権がユーザーにあるかどうかを確認するには、この関数をコールします。この関数は、このプラグインのコール元である操作を要求したユーザーに対してチェックを実行します。

たとえば、追加操作の事前操作プラグインを作成しているとします。この関数をコールすると、ユーザーがディレクトリにエントリを追加する前に適切なアクセス権があるかどうかを確認できます。

ユーザーにアクセス権があるかどうかを確認する処理の一環として、この関数は次の処理を実行します。

- 操作を要求しているユーザーがルートDNであるかどうかのチェック
その場合、この関数はLDAP_SUCCESSを戻します。(ルートDNには、すべての操作を実行する権限があります。)

- 要求されている操作、クライアントへの接続およびディレクトリ情報が格納されているバックエンド・データベースに関する情報の取得

- なんらかの理由で要求されている操作を確認できない場合は、LDAP_OPERATIONS_ERRORを戻します。

- クライアントへの接続が存在しない(操作のリクエストがサーバーまたはバックエンドで行われた)場合は、LDAP_SUCCESSを戻します。(サーバーおよびそのバンクエンドはアクセス制御リストで制限されません。)

- バックエンド・データベースが読取り専用で、リクエストによって書込みアクセス(SLAPI_ACL_WRITE)をチェックしている場合は、LDAP_UNWILLING_TO_PERFORMを戻します。

操作を要求しているユーザーが自身のエントリを変更しようとしているかどうかを確認します。

ACLにより、ユーザーが自身のエントリを変更できるように権限を設定できます。この関数はその条件をチェックします。

コール元は、この関数をコールする前に、パラメータ・ブロックで指定されたバックエンドが設定されていることを確認する必要があります。次に例を示します。

be = slapi_be_select(slapi_entry_get_sdn_const(seObjectEntry));
if (NULL == be) {
cleanup("backend selection failed for entry: \"%s\"\n", szObjectDN);
slapi_send_ldap_result(pb,LDAP_NO_SUCH_OBJECT,NULL,
"Obj not found",0,NULL);
return(SLAPI_PLUGIN_EXTENDED_SENT_RESULT);
}

slapi_pblock_set(pb, SLAPI_BACKEND, be);
nAccessResult =
slapi_access_allowed(pb,seObjectEntry,"*",bval,SLAPI_ACL_DELETE);

15.3.2 slapi_acl_check_mods()

指定された変更をエントリに実行する権限がユーザーにあるかどうかを確認します。

15.3.2.1 構文

#include "slapi-plugin.h"
int slapi_acl_check_mods( Slapi_PBlock *pb, Slapi_Entry *e,
LDAPMod **mods, char **errbuf );

15.3.2.2 パラメータ

この関数は、次のパラメータを取ります。

pb

この関数に渡されるパラメータ・ブロックです。

e

アクセス権をチェックするエントリです。

mods

エントリに加える変更を表すLDAPMod構造体の配列です。

errbuf

この関数の処理中にエラーが発生した場合のエラー・メッセージを含む文字列へのポインタです。

15.3.2.3 戻り値

次のいずれかの値を戻します。

- 指定された属性の値に対する書込み権限がユーザーにある場合はLDAP_SUCCESS

- 指定された属性の値に対する書込み権限がユーザーにない場合はLDAP_INSUFFICIENT_ACCESS

- 処理中に問題が発生した場合、この関数は次のいずれかのエラー・コードを戻します。

LDAP_OPERATIONS_ERROR

操作の実行中にエラーが発生しました。

LDAP_INVALID_SYNTAX

無効な構文が指定されました。

このエラーは、エントリ、属性または値に関連するACLで誤った構文が使用されている場合に発生します。

LDAP_UNWILLING_TO_PERFORM

DSA (このディレクトリ・サーバー)が、指定された操作を実行できません。

このエラーは、読取り専用データベースに書込みアクセスを要求した場合などに発生します。

15.3.2.4 説明

指定されたエントリを変更するアクセス権がユーザーにあるかどうかを確認する場合に、この関数をコールします。この関数は、このプラグインのコール元である操作を要求したユーザーに対してチェックを実行します。

たとえば、データベース・プラグインを作成してこの関数をコールすると、データベースでエントリを追加、変更または削除する前に適切なアクセス権がユーザーにあるかどうかを確認できます。

ユーザーにアクセス権があるかどうかを確認するプロセスの一環として、この関数は次の処理を実行します。

- ディレクトリのアクセス制御が無効化されていることのチェック。
アクセス制御が無効化されている場合、この関数はLDAP_SUCCESSを戻します。

- LDAPMod配列で指定された属性ごとの各値について、その値に書き込む権限がユーザーにあるかどうかを確認します。具体的には、この関数はチェックするアクセス権としてSLAPI_ACL_WRITEを指定し、slapi_access_allowed()をコールします。

- なんらかの理由で要求されている操作を確認できない場合は、LDAP_OPERATIONS_ERRORを戻します。

- クライアントへの接続が存在しない(操作のリクエストがサーバーまたはバックエンドで行われた)場合は、LDAP_SUCCESSを戻します。(サーバーおよびそのバンクエンドはアクセス制御リストで制限されません。)

- バックエンド・データベースが読取り専用で、リクエストによって書込みアクセス(SLAPI_ACL_WRITE)をチェックしている場合は、LDAP_UNWILLING_TO_PERFORMを戻します。

15.3.2.5 メモリーに関する注意事項

エラー・メッセージの処理が終了した場合は、slapi_ch_free()をコールしてerrbufバッファを解放する必要があります。

15.3.2.6 関連項目

slapi_access_allowed()

slapi_ch_free()

15.3.3 slapi_acl_verify_aci_syntax()

エントリのアクセス制御項目(ACI)が有効であるかどうかを確認します。

15.3.3.1 構文

#include "slapi-plugin.h"
int slapi_acl_verify_aci_syntax (Slapi_Entry *e,
char **errbuf);

15.3.3.2 パラメータ

この関数は、次のパラメータを取ります。

e

ACIをチェックするエントリです。

errbuf

ACI構文が無効である場合に戻されるエラー・メッセージへのポインタです。

15.3.3.3 戻り値

この関数は、正常終了した場合は0を戻し、エラーが発生した場合は-1を戻します。

15.3.3.4 メモリーに関する注意事項

エラー・メッセージの処理が終了した場合は、slapi_ch_free()をコールしてerrbufバッファを解放する必要があります。

15.3.3.5 関連項目

slapi_ch_free()

15.3.4 slapi_add_entry_internal_set_pb()

Slapi_Entry構造体に関連する、内部追加操作用のパラメータ・ブロックを作成します。

15.3.4.1 構文

#include "slapi-plugin.h"
int slapi_add_entry_internal_set_pb(Slapi_PBlock *pb,
Slapi_Entry *e, LDAPControl **controls,
Slapi_ComponentId *plugin_identity, int operation_flags);

15.3.4.2 パラメータ

この関数は、次のパラメータを取ります。

pb

内部追加操作用のパラメータ・ブロックです。

e

追加するエントリです。

controls

追加操作を要求するコントロールの配列です。コントロールがない場合はNULLとします。

plugin_identity

プラグインの初期化時にSLAPI_PLUGIN_IDENTITYから取得したプラグイン識別子です。

operation_flags

NULLまたはSLAPI_OP_FLAG_NEVER_CHAINです。

15.3.4.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合はLDAPエラー・コードを戻します。

15.3.4.4 説明

この関数は、エントリを使用して、slapi_add_internal_pb()で使用するパラメータ・ブロックを準備します。

15.3.4.5 メモリーに関する注意事項

この関数をコールする前に、slapi_pblock_new()を使用してパラメータ・ブロックを割り当てます。

エントリは、slapi_add_internal_pb()のコール時に使用されます。LDAPControlsは使用されません。

slapi_add_internal_pb()のコール後はパラメータ・ブロックを解放してください。

15.3.4.6 関連項目

slapi_add_internal_pb()

slapi_add_internal_set_pb()

slapi_pblock_new()

15.3.5 slapi_add_internal_pb()

新しいディレクトリ・エントリの内部追加操作を実行します。

15.3.5.1 構文

#include "slapi-plugin.h"
int slapi_add_internal_pb(Slapi_PBlock *pb);

15.3.5.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_add_internal_set_pb()を使用して初期化されたパラメータ・ブロックです。

15.3.5.3 戻り値

渡されたパラメータがNULLポインタの場合、この関数は-1を戻します。それ以外の場合は0を戻します。

作成したコードでこの関数をコールすると、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTが適切なLDAP結果コードに設定されます。したがって、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTをチェックすると、エラーが発生したかどうかを確認できます。

15.3.5.4 説明

この関数は、パラメータ・ブロックに基づいて内部追加操作を実行します。パラメータ・ブロックは、slapi_add_internal_set_pb()またはslapi_add_entry_internal_set_pb()をコールして初期化されている必要があります。

15.3.5.5 メモリーに関する注意事項

slapi_add_internal_set_pb()またはslapi_add_entry_internal_set_pb()にどのようなパラメータを渡しても、この関数では変更または使用されません。slapi_add_entry_internal_set_pb()に渡されたエントリ・パラメータは、この関数のコールに成功すると使用されます。

15.3.6 slapi_add_internal_set_pb()

内部追加操作用のパラメータ・ブロックを作成します。

15.3.6.1 構文

#include "slapi-plugin.h"
int slapi_add_internal_set_pb(Slapi_PBlock *pb, const char *dn,
LDAPMod **attrs, LDAPControl **controls,
Slapi_ComponentId *plugin_identity, int operation_flags);

15.3.6.2 パラメータ

この関数は、次のパラメータを取ります。

pb

内部追加操作用のパラメータ・ブロックです。

dn

削除するエントリの識別名です。

attrs

削除するエントリの属性の配列です。

controls

追加操作を要求するコントロールの配列です。

plugin_identity

プラグインの初期化時にSLAPI_PLUGIN_IDENTITYから取得したプラグイン識別子です。

operation_flags

NULLまたはSLAPI_OP_FLAG_NEVER_CHAINです。

15.3.6.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合はLDAPエラー・コードを戻します。

15.3.6.4 説明

この関数は、エントリのコンポーネントを使用して、slapi_add_internal_pb()で使用するパラメータ・ブロックを作成します。

すでにエントリがSlapi_Entry構造体として作成されている場合は、かわりにslapi_add_entry_internal_set_pb()を使用してください。

15.3.6.5 メモリーに関する注意事項

この関数をコールする前に、slapi_pblock_new()を使用してパラメータ・ブロックを割り当てます。

Directory Serverは、この関数に渡されたパラメータを解放しません。

slapi_pblock_destroy()のコール後はパラメータ・ブロックを解放してください。

15.3.6.6 関連項目

slapi_add_entry_internal_set_pb()

slapi_add_internal_pb()

slapi_pblock_new()

15.3.7 slapi_attr_add_value()

属性に値を追加します。

15.3.7.1 構文

#include "slapi-plugin.h"
int slapi_attr_add_value(Slapi_Attr *a, const Slapi_Value *v);

15.3.7.2 パラメータ

この関数は、次のパラメータを取ります。

a

値が格納されている属性です。

v

属性に追加される値です。

15.3.7.3 戻り値

この関数は、常に0を戻します。

15.3.7.4 メモリーに関する注意事項

Directory Serverは、属性に追加されるSlapi_Valueのコピーを作成します。

15.3.7.5 関連項目

slapi_attr_first_value_const()

slapi_attr_next_value_const()

slapi_attr_get_numvalues()

slapi_attr_value_cmp()

slapi_attr_value_find()

15.3.8 slapi_attr_basetype()

属性のベース型を戻します。

15.3.8.1 構文

#include "slapi-plugin.h"
char *slapi_attr_basetype( char *type, char *buf, size_t bufsiz );

15.3.8.2 パラメータ

この関数は、次のパラメータを取ります。

type

ベース型の取得元となる属性タイプです。

buf

戻されたベース型を保持するバッファです。

bufsiz

バッファのサイズです。

15.3.8.3 戻り値

ベース型がバッファに収まる場合、この関数はNULLを戻します。ベース型がバッファより長い場合は、ベース型のためのメモリーが割り当てられ、そのポインタが戻されます。

15.3.8.4 説明

この関数は、属性のベース型を戻します(たとえば、cn;lang-jpが指定された場合はcnを戻します)。

15.3.8.5 メモリーに関する注意事項

終了後はslapi_ch_free()をコールして、戻されたベース型を解放する必要があります。

15.3.8.6 関連項目

slapi_attr_get_type()

slapi_attr_type_cmp()

slapi_attr_types_equivalent()

15.3.9 slapi_attr_dup()

属性を複製します。

15.3.9.1 構文

#include "slapi-plugin.h"
Slapi_Attr *slapi_attr_dup(const Slapi_Attr *attr);

15.3.9.2 パラメータ

この関数は、次のパラメータを取ります。

attr

複製対象の属性です。

15.3.9.3 戻り値

この関数は、属性のコピーを新しく作成して戻します。

15.3.9.4 説明

属性のコピーを作成するには、この関数を使用します。

15.3.9.5 メモリーに関する注意事項

戻された属性は、slapi_attr_free()を使用して解放する必要があります。

15.3.9.6 関連項目

slapi_attr_new()

slapi_attr_init()

slapi_attr_free()

15.3.10 slapi_attr_first_value_const()

属性の最初の値を取得します。

15.3.10.1 構文

#include "slapi-plugin.h"
int slapi_attr_first_value_const( const Slapi_Attr *a, const Slapi_Value **v );

15.3.10.2 パラメータ

この関数は、次のパラメータを取ります。

a

目的の値が格納されている属性です。

v

属性の最初の値を保持します。

15.3.10.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 0 (最初の値の索引)

- -1 (NULLの場合)

15.3.10.4 説明

属性の最初の値を取得するには、この関数を使用します。これは、Slapi_Attr構造体で繰返し処理を行う関数セットの一部です。

15.3.10.5 メモリーに関する注意事項

vに保持されている値は解放しないでください。

15.3.10.6 関連項目

slapi_attr_next_value_const()

slapi_attr_get_numvalues()

15.3.11 slapi_attr_flag_is_set()

特定のフラグが特定の属性に設定されているかどうかを判別します。

15.3.11.1 構文

#include "slapi-plugin.h"
int slapi_attr_flag_is_set( Slapi_Attr *attr, unsigned long flag );

15.3.11.2 パラメータ

この関数は、次のパラメータを取ります。

attr

チェックする属性です。

flag

属性でチェックするフラグです。

flag引数の値には、次のいずれかを指定できます。

SLAPI_ATTR_FLAG_SINGLE

属性が単一値であるかどうかを判別するフラグ

SLAPI_ATTR_FLAG_OPATTR

属性が操作属性であるかどうかを判別するフラグ

SLAPI_ATTR_FLAG_READONLY

属性が読取り専用であるかどうかを判別するフラグ

15.3.11.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 指定されたフラグが設定されている場合は1

- 指定されたフラグが設定されていない場合は0

15.3.11.4 説明

この関数は、指定された属性に特定のフラグが設定されているかどうかを判別します。これらのフラグにより、属性が単一値属性、操作属性または読取り専用属性であるかを確認できます。これらのフラグは、Slapi_Attr構造体が初期化されるときにスキーマから設定されます。

15.3.11.5 関連項目

slapi_attr_get_flags()

15.3.12 slapi_attr_free()

属性を解放します。

15.3.12.1 構文

#include "slapi-plugin.h"
void slapi_attr_free( Slapi_Attr **a );

15.3.12.2 パラメータ

この関数は、次のパラメータを取ります。

a

解放する属性です。

15.3.12.3 説明

不要になった属性を解放するには、この関数を使用します。

15.3.12.4 関連項目

slapi_attr_new()

slapi_attr_init()

slapi_attr_free()

15.3.13 slapi_attr_get_bervals_copy()

属性に格納されている値をberval構造体の配列に格納します。

15.3.13.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_bervals_copy(Slapi_Attr *a,
struct berval ***vals );

15.3.13.2 パラメータ

この関数は、次のパラメータを取ります。

a

目的の値が格納されている属性です。

vals

目的の値を保持するberval構造体ポインタの配列へのポインタです。

15.3.13.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 値が見つかった場合は0

- -1 (NULLの場合)

15.3.13.4 説明

この関数は、属性からberval構造体ポインタの配列に値をコピーします。

15.3.13.5 メモリーに関する注意事項

この配列は、ber_bvecfree(3LDAP)を使用して解放してください。

15.3.14 slapi_attr_get_flags()

指定された属性に関連付けられているフラグを取得します。

15.3.14.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_flags( Slapi_Attr *attr, unsigned long *flags );

15.3.14.2 パラメータ

この関数は、次のパラメータを取ります。

attr

フラグを取得する属性です。

flags

この関数をコールすると、このパラメータは、指定された属性のフラグへのポインタに設定されます。このフラグは属性の現在のデータの一部であり、データのコピーではないため、フラグを解放しないでください。

設定されているフラグを確認するには、次のうちの1つ以上を使用して、flags引数の値にビット単位のANDを使用します。

SLAPI_ATTR_FLAG_SINGLE

属性が単一値であるかどうかを判別するフラグ

SLAPI_ATTR_FLAG_OPATTR

属性が操作属性であるかどうかを判別するフラグ

SLAPI_ATTR_FLAG_READONLY

属性が読取り専用であるかどうかを判別するフラグ

15.3.14.3 戻り値

この関数は、正常終了した場合は0を戻します。

15.3.14.4 説明

この関数は、指定された属性に関連付けられているフラグを取得します。これらのフラグにより、属性が単一値属性、操作属性または読取り専用属性であるかを確認できます。

15.3.14.5 関連項目

slapi_attr_flag_is_set()

15.3.15 slapi_attr_get_numvalues()

属性が持つ値の数を指定された整数に格納します。

15.3.15.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_numvalues( const Slapi_Attr *a, int *numValues);

15.3.15.2 パラメータ

この関数は、次のパラメータを取ります。

a

カウント対象の値が格納されている属性です。

numValues

カウントされた値を保持する整数です。

15.3.15.3 戻り値

この関数は、常に0を戻します。

15.3.15.4 説明

この関数は、属性内の値の数をカウントし、その数を整数に格納します。

15.3.15.5 関連項目

slapi_attr_first_value_const()

slapi_attr_next_value_const()

15.3.16 slapi_attr_get_oid_copy()

構文を検索して属性タイプを取得し、そのOID文字列のコピーを戻します。

15.3.16.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_oid_copy( const Slapi_Attr *attr, char **oidp );

15.3.16.2 パラメータ

この関数は、次のパラメータを取ります。

attr

目的のタイプが格納されている属性です。

oidp

属性タイプのOIDのコピー先となる文字列です。

15.3.16.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 属性タイプが見つかった場合は0

- そうでない場合は-1

15.3.16.4 説明

構文を検索して属性タイプのOIDを取得するには、この関数を使用します。

15.3.16.5 メモリーに関する注意事項

この文字列は、slapi_ch_free()を使用して解放する必要があります。

15.3.17 slapi_attr_get_plugin()

指定された属性タイプの値の処理に使用される構文プラグインへのポインタを取得します。

15.3.17.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_plugin( Slapi_Attr *a, void **plugin );

15.3.17.2 パラメータ

この関数は、次のパラメータを取ります。

a

アクセスする関連する構文プラグインが格納されている属性です。

plugin

このパラメータには、この関数に渡されるタイプの属性を処理するために登録されているプラグインへのポインタが設定されます。このポインタはコピーではないため、ポインタを解放しないでください。

15.3.17.3 戻り値

この関数は0を戻します。

15.3.18 slapi_attr_get_type()

指定された属性から属性タイプの名前を取得します。

15.3.18.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_type( Slapi_Attr *attr, char **type );

15.3.18.2 パラメータ

この関数は、次のパラメータを取ります。

attr

タイプを取得する属性です。

type

この関数をコールすると、このパラメータは、指定された属性のタイプへのポインタに設定されます。この属性タイプは属性の現在のデータの一部であり、データのコピーではないため、属性タイプを解放しないでください。

15.3.18.3 戻り値

この関数は、正常終了した場合は0を戻します。

15.3.18.4 関連項目

slapi_attr_type_cmp()

slapi_attr_types_equivalent()

slapi_attr_basetype()

15.3.19 slapi_attr_get_valueset()

属性に格納されている既存の値を値セットにコピーします。

15.3.19.1 構文

#include "slapi-plugin.h"
int slapi_attr_get_valueset(const Slapi_Attr *a,
Slapi_ValueSet **vs);

15.3.19.2 パラメータ

この関数は、次のパラメータを取ります。

a

値セットに設定する値が格納されている属性です。これには有効な属性を指定する必要があり、NULLは指定できません。

vs

最初のパラメータからの値を格納します。

15.3.19.3 戻り値

この関数は、常に0を戻します。

15.3.19.4 メモリーに関する注意事項

vs内の値セットは、slapi_valueset_free()を使用して解放します。

15.3.19.5 関連項目

slapi_entry_add_valueset()

slapi_valueset_new()

slapi_valueset_init()

slapi_valueset_free()

slapi_valueset_done()

slapi_valueset_add_value_optimised()

slapi_valueset_first_value_const()

slapi_valueset_next_value_const()

slapi_valueset_count()

15.3.20 slapi_attr_init()

ベース型を指定して空の属性を初期化します。

15.3.20.1 構文

#include "slapi-plugin.h"
Slapi_Attr *slapi_attr_init(Slapi_Attr *a, const char *type);

15.3.20.2 パラメータ

この関数は、次のパラメータを取ります。

a

初期化対象の空の属性です。

type

初期化のための属性タイプです。

15.3.20.3 戻り値

この関数は、新しく初期化された属性か、スキーマでタイプが指定されなかった場合は空の属性を戻します。

15.3.20.4 説明

属性タイプを指定して空の属性を初期化するには、この関数を使用します。

15.3.20.5 メモリーに関する注意事項

Directory Serverは、type文字列のコピーを作成します。

15.3.20.6 関連項目

slapi_attr_new()

slapi_attr_dup()

slapi_attr_free()

15.3.21 slapi_attr_new()

新しい属性を作成します。

15.3.21.1 構文

#include "slapi-plugin.h"
Slapi_Attr *slapi_attr_new( void );

15.3.21.2 パラメータ

この関数にパラメータはありません。

15.3.21.3 戻り値

この関数は、新しく作成した属性を戻します。

15.3.21.4 説明

空の属性を作成するには、この関数を使用します。

15.3.21.5 関連項目

slapi_attr_dup()

slapi_attr_free()

15.3.22 slapi_attr_next_value_const()

属性の次の値を取得します。

15.3.22.1 構文

#include "slapi-plugin.h"
int slapi_attr_next_value_const( const Slapi_Attr *a, int index,
const Slapi_Value **v );

15.3.22.2 パラメータ

この関数は、次のパラメータを取ります。

a

目的の値が格納されている属性です。

index

戻される値の索引です(0からカウント)。

v

属性の値を保持します。

15.3.22.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 値が見つかった場合はhint + 1

- NULLの場合またはhintの位置で値が見つからない場合は-1

15.3.22.4 説明

属性の次の値を取得するには、この関数を使用します。索引に関連付けられた属性の値が、値に格納されます。これは、Slapi_Attr構造体で繰返し処理を行う関数セットの一部です。

15.3.22.5 関連項目

slapi_attr_first_value_const()

slapi_attr_get_numvalues()

15.3.23 slapi_attr_syntax_normalize()

構文内の属性タイプを検索し、正規化された属性タイプのコピーを戻します。

15.3.23.1 構文

#include "slapi-plugin.h"
char * slapi_attr_syntax_normalize( const char *s );

15.3.23.2 パラメータ

この関数は、次のパラメータを取ります。

s

検索する属性タイプです。

15.3.23.3 戻り値

この関数は、目的の正規化された属性のコピーまたは渡された属性の正規化されたコピーを戻します。

15.3.23.4 説明

構文を検索して属性タイプを取得し、その正規化された形式を戻すには、この関数を使用します。属性タイプがスキーマに定義されていない場合、この関数はタイプのコピーを小文字に変換して戻します。

15.3.23.5 メモリーに関する注意事項

戻された文字列は、slapi_ch_free()を使用して解放する必要があります。

15.3.23.6 関連項目

slapi_ch_free()

15.3.24 slapi_attr_type_cmp()

2つの属性タイプを比較し、それらが同じであるかどうかを判別します。

15.3.24.1 構文

#include "slapi-plugin.h"
int slapi_attr_type_cmp( char *t1, char *t2, int opt );

15.3.24.2 パラメータ

この関数は、次のパラメータを取ります。

t1

比較する最初の属性タイプの名前です。

t2

比較する2番目の属性タイプの名前です。

opt

次のいずれかの値です。

- 0 - タイプをそのまま比較します。

- 1 - タイプのベース名のみを比較します(たとえば、タイプがcn;lang-enの場合は、タイプのcn部分のみが比較されます)。

- 2 - 最初のタイプにないオプションを2番目のタイプで無視します。たとえば、最初のタイプがcnで2番目のタイプがcn;lang-enの場合、2番目のタイプのlang-enオプションは最初のタイプに含まれていません。この場合、2つのタイプは同一であるとみなされます。

15.3.24.3 戻り値

この関数は、タイプ名が等しい場合は0を戻し、等しくない場合は0以外の値を戻します。

15.3.24.4 関連項目

slapi_attr_type_cmp()

slapi_attr_types_equivalent()

slapi_attr_basetype()

15.3.25 slapi_attr_types_equivalent()

2つの属性名を比較し、それらが同じ属性を表すかどうかを判別します。

15.3.25.1 構文

#include "slapi-plugin.h"
int slapi_attr_types_equivalent( const char *t1, const char *t2 );

15.3.25.2 パラメータ

この関数は、次のパラメータを取ります。

t1

比較する最初の属性タイプへのポインタです。

t2

比較する2番目の属性タイプへのポインタです。

15.3.25.3 戻り値

この関数は、次のいずれかの値を戻します。

- t1とt2が同じ属性を表す場合は1

- t1とt2が同じ属性を表さない場合は0

15.3.25.4 関連項目

slapi_attr_add_value()

slapi_attr_first_value_const()

slapi_attr_next_value_const()

slapi_attr_get_numvalues()

slapi_attr_value_find()

15.3.26 slapi_attr_value_cmp()

指定された属性の2つの値を比較し、それらが等しいかどうかを判別します。

15.3.26.1 構文

#include "slapi-plugin.h"
int slapi_attr_value_cmp( Slapi_Attr *attr, struct berval *v1,
struct berval *v2 );

15.3.26.2 パラメータ

この関数は、次のパラメータを取ります。

attr

値を比較する方法の指定に使用する属性です(たとえば、大/小文字の区別なく文字列が属性に格納されている場合、その文字列は大/小文字を考慮せずに比較されます)。

v1

比較する最初の値が格納されているberval構造体へのポインタです。

v2

比較する2番目の値が格納されているberval構造体へのポインタです。

15.3.26.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 値が等しい場合は0

- 値が等しくない場合は-1

15.3.26.4 関連項目

slapi_attr_add_value()

slapi_attr_first_value_const()

slapi_attr_next_value_const()

slapi_attr_get_numvalues()

slapi_attr_value_find()

15.3.27 slapi_attr_value_find()

等価一致ルールを使用して、指定した値が属性に含まれているかどうかを確認します。

15.3.27.1 構文

#include "slapi-plugin.h"
int slapi_attr_value_find( Slapi_Attr *a, struct berval *v );

15.3.27.2 パラメータ

この関数は、次のパラメータを取ります。

a

チェックする属性です。

v

検索する値が格納されているberval構造体へのポインタです。

15.3.27.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 等価一致ルールに基づいて、指定された値と一致する値が属性に含まれている場合は0
たとえば、CNの場合、BABS JENSENおよびBabs Jensenは一致します。

- 指定された値が属性に含まれていない場合は-1

15.3.27.4 関連項目

slapi_attr_add_value()

slapi_attr_first_value_const()

slapi_attr_next_value_const()

slapi_attr_get_numvalues()

slapi_attr_value_cmp()

15.3.28 slapi_be_exist()

指定されたDNを含むバックエンドが存在するかどうかをチェックします。

15.3.28.1 構文

#include "slapi-plugin.h"
int slapi_be_exist(const Slapi_DN *sdn);

15.3.28.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

探しているバックエンドのDNへのポインタです。

15.3.28.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 指定されたDNを含むバックエンドが存在する場合は1

- バックエンドが存在しない場合は0

15.3.28.4 関連項目

slapi_be_select()

15.3.29 slapi_be_get_name()

指定されたバックエンドの名前を戻します。

15.3.29.1 構文

#include "slapi-plugin.h"
char * slapi_be_get_name(Slapi_Backend * be);

15.3.29.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

15.3.29.3 戻り値

この関数は、指定されたバックエンドに関連付けられている名前を戻します。

15.3.29.4 メモリーに関する注意事項

戻されたポインタは解放しないでください。

15.3.30 slapi_be_get_readonly()

バックエンドに関連付けられたデータベースが読取り専用モードであるかどうかを示します。

15.3.30.1 構文

#include "slapi-plugin.h"
int slapi_be_get_readonly(Slapi_Backend *be);

15.3.30.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

15.3.30.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- データベースが読取り専用モードでない場合は0

- データベースが読取り専用モードの場合は1

15.3.31 slapi_be_getsuffix()

指定されたバックエンドに関連付けられたn番目のサフィックスのDNを戻します。

15.3.31.1 構文

#include "slapi-plugin.h"
const Slapi_DN *slapi_be_getsuffix(Slapi_Backend *be, int n);

15.3.31.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

n

索引です(0から開始)。

15.3.31.3 戻り値

この関数は、サフィックスのDNが存在する場合はそのDNを戻し、バックエンドにn番目のサフィックスが存在しない場合はNULLを戻します。

15.3.31.4 説明

この関数は、指定されたバックエンドに関連付けられているn番目のサフィックス(0からカウント)を戻します。この関数は、以前のバージョンのDirectory ServerプラグインAPIとの互換性のために残されています。

15.3.31.5 メモリーに関する注意事項

戻されたポインタは解放しないでください。

15.3.32 slapi_be_gettype()

バックエンドのタイプを戻します。

15.3.32.1 構文

#include "slapi-plugin.h"
const char * slapi_be_gettype(Slapi_Backend *be);

15.3.32.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

15.3.32.3 戻り値

この関数は、バックエンドのタイプを戻します。バックエンドのタイプには、次のようなものがあります。

- chaining (チェーン(データベース・リンクとも呼ばれる)に使用します)

- default (バインドのみをサポートし、パススルー認証に使用します)

- DSE (構成パラメータに使用します)

- ldbm database (使用しているディレクトリ・データを格納します)

- schema-internal (スキーマ構成に使用します)

15.3.32.4 メモリーに関する注意事項

戻されたポインタは解放しないでください。

15.3.33 slapi_be_is_flag_set()

バックエンド構成にフラグが設定されているかどうかをチェックします。

15.3.33.1 構文

#include "slapi-plugin.h"
int slapi_be_is_flag_set(Slapi_Backend * be, int flag);

15.3.33.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

flag

チェックするフラグ(SLAPI_BE_FLAG_REMOTE_DATA、SLAPI_BE_FLAG_SUSPENDED)です。

15.3.33.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- バックエンド構成にフラグが設定されていない場合は0

- フラグが設定されている場合は1

15.3.34 slapi_be_issuffix()

指定されたサフィックスが、登録されているバックエンド・サフィックスと一致することを検証します。

15.3.34.1 構文

#include "slapi-plugin.h"
int slapi_be_issuffix(const Slapi_Backend *be,
const Slapi_DN *suffix);

15.3.34.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

suffix

探しているサフィックスのDNです。

15.3.34.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 指定されたバックエンドにサフィックスが含まれていない場合は0

- 指定されたバックエンドにサフィックスが含まれている場合は1

15.3.34.4 説明

この関数は、指定されたサフィックスが、指定されたバックエンドに登録されているサフィックスと完全に一致するかどうかをチェックします。

15.3.35 slapi_be_logchanges()

LDBMデータベース・バックエンドに適用された変更を変更ログに記録する必要があるかどうかを示します。この値は読取りのみであり、設定はできません。

15.3.35.1 構文

#include "slapi-plugin.h"
int slapi_be_logchanges(Slapi_Backend *be);

15.3.35.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

15.3.35.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 特定のバックエンドに適用された変更を変更ログに記録する必要がない場合は0

- 変更を変更ログに記録する必要がある場合は1

15.3.36 slapi_be_private()

バックエンドがプライベートであるかどうかを検証します。

15.3.36.1 構文

#include "slapi-plugin.h"
int slapi_be_private( Slapi_Backend * be );

15.3.36.2 パラメータ

この関数は、次のパラメータを取ります。

be

バックエンド構成が格納されている構造体へのポインタです。

15.3.36.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- バックエンドがユーザーから隠されていない場合(バックエンド・タイプchainingおよびldbm databaseの場合)は0

- バックエンドがユーザーから隠されている場合(内部使用のみ、バックエンド・タイプdefault、DSE、schema-internal)は1

15.3.37 slapi_be_select()

指定されたDNを含むエントリの処理に使用する必要のあるバックエンドを検索します。

15.3.37.1 構文

#include "slapi-plugin.h"
Slapi_Backend * slapi_be_select( const Slapi_DN * sdn );

15.3.37.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

バックエンドを取得するDNへのポインタです。

15.3.37.3 戻り値

この関数は、デフォルト・バックエンドへのポインタを戻します。適切なサフィックスを持つバックエンドが構成されていない場合、これはバインド操作のみが可能な空のバックエンドとなります。それ以外の場合は、バックエンド構造体へのポインタを戻します。

15.3.37.4 メモリーに関する注意事項

戻されたポインタは解放しないでください。

15.3.37.5 関連項目

slapi_be_select_by_instance_name()

15.3.38 slapi_be_select_by_instance_name()

データベースの処理に使用されるバックエンドを検索します。

15.3.38.1 構文

#include "slapi-plugin.h"
Slapi_Backend *slapi_be_select_by_instance_name( const char *name );

15.3.38.2 パラメータ

この関数は、次のパラメータを取ります。

name

userRootなど、必要とする構造体を持つバックエンドのCNの値へのポインタです。

15.3.38.3 戻り値

適切な名前のバックエンドが構成されていない場合、この関数はNULLを戻します。それ以外の場合は、バックエンド構造体へのポインタを戻します。

15.3.38.4 説明

この関数は、パラメータとして指定されたデータベースの処理に使用する必要のあるバックエンドを検索します。

15.3.38.5 メモリーに関する注意事項

戻されたポインタは解放しないでください。

15.3.38.6 関連項目

slapi_be_select()

15.3.39 slapi_berval_cmp()

2つのberval構造体を比較します。

15.3.39.1 構文

#include "slapi-plugin.h"
int slapi_berval_cmp(const struct berval* L,const struct berval* R);

15.3.39.2 パラメータ

この関数は、次のパラメータを取ります。

L

一方のberval構造体です。

R

もう一方のberval構造体です。

15.3.39.3 説明

この関数は、2つのberval構造体が等価であるかどうかをチェックします。

15.3.39.4 戻り値

2つのberval構造体が等価である場合、この関数は0を戻します。LがRより短い場合は負の値を戻し、LがRより長い場合は正の値を戻します。LとRが同じサイズでも内容が異なるとき、LがRより小さい場合は負の値を戻し、LがRより大きい場合は正の値を戻します。LおよびRはバイトの配列として比較されます。

15.3.40 slapi_build_control()

BerElement、OIDおよび重大性フラグに基づいて、LDAPControl構造体を作成します。

15.3.40.1 構文

#include "slapi-plugin.h"
int slapi_build_control( char const *oid, BerElement const *ber,
char iscritical, LDAPControl **ctrlp );

15.3.40.2 パラメータ

この関数は、次のパラメータを取ります。

oid

作成されるコントロールのOID (オブジェクト識別子)です。

ber

コントロール値が格納されているBerElementです。コントロールに値がない場合はNULLを渡します。

iscritical

重大性フラグです。0以外の場合は、コントロールが重要とマーク付けされます。0の場合は重要とマーク付けされません。

ctrlp

割り当てられたLDAPControl構造体を格納するポインタです。

15.3.40.3 戻り値

正常終了した場合、この関数はLDAP_SUCCESS (LDAP結果コード)を戻します。

15.3.40.4 説明

この関数は、BerElement、OIDおよび重大性フラグに基づいて、LDAPControl構造体を作成します。作成されたLDAPControlは、LDAPクライアント・リクエストまたは内部操作で使用できます。

たとえば、ber_init(3LDAP)を使用してBerElementを構築できます。

15.3.40.5 メモリーに関する注意事項

Directory Serverは、oid文字列を複製します。

berパラメータの内容はコール元が責任を持ちます。

slapi_build_control()のberパラメータは、ber_free (3LDAP)を使用して解放できます。

ctrlpで戻されたLDAPControlポインタは、LDAP API関数のldap_control_free(3LDAP)をコールして解放する必要があります。

15.3.40.6 関連項目

ber_free(3LDAP)
ber_init(3LDAP)
ldap_control_free(3LDAP)

slapi_build_control_from_berval()

15.3.41 slapi_build_control_from_berval()

berval構造体、OIDおよび重大性フラグに基づいて、LDAPControl構造体を作成します。

15.3.41.1 構文

#include "slapi-plugin.h"
int slapi_build_control_from_berval( char const *oid,
struct berval *bvp, char iscritical, LDAPControl **ctrlp );

15.3.41.2 パラメータ

この関数は、次のパラメータを取ります。

oid

作成されるコントロールのOID (オブジェクト識別子)です。

bvp

コントロール値が格納されているbervalです。コントロールに値がない場合はNULLを渡します。

iscritical

重大性フラグです。0以外の場合は、コントロールが重要とマーク付けされます。0の場合は重要とマーク付けされません。

ctrlp

割り当てられたLDAPControl構造体を格納するポインタです。

15.3.41.3 戻り値

この関数は、常にLDAP_SUCCESS (LDAP結果コード)を戻します。

15.3.41.4 説明

この関数は、berval、OIDおよび重大性フラグに基づいて、LDAPControl構造体を作成します。作成されたLDAPControlは、LDAPクライアント・リクエストまたは内部操作で使用できます。

15.3.41.5 メモリーに関する注意事項

Directory Serverは、oid文字列を複製します。

bvpパラメータの内容は、この関数で使用されます。そのため、この関数のコールに成功したときは、コール元でbvp->bv_valポインタを解放しないでください。

ctrlpで戻されたLDAPControlポインタは、LDAP API関数のldap_control_free(3LDAP)をコールして解放する必要があります。

15.3.41.6 関連項目

ldap_control_free(3LDAP)

slapi_build_control()

15.3.42 slapi_ch_array_free()

既存の配列を解放します。

15.3.42.1 構文

#include "slapi-plugin.h"
void slapi_ch_array_free( char **arrayp );

15.3.42.2 パラメータ

この関数は、次のパラメータを取ります。

arrayp

解放する配列へのポインタです。このパラメータにはNULLを指定できません。

15.3.42.3 説明

この関数は、arraypが参照するchar **を解放します。たとえば、次のコードでは、arrayおよびa1の両方が解放されます。

char **array;
char *a1;

array = malloc(2*sizeof(char *));
a1 = strdup("hello");

array[0] = a1;
array[1] = NULL;

slapi_ch_array_free(array);

15.3.43 slapi_ch_bvdup()

既存のberval構造体のコピーを作成します。

15.3.43.1 構文

#include "slapi-plugin.h"
struct berval* slapi_ch_bvdup( const struct berval *v );

15.3.43.2 パラメータ

この関数は、次のパラメータを取ります。

v

コピーするberval構造体へのポインタです。

15.3.43.3 戻り値

この関数は、berval構造体の新しいコピーへのポインタを戻します。構造体を複製できない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.43.4 メモリーに関する注意事項

vパラメータの内容は、この関数では変更されません。戻されたberval構造体は、LDAP API関数のber_bvfree(3LDAP)をコールして解放する必要があります。

15.3.43.5 関連項目

ber_bvfree(3LDAP)

slapi_ch_bvecdup()

15.3.44 slapi_ch_bvecdup()

既存のberval構造体の配列のコピーを作成します。

15.3.44.1 構文

#include "slapi-plugin.h"
extern struct berval** slapi_ch_bvecdup (const struct berval **v);

15.3.44.2 パラメータ

この関数は、次のパラメータを取ります。

v

コピーするberval構造体の配列へのポインタです。

15.3.44.3 戻り値

この関数は、berval構造体の新しいコピーの配列へのポインタを戻します。構造体を複製できない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.44.4 メモリーに関する注意事項

vパラメータの内容は、この関数では変更されません。戻されたberval構造体は、LDAP API関数のber_bvfree(3LDAP)をコールして解放する必要があります。

15.3.44.5 関連項目

ber_bvfree(3LDAP)

slapi_ch_bvecdup()

15.3.45 slapi_ch_calloc()

指定されたサイズの要素数を持つ配列に領域を割り当てます。

15.3.45.1 構文

#include "slapi-plugin.h"
char * slapi_ch_calloc( unsigned long nelem, unsigned long size );

15.3.45.2 パラメータ

この関数は、次のパラメータを取ります。

nelem

メモリーを割り当てる要素数です。

size

メモリーを割り当てる要素のサイズ(バイト)です。

15.3.45.3 戻り値

この関数は、新しく割り当てられたメモリー領域へのポインタを戻します。領域を割り当てられない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.45.4 メモリーに関する注意事項

この関数は、標準のcalloc() C関数のかわりにコールする必要があります。また、メモリーを割り当てられない場合は、メモリー不足のエラー・メッセージを出力してslapdサーバーが停止します。

戻されたポインタは、slapi_ch_free()をコールして解放する必要があります。

15.3.45.5 関連項目

slapi_ch_free()

slapi_ch_malloc()

slapi_ch_realloc()

slapi_ch_strdup()

15.3.46 slapi_ch_free()

slapi_ch_malloc()、slapi_ch_realloc()およびslapi_ch_calloc()の各関数によって割り当てられた領域を解放し、ポインタをNULLに設定します。この関数は、標準のfree() C関数のかわりにコールします。

15.3.46.1 構文

#include "slapi-plugin.h"
void slapi_ch_free( void **ptr );

15.3.46.2 パラメータ

この関数は、次のパラメータを取ります。

ptr

解放するメモリー・ブロックへのポインタのアドレスです。NULLの場合は処理が行われません。

15.3.46.3 メモリーに関する注意事項

slapi_ch_free()に渡すptrは、slapi_ch_malloc()、slapi_ch_realloc()、slapi_ch_calloc()またはslapi_ch_strdup()のコールを使用して割り当てられたメモリーへのポインタのアドレスとする必要があります。

15.3.46.4 関連項目

slapi_ch_calloc()

slapi_ch_malloc()

slapi_ch_realloc()

slapi_ch_strdup()

15.3.47 slapi_ch_free_string()

slapi_ch_malloc()、slapi_ch_realloc()およびslapi_ch_calloc()によって割り当てられた既存の文字列を解放します。この関数は、標準のfree() C関数のかわりにコールします。

15.3.47.1 構文

#include "slapi-plugin.h"
void slapi_ch_free_string( char **s );

15.3.47.2 パラメータ

この関数は、次のパラメータを取ります。

s

解放する文字列のアドレスです。

15.3.47.3 説明

この関数は、既存の文字列を解放します。文字列を使用している場合は、slapi_ch_free()を優先して使用する必要があります。引数を(void**)にキャストするためコンパイル時のエラー・チェックを行わないslapi_ch_free()とは異なり、これはコンパイル時のチェックを実行し、不正なエラー引数がないかどうかを確認します。

15.3.47.4 関連項目

slapi_ch_free()

slapi_ch_calloc()

slapi_ch_malloc()

slapi_ch_realloc()

slapi_ch_strdup()

15.3.48 slapi_ch_malloc()

メモリーに領域を割り当てます。

15.3.48.1 構文

#include "slapi-plugin.h"
char * slapi_ch_malloc( unsigned long size );

15.3.48.2 パラメータ

この関数は、次のパラメータを取ります。

size

メモリーを取得する領域のサイズ(バイト)です。

15.3.48.3 戻り値

この関数は、新しく割り当てられたメモリー領域へのポインタを戻します。領域を割り当てられない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.48.4 メモリーに関する注意事項

この関数は、標準のmalloc() C関数のかわりにコールする必要があります。また、メモリーを割り当てられない場合は、メモリー不足のエラー・メッセージを出力してslapdサーバーが停止します。

戻されたポインタは、slapi_ch_free()をコールして解放する必要があります。

15.3.48.5 関連項目

slapi_ch_free()

slapi_ch_calloc()

slapi_ch_realloc()

slapi_ch_strdup()

15.3.49 slapi_ch_realloc()

割り当てられたメモリー・ブロックのサイズを変更します。

15.3.49.1 構文

#include "slapi-plugin.h"
char * slapi_ch_realloc( char *block, unsigned long size );

15.3.49.2 パラメータ

この関数は、次のパラメータを取ります。

block

割り当てられた既存のメモリー・ブロックへのポインタです。

size

メモリー・ブロックに割り当てる新しいサイズ(バイト)です。

15.3.49.3 戻り値

この関数は、再割当てされたメモリー領域へのポインタを戻します。領域を割り当てられない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.49.4 メモリーに関する注意事項

この関数は、標準のrealloc() C関数のかわりにコールする必要があります。また、メモリーを割り当てられない場合は、メモリー不足のエラー・メッセージを出力してslapdサーバーが停止します。

この関数に渡すblockパラメータは、slapi_ch_malloc()、slapi_ch_calloc()、slapi_ch_strdup()などのslapiのコールを使用して割り当てられたポインタのアドレスとする必要があります。

戻されたポインタは、slapi_ch_free()をコールして解放する必要があります。

15.3.49.5 関連項目

slapi_ch_free()

slapi_ch_calloc()

slapi_ch_malloc()

slapi_ch_strdup()

15.3.50 slapi_ch_strdup()

既存の文字列のコピーを作成します。

15.3.50.1 構文

#include "slapi-plugin.h"
char * slapi_ch_strdup( char *s );

15.3.50.2 パラメータ

この関数は、次のパラメータを取ります。

s

コピーする文字列へのポインタです。

15.3.50.3 戻り値

この関数は、文字列のコピーへのポインタを戻します。領域を割り当てられない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.50.4 メモリーに関する注意事項

この関数は、標準のstrdup() C関数のかわりにコールする必要があります。また、メモリーを割り当てられない場合は、メモリー不足のエラー・メッセージを出力してslapdサーバーが停止します。

戻されたポインタは、slapi_ch_free()をコールして解放する必要があります。

15.3.50.5 関連項目

slapi_ch_free()

slapi_ch_calloc()

slapi_ch_malloc()

slapi_ch_realloc()

15.3.51 slapi_compute_add_evaluator()

クライアントに結果を戻すとき、生成およびエントリに追加する算出属性の評価に当たってサーバーが使用するコールバックを設定します。

15.3.51.1 構文

#include "slapi-plugin.h"
int slapi_compute_add_evaluator(slapi_compute_callback_t fcn);

15.3.51.2 パラメータ

この関数は、次のパラメータを取ります。

fcn

算出属性を評価するときにコールする関数です。

15.3.51.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合は、コールバックにメモリーを割り当てられなかったことを示すENOMEMを戻します。

15.3.51.4 説明

コールバックの詳細は、「slapi_compute_callback_t」を参照してください。プラグイン初期化の一環としてコールバックを登録します。

15.3.51.5 関連項目

computed_attr_context

slapi_compute_callback_t

slapi_pblock_new()

15.3.52 slapi_compute_add_search_rewriter_ex()

算出属性を検索するときにサーバーが使用するコールバックを設定します。

15.3.52.1 構文

#include "slapi-plugin.h"
int slapi_compute_add_search_rewriter_ex(
slapi_search_rewrite_callback_t function,
slapi_search_rewrite_callback_t cleanup_function);

15.3.52.2 パラメータ

この関数は、次のパラメータを取ります。

function

検索のフィルタを再書き込みするためにコールする関数です。

cleanup_function

再書込み検索実行後のクリーンアップのためにコールする関数です。

15.3.52.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合は、コールバックにメモリーを割り当てられなかったことを示すENOMEMを戻します。

15.3.52.4 説明

コールバックの詳細は、第14章「データ型と構造体のリファレンス」を参照してください。

15.3.53 slapi_control_present()

指定されたオブジェクト識別子(OID)が、コントロールのリストに存在するコントロールを示すかどうかを判別します。

15.3.53.1 構文

#include "slapi-plugin.h"
int slapi_control_present( LDAPControl **controls, char const *oid,
struct berval **val, int *iscritical );

15.3.53.2 パラメータ

この関数は、次のパラメータを取ります。

controls

チェックするコントロールのリストです。

oid

検索するコントロールのOIDです。

val

コントロールのリストにコントロールが存在する場合、この関数にはコントロールの値が格納されているberval構造体へのポインタを指定します。コントロール値へのポインタを格納しない場合は、このパラメータにNULLを渡します。

iscritical

コントロールのリストにコントロールが存在する場合、この関数にはサーバーの処理にコントロールが重要であるかどうかを指定します。

- 0は、コントロールが処理にとって重要でないことを示します。

- 1は、コントロールが処理にとって重要であることを示します。

- コントロールが重要であるかどうかの指示を格納しない場合は、このパラメータにNULLを渡します。

15.3.53.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 指定されたコントロールがコントロールのリストに存在する場合は1

- コントロールのリストにコントロールが存在しない場合は0

15.3.53.4 メモリーに関する注意事項

val出力パラメータは、コントロール配列を参照するように設定されます。コントロール値のコピーは作成されません。

15.3.53.5 関連項目

slapi_entry_get_uniqueid()

slapi_register_supported_control()

15.3.54 slapi_delete_internal_pb()

パラメータ・ブロックに基づいてLDAP削除操作を実行し、ディレクトリ・エントリを削除します。

15.3.54.1 構文

#include "slapi-plugin.h"
int slapi_delete_internal_pb(Slapi_PBlock *pb);

15.3.54.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_delete_internal_set_pb()を使用して初期化されたパラメータ・ブロックです。

15.3.54.3 戻り値

渡されたパラメータがNULLポインタの場合、この関数は-1を戻します。それ以外の場合は0を戻します。

作成したコードでこの関数をコールすると、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTが適切なLDAP結果コードに設定されます。したがって、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTをチェックすると、エラーが発生したかどうかを確認できます。

15.3.54.4 説明

この関数は、パラメータ・ブロックに基づいて内部削除操作を実行します。パラメータ・ブロックは、slapi_delete_internal_set_pb()をコールして初期化されている必要があります。

15.3.54.5 メモリーに関する注意事項

slapi_delete_internal_set_pb()にどのようなパラメータを渡しても、この関数では変更または使用されません。

15.3.54.6 関連項目

slapi_delete_internal_set_pb()

15.3.55 slapi_delete_internal_set_pb()

内部削除操作用のパラメータ・ブロックを作成します。

15.3.55.1 構文

#include "slapi-plugin.h"
int slapi_delete_internal_set_pb(Slapi_PBlock *pb, const char *dn,
LDAPControl **controls, const char *uniqueid,
Slapi_ComponentId *plugin_identity, int operation_flags);

15.3.55.2 パラメータ

この関数は、次のパラメータを取ります。

pb

内部追加操作用のパラメータ・ブロックです。

dn

削除するエントリの識別名です。

controls

追加操作を要求するコントロールの配列です。

uniqueid

DNではなく、これを使用する場合のエントリの一意の識別子です。

plugin_identity

プラグインの初期化時にSLAPI_PLUGIN_IDENTITYから取得したプラグイン識別子です。

operation_flags

NULLまたはSLAPI_OP_FLAG_NEVER_CHAINです。

15.3.55.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合はLDAPエラー・コードを戻します。

15.3.55.4 説明

この関数は、エントリのコンポーネントを使用して、slapi_delete_internal_pb()で使用するパラメータ・ブロックを作成します。

15.3.55.5 メモリーに関する注意事項

この関数をコールする前に、slapi_pblock_new()を使用してパラメータ・ブロックを割り当てます。

Directory Serverは、この関数に渡されたパラメータを解放しません。

slapi_delete_internal_pb()のコール後はパラメータ・ブロックを解放してください。

15.3.55.6 関連項目

slapi_delete_internal_pb()

slapi_pblock_new()

15.3.56 slapi_destroy_condvar()

メモリーからSlapi_CondVar構造体を解放します。

15.3.56.1 構文

#include "slapi-plugin.h"
void slapi_destroy_condvar( Slapi_CondVar *cvar );

15.3.56.2 パラメータ

この関数は、次のパラメータを取ります。

cvar

メモリーから解放するSlapi_CondVar構造体へのポインタです。

15.3.56.3 説明

この関数は、メモリーからSlapi_CondVar構造体を解放します。この関数をコールする前に、この状態変数が使用されていないことを確認する必要があります。

15.3.57 slapi_destroy_mutex()

メモリーからSlapi_Mutex構造体を解放します。

15.3.57.1 構文

#include "slapi-plugin.h"
void slapi_destroy_mutex( Slapi_Mutex *mutex );

15.3.57.2 パラメータ

この関数は、次のパラメータを取ります。

mutex

メモリーから解放するSlapi_Mutex構造体へのポインタです。

15.3.57.3 説明

この関数は、メモリーからSlapi_Mutex構造体を解放します。コール側関数は、現在はロック専用関数にスレッドが存在しないことを確認する必要があります。ロックをしても削除に対する自己参照型保護は行われません。

15.3.58 slapi_dn_beparent()

バックエンドの親(サフィックスDN)の識別名(DN)のコピーを取得します。

エントリのDNがローカル・データベースのサフィックスであるかどうかをチェックしない場合は、かわりにslapi_dn_parent()関数をコールします。

15.3.58.1 構文

#include "slapi-plugin.h"
char *slapi_dn_beparent( Slapi_PBlock *pb, char *dn );

15.3.58.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

dn

親を検索するエントリのDNです。

15.3.58.3 戻り値

この関数は親エントリのDNを戻し、指定されたDNがNULLの場合、DNが空文字列の場合、DNに親がない場合(o=example.comなど)または指定されたDNがローカル・データベースのサフィックスである場合は、NULLを戻します。

15.3.58.4 関連項目

slapi_dn_parent()

15.3.59 slapi_dn_ignore_case()

識別名(DN)のすべての文字を小文字に変換します。

15.3.59.1 構文

#include "slapi-plugin.h"
char *slapi_dn_ignore_case( char *dn );

15.3.59.2 パラメータ

この関数は、次のパラメータを取ります。

dn

小文字に変換するDNです。

15.3.59.3 戻り値

この関数は、小文字のDNを戻します。dn引数として渡された変数も適宜変換されることに注意してください。

15.3.59.4 関連項目

slapi_dn_normalize()

15.3.60 slapi_dn_isbesuffix()

指定された識別名(DN)がローカル・データベースのサフィックスであるかどうかを判別します。この関数をコールする前にslapi_dn_normalize_case()をコールし、DNを正規化してすべての文字を小文字に変換する必要があります。

15.3.60.1 構文

#include "slapi-plugin.h"
int slapi_dn_isbesuffix( Slapi_PBlock *pb, char *dn );

15.3.60.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

dn

チェックするDNです。

15.3.60.3 戻り値

この関数は、指定されたDNがローカル・データベースのサフィックスの場合は1を戻し、DNがサフィックスでない場合は0を戻します。

15.3.61 slapi_dn_isbesuffix_norm()

指定された識別名(DN)がローカル・データベースのサフィックスであるかどうかを判別します。

15.3.61.1 構文

#include "slapi-plugin.h"
int slapi_dn_isbesuffix_norm( Slapi_PBlock *pb, const char *dn );

15.3.61.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

dn

チェックするDNです。

15.3.61.3 戻り値

この関数は、指定されたDNがローカル・データベースのサフィックスの場合は1を戻し、DNがサフィックスでない場合は0を戻します。

15.3.62 slapi_dn_isparent()

特定のDNが、指定された別のDNの親であるかどうかを判別します。この関数をコールする前にslapi_dn_normalize_case()をコールし、DNを正規化してすべての文字を小文字に変換する必要があります。

15.3.62.1 構文

#include "slapi-plugin.h"
int slapi_dn_isparent( const char *parentdn, char *childdn );

15.3.62.2 パラメータ

この関数は、次のパラメータを取ります。

parentdn

このDNがchilddnの親であるかどうかを判別します。

childdn

このDNがparentdnの子であるかどうかを判別します。

15.3.62.3 戻り値

この関数は、parentdnがchilddnの親である場合は0以外の値を戻し、parentdnがchilddnの親でない場合は0を戻します。

15.3.62.4 関連項目

slapi_dn_issuffix()

15.3.63 slapi_dn_isroot()

指定されたDNがこのローカル・データベースのルートDNであるかどうかを判別します。この関数をコールする前にslapi_dn_normalize_case()をコールし、DNを正規化してすべての文字を小文字に変換する必要があります。

15.3.63.1 構文

#include "slapi-plugin.h"
int slapi_dn_isroot( Slapi_PBlock *pb, char *dn );

15.3.63.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

dn

チェックするDNです。

15.3.63.3 戻り値

この関数は、指定されたDNがローカル・データベースのルートDNの場合は1を戻し、DNがルートDNでない場合は0を戻します。

15.3.64 slapi_dn_issuffix()

DNが、指定されたサフィックスと等しいかどうかを判別します。この関数をコールする前にslapi_dn_normalize_case()をコールし、DNを正規化してすべての文字を小文字に変換する必要があります。

DNがローカル・データベースのサフィックスと同じであるかどうかを判別する場合は、かわりにslapi_dn_isbesuffix_norm()関数をコールします。

15.3.64.1 構文

#include "slapi-plugin.h"
int slapi_dn_issuffix( const char *dn, const char *suffix );

15.3.64.2 パラメータ

この関数は、次のパラメータを取ります。

dn

チェックするDNです。

suffix

DNと比較するサフィックスです。

15.3.64.3 戻り値

この関数は、指定されたDNが指定されたサフィックスと同じ場合は1を戻し、DNがサフィックスと同じでない場合は0を戻します。

15.3.64.4 関連項目

slapi_dn_isparent()

15.3.65 slapi_dn_normalize()

識別名(DN)を正規のフォーマット(先頭または後続のスペースなし、コンポーネント間のスペースなしおよび等号の前後にスペースなし)に変換します。たとえば、次のDNがあるとします。

cn = Moxie Cross , ou = Engineering , dc = example , dc = com

この関数は次の文字列を戻します。

cn=Moxie Cross,ou=Engineering,dc=example,dc=com

15.3.65.1 構文

#include "slapi-plugin.h"
char *slapi_dn_normalize( char *dn );

15.3.65.2 パラメータ

この関数は、次のパラメータを取ります。

dn

正規化するDNです。

15.3.65.3 戻り値

この関数は、正規化されたDNを戻します。dn引数として渡された変数も適宜変換されることに注意してください。

15.3.65.4 関連項目

slapi_dn_normalize_to_end()

slapi_dn_normalize_case()

15.3.66 slapi_dn_normalize_case()

識別名(DN)を正規のフォーマットに変換し、すべての文字を小文字に変換します。この関数のコールは、slapi_dn_normalize()関数に続けてslapi_dn_ignore_case()関数をコールするのと同じ効果があります。

15.3.66.1 構文

#include "slapi-plugin.h"
char *slapi_dn_normalize_case( char *dn );

15.3.66.2 パラメータ

この関数は、次のパラメータを取ります。

dn

正規化して小文字に変換するDNです。

15.3.66.3 戻り値

この関数は、すべての文字が小文字の正規化されたDNを戻します。dn引数として渡された変数も適宜変換されることに注意してください。

15.3.66.4 関連項目

slapi_dn_normalize()

slapi_dn_ignore_case()

15.3.67 slapi_dn_normalize_to_end()

DN値の一部(具体的にはdnが参照する部分からendが参照する部分まで)を正規化します。

このルーチンは、関数からの戻り時に、dnが参照する正規化ビットをNULL文字で終端しません。

引数の最後にNULLがある場合、正規化されたDNのNULL文字終端化を除き、このルーチンはslapi_dn_normalize()と基本的に同じ処理を行います。

15.3.67.1 構文

#include "slapi-plugin.h"
char *slapi_dn_normalize_to_end( char *dn, char *end );

15.3.67.2 パラメータ

この関数は、次のパラメータを取ります。

dn

正規化対象のDN値

end

dn内のDN値から正規化される部分の最後までのポインタです。この引数がNULLの場合、dn内のDN値は全体的に正規化されます。

15.3.67.3 戻り値

この関数は、正規化されたdnの終端へのポインタを戻します。つまり、正規化される部分は* dnから* (returnValue - 1)までです。

15.3.67.4 関連項目

slapi_dn_normalize()

15.3.68 slapi_dn_parent()

エントリの親の識別名(DN)のコピーを取得します。この関数をコールする前にslapi_dn_normalize_case()をコールし、DNを正規化してすべての文字を小文字に変換する必要があります。

DNがローカル・データベースのサフィックスであるかどうかをチェックする場合は、かわりにslapi_dn_beparent()関数をコールします。

15.3.68.1 構文

#include "slapi-plugin.h"
char *slapi_dn_parent( char *dn );

15.3.68.2 パラメータ

この関数は、次のパラメータを取ります。

dn

親を検索するエントリのDNです。

15.3.68.3 戻り値

この関数は、親エントリのDNを戻します。指定されたDNがNULLの場合、DNが空文字列の場合またはDNに親がない場合(o=example.comなど)、この関数はNULLを戻します。

15.3.69 slapi_dn_plus_rdn()

RDNをDNに追加します。

15.3.69.1 構文

#include "slapi-plugin.h"
char *slapi_dn_plus_rdn( const char *dn, const char *rdn);

15.3.69.2 パラメータ

この関数は、次のパラメータを取ります。

dn

新しいRDNの追加先となるDN値です。

rdn

dn内のDN値に追加されるRDN値です。

15.3.69.3 戻り値

この関数は、rdn内のRDN値をdn内のDN値に追加して作成された新しいDNを戻します。

15.3.69.4 メモリーに関する注意事項

戻された文字列は、slapi_ch_free_string()を使用して解放する必要があります。

15.3.69.5 関連項目

slapi_sdn_add_rdn()

15.3.70 slapi_dup_control()

LDAPControlの割当て済コピーを作成します。

15.3.70.1 構文

#include "slapi-plugin.h"
LDAPControl * slapi_dup_control( LDAPControl const *ctrl );

15.3.70.2 パラメータ

この関数は、次のパラメータを取ります。

ctrl

内容を複製するLDAPControl構造体へのポインタです。

15.3.70.3 戻り値

この関数は、正常終了した場合は割り当てられたLDAPControl構造体へのポインタを戻し、エラーが発生した場合はNULLを戻します。

15.3.70.4 説明

この関数は、LDAPControl構造体の内容を複製します。LDAPControl内のすべてのフィールドが、割り当てられた新しい構造体にコピーされ、新しい構造体へのポインタが戻されます。

15.3.70.5 メモリーに関する注意事項

戻された構造体は、LDAP API関数のldap_control_free(3LDAP)をコールして解放する必要があります。

15.3.70.6 関連項目

ldap_control_free(3LDAP)

15.3.71 slapi_entry2mods()

Slapi_EntryからLDAPModの配列を作成します。

15.3.71.1 構文

#include "slapi-plugin.h"
int slapi_entry2mods(const Slapi_Entry *e,
char **dn, LDAPMod ***attrs);

15.3.71.2 パラメータ

この関数は、次のパラメータを取ります。

e

Slapi_Entryへのポインタです。

dn

戻り時にエントリDNに設定されるchar*のアドレスです。

attrs

戻り時にエントリ属性のコピーに設定されるLDAPModの配列のアドレスです。

15.3.71.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 正常終了した場合は0

- 正常終了しなかった場合は0以外

15.3.71.4 説明

この関数は、Slapi_EntryからタイプLDAP_MOD_ADDのLDAPModの配列を作成します。この構造体は、プラグイン内部から、クライアントとしてLDAPの追加操作や変更操作を実行する場合などに有効です。

15.3.71.5 関連項目

slapi_mods2entry()

15.3.72 slapi_entry2str()

LDAPエントリのLDIF文字列表現を生成します。

15.3.72.1 構文

#include "slapi-plugin.h"
char *slapi_entry2str( Slapi_Entry const *e, int *len );

15.3.72.2 パラメータ

この関数は、次のパラメータを取ります。

e

LDIF文字列に変換するエントリです。

len

戻されるLDIF文字列の長さです。

15.3.72.3 戻り値

指定したエントリのLDIF文字列表現を戻します。エラーが発生した場合はNULLを戻します。

15.3.72.4 説明

この関数は、次のフォーマットに準拠したLDIF文字列値を生成します。

dn: dn\n
[attr: value\n]*

次に例を示します。

dn: uid=jdoe, ou=People, o=example.com
cn: Jane Doe
sn: Doe
...

LDIFフォーマットの文字列表現をSlapi_Entryデータ型のエントリに変換するには、slapi_str2entry()関数をコールします。

15.3.72.5 メモリーに関する注意事項

文字列を使用する必要がなくなった場合は、slapi_ch_free_string()関数をコールして、メモリーから文字列を解放する必要があります。

15.3.72.6 関連項目

slapi_entry2str_with_options()

slapi_str2entry()

15.3.73 slapi_entry2str_with_options()

エントリのLDIF文字列表現を生成します。この関数の動作はslapi_str2entry()とほぼ同じです。ただし、この関数では出力オプションを指定できます。

15.3.73.1 構文

#include "slapi-plugin.h"
char *slapi_entry2str_with_options( Slapi_Entry const *e,
int *len, int options );

15.3.73.2 パラメータ

この関数は、次のパラメータを取ります。

e

LDIF文字列に変換するエントリです。

len

この関数から戻されるLDIF文字列の長さです。

options

文字列の変換方法を指定するオプション・セットです。

15.3.73.3 optionsパラメータ

この関数をコールする場合は、次の任意のオプションのORを取ることができます。

フラグ値

説明

SLAPI_DUMP_STATEINFO

これは、レプリケーションのみで内部的に使用されます。これを使用すると、マルチマスター・レプリケーションで使用する内部データにアクセスできます。

SLAPI_DUMP_UNIQUEID

このオプションは、レプリカの初期化に使用されるLDIFファイルの作成時に使用します。各エントリにnsuniqueID操作属性が含まれます。

SLAPI_DUMP_NOOPATTRS

デフォルトでは、特定の操作属性(creatorName、modifiersName、createTimestamp、modifyTimestampなど)が出力に含まれる場合があります。このオプションを指定すると、操作属性が含まれなくなります。

SLAPI_DUMP_NOWRAP

デフォルトでは、LDIF仕様の定義に従って行が折り返されます。このオプションを指定すると、行の折返しが無効になります。

15.3.73.4 戻り値

この関数は、指定したエントリのLDIF文字列表現を戻し、エラーが発生した場合はNULLを戻します。

15.3.73.5 説明

この関数は、次の構文に準拠したLDIF文字列値を生成します。

dn: dn\n
[attr: value\n]*

次に例を示します。

dn: uid=jdoe, ou=People, o=example.com
cn: Jane Doe
sn: Doe
...

LDIF文字列フォーマットで表現されたエントリをSlapi_Entryデータ型を使用するLDAPエントリに変換するには、slapi_str2entry()関数をコールします。

15.3.73.6 メモリーに関する注意事項

文字列を使用する必要がなくなった場合は、slapi_ch_free_string()関数をコールして、メモリーから文字列を解放する必要があります。

15.3.73.7 関連項目

slapi_entry2str()

slapi_str2entry()

15.3.74 slapi_entry_add_rdn_values()

エントリの相対識別名(RDN)内のコンポーネントを属性値としてエントリに追加します。(たとえば、エントリのRDNがuid=bjensenの場合、この関数は属性値としてuid=bjensenをエントリに追加します。)

15.3.74.1 構文

#include "slapi-plugin.h"
int slapi_entry_add_rdn_values( Slapi_Entry *e );

15.3.74.2 パラメータ

この関数は、次のパラメータを取ります。

e

RDN属性を追加するエントリです。

15.3.74.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- エントリに値が正常に追加された場合はLDAP_SUCCESS。また、この関数は、エントリがNULLの場合、エントリのDNがNULLの場合またはエントリのRDNがNULLの場合にもLDAP_SUCCESSを戻します。

- エントリのDNを解析できない場合はLDAP_INVALID_DN_SYNTAX。

15.3.74.4 説明

RDNに対応する属性タイプに、等価性の点でRDN値と一致する値がすでに存在する場合、値は追加されません。ただし、この関数はRDNに含まれない他の属性タイプを検査しませんが、その値はRDN値と等価的に一致する可能性があります。

15.3.74.5 メモリーに関する注意事項

エントリがユーザーによって割り当てられた場合は、slapi_entry_free()を使用して、メモリーからエントリを解放してください。

15.3.74.6 関連項目

slapi_entry_free()

15.3.75 slapi_entry_add_string()

エントリの属性に文字列値を追加します。

15.3.75.1 構文

#include "slapi-plugin.h"
int slapi_entry_add_string (Slapi_Entry *e, const char *type,
const char *value);

15.3.75.2 パラメータ

この関数は、次のパラメータを取ります。

e

文字列値を追加するエントリです。

type

文字列値を追加する属性です。

value

追加する文字列値です。

15.3.75.3 戻り値

この関数は、正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.75.4 説明

この関数は、エントリの既存の属性値に文字列値を追加します。指定された属性がエントリに存在しない場合は、指定した文字列値を使用して属性が作成されます。

この関数は、属性に値が存在するかどうかをチェックしません。この関数を使用する前にslapi_entry_attr_delete()を使用してください。

この関数は、追加される値が既存の値と重複するかどうかもチェックしません。

15.3.75.5 メモリーに関する注意事項

このルーチンは、パラメータvalueのコピーを作成します。valueがNULLの場合、エントリは変更されません。

15.3.76 slapi_entry_add_value()

指定されたSlapi_Valueデータ値をエントリの属性に追加します。

15.3.76.1 構文

#include "slapi-plugin.h"
int slapi_entry_add_value (Slapi_Entry *e, const char *type,
const Slapi_Value *value);

15.3.76.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を追加するエントリです。

type

値を追加する属性です。

value

エントリに追加するSlapi_Valueデータ値です。

15.3.76.3 戻り値

正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.76.4 説明

この関数は、エントリの既存の属性値にSlapi_Valueデータ値を追加します。指定された属性がエントリに存在しない場合は、指定したSlapi_Valueを使用して属性が作成されます。

この関数は、追加される値が既存の値と重複するかどうかをチェックしません。

15.3.76.5 メモリーに関する注意事項

このルーチンは、パラメータvalueのコピーを作成します。valueがNULLの場合、エントリは変更されません。

15.3.77 slapi_entry_add_values_sv()

エントリ内の指定された属性にSlapi_Valueデータ値の配列を追加します。

15.3.77.1 構文

#include "slapi-plugin.h"
int slapi_entry_add_values_sv( Slapi_Entry *e, const char *type,
Slapi_Value **vals );

15.3.77.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を追加するエントリです。

type

値を追加する属性タイプです。

vals

追加するSlapi_Valueデータ値の配列です。

15.3.77.3 戻り値

次のいずれかの値を戻します。

- 属性にSlapi_Value配列が正常に追加された場合はLDAP_SUCCESS

- 追加しようとしている値が属性内の既存の値と重複している場合はLDAP_TYPE_OR_VALUE_EXISTS

- 属性内に既存の重複値が存在する場合はLDAP_OPERATIONS_ERROR

15.3.77.4 説明

この関数は、Slapi_Valueデータ値の配列を属性に追加します。属性が存在しない場合は、属性が作成されてSlapi_Value配列に格納されている値が設定されます。

非推奨のslapi_entry_add_values()関数は、この関数で置き換えられます。この関数は、berval属性値のかわりにSlapi_Value属性値を使用します。

15.3.77.5 メモリーに関する注意事項

このルーチンは、パラメータvalsのコピーを作成します。valsにはNULLを指定できます。

15.3.78 slapi_entry_add_valueset()

エントリ内の指定された属性にSlapi_ValueSetデータ値を追加します。

15.3.78.1 構文

#include "slapi-plugin.h"
int slapi_entry_add_valueset(Slapi_Entry *e, const char *type,
Slapi_ValueSet *vs);

15.3.78.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を追加するエントリです。

type

値を追加する属性タイプです。

vs

エントリに追加するSlapi_ValueSetデータ値です。

15.3.78.3 戻り値

正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.78.4 説明

この関数は、エントリの属性に一連の値を追加します。追加される値の形式はSlapi_ValueSetデータ型です。指定された属性がエントリに格納されていない場合は、指定したSlapi_ValueSet値を使用して属性が作成されます。

15.3.78.5 メモリーに関する注意事項

このルーチンは、パラメータvsのコピーを作成します。vsにはNULLを指定できます。

15.3.79 slapi_entry_alloc()

データ型Slapi_Entryの新しいエントリにメモリーを割り当てます。

15.3.79.1 構文

#include "slapi-plugin.h"
Slapi_Entry *slapi_entry_alloc();

15.3.79.2 戻り値

データ型Slapi_Entryの新しく割り当てられたエントリへのポインタを戻します。領域を割り当てられない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.79.3 説明

この関数は、空のSlapi_Entry構造体を戻します。

15.3.79.4 メモリーに関する注意事項

エントリを使用しなくなった場合は、slapi_entry_free()関数をコールして、メモリーからエントリを解放する必要があります。

15.3.79.5 関連項目

slapi_entry_add_string()

slapi_entry_add_value()

slapi_entry_add_values_sv()

slapi_entry_add_valueset()

slapi_entry_dup()

slapi_entry_free()

slapi_entry_set_dn()

slapi_entry_set_sdn()

slapi_str2entry()

15.3.80 slapi_entry_attr_delete()

エントリから属性(および関連するすべての値)を削除します。

15.3.80.1 構文

#include "slapi-plugin.h"
int slapi_entry_attr_delete( Slapi_Entry *e, const char *type );

15.3.80.2 パラメータ

この関数は、次のパラメータを取ります。

e

属性を削除するエントリです。

type

削除する属性タイプです。

15.3.80.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 正常終了した場合は0

- 指定された属性がエントリに含まれていない場合は1

- エラーが発生した場合は-1

15.3.81 slapi_entry_attr_find()

指定された属性がエントリに含まれているかどうかを判別します。エントリに属性が含まれている場合、この関数はその属性へのポインタを戻します。

15.3.81.1 構文

#include "slapi-plugin.h"
int slapi_entry_attr_find( const Slapi_Entry *e, const char *type,
Slapi_Attr **attr );

15.3.81.2 パラメータ

この関数は、次のパラメータを取ります。

e

チェックするエントリです。

type

チェックする属性の名前です。

attr

属性へのポインタです(その属性がエントリに含まれている場合)。

15.3.81.3 戻り値

この関数は、指定された属性がエントリに含まれている場合は0を戻し、それ以外の場合は-1を戻します。

15.3.81.4 メモリーに関する注意事項

戻されたattrは解放しないでください。これは、内部エントリ・データ構造へのポインタです。通常は、slapi_attr_dup()を使用して、戻されたattrのコピーを作成し、attrへのポインタの使用中にエントリが解放された場合のぶら下がりポインタを回避してください。

15.3.81.5 関連項目

slapi_attr_dup()

15.3.82 slapi_entry_attr_get_charptr()

エントリにある属性の最初の値を文字列として取得します。

15.3.82.1 構文

#include "slapi-plugin.h"
char *slapi_entry_attr_get_charptr(const Slapi_Entry* e,
const char *type);

15.3.82.2 パラメータ

この関数は、次のパラメータを取ります。

e

文字列値を取得するエントリです。

type

値を取得する属性タイプです。

15.3.82.3 戻り値

この関数は、属性にある最初の値のコピーを戻します。エントリに属性が含まれていない場合はNULLを戻します。

15.3.82.4 メモリーに関する注意事項

この値を使用しなくなった場合は、slapi_ch_free()関数をコールして、メモリーから値を解放する必要があります。

15.3.83 slapi_entry_attr_get_int()

エントリにある属性の最初の値を整数として取得します。

15.3.83.1 構文

#include "slapi-plugin.h"
int slapi_entry_attr_get_int(const Slapi_Entry* e,const char *type);

15.3.83.2 パラメータ

この関数は、次のパラメータを取ります。

e

整数値を取得するエントリです。

type

値を取得する属性タイプです。

15.3.83.3 戻り値

属性の最初の値を整数に変換して戻すか、エントリに属性が含まれていない場合は0を戻します。

15.3.84 slapi_entry_attr_get_long()

エントリにある属性の最初の値をLong整数データ型として取得します。

15.3.84.1 構文

#include "slapi-plugin.h"
long slapi_entry_attr_get_long( const Slapi_Entry* e,
const char *type);

15.3.84.2 パラメータ

この関数は、次のパラメータを取ります。

e

Long整数値を取得するエントリです。

type

値を取得する属性タイプです。

15.3.84.3 戻り値

この関数は、属性の最初の値をlong型に変換して戻します。指定された属性がエントリに含まれていない場合は0を戻します。

15.3.85 slapi_entry_attr_get_uint()

エントリにある属性の最初の値を符号なし整数データ型として取得します。

15.3.85.1 構文

#include "slapi-plugin.h"
unsigned int slapi_entry_attr_get_uint( const Slapi_Entry* e,
const char *type);

15.3.85.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を取得するエントリです。

type

値を取得する属性タイプです。

15.3.85.3 戻り値

この関数は、属性の最初の値をunsigned integerに変換して戻します。指定された属性がエントリに含まれていない場合は0を戻します。

15.3.86 slapi_entry_attr_get_ulong()

エントリにある属性の最初の値を符号なしLong整数データ型として取得します。

15.3.86.1 構文

#include "slapi-plugin.h"
unsigned long slapi_entry_attr_get_ulong( const Slapi_Entry* e,
const char *type);

15.3.86.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を取得するエントリです。

type

値を取得する属性タイプです。

15.3.86.3 戻り値

この関数は、属性の最初の値をunsigned longに変換して戻します。指定された属性がエントリに含まれていない場合は0を戻します。

15.3.87 slapi_entry_attr_hasvalue()

この関数は非推奨です。指定された値を文字列として既存の値と比較し、指定された値がエントリの属性に含まれているかどうかを判別します。等価一致ルールを使用した比較は行いません。

15.3.87.1 構文

#include "slapi-plugin.h"
int slapi_entry_attr_hasvalue(Slapi_Entry *e, const char *type,
const char *value);

15.3.87.2 パラメータ

この関数は、次のパラメータを取ります。

e

チェックするエントリです。

type

指定された値をテストする属性タイプです。

value

属性内で検索する値です。

15.3.87.3 戻り値

次のいずれかの値を戻します。

- 指定された値が属性に含まれている場合は1

- 指定された値が属性に含まれていない場合は0

15.3.87.4 メモリーに関する注意事項

valueにはNULLを指定しないでください。

15.3.88 slapi_entry_attr_merge_sv()

エントリ内の既存の属性値にSlapi_Valueデータ値の配列を追加します。属性が存在しない場合は、指定したSlapi_Valueを使用して属性が作成されます。

15.3.88.1 構文

#include "slapi-plugin.h"
int slapi_entry_attr_merge_sv( Slapi_Entry *e, const char *type,
Slapi_Value **vals );

15.3.88.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を追加するエントリです。

type

値を追加する属性です。

vals

追加するSlapi_Valueデータ値の配列です。

15.3.88.3 戻り値

正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.88.4 説明

非推奨のslapi_entry_attr_merge()関数は、この関数で置き換えられます。この関数は、berval属性値のかわりにSlapi_Value属性値を使用します。

15.3.88.5 メモリーに関する注意事項

この関数は、パラメータvalsのコピーを作成します。valsにはNULLを指定できます。

15.3.89 slapi_entry_attr_replace_sv()

指定したSlapi_Valueデータ値で属性の値を置換します。

15.3.89.1 構文

#include "slapi-plugin.h"
int slapi_entry_attr_replace_sv( Slapi_Entry *e, const char *type,
Slapi_Value **vals );

15.3.89.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を置換するエントリです。

type

置換された値を格納する属性タイプです。

vals

属性の既存の値を置換する必要のあるSlapi_Value値が格納されている配列です。

15.3.89.3 戻り値

この関数は、正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.89.4 説明

この関数は、指定されたエントリの既存の属性値を単一のSlapi_Valueデータ値で置換します。まずエントリから既存の属性が削除され、次に、指定された新しい値で置換されます。

非推奨のslapi_entry_attr_replace()関数は、この関数で置き換えられます。この関数は、berval属性値のかわりにSlapi_Value属性値を使用します。

15.3.89.5 メモリーに関する注意事項

この関数は、パラメータvalsのコピーを作成します。valsにはNULLを指定できます。

15.3.90 slapi_entry_attr_set_charptr()

エントリの属性の1つ以上の値を、指定された文字列値で置換します。

15.3.90.1 構文

#include "slapi-plugin.h"
void slapi_entry_attr_set_charptr(Slapi_Entry* e, const char *type,
const char *value);

15.3.90.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を設定するエントリです。

type

値を設定する属性タイプです。

value

属性に割り当てる文字列値です。

15.3.90.3 メモリーに関する注意事項

この関数は、パラメータvaluesのコピーを作成します。valuesにはNULLを指定できます。その場合、この関数はほぼslapi_entry_attr_delete()と同じになります。

15.3.90.4 関連項目

slapi_entry_attr_delete()

15.3.91 slapi_entry_attr_set_int()

エントリの属性の1つ以上の値を、指定された整数データ値で置換します。

15.3.91.1 構文

#include "slapi-plugin.h"
void slapi_entry_attr_set_int(Slapi_Entry* e, const char *type,
int l);

15.3.91.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を設定するエントリです。

type

値を設定する属性タイプです。

l

属性に割り当てる整数値です。

15.3.91.3 説明

この関数は、属性の1つ以上の値を、指定したinteger値で置換します。属性が存在しない場合は、指定した整数値を使用して属性が作成されます。

15.3.92 slapi_entry_attr_set_long()

エントリの属性の1つ以上の値を、指定されたLong整数データ型値で置換します。

15.3.92.1 構文

#include "slapi-plugin.h"
void slapi_entry_attr_set_long(Slapi_Entry* e, const char *type,
unsigned long l);

15.3.92.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を設定するエントリです。

type

値を設定する属性タイプです。

l

属性に割り当てるLong整数値です。

15.3.93 slapi_entry_attr_set_uint()

エントリの属性の1つ以上の値を、指定された符号なし整数データ型値で置換します。

15.3.93.1 構文

#include "slapi-plugin.h"
void slapi_entry_attr_set_uint(Slapi_Entry* e, const char *type,
unsigned int l);

15.3.93.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を設定するエントリです。

type

値を設定する属性タイプです。

l

属性に割り当てる符号なし整数値です。

15.3.93.3 説明

この関数は、属性の1つ以上の値を、指定したunsigned integer値で置換します。属性が存在しない場合は、指定した符号なし整数値を使用して属性が作成されます。

15.3.94 slapi_entry_attr_set_ulong()

エントリの属性の1つ以上の値を、指定された符号なしLong整数データ型値で置換します。

15.3.94.1 構文

#include "slapi-plugin.h"
void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type,
unsigned long l);

15.3.94.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を設定するエントリです。

type

値を設定する属性タイプです。

l

属性に割り当てる符号なしLong整数値です。

15.3.94.3 説明

この関数は、属性の1つ以上の値を、指定したunsigned long値で置換します。属性が存在しない場合は、指定した符号なしLong整数値を使用して属性が作成されます。

15.3.95 slapi_entry_delete_string()

エントリの属性から文字列値を削除します。

15.3.95.1 構文

#include "slapi-plugin.h"
int slapi_entry_delete_string(Slapi_Entry *e, const char *type,
const char *value);

15.3.95.2 パラメータ

この関数は、次のパラメータを取ります。

e

文字列を削除するエントリです。

type

文字列を削除する属性タイプです。

value

削除する文字列値です。

15.3.95.3 戻り値

正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.96 slapi_entry_delete_values_sv()

エントリの属性からSlapi_Valueデータ値の配列を削除します。

15.3.96.1 構文

#include "slapi-plugin.h"
int slapi_entry_delete_values_sv( Slapi_Entry *e, const char *type,
Slapi_Value **vals );

15.3.96.2 パラメータ

この関数は、次のパラメータを取ります。

e

値を削除するエントリです。

type

値を削除する属性です。

vals

削除するSlapi_Valueデータ値の配列です。

15.3.96.3 戻り値

指定された属性およびSlapi_Valueデータ値の配列がエントリから削除された場合は、LDAP_SUCCESSを戻します。

指定された属性にNULL値が含まれている場合は属性リストからその属性が削除され、LDAP_NO_SUCH_ATTRIBUTEを戻します。また、指定されたエントリの属性リストに属性が見つからない場合は、LDAP_NO_SUCH_ATTRIBUTEを戻します。

このコール処理の間に処理エラーが発生した場合は(重複値の検出など)、LDAP_OPERATIONS_ERRORを戻します。この場合は、サポート・サービスに問題を報告してください。

15.3.96.4 説明

この関数は、属性/値のセットをエントリから削除します。属性およびそのSlapi_Valueデータ値の両方がエントリから削除されることに注意してください。値がNULLのSlapi_Valueを指定した場合は、指定した属性がエントリから削除されます。いずれの場合もLDAP_SUCCESSが戻されます。

非推奨のslapi_entry_delete_values()関数は、この関数で置き換えられます。この関数は、berval属性値のかわりにSlapi_Value属性値を使用します。

15.3.96.5 メモリーに関する注意事項

valsパラメータにはNULLを指定できます。その場合、この関数は何も実行しません。

15.3.97 slapi_entry_dup()

エントリおよびそのDNと属性のコピーを作成します。

15.3.97.1 構文

#include "slapi-plugin.h"
Slapi_Entry *slapi_entry_dup( const Slapi_Entry *e );

15.3.97.2 パラメータ

この関数は、次のパラメータを取ります。

e

コピーするエントリです。

15.3.97.3 戻り値

この関数は、エントリの新しいコピーを戻します。構造体を複製できない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

15.3.97.4 説明

この関数は、既存のSlapi_Entry構造体のコピーを戻します。他のフロントエンド関数をコールすると、このエントリのDNおよび属性を変更できます。

15.3.97.5 メモリーに関する注意事項

エントリを使用しなくなった場合は、slapi_entry_free()関数をコールして、メモリーからエントリを解放する必要があります。

15.3.97.6 関連項目

slapi_entry_alloc()

slapi_entry_free()

15.3.98 slapi_entry_first_attr()

エントリの最初の属性を検索します。エントリの属性を繰り返して処理するには、この関数とslapi_entry_next_attr()を使用します。

15.3.98.1 構文

#include "slapi-plugin.h"
int slapi_entry_first_attr( Slapi_Entry *e, Slapi_Attr **attr );

15.3.98.2 パラメータ

この関数は、次のパラメータを取ります。

e

属性を取得するエントリです。

attr

エントリの最初の属性へのポインタです。

15.3.98.3 戻り値

正常終了した場合は0を戻し、エラーが発生した場合はそれ以外の値を戻します。

15.3.98.4 メモリーに関する注意事項

戻されたattrは解放しないでください。これは、内部エントリ・データ構造へのポインタです。コピーが必要な場合は、slapi_attr_dup()を使用してください。

15.3.98.5 関連項目

slapi_attr_dup()

15.3.99 slapi_entry_free()

エントリおよびそのDNと属性をメモリーから解放します。

15.3.99.1 構文

#include "slapi-plugin.h"
void slapi_entry_free( Slapi_Entry *e );

15.3.99.2 パラメータ

この関数は、次のパラメータを取ります。

e

解放するエントリです。NULLの場合は処理が行われません。

15.3.99.3 説明

slapi_entry_alloc()関数またはslapi_entry_dup()関数を使用して割り当てられたエントリを解放するには、この関数をコールします。

15.3.99.4 メモリーに関する注意事項

エントリを解放するには、slapi_ch_free()またはfree()ではなく、常にこの関数を使用します。

15.3.99.5 関連項目

slapi_entry_alloc()

slapi_entry_dup()

15.3.100 slapi_entry_get_dn()

指定されたエントリの識別名(DN)を取得します。

15.3.100.1 構文

#include "slapi-plugin.h"
char *slapi_entry_get_dn( Slapi_Entry *e );

15.3.100.2 パラメータ

この関数は、次のパラメータを取ります。

e

DNを取得するエントリです。

15.3.100.3 戻り値

この関数は、エントリのDNを戻します。これは、DNのコピーではなく、エントリの現在のDNへのポインタを戻すことに注意してください。slapi_entry_set_dn()をコールして置換する場合を除き、DNを解放する必要はありません。

15.3.100.4 メモリーに関する注意事項

slapi_entry_set_dn()を使用してDNを置換する場合は、slapi_ch_free()を使用してください。

15.3.100.5 関連項目

slapi_ch_free()

slapi_entry_set_dn()

15.3.101 slapi_entry_get_dn_const()

指定したエントリのDN値をconstとして戻します。

15.3.101.1 構文

#include "slapi-plugin.h"
const char *slapi_entry_get_dn_const( const Slapi_Entry *e );

15.3.101.2 パラメータ

この関数は、次のパラメータを取ります。

e

定数としてDNを取得するエントリです。

15.3.101.3 戻り値

この関数は、指定したエントリのDNを戻します。DNはconstとして戻されます。このDN値は変更できません。Slapi_DNオブジェクトのDNがNULLである場合は、Slapi_DNのNDN値が戻されます。

15.3.101.4 メモリーに関する注意事項

この値は解放しないでください。

15.3.102 slapi_entry_get_ndn()

指定したエントリから正規化されたDNを戻します。

15.3.102.1 構文

#include "slapi-plugin.h"
char *slapi_entry_get_ndn( Slapi_Entry *e );

15.3.102.2 パラメータ

この関数は、次のパラメータを取ります。

e

正規化されたDNを取得するエントリです。

15.3.102.3 戻り値

この関数は、指定したエントリから正規化されたDNを戻します。指定したエントリに正規化されたDNが含まれていない場合は、この関数の処理によってDNが作成されます。

15.3.102.4 メモリーに関する注意事項

この値は解放しないでください。

15.3.103 slapi_entry_get_sdn()

指定したエントリからSlapi_DNオブジェクトを戻します。

15.3.103.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_entry_get_sdn( Slapi_Entry *e );

15.3.103.2 パラメータ

この関数は、次のパラメータを取ります。

e

Slapi_DNオブジェクトを取得するエントリです。

15.3.103.3 戻り値

この関数は、指定したエントリからSlapi_DNオブジェクトを戻します。

15.3.103.4 メモリーに関する注意事項

この値は解放しないでください。コピーが必要な場合は、slapi_sdn_dup()を使用してください。

15.3.103.5 関連項目

slapi_sdn_dup()

15.3.104 slapi_entry_get_sdn_const()

指定したエントリからSlapi_DNオブジェクトの値をconstとして戻します。

15.3.104.1 構文

#include "slapi-plugin.h"
const Slapi_DN *slapi_entry_get_sdn_const ( const Slapi_Entry *e );

15.3.104.2 パラメータ

この関数は、次のパラメータを取ります。

e

Slapi_DNオブジェクトを取得するエントリです。

15.3.104.3 戻り値

指定したエントリからSlapi_DNオブジェクトの値をconstとして戻します。

15.3.104.4 メモリーに関する注意事項

この値は解放しないでください。コピーが必要な場合は、slapi_sdn_dup()を使用してください。

15.3.104.5 関連項目

slapi_sdn_dup()

15.3.105 slapi_entry_get_uniqueid()

エントリの一意のID値を取得します。

15.3.105.1 構文

#include "slapi-plugin.h"
const char *slapi_entry_get_uniqueid( const Slapi_Entry *e );

15.3.105.2 パラメータ

この関数は、次のパラメータを取ります。

e

一意のIDを取得するエントリです。

15.3.105.3 戻り値

この関数は、指定されたエントリの一意のID値を戻します。

15.3.105.4 メモリーに関する注意事項

この値は解放しないでください。コピーが必要な場合は、slapi_ch_strdup()を使用してください。

15.3.105.5 関連項目

slapi_ch_strdup()

15.3.106 slapi_entry_has_children()

この関数は、指定されたエントリが存在するバックエンドに、そのエントリの子エントリがあるかどうかを判別します。

15.3.106.1 構文

#include "slapi-plugin.h"
int slapi_entry_has_children( const Slapi_Entry *e );

15.3.106.2 パラメータ

この関数は、次のパラメータを取ります。

e

子エントリをテストするエントリです。

15.3.106.3 戻り値

この関数は、指定したエントリが存在するバックエンドにそのエントリの子エントリがある場合は1を戻し、それ以外の場合は0を戻します。サブ・サフィックスが別のバックエンドにある場合、この関数はそのサブ・サフィックスに含まれる子を検索しないことに注意してください。

15.3.107 slapi_entry_init()

指定したDNおよび属性値のペアでエントリの値を初期化します。

15.3.107.1 構文

#include "slapi-plugin.h"
void slapi_entry_init(Slapi_Entry *e, char *dn, Slapi_Attr *a);

15.3.107.2 パラメータ

この関数は、次のパラメータを取ります。

e

初期化するエントリです。

dn

初期化しているエントリのDNです。

a

Slapi_Attrデータ値として指定した、属性値ペアの初期化リストです。

15.3.107.3 説明

この関数は、エントリの属性および対応する属性値を初期化します。また、処理中にはエントリの一意のIDがNULLに設定され、フラグ値が0に設定されます。

Slapi_Entryポインタを初期化するには、この関数を使用します。

15.3.107.4 メモリーに関する注意事項

この関数は、常にslapi_entry_alloc()の後で使用する必要があります。その逆では使用しないでください。次に例を示します。

Slapi_Entry *e = slapi_entry_alloc();
slapi_entry_init(e, NULL, NULL);

エントリのDNを設定するには、次の関数を実行します。

slapi_sdn_set_dn_passin(slapi_entry_get_sdn(e), dn);

この場合、dn引数はコピーされませんが、関数では使用されます。引数をコピーする方法は、次の例を参照してください。

char *dn = slapi_ch_strdup(some_dn);
Slapi_Entry *e = slapi_entry_alloc();
slapi_entry_init(e, dn, NULL);

このコンテキストではdnが解放されませんが、slapi_entry_free()がコールされると最終的に解放されます。

15.3.107.5 関連項目

slapi_ch_strdup()

slapi_entry_alloc()

slapi_entry_free()

15.3.108 slapi_entry_isroot()

指定されたDNを持つエントリが、ルートDN (ディレクトリ・スーパーユーザー)であるかどうかを判別します。

15.3.108.1 構文

#include "slapi-plugin.h"
into slapi_entry_isroot( const char *dn );

15.3.108.2 パラメータ

この関数は、次のパラメータを取ります。

dn

チェックするエントリのDNです。

15.3.108.3 戻り値

このファンクションは、次の値のいずれかを戻します。

0

指定されたDNを持つエントリは、ルート・ユーザー(ディレクトリ・スーパーユーザー)のエントリです。

1

指定されたDNを持つエントリは、ルート・ユーザーのエントリではありません。

15.3.109 slapi_entry_merge_values_sv()

エントリ内の指定された属性にSlapi_Valueデータ値の配列をマージ(追加)します。指定された属性がエントリに含まれていない場合は、指定した値を使用して属性が作成されます。

15.3.109.1 構文

#include "slapi-plugin.h"
int slapi_entry_merge_values_sv( Slapi_Entry *e, const char *type,
Slapi_Value **vals );

15.3.109.2 パラメータ

この関数は、次のパラメータを取ります。

e

値をマージするエントリです。

type

マージする値を含む属性タイプです。

vals

エントリにマージする値です。値の型はSlapi_Valueです。

15.3.109.3 戻り値

この関数は、LDAP_SUCCESSまたはLDAP_NO_SUCH_ATTRIBUTEを戻します。

15.3.109.4 説明

この関数は、属性に格納されている既存の値にSlapi_Valueデータ値を追加します。属性タイプが存在しない場合は作成されます。

指定された属性がエントリに存在する場合、この関数は指定された値をマージしてLDAP_SUCCESSを戻します。エントリに属性が見つからない場合は、指定されたSlapi_Valueを使用して属性が作成され、LDAP_NO_SUCH_ATTRIBUTEが戻されます。

この関数でエラーが発生した場合、typeの値は未確定の状態でeへのポインタ内に残されたままであることに注意してください。現在の値セットは切り捨てられる場合があります。

15.3.109.5 メモリーに関する注意事項

この関数は、valsのコピーを作成します。valsにはNULLを指定できます。

15.3.110 slapi_entry_next_attr()

エントリでprevattrの次にくる属性を検索します。エントリの属性を繰り返して処理するには、この関数とslapi_entry_first_attr()を使用します。

15.3.110.1 構文

#include "slapi-plugin.h"
int slapi_entry_next_attr( Slapi_Entry *e, Slapi_Attr *prevattr,
Slapi_Attr **attr );

15.3.110.2 パラメータ

この関数は、次のパラメータを取ります。

e

属性を取得するエントリです。

prevattr

エントリの前の属性です。

attr

エントリでprevattrの次にくる属性へのポインタです。

15.3.110.3 戻り値

この関数は、正常終了した場合は0を戻し、prevattrがエントリの最後の属性であった場合は-1を戻します。

15.3.110.4 メモリーに関する注意事項

戻されたattrは解放しないでください。コピーが必要な場合にコピーを作成するには、slapi_attr_dup()を使用します。

15.3.110.5 関連項目

slapi_attr_dup()

15.3.111 slapi_entry_rdn_values_present()

エントリの相対識別名(RDN)の値が、属性値としても存在するかどうかを判別します。(たとえば、エントリのRDNがcn=Barbara Jensenの場合、この関数は値Barbara Jensenを持つcn属性がエントリにあるかどうかを判別します。)

15.3.111.1 構文

#include "slapi-plugin.h"
int slapi_entry_rdn_values_present( Slapi_Entry *e );

15.3.111.2 パラメータ

この関数は、次のパラメータを取ります。

e

属性を取得するエントリです。

15.3.111.3 戻り値

この関数は、RDN内の値がエントリの属性に存在する場合は1を戻し、値が存在しない場合は0を戻します。

15.3.112 slapi_entry_schema_check()

指定されたエントリがオブジェクト・クラスのスキーマに準拠しているかどうかを判別します。

15.3.112.1 構文

#include "slapi-plugin.h"
int slapi_entry_schema_check( Slapi_PBlock *pb, Slapi_Entry *e );

15.3.112.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

e

スキーマをチェックするエントリです。

15.3.112.3 戻り値

次のいずれかの値を戻します。

- エントリがスキーマに準拠している場合またはスキーマ・チェックがオフの場合は0。また、この関数は、スキーマで許可されていない追加属性がエントリにあり、オブジェクト・クラスextensibleObjectを保有している場合も0を戻します。

- エントリにobjectclass属性がない場合、必要な属性がない場合、スキーマで許可されていない属性がある場合(ただし、オブジェクト・クラスextensibleObjectは保有していない)、または単一値属性に複数の値がある場合は1。

15.3.112.4 メモリーに関する注意事項

pb引数にはNULLを指定できます。これは、SLAPI_IS_REPLICATED_OPERATIONフラグを取得する場合にのみ使用します。このフラグが存在する場合は、スキーマ・チェックが行われません。

15.3.113 slapi_entry_schema_check_ext ()

指定された特定エントリの変更が、そのエントリのオブジェクト・クラスのスキーマに準拠しているかどうかを判別します。この関数は、変更の影響を受けない既存の属性をチェックしません。

15.3.113.1 構文

#include "slapi-plugin.h"
int slapi_entry_schema_check_ext( Slapi_PBlock *pb, Slapi_Entry *e,
LDAPMod **mods );

15.3.113.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

e

スキーマをチェックするエントリです。

mods

属性値をチェックする変更構造体へのポインタです。

15.3.113.3 戻り値

次のいずれかの値を戻します。

- 指定されたエントリの変更がスキーマに準拠している場合またはスキーマ・チェックがオフの場合は0。また、この関数は、スキーマで許可されていない追加属性がエントリにあり、オブジェクト・クラスextensibleObjectを保有している場合も0を戻します。

- 変更によってobjectclass属性またはその他の必須属性が欠落する場合、変更によってスキーマで許可されていない属性が追加される場合または変更によって単一値属性に複数の値が設定される場合は1。

15.3.113.4 メモリーに関する注意事項

pb引数にはNULLを指定できます。これは、SLAPI_IS_REPLICATED_OPERATIONフラグを取得する場合にのみ使用します。このフラグが存在する場合は、スキーマ・チェックが行われません。

15.3.114 slapi_entry_set_dn()

エントリの識別名(DN)を設定します。

15.3.114.1 構文

#include "slapi-plugin.h"
void slapi_entry_set_dn( Slapi_Entry *e, char *dn );

15.3.114.2 パラメータ

この関数は、次のパラメータを取ります。

e

DNを割り当てるエントリです。

dn

エントリに割り当てる識別名です。

15.3.114.3 説明

この関数は、指定されたエントリで与えられるDNへのポインタを設定します。

15.3.114.4 メモリーに関する注意事項

dnは、slapi_entry_free()がコールされると解放されます。

dnのコピーを渡す必要があります。次に例を示します。

char *dn = slapi_ch_strdup(some_dn);
slapi_entry_set_dn(e, dn);

このコールの結果、古いdnは解放されます。NULL値は渡さないでください。

15.3.114.5 関連項目

slapi_entry_free()

slapi_entry_get_dn()

slapi_entry_set_dn()

15.3.115 slapi_entry_set_sdn()

エントリにSlapi_DN値を設定します。

15.3.115.1 構文

#include "slapi-plugin.h"
void slapi_entry_set_sdn( Slapi_Entry *e, const Slapi_DN *sdn );

15.3.115.2 パラメータ

この関数は、次のパラメータを取ります。

e

Slapi_DNの値を設定するエントリです。

sdn

設定する指定のSlapi_DN値です。

15.3.115.3 説明

この関数は、指定したエントリのSlapi_DNオブジェクトに値を設定します。

15.3.115.4 メモリーに関する注意事項

この関数は、sdn引数のコピーを作成します。

15.3.116 slapi_entry_size()

この関数は、最も近い1kに丸めたエントリの近似サイズを戻します。これは、キャッシュ・サイズをチェックしたり、記憶域のニーズを見積もる場合などに有効です。

15.3.116.1 構文

#include "slapi-plugin.h"
size_t slapi_entry_size(Slapi_Entry *e);

15.3.116.2 パラメータ

この関数は、次のパラメータを取ります。

e

サイズを戻すエントリです。

15.3.116.3 戻り値

この関数は、最も近い1kに丸めたエントリのサイズを戻します。戻されるサイズはsize_tデータ型で、これはu_long値です。エントリが空の場合、サイズ1kが戻されます。

15.3.116.4 説明

エントリのサイズを確認すると属性値のサイズのみがカウントされ、他のエントリ値のサイズ(属性名、各種の正規化DN、メタデータのサイズなど)は戻されるサイズには含まれません。メタデータのサイズは、次に大きな1kまで丸めたサイズにかなり一致すると考えられます(これは、特にエントリが大きくなるほど該当します。その場合は、メタデータのサイズよりも属性値の実サイズの方がはるかに重要となります)。

エントリのサイズを確認したときは、削除された値および削除された属性がどちらもカウントに含まれることに注意してください。

15.3.117 slapi_entry_syntax_check()

この関数は、指定されたエントリに存在する属性の値が属性構文ルールに準拠しているかどうかを判別します。

15.3.117.1 構文

#include "slapi-plugin.h"
int slapi_entry_syntax_check( Slapi_PBlock *pb, Slapi_Entry *e );

15.3.117.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

e

属性が構文に準拠しているかをチェックするエントリです。

15.3.117.3 戻り値

次のいずれかの値を戻します。

- エントリの属性値が準拠している場合または構文チェックがオフの場合は0

- エントリの属性値が属性構文ルールに準拠していない場合は1

15.3.117.4 メモリーに関する注意事項

pb引数にはNULLを指定できます。これは、SLAPI_IS_REPLICATED_OPERATIONフラグを取得する場合にのみ使用します。このフラグが存在する場合は、構文チェックが行われません。

15.3.118 slapi_entry_vattr_find()

この関数は、指定された仮想属性が存在するかどうかを判別し、存在する場合はその属性を戻します。

15.3.118.1 構文

#include "slapi-plugin.h"
int slapi_entry_vattr_find(const Slapi_Entry *e,
const char *type, Slapi_Attr **a, int *buffer_flags);

15.3.118.2 パラメータ

この関数は、次のパラメータを取ります。

e

仮想属性をチェックするエントリです。

type

仮想属性の属性タイプです。

a

仮想属性を保持する構造体です。

buffer_flags

コール元が属性を解放する必要があるかどうかを示したビットマスクです。

15.3.118.3 戻り値

次のいずれかの値を戻します。

- タイプで指定された仮想属性がエントリに含まれている場合は0
この場合、aは仮想属性を参照し、buffer_flagsはSLAPI_VIRTUALATTRS_RETURNED_COPIES (構造体aを解放する必要がある)またはSLAPI_VIRTUALATTRS_RETURNED_POINTERS (解放する必要がない)を保持します。

- 属性にエントリが含まれていない場合は-1

15.3.119 slapi_filter_compare()

2つのフィルタが同一であるかどうかを判別します。

15.3.119.1 構文

#include "slapi-plugin.h"
int slapi_filter_compare(struct slapi_filter *f1,
struct slapi_filter *f2);

15.3.119.2 パラメータ

この関数は、次のパラメータを取ります。

f1

比較する最初のフィルタです。

f2

比較する2番目のフィルタです。

15.3.119.3 戻り値

この関数は、2つのフィルタが同じ場合は0を戻し、同じでない場合は0以外の値を戻します。

15.3.119.4 説明

この関数を使用すると、2つのフィルタが同じであるかどうかを確認したり、別の順序に設定できます。

15.3.120 slapi_filter_free()

指定されたフィルタおよび(オプションで)それを構成する一連のフィルタ(LDAP_FILTER_AND型フィルタ内の一連のフィルタなど)を解放します。

15.3.120.1 構文

#include "slapi-plugin.h"
void slapi_filter_free( Slapi_Filter *f, int recurse );

15.3.120.2 パラメータ

この関数は、次のパラメータを取ります。

f

解放するフィルタです。

recurse

1の場合は、このフィルタを構成するすべてのフィルタを再帰的に解放します。0の場合は、fで指定されたフィルタのみを解放します。

Description

この関数は、パラメータf内のフィルタを解放します。

15.3.120.3 メモリーに関する注意事項

slapi_str2filter()を使用して作成されたフィルタは、この関数の使用後に解放する必要があります。次のようにパラメータ・ブロックから抽出されたフィルタがあるとします。

slapi_pblock_get( pb, SLAPI_SEARCH_FILTER, &filter );

このようなフィルタは解放しないでください。

15.3.120.4 関連項目

slapi_pblock_get()

slapi_str2filter()

15.3.121 slapi_filter_get_attribute_type()

すべての種類の単純なフィルタの属性タイプを取得します。

15.3.121.1 構文

#include "slapi-plugin.h"
int slapi_filter_get_attribute_type( Slapi_Filter *f, char **type );

15.3.121.2 パラメータ

この関数は、次のパラメータを取ります。

f

部分文字列値を取得するフィルタです。

type

フィルタの属性タイプへのポインタです。

15.3.121.3 戻り値

この関数は、フィルタの属性タイプを戻します。

15.3.121.4 説明

この関数は、すべての種類の単純なフィルタの属性タイプを取得します。

- LDAP_FILTER_GE

- LDAP_FILTER_LE

- LDAP_FILTER_APPROX

- LDAP_FILTER_EQUALITY

- LDAP_FILTER_SUBSTRINGS

- LDAP_FILTER_PRESENT

- LDAP_FILTER_EXTENDED

- LDAP_FILTER_AND

- LDAP_FILTER_OR

- LDAP_FILTER_NOT
(mail-foo)などのフィルタは、タイプmailを戻します。

15.3.121.5 メモリーに関する注意事項

属性タイプはtypeで戻され、この関数のコール後に解放する必要はありません。これは、slapi_filter_free()がコールされたとき、Slapi_Filter構造体と同時に解放されます。

15.3.121.6 関連項目

slapi_filter_get_choice()

slapi_filter_get_ava()

slapi_filter_get_type()

slapi_filter_free()

15.3.122 slapi_filter_get_ava()

(タイプLDAP_FILTER_EQUALITY、LDAP_FILTER_GE、LDAP_FILTER_LE、LDAP_FILTER_APPROXのフィルタにのみ適用)フィルタから属性タイプおよび値を取得します。

15.3.122.1 構文

#include "slapi-plugin.h"
int slapi_filter_get_ava( Slapi_Filter *f, char **type,
struct berval **bval );

15.3.122.2 パラメータ

この関数は、次のパラメータを取ります。

f

属性および値を取得するフィルタです。

type

フィルタの属性タイプへのポインタです。

bval

フィルタの値を格納しているberval構造体のアドレスへのポインタです。

15.3.122.3 戻り値

この関数は、正常終了した場合は0を戻し、フィルタが前述のタイプのいずれでもない場合は-1を戻します。

15.3.122.4 説明

通常、タイプLDAP_FILTER_EQUALITY、LDAP_FILTER_GE、LDAP_FILTER_LEおよびLDAP_FILTER_APPROXのフィルタは、値を属性と比較します。次に例を示します。

(cn=Barbara Jensen)

このフィルタは、cn属性の値がBarbara Jensenと一致するエントリを検索します。

属性typeはパラメータ・タイプで戻され、値はパラメータbvalで戻されます。

15.3.122.5 メモリーに関する注意事項

パラメータtypeおよびbval内の文字列はSlapi_Filter内のメモリーへの直接のポインタであるため、使用後に解放しないでください。これらは、Slapi_Filter構造体の使用後に、サーバー・エントリでslapi_filter_free()がコールされたときに解放されます。

15.3.122.6 関連項目

slapi_filter_get_choice()

slapi_filter_get_type()

slapi_filter_get_attribute_type()

15.3.123 slapi_filter_get_choice()

LDAP_FILTER_EQUALITYなど、指定したフィルタのタイプを取得します。

15.3.123.1 構文

#include "slapi-plugin.h"
int slapi_filter_get_choice( Slapi_Filter *f );

15.3.123.2 パラメータ

この関数は、次のパラメータを取ります。

f

取得するフィルタ・タイプです。

15.3.123.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- LDAP_FILTER_AND (ANDフィルタ)
例: (&(ou=Accounting)(l=Sunnyvale))

- LDAP_FILTER_OR (ORフィルタ)
例: (|(ou=Accounting)(l=Sunnyvale))

- LDAP_FILTER_NOT (NOTフィルタ)
例: (!(l=Sunnyvale))

- LDAP_FILTER_EQUALITY (等価フィルタ)
例: (ou=Accounting)

- LDAP_FILTER_SUBSTRINGS (部分文字列フィルタ)
例: (ou=Account*Department)

- LDAP_FILTER_GE (以上のフィルタ)
例: (supportedLDAPVersion>=3)

- LDAP_FILTER_LE (以下のフィルタ)
例: (supportedLDAPVersion<=2)

- LDAP_FILTER_PRESENT (存在フィルタ)
例: (mail=*)

- LDAP_FILTER_APPROX (近似処理フィルタ)
例: (ou~=Sales)

- LDAP_FILTER_EXTENDED (拡張可能フィルタ)
例: (o:dn:=Example)

15.3.123.4 関連項目

slapi_filter_get_type()

slapi_filter_get_attribute_type()

slapi_filter_get_ava()

15.3.124 slapi_filter_get_subfilt()

(タイプLDAP_FILTER_SUBSTRINGSのフィルタのみに適用)フィルタから部分文字列値を取得します。

15.3.124.1 構文

#include "slapi-plugin.h"
int slapi_filter_get_subfilt( Slapi_Filter *f, char **type,
char **initial, char ***any, char **final );

15.3.124.2 パラメータ

この関数は、次のパラメータを取ります。

f

部分文字列値を取得するフィルタです。

type

フィルタの属性タイプへのポインタです。

initial

フィルタの開始部分文字列(で始まる)へのポインタです。

any

フィルタの部分文字列(含む)の配列へのポインタです。

final

フィルタの終了部分文字列(で終わる)へのポインタです。

15.3.124.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 正常終了した場合は0

- フィルタが前述のタイプのいずれでもない場合は-1

15.3.124.4 説明

通常、タイプLDAP_FILTER_SUBSTRINGSのフィルタは部分文字列のセットを属性と比較します。次に例を示します。

(cn=John*Q*Public)

このフィルタは、cn属性の値がJohnで始まり、Qを含み、Publicで終わるエントリを検索します。

これらの部分文字列値および属性タイプをこのフィルタから取得するには、この関数をコールします。前述の例でこの関数をコールすると、属性タイプcnの他、initial部分文字列のJohn、any部分文字列のQおよびfinal部分文字列のPublicが取得されます。

15.3.124.5 関連項目

slapi_filter_get_attribute_type()

slapi_filter_get_ava()

slapi_filter_get_choice()

15.3.125 slapi_filter_get_type()

(タイプLDAP_FILTER_PRESENTのフィルタのみに適用)フィルタで指定された属性タイプを取得します。

15.3.125.1 構文

#include "slapi-plugin.h"
int slapi_filter_get_type( Slapi_Filter *f, char **type );

15.3.125.2 パラメータ

この関数は、次のパラメータを取ります。

f

部分文字列値を取得するフィルタです。

type

フィルタの属性タイプへのポインタです。

15.3.125.3 戻り値

この関数は、正常終了した場合は0を戻し、フィルタが前述のタイプのいずれでもない場合は-1を戻します。

15.3.125.4 説明

通常、タイプLDAP_FILTER_PRESENTのフィルタは、指定された属性に値が割り当てられているかどうかを判別します。次に例を示します。

(mail=*)

このフィルタは、mail属性に値が割り当てられているエントリを検索します。

このフィルタから属性タイプを取得するには、この関数をコールします。前述の例の場合は、この関数をコールすると属性タイプmailが取得されます。

15.3.125.5 メモリーに関する注意事項

この関数のコール後は、パラメータtypeで戻された文字列を解放しないでください。この文字列は、slapi_filter_free()をコールして構造体Slapi_Filterが解放されるときに解放されます。

15.3.125.6 関連項目

slapi_filter_get_attribute_type()

slapi_filter_get_ava()

slapi_filter_get_choice()

15.3.126 slapi_filter_join()

LDAP_FILTER_AND、LDAP_FILTER_ORまたはLDAP_FILTER_NOTの各フィルタ・タイプのいずれかを使用して、指定された2つのフィルタを結合します。フィルタ・タイプLDAP_FILTER_NOTを指定する場合は、2番目のフィルタをNULLにする必要があります。

15.3.126.1 構文

#include "slapi-plugin.h"
Slapi_Filter *slapi_filter_join( int ftype, Slapi_Filter *f1,
Slapi_Filter *f2 );

15.3.126.2 パラメータ

この関数は、次のパラメータを取ります。

ftype

作成する複合フィルタのタイプです。

f1

結合する最初のフィルタです。

f2

結合する2番目のフィルタです。ftypeがLDAP_FILTER_NOTである場合は、この引数にNULLを指定します。

15.3.126.3 戻り値

この関数は、他の2つのフィルタから作成された新しいフィルタを戻します。

15.3.126.4 説明

通常、タイプLDAP_FILTER_AND、LDAP_FILTER_ORおよびLDAP_FILTER_NOTのフィルタは、1つ以上の他のフィルタで構成されます。次に例を示します。

(&(ou=Accounting)(l=Sunnyvale))
(|(ou=Accounting)(l=Sunnyvale))
(!(l=Sunnyvale))

前述の例のそれぞれには、1つ以上のLDAP_FILTER_EQUALITYフィルタが含まれています。

タイプLDAP_FILTER_AND、LDAP_FILTER_ORまたはLDAP_FILTER_NOTの新しいフィルタを作成するには、slapi_filter_join()関数をコールします。

15.3.126.5 メモリーに関する注意事項

f1およびf2のフィルタは結合処理中にコピーも解放もされませんが、生成されるフィルタはこれらの2つのフィルタを指す参照を保持しています。

15.3.127 slapi_filter_list_first()

(タイプLDAP_FILTER_EQUALITY、LDAP_FILTER_GE、LDAP_FILTER_LE、LDAP_FILTER_APPROXのフィルタにのみ適用)指定されたフィルタを構成する最初のフィルタを取得します。

15.3.127.1 構文

#include "slapi-plugin.h"
Slapi_Filter *slapi_filter_list_first( Slapi_Filter *f );

15.3.127.2 パラメータ

この関数は、次のパラメータを取ります。

f

最初のコンポーネントを取得するフィルタです。

15.3.127.3 戻り値

指定されたフィルタfを構成する最初のフィルタ。

15.3.127.4 説明

指定されたフィルタを構成するすべてのフィルタを繰り返して処理するには、この関数とslapi_filter_list_next()関数を使用します。

通常、タイプLDAP_FILTER_AND、LDAP_FILTER_ORおよびLDAP_FILTER_NOTのフィルタは、1つ以上の他のフィルタで構成されます。たとえば、次のようなフィルタがあるとします。

(&(ou=Accounting)(l=Sunnyvale))

このリストの最初のフィルタは次のとおりです。

(ou=Accounting)

リストの最初のフィルタを取得するには、この関数をコールします。

15.3.127.5 メモリーに関する注意事項

フィルタの複製は行われません。このため、このフィルタを元のフィルタと無関係に解放しないでください。

15.3.127.6 関連項目

slapi_filter_list_next()

15.3.128 slapi_filter_list_next()

(タイプLDAP_FILTER_EQUALITY、LDAP_FILTER_GE、LDAP_FILTER_LE、LDAP_FILTER_APPROXのフィルタにのみ適用)指定されたフィルタfを構成する次のフィルタ(fprevに続く)を取得します。

15.3.128.1 構文

#include "slapi-plugin.h"
Slapi_Filter *slapi_filter_list_next(Slapi_Filter *f,
Slapi_Filter *fprev);

15.3.128.2 パラメータ

この関数は、次のパラメータを取ります。

f

次にくるコンポーネント(fprevの後の)を取得するフィルタです。

fprev

指定されたフィルタf内のフィルタです。

15.3.128.3 戻り値

指定されたフィルタfを構成する次のフィルタ(fprevの後の)。

15.3.128.4 説明

指定されたフィルタを構成するすべてのフィルタを繰り返して処理するには、この関数とslapi_filter_list_first()関数を使用します。

通常、タイプLDAP_FILTER_AND、LDAP_FILTER_ORおよびLDAP_FILTER_NOTのフィルタは、1つ以上の他のフィルタで構成されます。たとえば、次のようなフィルタがあるとします。

(&(ou=Accounting)(l=Sunnyvale))

このリストで(ou=Accounting)より後の次のフィルタは、次のとおりです。

(l=Sunnyvale)

リストからフィルタを取得するには、slapi_filter_list_next()関数をコールします。

15.3.128.5 メモリーに関する注意事項

フィルタの複製は行われません。このため、このフィルタを元のフィルタと無関係に解放しないでください。

15.3.128.6 関連項目

slapi_filter_list_first()

15.3.129 slapi_filter_test()

指定されたエントリが特定のフィルタに一致するかどうかを判別します。

15.3.129.1 構文

#include "slapi-plugin.h"
int slapi_filter_test( Slapi_PBlock *pb, Slapi_Entry *e,
Slapi_Filter *f, int verify_access );

15.3.129.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

e

テストするエントリです。

f

エントリをテストするときに照合するフィルタです。

verify_access

1の場合は、指定されたエントリを検索するアクセス権が現在のユーザーにあるかどうかを検証します。0の場合は、アクセス制御を無視します。

15.3.129.3 戻り値

次のいずれかの値です。

- エントリがフィルタに一致した場合または指定されたフィルタがNULLの場合は0

- フィルタ・タイプが不明の場合は-1

- エラーが発生した場合は正の値(LDAPエラー・コード)

15.3.129.4 関連項目

slapi_filter_test_simple()

slapi_filter_test_ext()

15.3.130 slapi_filter_test_ext()

エントリが指定されたフィルタに一致するかどうかを判別します。

15.3.130.1 構文

#include "slapi-plugin.h"
int slapi_filter_test_ext( Slapi_PBlock *pb, Slapi_Entry *e,
Slapi_Filter *f, int verify_access, int only_test_access)

15.3.130.2 パラメータ

この関数は、次のパラメータを取ります。

pb

ユーザーを抽出したパラメータ・ブロックです。

e

フィルタ一致を検証する必要のあるエントリです。

f

フィルタ一致に使用するフィルタです。

verify_access

アクセス・チェックを行う必要がない場合は0

アクセス・チェックを行う必要がある場合は1

only_test_access

フィルタ一致を行う必要がある場合は0

フィルタ一致を行う必要がない場合は1

15.3.130.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- エントリがフィルタに一致した場合または指定されたフィルタがNULLの場合は0

- フィルタ・タイプが不明の場合またはエントリがフィルタに一致しない場合は-1

- エラーが発生した場合または指定されたエントリを検索するアクセス権が現在のユーザーにない場合は正の値(LDAPエラー・コード)

15.3.130.4 説明

この関数を使用すると、エントリが指定したフィルタに一致するかどうか、または現在のユーザーにエントリへのアクセス権があることを確認できます。

15.3.130.5 関連項目

slapi_filter_test_simple()

slapi_filter_test()

15.3.131 slapi_filter_test_simple()

エントリがフィルタに一致するかどうかを判別します。

15.3.131.1 構文

#include "slapi-plugin.h"
int slapi_filter_test_simple( Slapi_Entry *e, Slapi_Filter *f);

15.3.131.2 パラメータ

この関数は、次のパラメータを取ります。

e

テストするエントリです。

f

エントリを照合するフィルタです。

15.3.131.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- エントリがフィルタに一致した場合または指定されたフィルタがNULLの場合は0

- フィルタ・タイプが不明の場合またはエントリがフィルタに一致しない場合は-1

- エラーが発生した場合は正の値(LDAPエラー・コード)

15.3.131.4 説明

この関数を使用すると、エントリeがフィルタfに一致するかどうかをチェックできます。

15.3.131.5 関連項目

slapi_filter_test()

slapi_filter_test_ext()

15.3.132 slapi_find_matching_paren()

左カッコに対応する右カッコを検索します。

15.3.132.1 構文

#include "slapi-plugin.h"
char *slapi_find_matching_paren( const char *str );

15.3.132.2 パラメータ

この関数は、次のパラメータを取ります。

str

左カッコで始まる文字列へのポインタです。

15.3.132.3 戻り値

この関数は、正常終了すると右カッコへのポインタを戻します。それ以外の場合は、対応する右カッコが見つからなかったことを示すNULLを戻します。

15.3.132.4 説明

この関数は、左カッコ(で始まる文字列へのポインタを取り、対応する右カッコ)へのポインタを戻します。これは、複雑な検索フィルタ文字列を評価する場合に有効です。

15.3.133 slapi_free_search_results_internal()

slapi_search_internal_pb()およびslapi_search_internal_callback_pb()関数によって戻された検索結果を解放します。

15.3.133.1 構文

#include "slapi-plugin.h"
void slapi_free_search_results_internal(Slapi_PBlock *pb);

15.3.133.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_search_internal_pb()およびslapi_search_internal_callback_pb()関数によって戻されたパラメータ・ブロックです。

15.3.133.3 説明

この関数は、エントリが不要になった場合に、パラメータ・ブロックを解放する前にコールする必要があります。

15.3.134 slapi_free_suffix_list()

slapi_get_suffix_list()を使用して取得したリストなど、ディレクトリ・サフィックスのリストを解放します。

15.3.134.1 構文

#include "slapi-plugin.h"
void slapi_free_suffix_list(Slapi_DN ** suffix_list);

15.3.134.2 パラメータ

この関数は、次のパラメータを取ります。

suffix_list

解放するサフィックスの識別名の配列です。

15.3.134.3 説明

この関数は、suffix_listの各エントリおよびsuffix_list自身を解放します。サフィックスに関連付けられているデータは、データベースから削除されません。

15.3.135 slapi_get_first_backend()

最初のバックエンドのバックエンド構造体へのポインタを戻します。

15.3.135.1 構文

#include "slapi-plugin.h"
Slapi_Backend* slapi_get_first_backend(char **cookie);

15.3.135.2 パラメータ

この関数は、次のパラメータを取ります。

cookie

戻されたバックエンドの索引を含む出力パラメータです。これは、slapi_get_next_backend()をコールする場合に役立ちます。バックエンドが戻されなかった場合は、出力に0が格納されます。

15.3.135.3 戻り値

この関数は、cookieパラメータで最初のバックエンドのバックエンド構造体へのポインタおよびその索引を戻し、バックエンドが存在しない場合はNULLを戻します。

15.3.135.4 説明

この関数は、最初のバックエンドのバックエンド構造体へのポインタを戻します。すべてのバックエンドを繰り返して処理する場合は、この関数とslapi_get_next_backend()を使用します。次に例を示します。

Slapi_Backend *be = NULL;
char *cookie = NULL;
be = slapi_get_first_backend (&cookie);
while (be)
{
...
be = slapi_get_next_backend (cookie);
}
slapi_ch_free ((void**)&cookie);

15.3.135.5 メモリーに関する注意事項

繰返し後は、slapi_ch_free()を使用してcookieパラメータを解放してください。

15.3.135.6 関連項目

slapi_get_next_backend()

15.3.136 slapi_get_object_extension()

オブジェクト拡張にアクセスします。

15.3.136.1 構文

#include "slapi-plugin.h"
void *slapi_get_object_extension(int objecttype, void *object,
int extensionhandle);

15.3.136.2 パラメータ

この関数は、次のパラメータを取ります。

objecttype

サーバーによって設定されるタイプです。

object

拡張したオブジェクトへのポインタです。

extensionhandle

サーバーによって設定されるハンドルです。

15.3.136.3 説明

この関数は、slapi_register_object_extension()を使用して登録されたオブジェクト拡張へのポインタを戻します。

15.3.136.4 関連項目

slapi_register_object_extension()

15.3.137 slapi_get_next_backend()

次のバックエンドへのポインタを戻します。

15.3.137.1 構文

#include "slapi-plugin.h"
Slapi_Backend* slapi_get_next_backend(char *cookie);

15.3.137.2 パラメータ

この関数は、次のパラメータを取ります。

cookie

入力時は、次にくるバックエンドの検索が行われる索引を格納します。出力時は、戻されたバックエンドの索引を格納します。

15.3.137.3 戻り値

この関数は、次のバックエンドが存在する場合はそのバックエンドへのポインタを戻し、cookieパラメータを更新します。それ以外の場合はNULLを戻し、cookieは変更されません。

15.3.137.4 説明

この関数は、次のバックエンドへのポインタを戻します。すべてのバックエンドを繰り返して処理する場合は、この関数とslapi_get_first_backend()を使用します。次に例を示します。

Slapi_Backend *be = NULL;
char *cookie = NULL;
be = slapi_get_first_backend (&cookie);
while (be )
{
...
be = slapi_get_next_backend (cookie);
}
slapi_ch_free ((void**)&cookie);

15.3.137.5 メモリーに関する注意事項

繰返し後は、slapi_ch_free()を使用してcookieパラメータを解放してください。

15.3.137.6 関連項目

slapi_get_first_backend()

slapi_ch_free()

15.3.138 slapi_get_suffix_list()

サーバーによって処理されるサフィックスDNの配列を戻します。

15.3.138.1 構文

#include "slapi-plugin.h"
Slapi_DN ** slapi_get_suffix_list(int show_private, int *count);

15.3.138.2 パラメータ

この関数は、次のパラメータを取ります。

show_private

1に設定された場合、戻されたDNリストには、Directory Serverが使用する、ユーザー・データが格納されていないサフィックスが含まれています。それ以外の場合は、ユーザー・データが格納されたサフィックスのDNのみが戻されます。

count

リスト内のサフィックスの数を格納するプレースホルダです。

15.3.138.3 戻り値

この関数は、サフィックスのベースDNが格納されているSlapi_DN構造体の配列へのポインタを戻します。countパラメータには、DNが戻されるサフィックスの数が格納されます。

15.3.138.4 メモリーに関する注意事項

戻されたリストはslapi_free_suffix_list()を使用して解放してください。

15.3.139 slapi_get_supported_controls_copy()

Directory Serverがサポートするコントロールを示す、オブジェクト識別子(OID)の割当て済配列を取得します。slapi_register_supported_control()をコールすると、新しいコントロールを登録できます。

15.3.139.1 構文

#include "slapi-plugin.h"
int slapi_get_supported_controls_copy( char ***ctrloidsp,
unsigned long **ctrlopsp );

15.3.139.2 パラメータ

この関数は、次のパラメータを取ります。

ctrloidsp

サポートされている一連のコントロールOIDを格納する文字配列へのポインタです。OIDを格納しない場合は、このパラメータにNULLを渡します。

ctrlopsp

ctrloidsp配列内のコントロールごとにサポートされている操作値を格納する、符号なしLong整数配列へのポインタです。サポートされている操作値を格納しない場合は、このパラメータにNULLを渡します。

15.3.139.3 戻り値

この関数は、正常終了した場合は0を戻し、エラーが発生した場合は0以外の値を戻します。

15.3.139.4 説明

マルチスレッド・セーフではないため以前のリリースから非推奨のslapi_get_supported_controls()関数は、この関数で置き換えられます。

slapi_register_supported_control()をコールしてコントロールを登録する場合は、コントロールのOIDおよびそのコントロールがサポートする操作のIDを指定します。サーバーは、コントロールのOIDの配列およびコントロールがサポートする操作の配列という2つの配列に、この情報を記録します。slapi_entry_get_uniqueid()をコールすると、これらの配列のコピーを取得できます。

ctrloidsp配列で戻されるOIDごとに、ctrlopsp配列内の対応する配列要素(同じ索引を持つ)によって、コントロールをサポートする操作が識別されます。操作に指定できるIDのリストは、「slapi_register_supported_control()」を参照してください。

15.3.139.5 メモリーに関する注意事項

戻されたctrloidsp配列は、slapi_ch_array_free()をコールして解放する必要があります。戻されたctrlopsp配列は、slapi_ch_free()をコールして解放する必要があります。

15.3.139.6 関連項目

slapi_register_supported_control()

slapi_ch_array_free()

15.3.140 slapi_get_supported_extended_ops_copy()

拡張操作のオブジェクトID (OID)のコピーを取得します。

15.3.140.1 構文

#include "slapi-plugin.h"
char **slapi_get_supported_extended_ops_copy ( void );

15.3.140.2 パラメータ

この関数にパラメータはありません。

15.3.140.3 戻り値

この関数は、サーバーがサポートする拡張操作のOIDの配列へのポインタを戻します。

15.3.140.4 説明

以前のリリースから非推奨のslapi_get_supported_extended_ops()関数は、この関数で置き換えられます。slapi_get_supported_extended_ops()はマルチスレッド・セーフではありません。

この関数は、サーバーがサポートする拡張操作のオブジェクトID (OID)のコピーを取得します。SLAPI_PLUGIN_EXT_OP_OIDLISTパラメータにOIDを格納し、slapi_pblock_set()をコールすると、新しい拡張操作を登録できます。

15.3.140.5 メモリーに関する注意事項

この関数から戻された配列は、slapi_ch_array_free()関数をコールして解放する必要があります。

15.3.140.6 関連項目

slapi_pblock_set()

slapi_ch_array_free()

15.3.141 slapi_get_supported_saslmechanisms_copy()

サポートされているSimple Authentication and Security Layer (SASL)メカニズムの名前の配列を取得します。新しいSASLメカニズムを登録するには、slapi_register_supported_saslmechanism()関数をコールします。

15.3.141.1 構文

#include "slapi-plugin.h"
char ** slapi_get_supported_saslmechanisms_copy( void );

15.3.141.2 戻り値

この関数は、サーバーがサポートするSASLメカニズムの名前の配列へのポインタを戻します。

15.3.142 slapi_has8thBit()

文字列に8ビット文字が含まれているかどうかをチェックします。

15.3.142.1 構文

#include "slapi-plugin.h"
int slapi_has8thBit(unsigned char *s);

15.3.142.2 パラメータ

この関数は、次のパラメータを取ります。

s

テスト対象の、NULLで終了する文字列へのポインタです。

15.3.142.3 戻り値

この関数は、文字列に8ビット文字が含まれている場合は1を戻し、含まれていない場合は0を戻します。

15.3.143 slapi_is_rootdse()

この関数は、エントリがルートDSEであるかどうかを判別します。ルートDSEは、機能や構成など、Directory Serverに関する情報が含まれる特殊なエントリです。

15.3.143.1 構文

#include "slapi-plugin.h"
int slapi_is_rootdse ( const char *dn );

15.3.143.2 パラメータ

この関数は、次のパラメータを取ります。

dn

ルートDSEエントリであるかどうかを確認するためにテストするDNです。

15.3.143.3 戻り値

この関数は、dnがルートDSEの場合は1を戻し、それ以外の場合は0を戻します。

15.3.144 slapi_is_root_suffix()

サフィックスがDITのルート・サフィックスであるかどうかをチェックします。

15.3.144.1 構文

#include "slapi-plugin.h"
int slapi_is_root_suffix(Slapi_DN * dn);

15.3.144.2 パラメータ

この関数は、次のパラメータを取ります。

dn

チェックするDNです。

15.3.144.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- DNがルート・サフィックスでない場合は0

- DNがルート・サフィックスである場合は1

15.3.145 slapi_ldap_init()

LDAP接続へのスレッドセーフ・ハンドルを取得します。

15.3.145.1 構文

#include "slapi-plugin.h"
LDAP *slapi_ldap_init(char *ldaphost, int ldapport, int secure,
int shared);

15.3.145.2 パラメータ

この関数は、次のパラメータを取ります。

ldaphost

LDAPサーバーが実行されているホストです。

ldapport

LDAPサーバーがリスニングするポートです。

secure

SSL経由のセキュアな接続の場合は1、それ以外の場合はNULLです。

shared

NULLでない場合は、スレッド間で接続を共有できます。

15.3.145.3 説明

この関数を使用すると、LDAP接続へのスレッドセーフ・ハンドルをプラグインで取得できます。ハンドルの使用が済んだら、slapi_ldap_unbind()をコールしてください。

接続には、Directory Server Resource Kitに同梱されているDirectory SDK for Cを使用してタイムアウトが設定されている場合があります。例15-1に、タイムアウトを設定する方法を示します。

例15-1 タイムアウトの設定

#include "slapi-plugin.h"
#include "ldap.h"

void
my_ldap_function(void)
{
LDAP * ld;
int    to = 5000;                  /* 5000 ms == 5 s timeout */

if ((ld = slapi_ldap_init(host, port, 0, 1)) == NULL) {
/* error trying to create an LDAP session */
return -1;
}

if (ldap_set_option(ld, LDAP_X_OPT_CONNECT_TIMEOUT, &to) != 0) {
/* error setting timeout                                 */
slapi_ldap_unbind(ld);
return -1;
}

/* Use the handle for a search for example.                  */

slapi_ldap_unbind(ld);
return 0;
}

15.3.145.4 戻り値

正常終了した場合、この関数はLDAP接続ハンドルを戻します。それ以外の場合はNULLを戻します。

15.3.145.5 関連項目

slapi_ldap_unbind()

15.3.146 slapi_ldap_unbind()

slapi_ldap_init()を使用して取得したLDAP接続を解放します。

15.3.146.1 構文

#include "slapi-plugin.h"
void slapi_ldap_unbind( LDAP *ld );

15.3.146.2 パラメータ

この関数は、次のパラメータを取ります。

ld

LDAP接続へのハンドルです。

15.3.146.3 説明

この関数を使用すると、slapi_ldap_init()を使用して取得したLDAP接続をプラグインで解放できます。

15.3.146.4 関連項目

slapi_ldap_init()

15.3.147 slapi_ldapmods_syntax_check ()

指定された変更が属性構文ルールに準拠しているかどうかを判別します。

15.3.147.1 構文

#include "slapi-plugin.h"
int slapi_ldapmods_syntax_check( Slapi_PBlock *pb, LDAPMod **mods );

15.3.147.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

mods

属性値をチェックする変更構造体へのポインタです。

15.3.147.3 戻り値

次のいずれかの値を戻します。

- 指定された変更が属性構文ルールに準拠している場合または構文チェックがオフの場合は0

- 変更が属性構文ルールに準拠していない場合は1

15.3.147.4 メモリーに関する注意事項

pb引数にはNULLを指定できます。これは、SLAPI_IS_REPLICATED_OPERATIONフラグを取得する場合にのみ使用します。このフラグが存在する場合は、構文チェックが行われません。

15.3.148 slapi_lock_mutex()

mutexをロックします。

15.3.148.1 構文

#include "slapi-plugin.h"
void slapi_lock_mutex( Slapi_Mutex *mutex );

15.3.148.2 パラメータ

この関数は、次のパラメータを取ります。

mutex

スレッド同期のMutex

15.3.148.3 説明

この関数はスレッド同期を許可します。この関数を使用してスレッドがmutexをロックした場合は、mutexを保持するスレッドがslapi_unlock_mutex()をコールするまで、ロックを取得しようとする他のスレッドがブロックされます。

15.3.148.4 関連項目

slapi_destroy_mutex()

slapi_new_mutex()

slapi_UTF-8STRTOLOWER()

15.3.149 slapi_log_error_ex()

サーバー・エラー・ログにエラー・メッセージを書き込みます。

15.3.149.1 構文

#include "slapi-plugin.h"
int slapi_log_error_ex(long errorId,
long msgId, int connId, int opId, char const * subsystem,
char const * humanReadableMsg, char const * fmt, /* args */ ...);

15.3.149.2 パラメータ

この関数は、次のパラメータを取ります。

errorId

このエラー・メッセージに指定する一意の識別子です。

msgId

SLAPI_OPERATION_MSGIDを使用して取得した、現在のメッセージの識別子です。

connId

SLAPI_CONN_IDを使用して取得した、現在の接続の識別子です。

opId

SLAPI_OPERATION_IDを使用して取得した、現在の操作の識別子です。

subsystem

メッセージを記録するプラグイン関数の名前など、発生した警告のコンテキストを示す文字列です。

humanReadableMsg

この警告を識別する文字列メッセージです。

fmt

printf()の形式でのフォーマット指定です。

args

fmtでフォーマットを指定する場合の引数です。

15.3.149.3 説明

この関数は、指定されたエラー・メッセージをサーバー・エラー・ログに同期的に書き込みます。この関数は、ログ・メッセージがディスクに書き込まれるまで復帰しません。したがって、書込み処理中はサーバーがブロックされます。デフォルトのエラー・ログは$INSTANCE_PATH/logs/errorsです。

slapi_log_info_ex()とは異なり、この関数はオフにできません。

通常、エラー・メッセージは致命的エラーと関係があります。警告の場合は、slapi_log_warning_ex()を使用します。情報ログ・メッセージの場合は、slapi_log_info_ex()を使用します。

15.3.149.4 例

例15-2に、slapi_log_error_ex()のコールを示します。

例15-2 エラーのロギング

#include "slapi-plugin.h"
#include "example-com-error-ids.h" /* example.com unique
error IDs file       */
int
foobar(Slapi_PBlock * pb)
{
char * error_cause;
int    apocalypse = 1;         /* Expect the worst.    */

/* ... */

if (apocalypse) {              /* Server to crash soon */
slapi_log_error_ex(
EXCOM_SERVER_MORIBUND, /* Unique error ID      */
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"example.com: foobar in baz plug-in",
"cannot write to file system: %s\n",
error_cause
);
return -1;
}
return 0;
}

15.3.149.5 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

15.3.149.6 関連項目

slapi_log_info_ex()

slapi_log_warning_ex()

15.3.150 slapi_log_info_ex()

サーバー・エラー・ログに情報メッセージを書き込みます。

15.3.150.1 構文

#include "slapi-plugin.h"
int slapi_log_info_ex(slapi_log_info_area_t area,
slapi_log_info_level_t level,
long msgId, int connId, int opId, char const * subsystem,
char const * fmt, /* args */, ...);

15.3.150.2 パラメータ

この関数は、次のパラメータを取ります。

area

nsslapd-infolog-areaの値に領域の10進値を加算して、ロギングを有効にするサーバー・コンポーネントを指定します。情報ロギングを無効にするには、値から減算します。

level

areaで情報ロギングが有効化されている場合に、サーバーがこのメッセージを記録する必要があるかどうかを指定します。

情報ロギングが有効化されている場合は、次のようにレベルを設定します。

- SLAPI_LOG_INFO_LEVEL_DEFAULTは、メッセージを常に記録します。

- SLAPI_LOG_INFO_LEVEL_EXTRAは、nsslapd-infolog-levelの値が0より大きい場合にのみ記録します。

msgId

SLAPI_OPERATION_MSGIDを使用して取得した、現在のメッセージの識別子です。

connId

SLAPI_CONN_IDを使用して取得した、現在の接続の識別子です。

opId

SLAPI_OPERATION_IDを使用して取得した、現在の操作の識別子です。

subsystem

メッセージを記録するプラグイン関数の名前など、発生した警告のコンテキストを示す文字列です。

fmt

printf()の形式でのフォーマット指定です。

args

fmtでフォーマットを指定する場合の引数です。

15.3.150.3 説明

この関数は、指定されたエラー・メッセージをサーバー・エラー・ログに同期的に書き込みます。この関数は、ログ・メッセージがディスクに書き込まれるまで復帰しません。したがって、書込み処理中はサーバーがブロックされます。デフォルトのエラー・ログは$INSTANCE_PATH/logs/errorsです。

この関数は、デフォルトでは無効化されています。メッセージのロギングを有効にするには、dsconf set-log-propコマンドを使用します。

ログの管理には、Directory Service Control Centerを使用することもできます

通常、サーバーの動作をデバッグする場合を除き、システム管理者は情報メッセージを無視できます。エラーの場合は、slapi_log_error_ex()を使用します。警告の場合は、slapi_log_warning_ex()を使用します。

15.3.150.4 例

例15-3に、slapi_log_info_ex()のコールを示します。

例15-3 情報メッセージのロギング

#include "slapi-plugin.h"

int
hello()
{
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"hello() from a plug-in",
"Hello, World!\n"
);
return 0;
}

15.3.150.5 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

15.3.150.6 関連項目

slapi_log_error_ex()

slapi_log_warning_ex()

15.3.151 slapi_log_warning_ex()

サーバー・エラー・ログに警告メッセージを書き込みます。

15.3.151.1 構文

#include "slapi-plugin.h"
int slapi_log_warning_ex(long warningId,
long msgId, int connId, int opId, char const * subsystem,
char const * humanReadableMsg, char const * fmt, /* args */ ...);

15.3.151.2 パラメータ

この関数は、次のパラメータを取ります。

warningId

この警告メッセージに指定する一意の識別子です。

msgId

SLAPI_OPERATION_MSGIDを使用して取得した、現在のメッセージの識別子です。

connId

SLAPI_CONN_IDを使用して取得した、現在の接続の識別子です。

opId

SLAPI_OPERATION_IDを使用して取得した、現在の操作の識別子です。

subsystem

メッセージを記録するプラグイン関数の名前など、発生した警告のコンテキストを示す文字列です。

humanReadableMsg

この警告を識別する文字列メッセージです。

fmt

printf()の形式でのフォーマット指定です。

args

fmtでフォーマットを指定する場合の引数です。

15.3.151.3 説明

この関数は、指定されたエラー・メッセージをサーバー・エラー・ログに同期的に書き込みます。この関数は、ログ・メッセージがディスクに書き込まれるまで復帰しません。したがって、書込み処理中はサーバーがブロックされます。デフォルトのエラー・ログは$INSTANCE_PATH/logs/errorsです。

slapi_log_info_ex()とは異なり、この関数はオフにできません。

通常、警告メッセージは重大となりうるエラーと関係がありますが、致命的エラーとは関係していません。致命的エラーの場合は、slapi_log_error_ex()を使用します。情報ログ・メッセージの場合は、slapi_log_info_ex()を使用します。

15.3.151.4 例

例15-4に、slapi_log_warning_ex()のコールを示します。

例15-4 警告のロギング

#include "slapi-plugin.h"
#include "example-com-warning-ids.h" /* example.com unique
warning IDs file  */
int
foobar()
{
int disk_use_percentage;

/* ... */

if (disk_use_percentage>= 95){
slapi_log_warning_ex(
EXCOM_DISK_FULL_WARN,    /* unique warning ID */
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"example.com: foobar in baz plug-in",
"disk %.0f%% full, find more space\n",
(float)disk_use_percentage
);
}
return 0;
}

15.3.151.5 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

15.3.151.6 関連項目

slapi_log_error_ex()

slapi_log_info_ex()

15.3.152 slapi_matchingrule_free()

一致ルールの登録後にSlapi_MatchingRuleEntryを解放します。

15.3.152.1 構文

#include "slapi-plugin.h"
void slapi_matchingrule_free(Slapi_MatchingRuleEntry **mrEntry,
int freeMembers);

15.3.152.2 パラメータ

この関数は、次のパラメータを取ります。

mrEntry

一致ルールの登録オブジェクトです。

freeMembers

Slapi_MatchingRuleEntryのメンバーを解放するかどうかです。

0の場合は、Slapi_MatchingRuleEntryのメンバーを解放しません。

15.3.152.3 説明

この関数は、構造体を使用して一致ルールが登録された後、Slapi_MatchingRuleEntryに割り当てられたメモリーを解放します。

15.3.152.4 関連項目

slapi_matchingrule_new()

slapi_matchingrule_register()

15.3.153 slapi_matchingrule_get()

Slapi_MatchingRuleEntryメンバーにアクセスします。

15.3.153.1 構文

#include "slapi-plugin.h"
int slapi_matchingrule_get(Slapi_MatchingRuleEntry *mr, int arg,
void *value);

15.3.153.2 パラメータ

この関数は、次のパラメータを取ります。

mr

一致ルールの登録オブジェクトです。

arg

次のSlapi_MatchingRuleEntryメンバーの識別子です。

- SLAPI_MATCHINGRULE_DESC (一致ルールを説明する文字列)

- SLAPI_MATCHINGRULE_NAME (一致ルールを識別する名前)

- SLAPI_MATCHINGRULE_OID (一致ルールのオブジェクト識別子を表す文字列)

- SLAPI_MATCHINGRULE_SYNTAX (一致ルール構文のOID文字列1.3.6.1.4.1.1466.115.121.1.15)

- SLAPI_MATCHINGRULE_OBSOLETE (ルールが古いかどうかを示すint)

value

メンバーから取得した値です。

15.3.153.3 説明

この関数は、argの識別子に基づいてSlapi_MatchingRuleEntryメンバーにアクセスします。

15.3.153.4 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

15.3.153.5 関連項目

slapi_matchingrule_register()

slapi_matchingrule_set()

15.3.154 slapi_matchingrule_new()

Slapi_MatchingRuleEntryを割り当てます。

15.3.154.1 構文

#include "slapi-plugin.h"
Slapi_MatchingRuleEntry *slapi_matchingrule_new(void);

15.3.154.2 説明

この関数は、一致ルールの登録に使用されるSlapi_MatchingRuleEntryを割り当てます。

15.3.154.3 戻り値

この関数は、正常終了すると一致ルール登録オブジェクトへのポインタを戻します。それ以外の場合はNULLを戻します。

15.3.154.4 関連項目

slapi_matchingrule_free()

slapi_matchingrule_register()

15.3.155 slapi_matchingrule_register()

一致ルールをサーバーに登録します。

15.3.155.1 構文

#include "slapi-plugin.h"
int slapi_matchingrule_register(Slapi_MatchingRuleEntry *mrEntry);

15.3.155.2 パラメータ

この関数は、次のパラメータを取ります。

mrEntry

一致ルールの登録オブジェクトです。

15.3.155.3 説明

この関数は、Slapi_MatchingRuleEntryをサーバーに登録します。プラグイン初期化関数の一環として一致ルールを登録します。

まず、slapi_matchingrule_new()を使用して構造体を割り当てます。次に、slapi_matchingrule_set()を使用して一致ルール・エントリのメンバーを設定します。メンバーの設定後、この関数を使用して一致ルールをサーバーに登録します。最後に、slapi_matchingrule_free()を使用して、割り当てられたメモリーを解放します。

15.3.155.4 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

15.3.155.5 関連項目

slapi_matchingrule_free()

slapi_matchingrule_get()

slapi_matchingrule_new()

slapi_matchingrule_set()

15.3.156 slapi_matchingrule_set()

Slapi_MatchingRuleEntryメンバーを変更します。

15.3.156.1 構文

#include "slapi-plugin.h"
int slapi_matchingrule_set(Slapi_MatchingRuleEntry *mr, int arg,
void *value);

15.3.156.2 パラメータ

この関数は、次のパラメータを取ります。

mr

一致ルールの登録オブジェクトです。

arg

次のSlapi_MatchingRuleEntryメンバーの識別子です。

- SLAPI_MATCHINGRULE_DESC (一致ルールを説明する文字列)

- SLAPI_MATCHINGRULE_NAME (一致ルールを識別する名前)

- SLAPI_MATCHINGRULE_OID (一致ルールのオブジェクト識別子を表す文字列)

- SLAPI_MATCHINGRULE_SYNTAX (一致ルール構文のOID文字列1.3.6.1.4.1.1466.115.121.1.15)

- SLAPI_MATCHINGRULE_OBSOLETE (ルールが古いかどうかを示すint)

value

メンバーに適用する値です。

15.3.156.3 説明

この関数は、argの識別子に基づいてSlapi_MatchingRuleEntryメンバーを変更します。

15.3.156.4 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

15.3.156.5 関連項目

slapi_matchingrule_get()

slapi_matchingrule_register()

15.3.157 slapi_mod_add_value()

Slapi_Mod構造体に値を追加します。

15.3.157.1 構文

#include "slapi-plugin.h"
void slapi_mod_add_value(Slapi_Mod *smod, const struct berval *val);

15.3.157.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

val

属性値を表すbervalへのポインタです。

15.3.157.3 説明

指定された属性のコピーをSlapi_Modに追加します。

15.3.158 slapi_mod_done()

Slapi_Mod構造体の内部を解放します。

15.3.158.1 構文

#include "slapi-plugin.h"
void slapi_mod_done(Slapi_Mod *mod);

15.3.158.2 パラメータ

この関数は、次のパラメータを取ります。

mod

Slapi_Modへのポインタです。

15.3.158.3 説明

この関数は、Slapi_Modの内部を解放し、初期化されていない状態にします。

15.3.158.4 メモリーに関する注意事項

スタックから割り当てられたSlapi_Modの使用が終了した場合またはこれを再利用する場合に、この関数を使用します。

15.3.158.5 関連項目

slapi_mod_init()

slapi_mod_init_byref()

slapi_mod_init_byval()

slapi_mod_init_passin()

15.3.159 slapi_mod_dump()

LDAPModの内容をサーバー・ログにダンプします。

15.3.159.1 構文

#include "slapi-plugin.h"
void slapi_mod_dump(LDAPMod *mod, int n);

15.3.159.2 パラメータ

この関数は、次のパラメータを取ります。

mod

LDAPModへのポインタです。

n

ログに記録される数値ラベルです。

15.3.159.3 説明

この関数は、LDAP_DEBUG_ANYログ・レベルを使用して、デバッグ向けにLDAPModの内容を$INSTANCE_PATH/logs/errorsにダンプします。

15.3.160 slapi_mod_free()

Slapi_Mod構造体を解放します。

15.3.160.1 構文

#include "slapi-plugin.h"
void slapi_mod_free(Slapi_Mod **smod);

15.3.160.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.160.3 説明

この関数は、slapi_mod_new()によって割り当てられたSlapi_Mod構造体を解放します。

15.3.160.4 関連項目

slapi_mod_new()

15.3.161 slapi_mod_get_first_value()

Slapi_Modイテレータを初期化し、最初の属性値を戻します。

15.3.161.1 構文

#include "slapi-plugin.h"
struct berval *slapi_mod_get_first_value(Slapi_Mod *smod);

15.3.161.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.161.3 戻り値

この関数は、Slapi_Modの最初の属性値へのポインタを戻し、値が存在しない場合はNULLを戻します。

15.3.161.4 説明

Slapi_Mod構造体の属性値を繰り返して処理するには、この関数とslapi_mod_get_next_value()を使用します。

15.3.161.5 関連項目

slapi_mod_get_next_value()

15.3.162 slapi_mod_get_ldapmod_byref()

Slapi_Mod構造体のLDAPModへの参照を取得します。

15.3.162.1 構文

#include "slapi-plugin.h"
const LDAPMod *slapi_mod_get_ldapmod_byref(const Slapi_Mod *smod);

15.3.162.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.162.3 戻り値

この関数は、Slapi_Modが所有する読取り専用LDAPModへのポインタを戻します。

15.3.162.4 説明

Slapi_Modに格納されているLDAPModに直接アクセスするには、この関数を使用します。

15.3.162.5 メモリーに関する注意事項

LDAPModの担当は、Slapi_Modのままとなります。

15.3.162.6 関連項目

slapi_mod_get_ldapmod_passout()

15.3.163 slapi_mod_get_ldapmod_passout()

Slapi_Mod構造体に格納されているLDAPModを取得します。

15.3.163.1 構文

#include "slapi-plugin.h"
LDAPMod *slapi_mod_get_ldapmod_passout(Slapi_Mod *smod);

15.3.163.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.163.3 戻り値

この関数は、コール元が保持するLDAPModへのポインタを戻します。

15.3.163.4 説明

Slapi_ModからLDAPModを取得するには、この関数を使用します。

15.3.163.5 メモリーに関する注意事項

LDAPModの担当は、コール元に転送されます。Slapi_Modは初期化されていない状態のままとなります。

15.3.163.6 関連項目

slapi_mod_get_ldapmod_byref()

15.3.164 slapi_mod_get_next_value()

Slapi_Modイテレータを増分し、次の属性値を戻します。

15.3.164.1 構文

#include "slapi-plugin.h"
struct berval *slapi_mod_get_next_value(Slapi_Mod *smod);

15.3.164.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.164.3 戻り値

この関数は、Slapi_Modの次の属性値へのポインタを戻し、それ以上値がない場合はNULLを戻します。

15.3.164.4 説明

Slapi_Mod内の属性値を繰り返して処理するには、この関数とslapi_mod_get_first_value()を使用します。

15.3.164.5 関連項目

slapi_mod_get_first_value()

15.3.165 slapi_mod_get_num_values()

Slapi_Mod構造体の値の数を取得します。

15.3.165.1 構文

#include "slapi-plugin.h"
int slapi_mod_get_num_values(const Slapi_Mod *smod);

15.3.165.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.165.3 戻り値

この関数は、Slapi_Mod内の属性値の数を戻します。

15.3.166 slapi_mod_get_operation()

Slapi_Mod構造体の操作タイプを取得します。

15.3.166.1 構文

#include "slapi-plugin.h"
int slapi_mod_get_operation(const Slapi_Mod *smod);

15.3.166.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.166.3 戻り値

この関数は、ビット単位のOR演算子とLDAP_MOD_BVALUESを使用するときに組み合せられる、LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれかを戻します。

15.3.166.4 関連項目

slapi_mod_set_operation()

15.3.167 slapi_mod_get_type()

Slapi_Mod構造体の属性タイプを取得します。

15.3.167.1 構文

#include "slapi-plugin.h"
const char *slapi_mod_get_type(const Slapi_Mod *smod);

15.3.167.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.167.3 戻り値

この関数は、Slapi_Mod内の属性タイプへの読取り専用ポインタを戻します。

15.3.167.4 説明

Slapi_ModのLDAP属性タイプを取得します。

15.3.167.5 関連項目

slapi_mod_set_type()

15.3.168 slapi_mod_init()

Slapi_Mod構造体を初期化します。

15.3.168.1 構文

#include "slapi-plugin.h"
void slapi_mod_init(Slapi_Mod *smod, int initCount);

15.3.168.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されていないSlapi_Modへのポインタです。

initCount

領域を確保するために指定した属性値の数です。最小値は0です。

15.3.168.3 説明

この関数はSlapi_Modを初期化して空にしますが、指定された数の属性値を格納する初期領域は確保します。

15.3.168.4 メモリーに関する注意事項

必要な領域が不明な場合には、initCountに0を使用できます。Slapi_Modは必要に応じて拡張されます。

15.3.168.5 関連項目

slapi_mod_done()

slapi_mod_init_byref()

slapi_mod_init_byval()

slapi_mod_init_passin()

15.3.169 slapi_mod_init_byref()

既存のLDAPModのラッパーであるSlapi_Mod構造体を初期化します。

15.3.169.1 構文

#include "slapi-plugin.h"
void slapi_mod_init_byref(Slapi_Mod *smod, LDAPMod *mod);

15.3.169.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されていないSlapi_Modへのポインタです。

mod

LDAPModへのポインタです。

15.3.169.3 説明

この関数は、LDAPModへの参照が格納されているSlapi_Modを初期化します。LDAPModを使用していて、Slapi_Mod関数でこの構造体に簡単にアクセスする場合に、この関数を使用します。

15.3.169.4 関連項目

slapi_mod_done()

slapi_mod_init()

slapi_mod_init_byval()

slapi_mod_init_passin()

15.3.170 slapi_mod_init_byval()

LDAPModのコピーを使用してSlapi_Mod構造体を初期化します。

15.3.170.1 構文

#include "slapi-plugin.h"
void slapi_mod_init_byval(Slapi_Mod *smod, const LDAPMod *mod);

15.3.170.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されていないSlapi_Modへのポインタです。

mod

LDAPModへのポインタです。

15.3.170.3 関連項目

slapi_mod_done()

slapi_mod_init()

slapi_mod_init_byref()

slapi_mod_init_passin()

15.3.171 slapi_mod_init_passin()

LDAPModからSlapi_Modを初期化します。

15.3.171.1 構文

#include "slapi-plugin.h"
void slapi_mod_init_passin(Slapi_Mod *smod, LDAPMod *mod);

15.3.171.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されていないSlapi_Modへのポインタです。

mod

LDAPModへのポインタです。

15.3.171.3 説明

この関数は、LDAPModを渡してSlapi_Modを初期化します。LDAPModをSlapi_Modに変換するには、この関数を使用します。

15.3.171.4 メモリーに関する注意事項

LDAPModの担当は、Slapi_Modに転送されます。Slapi_Modが破棄されるときにLDAPModも破棄されます。

15.3.171.5 関連項目

slapi_mod_done()

slapi_mod_init()

slapi_mod_init_byref()

slapi_mod_init_byval()

15.3.172 slapi_mod_isvalid()

Slapi_Mod構造体が有効であるかどうかを判別します。

15.3.172.1 構文

#include "slapi-plugin.h"
int slapi_mod_isvalid(const Slapi_Mod *mod);

15.3.172.2 パラメータ

この関数は、次のパラメータを取ります。

smod

Slapi_Modへのポインタです。

15.3.172.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- Slapi_Modが有効な場合は1

- Slapi_Modが有効でない場合は0

15.3.172.4 説明

Slapi_Modの内容が有効であることを確認するには、この関数を使用します。操作タイプがビット単位のOR演算子とLDAP_MOD_BVALUESを使用するときに組み合せられる、LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれかである場合、属性タイプがNULLでない場合、および追加と置換の操作に1つ以上の属性値がある場合に、有効であるとみなされます。

15.3.173 slapi_mod_new()

新しいSlapi_Mod構造体を割り当てます。

15.3.173.1 構文

#include "slapi-plugin.h"
Slapi_Mod* slapi_mod_new( void );

15.3.173.2 パラメータ

この関数にパラメータはありません。

15.3.173.3 戻り値

この関数は、初期化されていない、割当て済のSlapi_Modへのポインタを戻します。

15.3.173.4 説明

この関数は、初期化されていない新しいSlapi_Modを割り当てます。スタックからではなく、ヒープから割り当てられたSlapi_Modが必要な場合に、この関数を使用します。

15.3.173.5 関連項目

slapi_mod_free()

15.3.174 slapi_mod_remove_value()

Slapi_Modイテレータの現在位置で値を削除します。

15.3.174.1 構文

#include "slapi-plugin.h"
void slapi_mod_remove_value(Slapi_Mod *smod);

15.3.174.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

15.3.174.3 関連項目

slapi_mod_get_first_value()

slapi_mod_get_next_value()

15.3.175 slapi_mod_set_operation()

Slapi_Mod構造体の操作タイプを設定します。

15.3.175.1 構文

#include "slapi-plugin.h"
void slapi_mod_set_operation(Slapi_Mod *smod, int op);

15.3.175.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

op

ビット単位のOR演算子とLDAP_MOD_BVALUESを使用するときに組み合せられる、LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれかです。

15.3.175.3 関連項目

slapi_mod_get_operation()

15.3.176 slapi_mod_set_type()

Slapi_Modの属性タイプを設定します。

15.3.176.1 構文

#include "slapi-plugin.h"
void slapi_mod_set_type(Slapi_Mod *smod, const char *type);

15.3.176.2 パラメータ

この関数は、次のパラメータを取ります。

smod

初期化されたSlapi_Modへのポインタです。

type

属性タイプです。

15.3.176.3 説明

Slapi_Modの属性タイプを、指定された値のコピーに設定します。

15.3.176.4 関連項目

slapi_mod_get_type()

15.3.177 slapi_moddn_get_newdn()

エントリの新しいDNを構築します。

15.3.177.1 構文

#include "slapi-plugin.h"
char * slapi_moddn_get_newdn(Slapi_DN *dn_olddn, char *newrdn,
char *newsuperiordn);

15.3.177.2 パラメータ

この関数は、次のパラメータを取ります。

dn_olddn

古いDN値です。

newrdn

新しいRDN値です。

newsuperiordn

NULLでない場合は、新しいDNの将来の上位エントリとなるDNです。これは、このパラメータの内容の前にnewrdnの値を追加して求められます。

15.3.177.3 戻り値

この関数は、前のDNがdn_olddnであったエントリの新しいDNを戻します。

15.3.177.4 説明

この関数はmoddn操作に使用され、新しいRDNおよび新しい親のDNから新しいDNを構築します。

新しいDNは、newrdnの新しいRDNを親DNに追加して求められます。NULLでない場合、親はnewsuperiordn内の値となります。それ以外の場合は、古いRDNを削除してdn_olddnから取得されます(エントリの親は新しいDNと同じままです)。

15.3.177.5 メモリーに関する注意事項

戻されたDNは、slapi_ch_free_string()を使用して解放する必要があります。

16 Directory ServerFunctionリファレンス(パートII)

この章には、プラグインを作成するための、パブリック関数のリファレンスの2番目の部分が含まれています。前の章には、リファレンスの1番目の部分が含まれています。

前の章の各項では、プラグインAPI関数のslapi_access_allowed()からslapi_moddn_get_newdn()まで説明しています。

次の各項では、プラグインAPI関数のslapi_modify_internal_pb()からslapi_wait_condvar ()までアルファベット順に説明します。

16.1 アルファベット順の関数(パートII)

16.1.1 slapi_modify_internal_pb()

パラメータ・ブロックに基づいてLDAP変更操作を実行し、ディレクトリ・エントリを変更します。

16.1.1.1 構文

#include "slapi-plugin.h"
int slapi_modify_internal_pb(Slapi_PBlock *pb);

16.1.1.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_modify_internal_set_pb()を使用して初期化されたパラメータ・ブロック

16.1.1.3 戻り値

渡されたパラメータがNULLポインタの場合、この関数は-1を戻します。それ以外の場合は0を戻します。

作成したコードでこの関数をコールすると、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTが適切なLDAP結果コードに設定されます。したがって、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTをチェックすると、エラーが発生したかどうかを確認できます。

16.1.1.4 説明

この関数は、パラメータ・ブロックに基づいて内部変更操作を実行します。このパラメータ・ブロックは、slapi_modify_internal_set_pb()をコールして初期化する必要があります。

16.1.1.5 メモリーに関する注意事項

slapi_modify_internal_set_pb()に渡されるパラメータが、この関数によって変更されたり消費されることはありません。

16.1.2 slapi_modify_internal_set_pb()

内部変更操作のためのパラメータ・ブロックを準備します。

16.1.2.1 構文

#include "slapi-plugin.h"
int slapi_modify_internal_set_pb(Slapi_PBlock *pb,
const char *dn, LDAPMod **mods, LDAPControl **controls,
const char *uniqueid, Slapi_ComponentId *plugin_identity,
int operation_flags);

16.1.2.2 パラメータ

この関数は、次のパラメータを取ります。

pb

内部変更操作のためのパラメータ・ブロック

dn

変更するエントリの識別名

mods

適用する変更の配列

controls

変更操作用に要求するコントロールの配列

uniqueid

DNを使用しない場合、エントリの一意識別子

plugin_identity

プラグインの初期化時にSLAPI_PLUGIN_IDENTITYから取得したプラグイン識別子です。

operation_flags

NULLまたはSLAPI_OP_FLAG_NEVER_CHAINです。

16.1.2.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合はLDAPエラー・コードを戻します。

16.1.2.4 説明

この関数は、slapi_modify_internal_pb()で使用するパラメータ・ブロックを準備します。

16.1.2.5 メモリーに関する注意事項

この関数をコールする前に、slapi_pblock_new()を使用してパラメータ・ブロックを割り当てます。

Directory Serverは、この関数に渡されたパラメータを解放しません。

slapi_modify_internal_pb()をコールした後、パラメータ・ブロックを解放します。

16.1.2.6 関連項目

slapi_modify_internal_pb()

slapi_pblock_new()

16.1.3 slapi_modrdn_internal_pb()

パラメータ・ブロックに基づいてLDAP変更RDN操作を実行し、ディレクトリ・エントリの名前を変更します。

16.1.3.1 構文

#include "slapi-plugin.h"
int slapi_modrdn_internal_pb(Slapi_PBlock *pb);

16.1.3.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_rename_internal_set_pb()を使用して初期化されたパラメータ・ブロック

16.1.3.3 戻り値

渡されたパラメータがNULLポインタの場合、この関数は-1を戻します。それ以外の場合は0を戻します。

作成したコードでこの関数をコールすると、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTが適切なLDAP結果コードに設定されます。したがって、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTをチェックすると、エラーが発生したかどうかを確認できます。

16.1.3.4 説明

この関数は、パラメータ・ブロックに基づいて内部RDN変更操作を実行します。このパラメータ・ブロックは、slapi_rename_internal_set_pb()をコールして初期化する必要があります。

16.1.3.5 メモリーに関する注意事項

slapi_rename_internal_set_pb()に渡されるパラメータが、この関数によって変更されたり消費されることはありません。

16.1.3.6 関連項目

slapi_rename_internal_set_pb()

16.1.4 slapi_mods2entry()

LDAPModの配列からSlapi_Entryを作成します。

16.1.4.1 構文

#include "slapi-plugin.h"
int slapi_mods2entry(Slapi_Entry **e, const char *dn,
LDAPMod **attrs);

16.1.4.2 パラメータ

この関数は、次のパラメータを取ります。

e

作成されたエントリに戻るときに設定されるポインタのアドレス

dn

エントリのLDAP DN

attrs

エントリ属性を表す、タイプLDAP_MOD_ADDのLDAPModの配列

16.1.4.3 戻り値

この関数は、成功した場合にはLDAP_SUCCESSを戻し、失敗した場合にはLDAPリターン・コードを戻します。

16.1.4.4 説明

この関数は、タイプLDAP_MODD_ADDのLDAPModの配列のコピーから、Slapi_Entryを作成します。

16.1.4.5 関連項目

slapi_entry2mods()

16.1.5 slapi_mods_add()

1つの属性値を持つ新しいmodをSlapi_Mods構造体に追加します。

16.1.5.1 構文

#include "slapi-plugin.h"
void slapi_mods_add( Slapi_Mods *smods, int modtype,
const char *type, unsigned long len, const char *val);

16.1.5.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

modtype

LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれか

type

LDAP属性タイプ

len

属性値のバイト単位の長さ

val

属性値

16.1.5.3 説明

この関数は、単一の属性値を含む新しいmodをSlapi_Modsに追加します。modはmodtype、type、lenおよびvalの各値のコピーで構成されます。

16.1.5.4 メモリーに関する注意事項

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.5.5 関連項目

slapi_mods_add_ldapmod()

slapi_mods_add_mod_values()

slapi_mods_add_modbvps()

slapi_mods_add_string()

16.1.6 slapi_mods_add_ldapmod()

LDAPModをSlapi_Mods構造体に追加します。

16.1.6.1 構文

#include "slapi-plugin.h"
void slapi_mods_add_ldapmod(Slapi_Mods *smods, LDAPMod *mod);

16.1.6.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

mod

追加するLDAPModへのポインタ

16.1.6.3 説明

LDAPModをSlapi_Modsに追加します。

16.1.6.4 メモリーに関する注意事項

LDAPModの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.6.5 関連項目

slapi_mods_add_ldapmod()

slapi_mods_add_mod_values()

slapi_mods_add_modbvps()

slapi_mods_add_string()

16.1.7 slapi_mods_add_mod_values()

Slapi_Valueの配列として指定された属性値を使用して、新しいmodをSlapi_Mods構造体に追加します。

16.1.7.1 構文

#include "slapi-plugin.h"
void slapi_mods_add_mod_values( Slapi_Mods *smods, int modtype,
const char *type, Slapi_Value **va );

16.1.7.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

modtype

LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれか

type

LDAP属性タイプ

va

属性値を表す、Slapi_ValueのNULL終了配列

16.1.7.3 説明

この関数は、新しいmodをSlapi_Modsに追加します。modはmodtype、typeおよびvaの各値のコピーで構成されます。この関数は、Slapi_Valueの配列として渡す属性値がある場合に使用します。

16.1.7.4 メモリーに関する注意事項

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

See Also

slapi_mods_add()

slapi_mods_add_ldapmod()

slapi_mods_add_modbvps()

slapi_mods_add_string()

16.1.8 slapi_mods_add_modbvps()

bervalの配列として指定された属性値を使用して、新しいmodをSlapi_Mods構造体に追加します。

16.1.8.1 構文

#include "slapi-plugin.h"
void slapi_mods_add_modbvps( Slapi_Mods *smods, int modtype,
const char *type, struct berval **bvps );

16.1.8.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

modtype

LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれか

type

LDAP属性タイプ

bvps

属性値を表す、bervalのNULL終了配列

16.1.8.3 説明

この関数は、新しいmodをSlapi_Modsに追加します。modはmodtype、typeおよびbvpsの各値のコピーで構成されます。この関数は、bervalの配列として渡す属性値がある場合に使用します。

16.1.8.4 メモリーに関する注意事項

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.8.5 関連項目

slapi_mods_add()

slapi_mods_add_ldapmod()

slapi_mods_add_mod_values()

slapi_mods_add_string()

16.1.9 slapi_mods_add_smod()

Slapi_ModをSlapi_Mods構造体に追加します。

16.1.9.1 構文

#include "slapi-plugin.h"
void slapi_mods_add_smod(Slapi_Mods *smods, Slapi_Mod *smod);

16.1.9.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

smod

追加するSlapi_Modへのポインタ

16.1.9.3 説明

Slapi_ModをSlapi_Modsに追加します。

16.1.9.4 メモリーに関する注意事項

Slapi_Modの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.9.5 関連項目

slapi_mods_add()

slapi_mods_add_mod_values()

slapi_mods_add_modbvps()

slapi_mods_add_string()

16.1.10 slapi_mods_add_string()

文字列として指定された1つの属性値を使用して、新しいmodをSlapi_Mods構造体に追加します。

16.1.10.1 構文

#include "slapi-plugin.h"
void slapi_mods_add_string( Slapi_Mods *smods, int modtype,
const char *type, const char *val);

16.1.10.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

modtype

LDAP_MOD_ADD、LDAP_MOD_DELETE、LDAP_MOD_REPLACEのいずれか

type

LDAP属性タイプ

val

NULLで終了する文字列として表される属性値

16.1.10.3 説明

この関数は、単一の文字列の属性値を含む新しいmodをSlapi_Modsに追加します。modはmodtype、typeおよびvalの各値のコピーで構成されます。

16.1.10.4 メモリーに関する注意事項

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.10.5 関連項目

slapi_mods_add()

slapi_mods_add_ldapmod()

slapi_mods_add_mod_values()

slapi_mods_add_modbvps()

16.1.11 slapi_mods_done()

Slapi_Mods構造体の内部を解放します。

16.1.11.1 構文

#include "slapi-plugin.h"
void slapi_mods_done(Slapi_Mods *smods);

16.1.11.2 パラメータ

この関数は、次のパラメータを取ります。

smods

Slapi_Mods構造体へのポインタ

16.1.11.3 説明

この関数はSlapi_Modsの内部を、初期化されていない状態のまま解放します。この関数は、スタックが割り当てられたSlapi_Modsで、作業を完了したとき、または再利用するときに使用します。

16.1.11.4 関連項目

slapi_mods_init()

slapi_mods_init_byref()

slapi_mods_init_passin()

16.1.12 slapi_mods_dump()

Slapi_Mods構造体の内容をサーバー・ログにダンプします。

16.1.12.1 構文

#include "slapi-plugin.h"
void slapi_mods_dump(const Slapi_Mods *smods, const char *text);

16.1.12.2 パラメータ

この関数は、次のパラメータを取ります。

smods

Slapi_Modsへのポインタ

text

ログ(Slapi_Modsのコンテンツの前)に含まれる説明テキスト

16.1.12.3 説明

この関数では、デバッグのために、LDAP_DEBUG_ANYログ・レベルを使用して、Slapi_Modsのコンテンツを$INSTANCE_PATH/logs/errorsにダンプします。

16.1.13 slapi_mods_free()

Slapi_Mods構造体を解放します。

16.1.13.1 構文

#include "slapi-plugin.h"
void slapi_mods_free(Slapi_Mods **smods);

16.1.13.2 パラメータ

この関数は、次のパラメータを取ります。

smods

割り当てられたSlapi_Modsへのポインタ

16.1.13.3 説明

この関数は、slapi_mods_new()によって割り当てられたSlapi_Modsを解放します。

16.1.13.4 関連項目

slapi_mods_new()

16.1.14 slapi_mods_get_first_mod()

Slapi_Modsイテレータを初期化し、最初のLDAPModを戻します。

16.1.14.1 構文

#include "slapi-plugin.h"
LDAPMod *slapi_mods_get_first_mod(Slapi_Mods *smods);

16.1.14.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.14.3 戻り値

この関数は、Slapi_Mods内の最初のLDAPModへのポインタを戻すか、modsがない場合にはNULLを戻します。

16.1.15 slapi_mods_get_first_smod()

Slapi_Modsイテレータを初期化し、Slapi_Mods構造体にラップされた最初のmodを戻します。

16.1.15.1 構文

#include "slapi-plugin.h"
Slapi_Mod *slapi_mods_get_first_smod(Slapi_Mods *smods,
Slapi_Mod *smod);

16.1.15.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

smod

modを保持するために使用するSlapi_Modへのポインタ

16.1.15.3 戻り値

この関数は、最初のmodをラップしてSlapi_Modへのポインタを戻すか、modが存在しない場合にはNULLを戻します。

16.1.15.4 説明

Slapi_Mods内のmodsに対して処理を繰り返すには、Slapi_Modsラッパーを使用して、この関数をslapi_mods_get_next_smod()と一緒に使用します。

16.1.15.5 メモリーに関する注意事項

特定のSlapi_Modsに対して処理が繰り返される可能性のあるスレッドは、常に1つのみです。

16.1.15.6 関連項目

slapi_mods_get_next_smod()

16.1.16 slapi_mods_get_ldapmods_byref()

Slapi_Mods構造体のLDAPModの配列への参照を取得します。

16.1.16.1 構文

#include "slapi-plugin.h"
LDAPMod **slapi_mods_get_ldapmods_byref(Slapi_Mods *smods);

16.1.16.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.16.3 戻り値

この関数は、Slapi_Modsによって所有されるLDAPModのNULL終了配列を戻します。

16.1.16.4 説明

この関数を使用して、Slapi_Modsに含まれるLDAPModの配列に直接アクセスします。

16.1.16.5 メモリーに関する注意事項

配列の担当は、Slapi_Modsのままとなります。

16.1.16.6 関連項目

slapi_mods_get_ldapmods_passout()

16.1.17 slapi_mods_get_ldapmods_passout()

Slapi_Mods構造体に格納されているLDAPModの配列を取得します。

16.1.17.1 構文

#include "slapi-plugin.h"
LDAPMod **slapi_mods_get_ldapmods_passout(Slapi_Mods *smods);

16.1.17.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.17.3 戻り値

コール元によって所有される、LDAPModのNULL終了配列。

16.1.17.4 説明

Slapi_ModsからLDAPModの配列を取得します。配列の担当は、コール元に転送されます。Slapi_Modsは初期化されていない状態のままとなります。

16.1.17.5 関連項目

slapi_mods_get_ldapmods_byref()

16.1.18 slapi_mods_get_next_mod()

Slapi_Modsイテレータを増分し、次のLDAPModを戻します。

16.1.18.1 構文

#include "slapi-plugin.h"
LDAPMod *slapi_mods_get_next_mod(Slapi_Mods *smods);

16.1.18.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.18.3 戻り値

この関数は、次のLDAPModへのポインタを戻すか、これ以上存在しない場合にはNULLを戻します。

16.1.18.4 説明

Slapi_Mods内のmodsに対して処理を繰り返すには、この関数をslapi_mods_get_first_mod()と一緒に使用します。これにより、終了するまでLDAPModが毎回戻されます。

16.1.18.5 メモリーに関する注意事項

特定のSlapi_Modsに対して処理が繰り返される可能性のあるスレッドは、常に1つのみです。

16.1.18.6 関連項目

slapi_mods_get_first_mod()

16.1.19 slapi_mods_get_next_smod()

Slapi_Modsイテレータを増分し、Slapi_Modsにラップされた次のmodを戻します。

16.1.19.1 構文

#include "slapi-plugin.h"
Slapi_Mod *slapi_mods_get_next_smod(Slapi_Mods *smods,
Slapi_Mod *smod);

16.1.19.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

smod

modを保持するために使用するSlapi_Modへのポインタ

16.1.19.3 戻り値

この関数は、次のmodをラップしてSlapi_Modへのポインタを戻すか、modsがこれ以上存在しない場合にはNULLを戻します。

16.1.19.4 説明

Slapi_Mods内のmodsに対して処理を繰り返すには、Slapi_Modsラッパーを使用して、この関数をslapi_mods_get_first_smod()と一緒に使用します。

16.1.19.5 メモリーに関する注意事項

特定のSlapi_Modsに対して処理が繰り返される可能性のあるスレッドは、常に1つのみです。

16.1.19.6 関連項目

slapi_mods_get_first_smod()

16.1.20 slapi_mods_get_num_mods()

Slapi_Mods構造体の変更の数を取得します。

16.1.20.1 構文

#include "slapi-plugin.h"
int slapi_mods_get_num_mods(const Slapi_Mods *smods);

16.1.20.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.20.3 戻り値

Slapi_Mods内のmodsの数

16.1.21 slapi_mods_init()

Slapi_Modsを初期化します。

16.1.21.1 構文

#include "slapi-plugin.h"
void slapi_mods_init(Slapi_Mods *smods, int initCount);

16.1.21.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

initCount

最初に割り当てる変更の数

16.1.21.3 説明

Slapi_Modsを初期化し、空であり、かつ、指定されたmodsの数に対応する領域が最初に確保されるようにします。

16.1.21.4 メモリーに関する注意事項

どれだけの領域が必要となるかが不明な場合は、initCountに0を使用します。必要に応じて、Slapi_Modsにより増加されます。

16.1.21.5 関連項目

slapi_mods_done()

16.1.22 slapi_mods_init_byref()

既存のLDAPModの配列のラッパーであるSlapi_Modsを初期化します。

16.1.22.1 構文

#include "slapi-plugin.h"
void slapi_mods_init_byref(Slapi_Mods *smods, LDAPMod **mods);

16.1.22.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されていないSlapi_Modsへのポインタ

mods

LDAPModのNULL終了配列

16.1.22.3 説明

LDAPModの配列への参照を含むSlapi_Modsを初期化します。この関数は、Slapi_Mods関数を使用してLDAPMod配列アイテムにアクセスする場合に役立ちます。

16.1.22.4 メモリーに関する注意事項

Slapi_Modsが破棄されても、この配列は破棄されません。参照によって初期化されたSlapi_Modsに、新しいmodsを挿入することはできません。

16.1.22.5 関連項目

slapi_mods_done()

16.1.23 slapi_mods_init_passin()

LDAPModの配列からSlapi_Mods構造体を初期化します。

16.1.23.1 構文

#include "slapi-plugin.h"
void slapi_mods_init_passin(Slapi_Mods *smods, LDAPMod **mods);

16.1.23.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されていないSlapi_Modsへのポインタ

mods

LDAPModのNULL終了配列

16.1.23.3 説明

この関数は、LDAPModの配列を渡すことによって、Slapi_Modsを初期化します。この関数は、LDAPModの配列をSlapi_Modsに変換します。

16.1.23.4 メモリーに関する注意事項

配列とその要素の担当は、Slapi_Modsに転送されます。Slapi_Modsが破棄されると、配列とその要素は破棄されます。

16.1.23.5 関連項目

slapi_mods_done()

16.1.24 slapi_mods_insert_after()

イテレータの現在位置より後のSlapi_Mods構造体にLDAPModを挿入します。

16.1.24.1 構文

#include "slapi-plugin.h"
void slapi_mods_insert_after(Slapi_Mods *smods, LDAPMod *mod);

16.1.24.2 パラメータ

この関数は、次のパラメータを取ります。

smods

有効なイテレータの位置のある初期化されたSlapi_Modsへのポインタ

mod

挿入するLDAPModへのポインタ

16.1.24.3 説明

この関数は、Slapi_ModsにおけるSlapi_Modsイテレータの現在の位置の直後に、LDAPModを挿入します。イテレータの位置は変更されません。

16.1.24.4 メモリーに関する注意事項

LDAPModの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.24.5 関連項目

slapi_mods_get_first_mod()

slapi_mods_get_first_smod()

slapi_mods_get_next_mod()

slapi_mods_get_next_smod()

16.1.25 slapi_mods_insert_at()

Slapi_Modsの任意の場所にLDAPModを挿入します。

16.1.25.1 構文

#include "slapi-plugin.h"
void slapi_mods_insert_at(Slapi_Mods *smods, LDAPMod *mod, int pos);

16.1.25.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

mod

挿入するLDAPModへのポインタ

pos

新しいmodを挿入する位置。最小値は0です。最大値はmodsの現在の数です。

16.1.25.3 説明

この関数は、Slapi_Modsの指定された位置にLDAPModを挿入します。位置0 (ゼロ)は最初のmodを参照します。位置がmodsの現在の数と同じ場合は、追加が発生します。指定された位置以上のmodsは1つずつ上へ移動し、指定された位置は新しく挿入されたmodを参照します。

16.1.25.4 メモリーに関する注意事項

LDAPModの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.26 slapi_mods_insert_before()

イテレータの現在位置より前のSlapi_Mods構造体にLDAPModを挿入します。

16.1.26.1 構文

#include "slapi-plugin.h"
void slapi_mods_insert_before(Slapi_Mods *smods, LDAPMod *mod);

16.1.26.2 パラメータ

この関数は、次のパラメータを取ります。

smods

有効なイテレータの位置のある初期化されたSlapi_Modsへのポインタ

mod

挿入するLDAPModへのポインタ

16.1.26.3 説明

Slapi_ModsにおけるSlapi_Modsイテレータの現在の位置の直前に、LDAPModを挿入します。イテレータの位置は変更されません。

16.1.26.4 メモリーに関する注意事項

LDAPModの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.26.5 関連項目

slapi_mods_get_first_mod()

slapi_mods_get_next_mod()

16.1.27 slapi_mods_insert_smod_at()

Slapi_Modsの任意の場所にSlapi_Modを挿入します。

16.1.27.1 構文

#include "slapi-plugin.h"
void slapi_mods_insert_smod_at(Slapi_Mods *smods, Slapi_Mod *smod,
int pos);

16.1.27.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

smod

挿入するSlapi_Modへのポインタ。

pos

Slapi_Modを挿入する位置。最小値は0です。最大値はmodsの現在の数です。

16.1.27.3 説明

この関数は、Slapi_Modsの指定された位置にSlapi_Modを挿入します。位置0 (ゼロ)は最初のmodを参照します。位置がmodsの現在の数と同じ場合は、追加が発生します。指定された位置以上のmodsは1つずつ上へ移動し、指定された位置は新しく挿入されたmodを参照します。

16.1.27.4 メモリーに関する注意事項

Slapi_Modの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.28 slapi_mods_insert_smod_before()

イテレータの現在位置より前のSlapi_Mods構造体にSlapi_Modを挿入します。

16.1.28.1 構文

#include "slapi-plugin.h"
void slapi_mods_insert_smod_before(Slapi_Mods *smods,
Slapi_Mod *smod);

16.1.28.2 パラメータ

この関数は、次のパラメータを取ります。

smods

有効なイテレータの位置のある初期化されたSlapi_Modsへのポインタ

smod

挿入するSlapi_Modへのポインタ。

16.1.28.3 説明

Slapi_ModsにおけるSlapi_Modsイテレータの現在の位置の直前に、Slapi_Modを挿入します。イテレータの位置は変更されません。

16.1.28.4 メモリーに関する注意事項

Slapi_Modの担当は、Slapi_Modsに転送されます。

この関数は、slapi_mods_init_byref()で初期化されたSlapi_Modsでは使用しないでください。

16.1.28.5 関連項目

slapi_mods_get_first_mod()

slapi_mods_get_next_mod()

16.1.29 slapi_mods_iterator_backone()

Slapi_Modsイテレータの現在位置を減分します。

16.1.29.1 構文

#include "slapi-plugin.h"
void slapi_mods_iterator_backone(Slapi_Mods *smods);

16.1.29.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.29.3 説明

この関数は、イテレータを1つ前の位置に戻します。

16.1.29.4 関連項目

slapi_mods_get_first_mod()

slapi_mods_get_first_smod()

slapi_mods_get_next_mod()

slapi_mods_get_next_smod()

16.1.30 slapi_mods_new()

初期化されていない新しいSlapi_Mods構造体を割り当てます。

16.1.30.1 構文

#include "slapi-plugin.h"
Slapi_Mods* slapi_mods_new( void );

16.1.30.2 パラメータ

この関数にパラメータはありません。

16.1.30.3 戻り値

割り当てられた、初期化されていないSlapi_Modsへのポインタ。

16.1.30.4 説明

この関数は、新しい初期化済Slapi_Modsを割り当てます。

16.1.30.5 メモリーに関する注意事項

この関数は、スタックではなくヒープから割り当てられたSlapi_Modsが必要な場合に使用します。

16.1.30.6 関連項目

slapi_mods_free()

16.1.31 slapi_mods_remove()

Slapi_Modsイテレータの現在位置でmodを削除します。

16.1.31.1 構文

#include "slapi-plugin.h"
void slapi_mods_remove(Slapi_Mods *smods);

16.1.31.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

16.1.31.3 説明

この関数は、現在のイテレータの位置にあるmodを削除します。

16.1.31.4 関連項目

slapi_mods_get_first_mod()

slapi_mods_get_first_smod()

slapi_mods_get_next_mod()

slapi_mods_get_next_smod()

16.1.32 slapi_mods_remove_at()

指定されたSlapi_Modsイテレータの位置でmodを削除します。

16.1.32.1 構文

#include "slapi-plugin.h"
void slapi_mods_remove_at(Slapi_Mods *smods, int pos);

16.1.32.2 パラメータ

この関数は、次のパラメータを取ります。

smods

初期化されたSlapi_Modsへのポインタ

pos

削除するmodの位置

16.1.32.3 説明

この関数は、Slapi_Mods内の変更に対して処理を繰り返すときにカウントすることによって取得した、posイテレータの位置にあるmodを削除します。

16.1.32.4 関連項目

slapi_mods_get_first_mod()

slapi_mods_get_first_smod()

slapi_mods_get_next_mod()

slapi_mods_get_next_smod()

16.1.33 slapi_mr_filter_index()

一致ルールのフィルタ索引関数をコールします。

16.1.33.1 構文

#include "slapi-plugin.h"
int slapi_mr_filter_index(Slapi_Filter* f, Slapi_PBlock* pb);

16.1.33.2 パラメータ

この関数は、次のパラメータを取ります。

f

一致ルールOIDを含むフィルタ

pb

フィルタ索引関数に渡すパラメータ・ブロック

16.1.33.3 説明

この関数を使用すると、プラグインで一致ルールのフィルタ索引関数をコールできます。

16.1.33.4 戻り値

この関数は、正常終了した場合は0を戻します。フィルタ内のルールに使用できるフィルタ索引関数がない場合は、LDAP_UNAVAILABLE_CRITICAL_EXTENSIONを戻します。パラメータ・ブロック引数の設定について重大な問題がある場合は、-1を戻します。

16.1.34 slapi_mr_indexer_create()

一致ルールのインデクサ・ファクトリ関数へのポインタをパラメータ・ブロックに設定します。

16.1.34.1 構文

#include "slapi-plugin.h"
int slapi_mr_indexer_create(Slapi_PBlock * pb);

16.1.34.2 パラメータ

この関数は、次のパラメータを取ります。

pb

SLAPI_PLUGIN_MR_OIDに影響を及ぼした一致ルールのオブジェクト識別子を含むパラメータ・ブロック

16.1.34.3 説明

この関数を使用すると、プラグインで一致ルールのインデクサ・ファクトリ関数をコールできます。成功した場合、この関数により、pbのSLAPI_PLUGIN_MR_INDEXER_CREATE_FNが、インデクサ・ファクトリ関数を指すように設定されます。

16.1.34.4 戻り値

この関数は、正常終了した場合は0を戻します。一致ルールに使用できるインデクサ・ファクトリ関数がない場合は、LDAP_UNAVAILABLE_CRITICAL_EXTENSIONを戻します。パラメータ・ブロック引数の取得または設定について重大な問題がある場合は、-1を戻します。

16.1.35 slapi_new_condvar()

条件変数を割り当てます。

16.1.35.1 構文

#include "slapi-plugin.h"
Slapi_CondVar *slapi_new_condvar( Slapi_Mutex *mutex );

16.1.35.2 パラメータ

この関数は、次のパラメータを取ります。

mutex

ブロックに使用されるmutex

16.1.35.3 説明

この関数を使用すると、待機と通知のメカニズムを使用したスレッド同期を実行できます。

16.1.35.4 戻り値

成功した場合、この関数は新しい条件変数へのポインタを戻します。それ以外の場合はNULLを戻します。

16.1.35.5 メモリーに関する注意事項

条件変数を作成するにはこの関数をコールし、条件変数を解放するにはslapi_destroy_condvar()をコールします。

16.1.35.6 関連項目

slapi_destroy_condvar()

slapi_notify_condvar()

slapi_wait_condvar()

16.1.36 slapi_new_mutex()

mutexを割り当てます。

16.1.36.1 構文

#include "slapi-plugin.h"
Slapi_Mutex *slapi_new_mutex( void );

16.1.36.2 戻り値

成功した場合、この関数は新しいmutexへのポインタを戻します。それ以外の場合はNULLを戻します。

16.1.36.3 説明

この関数を使用すると、スレッド同期を実行できます。1つのスレッドがslapi_lock_mutex()を使用してmutexをロックすると、ロックの取得を試行する他のスレッドは、mutexを保持するスレッドによってslapi_unlock_mutex()がコールされるまでブロックされます。

16.1.36.4 メモリーに関する注意事項

mutexを解放するには、slapi_destroy_mutex()をコールします。

16.1.36.5 関連項目

slapi_destroy_mutex()

slapi_lock_mutex()

16.1.37 slapi_notify_condvar()

条件変数における変更を通知します。

16.1.37.1 構文

#include "slapi-plugin.h"
int slapi_notify_condvar( Slapi_CondVar *cvar, int notify_all );

16.1.37.2 パラメータ

この関数は、次のパラメータを取ります。

cvar

変更された条件変数。

notify_all

NULLを指定すると、通知を待機している次のスレッドにのみ通知されます。それ以外の場合、すべてのスレッドに通知されます。

16.1.37.3 説明

この関数を使用すると、待機と通知のメカニズムを使用したスレッド同期を実行できます。

16.1.37.4 戻り値

成功した場合、この関数は1を戻します。それ以外の場合はNULLを戻します。

16.1.37.5 メモリーに関する注意事項

条件変数への変更を待機するには、slapi_wait_condvar()をコールします。

16.1.37.6 関連項目

slapi_destroy_condvar()

slapi_new_condvar()

slapi_wait_condvar()

16.1.38 slapi_op_abandoned()

クライアントが現在の操作(パラメータ・ブロックに渡される操作)を中止したかどうかを判別します。

16.1.38.1 構文

#include "slapi-plugin.h"
int slapi_op_abandoned( Slapi_PBlock *pb );

16.1.38.2 パラメータ

この関数は、次のパラメータを取ります。

pb

現在の操作から渡されるパラメータ・ブロック

16.1.38.3 説明

この関数を使用すると、パラメータ内のPBlockに関連付けられた操作が中止されたかどうかを確認できます。この関数は、長時間実行されるプラグインからの操作ステータスを定期的に確認する場合に役立ちます。

16.1.38.4 戻り値

このファンクションは、次の値のいずれかを戻します。

- 操作が中止された場合には、1

- 操作が中止されなかった場合には、0

16.1.39 slapi_op_get_type()

Slapi_Operationのタイプを取得します。

16.1.39.1 構文

#include "slapi-plugin.h"
unsigned long slapi_op_get_type(Slapi_Operation * op);

16.1.39.2 パラメータ

この関数は、次のパラメータを取ります。

op

タイプの取得元となる操作

16.1.39.3 説明

この関数は、操作のタイプを戻します。slapi_pblock_get()をSlapi_Operationパラメータとともに使用すると、pblock構造体からSlapi_Operation構造体を抽出できます。次に例を示します。

slapi_pblock_get (pb, SLAPI_OPERATION, &op);

16.1.39.4 戻り値

この関数は、次の操作タイプのいずれかを戻します。

- SLAPI_OPERATION_BIND

- SLAPI_OPERATION_UNBIND

- SLAPI_OPERATION_SEARCH

- SLAPI_OPERATION_MODIFY

- SLAPI_OPERATION_ADD

- SLAPI_OPERATION_DELETE

- SLAPI_OPERATION_MODDN

- SLAPI_OPERATION_MODRDN

- SLAPI_OPERATION_COMPARE

- SLAPI_OPERATION_ABANDON

- SLAPI_OPERATION_EXTENDED

16.1.39.5 関連項目

slapi_pblock_get()

16.1.40 slapi_pblock_destroy()

指定されたパラメータ・ブロックをメモリーから解放します。

16.1.40.1 構文

#include "slapi-plugin.h"
void slapi_pblock_destroy( Slapi_PBlock *pb );

16.1.40.2 パラメータ

この関数は、次のパラメータを取ります。

pb

解放するパラメータ・ブロック

16.1.40.3 メモリーに関する注意事項

解放するパラメータ・ブロックは、slapi_pblock_new()を使用して作成されている必要があります。スタックに割り当てられたパラメータ・ブロック、Slapi_PBlock pb;または別のメモリー・アロケータとともにこの関数を使用することはサポートされておらず、使用した場合、メモリー・エラーやメモリー・リークが発生する可能性があります。次に例を示します。

Slapi_PBlock *pb = malloc(sizeof(Slapi_PBlock));

この関数をコールした後、解放されたメモリーが関数コンテキストで再利用されないように、次のようにパラメータ・ブロックのポインタをNULLに設定する必要があります。

slapi_pblock_destroy(pb);
pb = NULL;

ポインタをこのように再利用すると、なんらかの困難な方法を使用してメモリー・リークや他の異常な動作を検出するよりも、セグメンテーション・フォルトの識別が簡単になります。

この関数は、NULLポインタを指定してコールすると安全です。次に例を示します。

Slapi_PBlock *pb = NULL;
slapi_pblock_destroy(pb);

これにより、slapi_pblock_destroy()をコールする前にNULLを確認する必要がなくなります。

16.1.40.4 関連項目

slapi_pblock_new()

16.1.41 slapi_pblock_get()

パラメータ・ブロックから、名前/値ペアの値を取得します。

16.1.41.1 構文

#include "slapi-plugin.h"
int slapi_pblock_get( Slapi_PBlock *pb, int arg, void *value );

16.1.41.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

arg

取得する名前/値ペアのID。指定できるIDのリストは、第14章「データ型と構造体のリファレンス」を参照してください。

value

パラメータ・ブロックから取得される値へのポインタ。

16.1.41.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 正常終了した場合は0

- エラーが発生した場合には、-1 (無効なIDが指定された場合など)

16.1.41.4 メモリーに関する注意事項

void *value引数は、常に、取得する値のタイプへのポインタである必要があります。

int connid = 0;
...
retval = slapi_pblock_get(pb, SLAPI_CONN_ID, &connid);

SLAPI_CONN_IDは整数値であるため、値を取得するには、整数へのポインタまたはその整数のアドレスを渡します。同様に、char * value (文字列)については、その値へのポインタまたはその値のアドレスを渡します。次に例を示します。

char *binddn = NULL;
...
retval = slapi_pblock_get(pb, SLAPI_CONN_DN, &binddn);

一部のプラットフォームで特定のコンパイラを使用する場合には、値を(void *)にキャストすることが必要となることがあります。

slapi_pblock_get()のコールが失敗した場合に、初期化されていないメモリーからの読取りを回避するために、slapi_pblock_get()をコールする前に、この値を0またはNULLにすることをお薦めします。

ほとんどの場合、コール元で戻り値を解放しないようにする必要があります。値は、通常、内部的に解放されるか、またはslapi_pblock_destroy()のコールを介して解放されます。例外は、コール元によって、slapi_pblock_set()を介して値が明示的に設定される場合です。この場合は、コール元がメモリー管理を担当します。値が解放される場合、解放後、値NULLを使用してslapi_pblock_set()をコールすることをお薦めします。次に例を示します。

char *someparam = NULL;
...
someparam = slapi_ch_strdup(somestring);
slapi_pblock_set(pb, SOME_PARAM, someparam);
someparam = NULL; /* avoid dangling reference */
...
slapi_pblock_get(pb, SOME_PARAM, &someparam);
slapi_pblock_set(pb, SOME_PARAM, NULL); /* Make sure no one else
references this. */
slapi_ch_free_string(&someparam);
...

一部の内部関数では渡された値が変更される場合があるため、潜在的に不確定なポインタに依存するのではなく、slapi_pblock_get()を使用して値を再度取得することをお薦めします。このことは前述の例に示されており、この例では、someparamをパラメータ・ブロックで設定した後にNULLに設定しています。

16.1.41.5 関連項目

slapi_pblock_destroy()

slapi_pblock_set()

16.1.42 slapi_pblock_new()

新しいパラメータ・ブロックを作成します。

16.1.42.1 構文

#include "slapi-plugin.h"
Slapi_PBlock *slapi_pblock_new();

16.1.42.2 戻り値

新しいパラメータ・ブロックへのポインタ

16.1.42.3 メモリーに関する注意事項

slapi_pblock_new()によって割り当てられたパラメータ・ブロックのポインタは、常にslapi_pblock_destroy()によって解放される必要があります。free()などのメモリーを解放する他の関数はサポートされておらず、使用するとクラッシュやメモリー・リークが発生する可能性があります。

16.1.43 slapi_pblock_set()

パラメータ・ブロックに名前/値ペアの値を設定します。

16.1.43.1 構文

#include "slapi-plugin.h"
int slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value );

16.1.43.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

arg

設定する名前/値ペアのID。指定できるIDのリストは、第14章「データ型と構造体のリファレンス」を参照してください。

value

パラメータ・ブロックに設定する値へのポインタ。

16.1.43.3 戻り値

この関数は、成功した場合には0を戻し、エラーが発生した場合(無効なIDが指定された場合など)には-1を戻します。

16.1.43.4 メモリーに関する注意事項

渡される値は、整数の引数の場合も、常にポインタである必要があります。たとえば、ManageDSAITコントロールを使用して検索を実行する場合は、次のようになります。

int managedsait = 1;
...
slapi_pblock_set(pb, SLAPI_MANAGEDSAIT, &managedsait);

次の例のようなコールでは、クラッシュが発生します。

slapi_pblock_set(pb, SLAPI_MANAGEDSAIT, 1);

ただし、char * strings、char **arrays、Slapi_Backend *などのすでにポインタである値の場合、値を直接渡すことができます。次に例を示します。

char *target_dn = slapi_ch_strdup(some_dn);
slapi_pblock_set(pb, SLAPI_TARGET_DN, target_dn);

または、

slapi_pblock_set(pb, SLAPI_TARGET_DN, NULL);

使用するコンパイラによっては、値の引数を(void *)にキャストする必要があります。

コール元が渡されたメモリーを割り当てる場合、コール元がこのメモリーの解放を担当します。また、潜在的に不確定なポインタに依存するのではなく、slapi_pblock_get()を使用して、解放する値を取得することもお薦めします。詳細は、slapi_pblock_get()の例を参照してください。

プラグインを登録するパラメータを設定する場合、プラグイン・パラメータの多くはタイプに依存するため、通常、最初にプラグイン・タイプを設定する必要があります。たとえば、プラグインに拡張操作OIDのリストを設定する前に、SLAPI_PLUGIN_TYPEを拡張操作に設定します。

16.1.43.5 関連項目

slapi_pblock_get()

16.1.44 slapi_pw_find_sv()

指定されたパスワードが、属性のハッシュ値のいずれかと一致するかどうかを判別します。たとえば、この関数をコールして、指定されたパスワードがuserpassword属性の値と一致するかどうかを判別できます。

16.1.44.1 構文

#include "slapi-plugin.h"
int slapi_pw_find_sv( Slapi_Value **vals, const Slapi_Value *v );

16.1.44.2 パラメータ

この関数は、次のパラメータを取ります。

vals

userpasswordなどのパスワードを格納する属性の値を保持するSlapi_Value構造体ポインタの配列へのポインタ

v

確認するパスワードを含むSlapi_Value構造体へのポインタ

たとえば、パラメータ・ブロック内のSLAPI_BIND_CREDENTIALSパラメータからこの値を取得し、slapi_value_init_berval()を使用してSlapi_Valueを作成できます。

16.1.44.3 戻り値

この関数は、vによって指定されたパスワードがvalsで見つかった場合には0を戻し、パスワードvがvalsで見つからなかった場合にはゼロ以外の値を戻します。

16.1.44.4 メモリーに関する注意事項

確認するエントリに含まれるuserpassword属性のパスワード値の正確な数を保持するようにサイズ設定されたvalsに、Slapi_Value構造体の配列を割り当てたり解放する必要があります。結果として得られる配列が、NULLで終了することはありません。より単純なメモリー割当てモデルにおいては、かわりにslapi_pw_find_valueset()を使用します。

16.1.44.5 説明

userpassword属性内のエントリのパスワードがサーバーに格納される場合、パスワードは異なるスキームを使用してハッシュされます。

指定されたパスワードがuserpassword属性のいずれかの値であるかどうかを判別するには、この関数を使用します。この関数は、パスワードを格納するのに使用されたパスワード・スキームを判別し、適切な比較関数を使用して、指定された値をuserpassword属性のハッシュ値と比較します。

16.1.44.6 関連項目

slapi_pw_find_valueset()

16.1.45 slapi_pw_find_valueset()

指定されたパスワードが、属性のハッシュ値のいずれかと一致するかどうかを判別します。たとえば、この関数をコールして、指定されたパスワードがuserpassword属性の値と一致するかどうかを判別できます。

16.1.45.1 構文

#include "slapi-plugin.h"
int slapi_pw_find_valueset(Slapi_Valueset *valset,
const Slapi_Value *v);

16.1.45.2 パラメータ

この関数は、次のパラメータを取ります。

valset

userpasswordなどのパスワードを格納する属性の値を含むSlapi_ValueSet構造体へのポインタ

v

確認するパスワードを含むSlapi_Value構造体へのポインタ

たとえば、パラメータ・ブロック内のSLAPI_BIND_CREDENTIALSパラメータからこの値を取得し、slapi_value_init_berval()を使用してSlapi_Valueを作成できます。

16.1.45.3 戻り値

この関数は、vによって指定されたパスワードがvalsetで見つかった場合には0を戻し、パスワードvがvalsetで見つからなかった場合にはゼロ以外の値を戻します。

16.1.45.4 説明

userpassword属性内のエントリのパスワードがサーバーに格納される場合、パスワードは異なるスキームを使用してハッシュされます。

指定されたパスワードがuserpassword属性のいずれかの値であるかどうかを判別するには、この関数を使用します。この関数は、パスワードを格納するのに使用されたパスワード・スキームを判別し、適切な比較関数を使用して、指定された値をuserpassword属性のハッシュ値と比較します。

16.1.45.5 関連項目

slapi_pw_find_sv()

16.1.46 slapi_rdn_add()

新しいRDNを既存のSlapi_RDN構造体に追加します。

16.1.46.1 構文

#include "slapi-plugin.h"
int slapi_rdn_add(Slapi_RDN *rdn, const char *type,
const char *value);

16.1.46.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

type

追加するRDNのタイプ(cn、o、ouなど)。このパラメータをNULLにすることはできません。

value

追加するRDNの値。このパラメータをNULLにすることはできません。

16.1.46.3 戻り値

通常、この関数は1を戻します。

16.1.46.4 説明

この関数は、新しいタイプ/値ペアを既存のRDNに追加し、rdnが空の場合には新しいRDNとしてタイプ/値ペアを設定します。この関数ではFLAG_RDNSフラグをリセットし、これにより、Slapi_RDN構造体内のRDN配列が、新しいRDNと比較して最新の状態でなくなったことが示されます。

16.1.46.5 関連項目

slapi_rdn_get_num_components()

16.1.47 slapi_rdn_compare()

2つのRDNを比較します。

16.1.47.1 構文

#include "slapi-plugin.h"
int slapi_rdn_compare(Slapi_RDN *rdn1, Slapi_RDN *rdn2);

16.1.47.2 パラメータ

この関数は、次のパラメータを取ります。

rdn1

比較する最初のRDN

rdn2

比較する2番目のRDN

16.1.47.3 戻り値

この関数は、rdn1およびrdn2が同じRDNコンポーネントを含む場合には0を戻し、含まない場合には-1を戻します。

16.1.47.4 説明

この関数は、rdn1とrdn2を比較します。rdn1とrdn2が同じRDNであるとみなされる場合、これらのコンポーネントは必ずしも同じ順序である必要はありません。

16.1.48 slapi_rdn_contains()

Slapi_RDN構造体に、指定されたタイプ/値ペアと一致するRDNが保持されているかどうかを確認します。

16.1.48.1 構文

#include "slapi-plugin.h"
int slapi_rdn_contains(Slapi_RDN *rdn, const char *type,
const char *value,size_t length);

16.1.48.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を含むSlapi_RDN構造体。

type

検索するRDNのタイプ(cn、o、ouなど)。

value

検索するRDNの値。

length

RDNの検索時に文字列操作に考慮する必要があるvalueの長さを指定します。

16.1.48.3 戻り値

この関数は、rdnにtype、valueおよびlengthと一致するRDNが含まれる場合には1を戻し、必要なタイプ/値と一致するRDNが含まれない場合には0を戻します。

16.1.48.4 説明

この関数は、パラメータで指定されたtypeとvalueの両方と一致する、Slapi_RDN構造体rdn内のRDNを検索します。この関数はslapi_rdn_get_index()をコールして、戻り値が-1以外の値であることを検証します。

16.1.48.5 関連項目

slapi_rdn_contains_attr()

slapi_rdn_get_index()

16.1.49 slapi_rdn_contains_attr()

Slapi_RDN構造体に、指定されたタイプと一致するRDNが含まれるかどうかを確認して、trueの場合には対応する属性値を取得します。

16.1.49.1 構文

#include "slapi-plugin.h"
int slapi_rdn_contains_attr(Slapi_RDN *rdn, const char *type,
char **value);

16.1.49.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を含むSlapi_RDN構造体。

type

検索するRDNのタイプ(cn、o、ouなど)。

value

タイプがパラメータtypeのコンテンツと一致する最初のRDNの値を保持するリポジトリ。関数の戻り値でこのパラメータがNULLの場合、必要なタイプを含むRDNはrdn内に存在しません。

16.1.49.3 戻り値

この関数は、指定されたタイプと一致するRDNがrdnに含まれる場合には1を戻し、一致しない場合には0を戻します。

16.1.49.4 説明

この関数は、パラメータで指定されたタイプと一致する、Slapi_RDN構造体rdn内のRDNを検索します。この関数はslapi_rdn_get_index_attr()をコールして、戻り値が-1以外の値であることを検証します。成功した場合、対応する属性値も戻します。

16.1.49.5 関連項目

slapi_rdn_contains()

slapi_rdn_get_index_attr()

16.1.50 slapi_rdn_done()

Slapi_RDN構造体のインスタンスを消去します。

16.1.50.1 構文

#include "slapi-plugin.h"
void slapi_rdn_done(Slapi_RDN *rdn);

16.1.50.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

消去する構造体へのポインタ

16.1.50.3 説明

この関数は、Slapi_RDN構造体のコンテンツを消去します。これにより、RDN値と分割されたRDNの配列の両方が解放されます。次に、これらのポインタはNULLに設定されます。

16.1.50.4 関連項目

slapi_rdn_free()

slapi_rdn_init()

16.1.51 slapi_rdn_free()

Slapi_RDN構造体を解放します。

16.1.51.1 構文

#include "slapi-plugin.h"
void slapi_rdn_free(Slapi_RDN **rdn);

16.1.51.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

解放するSlapi_RDN構造体のポインタへのポインタ

16.1.51.3 説明

この関数は、Slapi_RDN構造体のコンテンツと、rdnのコンテンツが指す構造体自体の両方を解放します。

16.1.51.4 関連項目

slapi_rdn_done()

slapi_rdn_new()

16.1.52 slapi_rdn_get_first()

Slapi_RDN構造体に格納されている最初のRDNに対応するタイプ/値ペアを取得します。

16.1.52.1 構文

#include "slapi-plugin.h"
int slapi_rdn_get_first(Slapi_RDN *rdn, char **type, char **value);

16.1.52.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を含むSlapi_RDN構造体。

type

最初のRDNのタイプを保持するリポジトリ。関数の戻り値でこのパラメータがNULLの場合、rdnは空です。

value

最初のRDNのタイプを保持するリポジトリ。関数の戻り値でこのパラメータがNULLの場合、rdnは空です。

16.1.52.3 戻り値

この関数は、rdnが空の場合には-1を戻し、操作が成功した場合には1を戻します。

16.1.52.4 説明

この関数は、rdnに格納された最初のRDNに対応するタイプ/値ペアを取得します。たとえば、RDNがcn=Joeyである場合、関数はtype戻りパラメータにcnを配置し、valueにJoeyを配置します。

16.1.52.5 関連項目

slapi_rdn_get_next()

slapi_rdn_get_rdn()

16.1.53 slapi_rdn_get_index()

指定されたタイプおよび値を含むRDNの後に位置するRDNの索引を取得します。

16.1.53.1 構文

#include "slapi-plugin.h"
int slapi_rdn_get_index(Slapi_RDN *rdn, const char *type,
const char *value, size_t length);

16.1.53.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を含むSlapi_RDN構造体。

type

検索するRDNのタイプ(cn、o、ouなど)。

value

検索するRDNの値。

length

RDNの検索時に文字列比較に考慮する必要があるvalueの長さを指定します。一致するRDN値は、指定された長さ以内である必要があります。

16.1.53.3 戻り値

この関数は、パラメータtypeおよびvalueのコンテンツと一致するRDNの後に位置するRDNの索引を戻します。rdnに格納されたRDNが指定された値/タイプペアと一致しない場合、-1を戻します。

16.1.53.4 説明

この関数は、パラメータで指定されたtypeとvalueの両方と一致する、Slapi_RDN構造体rdn内のRDNを検索します。成功した場合、一致するRDNの位置を戻します。

16.1.53.5 関連項目

slapi_rdn_contains()

slapi_rdn_get_index_attr()

16.1.54 slapi_rdn_get_index_attr()

指定されたタイプと一致する、Slapi_RDN構造体内の最初のRDNの位置および属性値を取得します。

16.1.54.1 構文

#include "slapi-plugin.h"
int slapi_rdn_get_index_attr(Slapi_RDN *rdn, const char *type,
char **value);

16.1.54.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を含むSlapi_RDN構造体。

type

検索するRDNのタイプ(cn、o、ouなど)。

value

タイプがパラメータtypeのコンテンツと一致する最初のRDNの値を保持するリポジトリ。関数の戻り値でこのパラメータがNULLの場合、RDNはrdn内に存在しません。

16.1.54.3 戻り値

この関数は、コンテンツ・タイプと一致するRDNがない場合には-1を戻し、typeのコンテンツと一致する場合にはRDN内の最初のRDNの実際の位置を戻します。

16.1.54.4 説明

この関数は、パラメータで指定されたタイプと一致する、Slapi_RDN構造体rdn内のRDNを検索します。成功した場合、一致するRDNの位置および対応する属性値を戻します。

16.1.54.5 関連項目

slapi_rdn_get_index()

16.1.55 slapi_rdn_get_next()

Slapi_RDN構造体に格納されたRDN内から、特定のRDNのタイプ/値ペアを取得します。

16.1.55.1 構文

#include "slapi-plugin.h"
int slapi_rdn_get_next(Slapi_RDN *rdn, int index, char **type,
char **value);

16.1.55.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を含むSlapi_RDN構造体。

index

現在必要なRDNに先行するRDNの位置を示します。

type

次(index+1)のRDNのタイプ(cn、o、ouなど)を保持するリポジトリ。関数の戻り値でこのパラメータがNULLの場合、RDNは存在しません。

value

次(index+1)のRDNの値を保持するリポジトリ。このパラメータがNULLの場合、RDNは存在しません。

16.1.55.3 戻り値

この関数は、索引の位置にRDNがない場合には-1を戻し、操作が成功した場合には取得したRDNの実際の位置を戻します。

16.1.55.4 説明

この関数は、rdn内の次(index+1)の位置に格納されたRDNに対応するタイプ/値ペアを取得します。値の配列内にある要素の索引は、常に、配列における実際の位置の下にある1つの単位です。

16.1.55.5 関連項目

slapi_rdn_get_first()

slapi_rdn_get_rdn()

16.1.56 slapi_rdn_get_num_components()

Slapi_RDN構造体に存在する、RDNのタイプ/値ペアの数を取得します。

16.1.56.1 構文

#include "slapi-plugin.h"
int slapi_rdn_get_num_components(Slapi_RDN *rdn);

16.1.56.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

16.1.56.3 戻り値

この関数は、rdnに存在する、RDNのタイプ/値ペアの数を戻します。

16.1.56.4 関連項目

slapi_rdn_add()

16.1.57 slapi_rdn_get_rdn()

Slapi_RDN構造体からRDNを取得します。

16.1.57.1 構文

#include "slapi-plugin.h"
const char *slapi_rdn_get_rdn(const Slapi_RDN *rdn);

16.1.57.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

RDN値を保持するSlapi_RDN構造体

16.1.57.3 戻り値

この関数はRDN値を戻します。

16.1.58 slapi_rdn_init()

Slapi_RDN構造体をNULL値で初期化します。

16.1.58.1 構文

#include "slapi-plugin.h"
void slapi_rdn_init(Slapi_RDN *rdn);

16.1.58.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

初期化するSlapi_RDN構造体

16.1.58.3 説明

この関数は、NULL値を使用してSlapi_RDN構造体を初期化します(RDN値と分割されたRDNの配列の両方がNULLに設定されます)。

16.1.58.4 関連項目

slapi_rdn_done()

slapi_rdn_free()

slapi_rdn_new()

16.1.59 slapi_rdn_init_dn()

指定したDNから取得されるRDN値を使用して、Slapi_RDN構造体を初期化します。

16.1.59.1 構文

#include "slapi-plugin.h"
void slapi_rdn_init_dn(Slapi_RDN *rdn,const char *dn);

16.1.59.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

初期化するSlapi_RDN構造体

dn

新しいSlapi_RDN構造体を初期化するために使用されるRDNを含むDN値

16.1.59.3 説明

この関数は、dnパラメータで渡されたDNから取得されるRDN値を使用して、指定されたSlapi_RDN構造体を初期化します。

16.1.59.4 関連項目

slapi_rdn_init_rdn()

slapi_rdn_init_sdn()

16.1.60 slapi_rdn_init_rdn()

RDN値を使用して、Slapi_RDN構造体を初期化します。

16.1.60.1 構文

#include "slapi-plugin.h"
void slapi_rdn_init_rdn(Slapi_RDN *rdn,const Slapi_RDN *fromrdn);

16.1.60.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

初期化するSlapi_RDN構造体

fromrdn

新しいSlapi_RDN構造体で設定されるRDN値

16.1.60.3 説明

この関数は、fromrdnのRDN値を使用して、指定されたSlapi_RDN構造体を初期化します。

16.1.60.4 関連項目

slapi_rdn_init_dn()

slapi_rdn_init_sdn()

16.1.61 slapi_rdn_init_sdn()

指定されたSlapi_DN構造体に含まれたDNから取得されるRDN値を使用して、Slapi_RDN構造体を初期化します。

16.1.61.1 構文

#include "slapi-plugin.h"
void slapi_rdn_init_sdn(Slapi_RDN *rdn,const Slapi_DN *sdn);

16.1.61.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

初期化するSlapi_RDN構造体

sdn

新しいSlapi_RDN構造体を初期化するために使用されるRDNを含むDN値が含まれたSlapi_DN構造体

16.1.61.3 説明

この関数は、sdnパラメータのSlapi_DN構造体内で渡されたDNから取得されるRDN値を使用して、指定されたSlapi_RDN構造体を初期化します。

16.1.61.4 関連項目

slapi_rdn_init_dn()

slapi_rdn_init_rdn()

16.1.62 slapi_rdn_isempty()

RDN値がSlapi_RDN構造体に格納されているかどうかを確認します。

16.1.62.1 構文

#include "slapi-plugin.h"
int slapi_rdn_isempty(const Slapi_RDN *rdn);

16.1.62.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

16.1.62.3 戻り値

この関数は、RDN値が存在しない場合には1を戻し、rdnに値が含まれる場合には0を戻します。

16.1.62.4 関連項目

slapi_rdn_init()

slapi_rdn_done()

slapi_rdn_free()

16.1.63 slapi_rdn_new()

新しいSlapi_RDN構造体を割り当てて、値をNULLに初期化します。

16.1.63.1 構文

#include "slapi-plugin.h"
Slapi_RDN * slapi_rdn_new();

16.1.63.2 パラメータ

この関数にパラメータはありません。

16.1.63.3 戻り値

この関数は、新しく割り当てられた空のままのSlapi_RDN構造体へのポインタを戻します。

16.1.63.4 説明

この関数は、必要なメモリーを割り当てて、RDN値と分割されたRDNの配列の両方をNULLに初期化することによって、新しいSlapi_RDN構造体を作成します。

16.1.63.5 関連項目

slapi_rdn_init()

slapi_rdn_done()

slapi_rdn_free()

16.1.64 slapi_rdn_new_dn()

新しいSlapi_RDN構造体を作成して、指定されたDNから取得されるRDN値を設定します。

16.1.64.1 構文

#include "slapi-plugin.h"
Slapi_RDN *slapi_rdn_new_dn(const char *dn);

16.1.64.2 パラメータ

この関数は、次のパラメータを取ります。

dn

新しいSlapi_RDN構造体を初期化するために使用されるRDNを含むDN値

16.1.64.3 戻り値

この関数は、dnのDN値から取得されるRDNを使用して初期化された、新しいSlapi_RDN構造体へのポインタを戻します。

16.1.64.4 説明

この関数は、新しいSlapi_RDN構造体を作成し、dnパラメータで渡されたDNから取得される値を使用してそのRDNを初期化します。

16.1.64.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.64.6 関連項目

slapi_rdn_new_rdn()

slapi_rdn_new_sdn()

16.1.65 slapi_rdn_new_rdn()

新しいSlapi_RDN構造体を作成して、RDN値を設定します。

16.1.65.1 構文

#include "slapi-plugin.h"
Slapi_RDN * slapi_rdn_new_rdn(const Slapi_RDN *fromrdn);

16.1.65.2 パラメータ

この関数は、次のパラメータを取ります。

fromrdn

新しいSlapi_RDN構造体で設定されるRDN値

16.1.65.3 戻り値

この関数は、fromrdnのコンテンツに設定されたRDNを含む、新しいSlapi_RDN構造体へのポインタを戻します。

16.1.65.4 説明

この関数は、新しいSlapi_RDN構造体を作成し、fromrdnの値を使用してそのRDNを初期化します。

16.1.65.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.65.6 関連項目

slapi_rdn_new_dn()

slapi_rdn_new_sdn()

16.1.66 slapi_rdn_new_sdn()

新しいSlapi_RDN構造体を作成して、指定されたSlapi_RDN構造体に含まれたDNから取得されるRDN値を設定します。

16.1.66.1 構文

#include "slapi-plugin.h"
vSlapi_RDN *slapi_rdn_new_sdn(const Slapi_DN *sdn);

16.1.66.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

新しいSlapi_RDN構造体を初期化するために使用されるRDNを含むDN値が含まれたSlapi_RDN構造体

16.1.66.3 戻り値

この関数は、dnのDN値から取得されるRDNを使用して初期化された、新しいSlapi_RDN構造体へのポインタを戻します。

16.1.66.4 説明

この関数は、新しいSlapi_RDN構造体を作成して、sdnパラメータのSlapi_RDN構造体内で渡されたDNから取得される値を使用して、そのRDNを初期化します。

16.1.66.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.66.6 関連項目

slapi_rdn_new_dn()

slapi_rdn_new_rdn()

16.1.67 slapi_rdn_remove()

Slapi_RDN構造体から、RDNのタイプ/値ペアを削除します。

16.1.67.1 構文

#include "slapi-plugin.h"
int slapi_rdn_remove(Slapi_RDN *rdn, const char *type,
const char *value, size_t length);

16.1.67.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

type

検索するRDNのタイプ(cn、o、ouなど)。

value

検索するRDNの値。

length

RDNの検索時に文字列比較に考慮する必要があるvalueの長さを指定します。

16.1.67.3 戻り値

この関数は、RDNがrdnから削除された場合には1を戻し、RDNが削除されなかった場合には0を戻します。

16.1.67.4 説明

この関数は、指定された基準(type、valueおよびlength)と一致するRDNをrdnから削除します。

16.1.67.5 関連項目

slapi_rdn_remove_attr()

slapi_rdn_remove_index()

16.1.68 slapi_rdn_remove_attr()

Slapi_RDN構造体から、RDNのタイプ/値ペアを削除します。

16.1.68.1 構文

#include "slapi-plugin.h"
int slapi_rdn_remove_attr(Slapi_RDN *rdn, const char *type);

16.1.68.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

type

検索するRDNのタイプ(cn、o、ouなど)。

16.1.68.3 戻り値

この関数は、RDNがrdnから削除された場合には1を戻し、RDNが削除されなかった場合には0を戻します。

16.1.68.4 説明

この関数は、指定されたタイプと一致する最初のRDNをrdnから削除します。

16.1.68.5 関連項目

slapi_rdn_remove()

slapi_rdn_remove_index()

16.1.69 slapi_rdn_remove_index()

Slapi_RDN構造体から、RDNのタイプ/値ペアを削除します。

16.1.69.1 構文

#include "slapi-plugin.h"
int slapi_rdn_remove_index(Slapi_RDN *rdn, int atindex);

16.1.69.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

atindex

削除するRDNのタイプ/値ペアの索引

16.1.69.3 戻り値

この関数は、RDNがrdnから削除された場合には1を戻し、rdnが空であるか、または索引が存在するRDNの数を上回ることが原因でRDNが削除されなかった場合には0を戻します。

16.1.69.4 説明

この関数は、atindex索引を使用して、(atindex+1の位置に配置された)RDNをrdnから削除します。

16.1.69.5 関連項目

slapi_rdn_remove()

slapi_rdn_remove_attr()

16.1.70 slapi_rdn_set_dn()

Slapi_RDN構造体にRDN値を設定します。

16.1.70.1 構文

#include "slapi-plugin.h"
void slapi_rdn_set_dn(Slapi_RDN *rdn,const char *dn);

16.1.70.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

dn

rdnに設定されるRDNを含むDN値

16.1.70.3 説明

この関数は、Slapi_RDN構造体にRDN値を設定します。構造体はメモリーから解放され、新しいRDNを設定する前に、以前のコンテンツすべてから解放されます。新しいRDNは、dnパラメータに存在するDN値から取得されます。

16.1.70.4 関連項目

slapi_rdn_set_rdn()

slapi_rdn_set_sdn()

16.1.71 slapi_rdn_set_rdn()

Slapi_RDN構造体にRDNを設定します。

16.1.71.1 構文

#include "slapi-plugin.h"
void slapi_rdn_set_rdn(Slapi_RDN *rdn,const Slapi_RDN *fromrdn);

16.1.71.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

fromrdn

RDNの取得元のSlapi_RDN構造体

16.1.71.3 説明

この関数は、Slapi_RDN構造体にRDN値を設定します。構造体はメモリーから解放され、新しいRDNを設定する前に、以前のコンテンツすべてから解放されます。

16.1.71.4 関連項目

slapi_rdn_set_dn()

slapi_rdn_set_sdn()

16.1.72 slapi_rdn_set_sdn()

Slapi_RDN構造体にRDN値を設定します。

16.1.72.1 構文

#include "slapi-plugin.h"
void slapi_rdn_set_sdn(Slapi_RDN *rdn,const Slapi_DN *sdn);

16.1.72.2 パラメータ

この関数は、次のパラメータを取ります。

rdn

ターゲットのSlapi_RDN構造体。

sdn

RDNの取得元のSlapi_DN構造体

16.1.72.3 説明

この関数は、Slapi_RDN構造体にRDN値を設定します。構造体はメモリーから解放され、新しいRDNを設定する前に、以前のコンテンツすべてから解放されます。新しいRDNは、Slapi_DN構造体の内部に存在するDN値から取得されます。

16.1.72.4 関連項目

slapi_rdn_set_dn()

slapi_rdn_set_rdn()

16.1.73 slapi_rdn_syntax_check()

この関数は、RDNの値が属性構文ルールに準拠しているかどうかを判別します。

16.1.73.1 構文

#include "slapi-plugin.h"
int slapi_rdn_syntax_check( Slapi_PBlock *pb, const char *rdn );

16.1.73.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

rdn

準拠を確認する値

16.1.73.3 戻り値

次のいずれかの値を戻します。

- rdnが準拠しているか、構文チェックがオフになっている場合には、0

- rdnが属性構文ルールに準拠していない場合には、1

16.1.73.4 メモリーに関する注意事項

pb引数にはNULLを指定できます。これは、SLAPI_IS_REPLICATED_OPERATIONフラグを取得する場合にのみ使用します。このフラグが存在する場合は、構文チェックが行われません。

16.1.74 slapi_register_object_extension()

オブジェクトの拡張を登録します。

16.1.74.1 構文

#include "slapi-plugin.h"
int slapi_register_object_extension(
const char *pluginname,
const char *objectname,
slapi_extension_constructor_fnptr constructor,
slapi_extension_destructor_fnptr destructor,
int *objecttype,
int *extensionhandle);

16.1.74.2 パラメータ

この関数は、次のパラメータを取ります。

pluginname

プラグインを識別する文字列。

objectname

プライベート・データを接続に追加するSLAPI_EXT_CONNECTIONやプライベート・データを操作に追加するSLAPI_EXT_OPERATIONなどの、拡張するオブジェクトの名前。

constructor

オブジェクトの拡張にメモリーを割り当てて拡張を作成するコンストラクタ。

destructor

オブジェクトの拡張に使用されたメモリーを解放するデストラクタ。

objecttype

サーバーによって設定され、拡張を取得するために使用されます。

extensionhandle

サーバーによって設定され、拡張を取得するために使用されます。

16.1.74.3 説明

この関数は、接続や操作などのオブジェクトに対する拡張を登録します。このメカニズムを使用すると、プラグインに、パラメータ・ブロックを使用して実行できない操作などの、操作前プラグインから操作後プラグインに渡される操作とともにプライベート・データを格納できます。

プラグイン初期化関数の一部として、オブジェクトの拡張を登録します。

16.1.74.4 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

16.1.74.5 関連項目

slapi_extension_constructor_fnptr

slapi_extension_destructor_fnptr

slapi_get_object_extension()

slapi_set_object_extension()

16.1.75 slapi_register_plugin()

別のプラグインを登録します。

16.1.75.1 構文

#include "slapi-plugin.h"
int slapi_register_plugin( const char *plugintype, int enabled,
const char *initsymbol, slapi_plugin_init_fnptr initfunc,
const char *name, char **argv, void *group_identity);

16.1.75.2 パラメータ

この関数は、次のパラメータを取ります。

plugintype

「プラグイン登録」で説明されている、プラグイン・タイプを識別する文字列

enabled

登録時にプラグインを有効にするには1、それ以外の場合には0

initsymbol

"my_init_fcn"などの、プラグイン初期化関数initfuncの文字列表現

initfunc

プラグイン初期化関数へのポインタ

name

プラグインの一般名

argv

プラグインに渡される引数

group_identity

通常、この関数をコールするプラグインのSLAPI_PLUGIN_IDENTITYから取得される、プラグイン・グループ識別子

16.1.75.3 説明

この関数は、別のプラグインを登録します。プラグイン初期化関数の一部として、プラグインを登録します。

16.1.75.4 戻り値

この関数は、正常終了した場合は0を戻します。そうでない場合は、-1を戻します。

16.1.75.5 関連項目

slapi_plugin_init_fnptr

16.1.76 slapi_register_role_get_scope()

ロールの有効範囲を決定するコールバックを登録します。

16.1.76.1 構文

#include "slapi-plugin.h"
void slapi_register_role_get_scope(
roles_get_scope_fn_type get_scope_fn);

16.1.76.2 パラメータ

この関数は、次のパラメータを取ります。

get_scope_fn

ロールの範囲を決定するコールバック

16.1.76.3 説明

この関数は、ロールの範囲を評価するコールバックを登録します。プラグイン初期化関数の一部として、コールバックを登録します。

16.1.76.4 関連項目

roles_get_scope_fn_type

slapi_role_get_scope()

16.1.77 slapi_register_supported_control()

指定されたコントロールをサーバーに登録します。この関数により、コントロールがオブジェクト識別子(OID)に関連付けられます。サーバーでは、このOIDが指定されたリクエストが受信すると、この情報を使用して、サーバーまたはそのプラグインでコントロールがサポートされているかどうかを判断します。

16.1.77.1 構文

#include "slapi-plugin.h"
void slapi_register_supported_control( char const *controloid,
unsigned long controlops );

16.1.77.2 パラメータ

この関数は、次のパラメータを取ります。

controloid

登録するコントロールのOID

controlops

コントロールを適用可能な操作

controlops引数には、次のうち1つ以上の値を指定できます。

ID

説明

SLAPI_OPERATION_BIND

指定されたコントロールは、LDAPバインド操作に適用される。

SLAPI_OPERATION_UNBIND

指定されたコントロールは、LDAPアンバインド操作に適用される。

SLAPI_OPERATION_SEARCH

指定されたコントロールは、LDAP検索操作に適用される。

SLAPI_OPERATION_MODIFY

指定されたコントロールは、LDAP変更操作に適用される。

SLAPI_OPERATION_ADD

指定されたコントロールは、LDAP追加操作に適用される。

SLAPI_OPERATION_DELETE

指定されたコントロールは、LDAP削除操作に適用される。

SLAPI_OPERATION_MODDN

指定されたコントロールは、LDAPのDN変更操作に適用される。

SLAPI_OPERATION_MODRDN

指定されたコントロールは、LDAPv3のRDN変更操作に適用される。

SLAPI_OPERATION_COMPARE

指定されたコントロールは、LDAP比較操作に適用される。

SLAPI_OPERATION_ABANDON

指定されたコントロールは、LDAP中止操作に適用される。

SLAPI_OPERATION_EXTENDED

指定されたコントロールは、LDAP v3拡張操作に適用される。

SLAPI_OPERATION_ANY

指定されたコントロールは、すべてのLDAP操作に適用される。

SLAPI_OPERATION_NONE

指定されたコントロールは、いずれのLDAP操作にも適用されない。

値をビットごとにORで結合することによって、値の組合せを指定できます(SLAPI_OPERATION_ADD | SLAPI_OPERATION_DELETEなど)。

16.1.77.3 関連項目

slapi_control_present()

slapi_entry_get_uniqueid()

16.1.78 slapi_register_supported_saslmechanism()

指定されたSimple Authentication and Security Layer (SASL)メカニズムをサーバーに登録します。

16.1.78.1 構文

#include "slapi-plugin.h"
void slapi_register_supported_saslmechanism( char *mechanism );

16.1.78.2 パラメータ

この関数は、次のパラメータを取ります。

mechanism

SASLバインド時にメカニズムを要求するサーバーとクライアントの両方に対してSASLメカニズムを識別する文字列

16.1.78.3 説明

プラグインでサポートされているSASLメカニズムの名前を登録するには、プラグイン初期化関数でこの関数を使用します。次に、SASLバインドを処理する操作前関数では、クライアントによって指定されたSASLバインド・メカニズム名を確認し、バインドの処理を試行するかどうかを決定できます。

16.1.78.4 関連項目

サンプルの$INSTALL_DIR/plugins/slapd/slapi/examples/testsaslbind.cプラグインは、この関数の使用例を示しています。

16.1.79 slapi_rename_internal_set_pb()

内部RDN変更操作のためのパラメータ・ブロックを準備します。

16.1.79.1 構文

#include "slapi-plugin.h"
int slapi_rename_internal_set_pb(Slapi_PBlock *pb,
const char *olddn, const char *newrdn,
const char *newsuperior, int deloldrdn,
LDAPControl **controls, const char *uniqueid,
Slapi_ComponentId *plugin_identity, int operation_flags);

16.1.79.2 パラメータ

この関数は、次のパラメータを取ります。

pb

内部RDN変更操作のためのパラメータ・ブロック

olddn

名前を変更するエントリの識別名

newrdn

適用する新しい相対識別名

newsuperior

名前を変更した後の親のDN

deloldrdn

古いRDNを削除するには1、古いRDNを保持するには0

controls

RDN変更操作用に要求するコントロールの配列

uniqueid

DNを使用しない場合、エントリの一意識別子

plugin_identity

プラグインの初期化時にSLAPI_PLUGIN_IDENTITYから取得したプラグイン識別子です。

operation_flags

NULLまたはSLAPI_OP_FLAG_NEVER_CHAINです。

16.1.79.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合はLDAPエラー・コードを戻します。

16.1.79.4 説明

この関数は、slapi_modrdn_internal_pb()で使用するパラメータ・ブロックを準備します。

16.1.79.5 メモリーに関する注意事項

この関数をコールする前に、slapi_pblock_new()を使用してパラメータ・ブロックを割り当てます。

Directory Serverは、この関数に渡されたパラメータを解放しません。

slapi_modrdn_internal_pb()をコールした後、パラメータ・ブロックを解放します。

16.1.79.6 関連項目

slapi_modrdn_internal_pb()

slapi_pblock_new()

16.1.80 slapi_role_check()

entry_to_checkが指すエントリに、role_dnによって示されるロールが含まれるかどうかを確認します。

16.1.80.1 構文

#include "slapi-plugin.h"
int slapi_role_check(Slapi_Entry *entry_to_check,
Slapi_DN *role_dn,int *present);

16.1.80.2 パラメータ

この関数は、次のパラメータを取ります。

entry_to_check

ロールの存在を確認する対象エントリ。

role_dn

確認するロールのDN。

present

結果が配置される整数へのポインタ。次の結果になります。

- 0以外の場合には存在します。

- 0の場合には存在しません。

16.1.80.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- role_dnがentry_to_checkに存在する場合、成功を示す0を戻し、presentはゼロ以外に設定されます。それ以外の場合には0となります。

- ロールの存在が不明である場合は、ゼロ以外(エラー状況)を戻します。

16.1.81 slapi_role_get_scope()

ロールの有効範囲を指定します。

16.1.81.1 構文

#include "slapi-plugin.h"
int slapi_role_get_scope(Slapi_Entry *role_entry,
Slapi_DN ***scope_dn, int *nb_scope);

16.1.81.2 パラメータ

この関数は、次のパラメータを取ります。

role_entry

ロールを定義するエントリ。

scope_dn

範囲のベースとなるエントリの識別名へのコールバックによって設定されます。

nb_scope

LDAP_SCOPE_BASE、LDAP_SCOPE_ONELEVEL、LDAP_SCOPE_SUBTREEなどの値へのコールバックによって設定されます。

16.1.81.3 説明

この関数は、ロールの範囲を評価するコールバックをトリガーします。

16.1.81.4 メモリーに関する注意事項

この関数に渡されたパラメータが、Directory Serverによって解放またはコピーされることはありません。

16.1.81.5 関連項目

roles_get_scope_fn_type

slapi_register_role_get_scope()

16.1.82 slapi_sdn_add_rdn()

Slapi_RDN構造体に含まれているRDNを、Slapi_DN構造体に含まれているDNに追加します。

16.1.82.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_add_rdn(Slapi_DN *sdn, const Slapi_RDN *rdn);

16.1.82.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

新しいRDNが追加される値を含むSlapi_DN構造体

rdn

DN値に追加されるRDN値を含むSlapi_RDN構造体

16.1.82.3 戻り値

この関数は、rdnのRDN値をdnのDN値に追加することによって形成される新しいDNを含む、Slapi_DN構造体を戻します。

16.1.82.4 関連項目

slapi_sdn_set_rdn()

16.1.83 slapi_sdn_compare()

2つのDNを比較します。

16.1.83.1 構文

#include "slapi-plugin.h"
int slapi_sdn_compare( const Slapi_DN *sdn1, const Slapi_DN *sdn2 );

16.1.83.2 パラメータ

この関数は、次のパラメータを取ります。

sdn1

sdn2の値と比較するDN

sdn2

sdn1の値と比較するDN

16.1.83.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- sdn1がsdn2と同一である場合には、0

- sdn1がNULLである場合には、-1

- sdn2がNULLであり、かつsdn1がNULLでない場合には、1

16.1.83.4 説明

この関数は、sdn1とsdn2の2つのDNを比較します。比較では、大/小文字が区別されます。

16.1.84 slapi_sdn_copy()

DNのコピーを作成します。

16.1.84.1 構文

#include "slapi-plugin.h"
void slapi_sdn_copy(const Slapi_DN *from, Slapi_DN *to);

16.1.84.2 パラメータ

この関数は、次のパラメータを取ります。

from

元のDN

to

fromで指定されたDNのコピーを含む、DNのコピー先

16.1.84.3 説明

この関数は、toが指す構造体にfromのDNをコピーします。

16.1.84.4 メモリーに関する注意事項

toは、この関数をコールする前に割り当てられている必要があります。

16.1.84.5 関連項目

slapi_sdn_dup()

16.1.85 slapi_sdn_done()

Slapi_DN構造体のインスタンスを消去します。

16.1.85.1 構文

#include "slapi-plugin.h"
void slapi_sdn_done(Slapi_DN *sdn);

16.1.85.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

消去する構造体へのポインタ

16.1.85.3 説明

この関数は、Slapi_DN構造体のコンテンツを消去します。これにより、DNと、存在する場合には正規化されたDNの両方が解放され、これらのポインタはNULLに設定されます。

16.1.85.4 関連項目

slapi_sdn_free()

16.1.86 slapi_sdn_dup()

Slapi_DN構造体を複製します。

16.1.86.1 構文

#include "slapi-plugin.h"
Slapi_DN * slapi_sdn_dup(const Slapi_DN *sdn);

16.1.86.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

複製するSlapi_DN構造体へのポインタ

16.1.86.3 戻り値

この関数は、sdnの複製へのポインタを戻します。

16.1.86.4 関連項目

slapi_sdn_copy()

slapi_sdn_new()

16.1.87 slapi_sdn_free()

Slapi_DN構造体を解放します。

16.1.87.1 構文

#include "slapi-plugin.h"
void slapi_sdn_free(Slapi_DN **sdn);

16.1.87.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

解放するSlapi_DN構造体へのポインタ

16.1.87.3 説明

この関数は、Slapi_DN構造体およびsdnのコンテンツが指すその構造体のコンテンツを解放します。

16.1.87.4 関連項目

slapi_sdn_done()

slapi_sdn_new()

16.1.88 slapi_sdn_get_backend_parent()

特定のバックエンド内にあるエントリの親のDNを取得します。

16.1.88.1 構文

#include "slapi-plugin.h"
void slapi_sdn_get_backend_parent(const Slapi_DN *sdn,
Slapi_DN *sdn_parent,const Slapi_Backend *backend);

16.1.88.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

親を検索するエントリのDN

sdn_parent

sdnの親DN

backend

sdnの親を検索するバックエンド

16.1.88.3 説明

この関数は、指定されたバックエンド内のエントリの親DNを取得します。sdnが空である場合と、バックエンド自体のサフィックスである場合を除き、返される親DNはsdn_parentに戻されます。該当する場合には、sdn_parentは空となります。

16.1.88.4 メモリーに関する注意事項

この関数をコールする前に、sdn_parentのSlapi_DN構造体を割り当てる必要があります。

16.1.88.5 関連項目

slapi_sdn_get_parent()

16.1.89 slapi_sdn_get_dn()

Slapi_DN構造体からDNを取得します。

16.1.89.1 構文

#include "slapi-plugin.h"
const char * slapi_sdn_get_dn(const Slapi_DN *sdn);

16.1.89.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

DN値を含むSlapi_DN構造体

16.1.89.3 戻り値

この関数はDN値を戻します。

16.1.89.4 説明

この関数は、Slapi_DN構造体のDN値を取得します。他に値が存在しない場合には、戻り値は正規化されたDN (正規のフォーマット、小文字)になることがあります。

16.1.89.5 関連項目

slapi_sdn_get_ndn()

slapi_sdn_get_parent()

slapi_sdn_get_rdn()

16.1.90 slapi_sdn_get_ndn()

Slapi_DN構造体の正規化されたDNを取得します。

16.1.90.1 構文

#include "slapi-plugin.h"
const char * slapi_sdn_get_ndn(const Slapi_DN *sdn);

16.1.90.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

DN値を含むSlapi_DN構造体

16.1.90.3 戻り値

この関数は正規化されたDN値を戻します。

16.1.90.4 説明

この関数は、Slapi_DN構造体から正規化されたDN (正規のフォーマット、小文字)を取得し、まだ正規化されていない場合には、sdnを正規化します。

16.1.90.5 関連項目

slapi_sdn_get_dn()

16.1.91 slapi_sdn_get_ndn_len()

Slapi_DN構造体の正規化されたDNの長さを取得します。

16.1.91.1 構文

#include "slapi-plugin.h"
int slapi_sdn_get_ndn_len(const Slapi_DN *sdn);

16.1.91.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

DN値を含むSlapi_DN構造体

16.1.91.3 戻り値

この関数は、正規化されたDNの長さを戻します。

16.1.91.4 説明

この関数は正規化されたDNの長さを含み、sdnがまだ正規化されていない場合には、正規化します。

16.1.92 slapi_sdn_get_parent()

指定されたSlapi_DN構造体の親DNを取得します。

16.1.92.1 構文

#include "slapi-plugin.h"
void slapi_sdn_get_parent(const Slapi_DN *sdn,Slapi_DN *sdn_parent);

16.1.92.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

親を検索するDNを含む、初期化されたSlapi_DN構造体へのポインタ

sdn_parent

親DNが戻されるSlapi_DN構造体へのポインタ

16.1.92.3 説明

この関数は、sdnが指す構造体に保持されているDNの親DNを含む、Slapi_DN構造体を戻します。

16.1.92.4 関連項目

slapi_sdn_get_backend_parent()

16.1.93 slapi_sdn_get_rdn()

DNからRDNを取得します。

16.1.93.1 構文

#include "slapi-plugin.h"
void slapi_sdn_get_rdn(const Slapi_DN *sdn, Slapi_RDN *rdn);

16.1.93.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

DNを含むSlapi_DN構造体へのポインタ

rdn

RDNが戻されるSlapi_RDN構造体へのポインタ

16.1.93.3 説明

この関数は、sdnが指すSlapi_DN構造体に格納されたDNを使用して、rdnが指すSlapi_RDN構造体内に戻されるRDNを取得します。

16.1.93.4 関連項目

slapi_sdn_add_rdn()

slapi_sdn_get_dn()

16.1.94 slapi_sdn_get_suffix()

ターゲットを含むサフィックスのDNへのポインタを戻します。

16.1.94.1 構文

#include "slapi-plugin.h"
Slapi_DN* slapi_sdn_get_suffix(const Slapi_DN *target_sdn);

16.1.94.2 パラメータ

この関数は、次のパラメータを取ります。

target_sdn

必要なサフィックスを含むターゲット・エントリのDN

16.1.94.3 戻り値

この関数は、target_sdnが使用されたエントリのサフィックスのベースDNを含むSlapi_DN構造体へのポインタを戻し、該当するサフィックスを使用できない場合にはNULLを戻します。

16.1.94.4 メモリーに関する注意事項

slapi_sdn_free()を使用して戻された構造体を解放します。

16.1.95 slapi_sdn_isempty()

Slapi_DN構造体に格納されたDN値があるかどうかを確認します。

16.1.95.1 構文

#include "slapi-plugin.h"
int slapi_sdn_isempty( const Slapi_DN *sdn);

16.1.95.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

確認するSlapi_DN構造体へのポインタ

16.1.95.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- Slapi_DN構造体にDN値(正規化されているかどうかに関係なく)がない場合には、1

- sdnが空の場合には、0

16.1.95.4 説明

この関数は、Slapi_DN構造体に正規化された値または正規化されていない値が含まれているかどうかを確認します。

16.1.95.5 関連項目

slapi_sdn_done()

16.1.96 slapi_sdn_isgrandparent()

DNが、指定されたDNの親の親であるかどうかを確認します。

16.1.96.1 構文

#include "slapi-plugin.h"
int slapi_sdn_isgrandparent( const Slapi_DN *parent,
const Slapi_DN *child );

16.1.96.2 パラメータ

この関数は、次のパラメータを取ります。

parent

childのDNの親DNの親とみなされるDNを含むSlapi_DN構造体へのポインタ

child

parentが指す構造体内のDNの想定される孫のDNを含むSlapi_DN構造体へのポインタ

16.1.96.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- parentのDNがchildのDNの親の親である場合には、1

- parentのDNがchildのDNの親の親のDNと一致しない場合には、0

16.1.96.4 関連項目

slapi_sdn_get_parent()

slapi_sdn_isparent()

slapi_sdn_issuffix()

16.1.97 slapi_sdn_isparent()

DNが、指定されたDNの親であるかどうかを確認します。

16.1.97.1 構文

#include "slapi-plugin.h"
int slapi_sdn_isparent(const Slapi_DN *parent,
const Slapi_DN *child);

16.1.97.2 パラメータ

この関数は、次のパラメータを取ります。

parent

childのDNの親とみなされるDNを含むSlapi_DN構造体へのポインタ

child

parentが指す構造体内のDNの想定される子のDNを含むSlapi_DN構造体へのポインタ

16.1.97.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- parentのDNがchildのDNの親である場合には、1

- parentのDNがchildのDNの親のDNと一致しない場合には、0

16.1.97.4 関連項目

slapi_sdn_get_parent()

slapi_sdn_issuffix()

16.1.98 slapi_sdn_issuffix()

Slapi_DN構造体に、別のSlapi_DN構造体のサフィックスが含まれているかどうかを確認します。

16.1.98.1 構文

#include "slapi-plugin.h"
int slapi_sdn_issuffix(const Slapi_DN *sdn,
const Slapi_DN *suffixsdn);

16.1.98.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

確認するSlapi_DN構造体へのポインタ

suffixsdn

サフィックスのSlapi_DN構造体へのポインタ

16.1.98.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- suffixsdnのDNがsdnのサフィックスである場合には、1

- suffixsdnのDNがsdnのサフィックスでない場合には、0

16.1.98.4 関連項目

slapi_sdn_isparent()

16.1.99 slapi_sdn_new()

新しいSlapi_DN構造体を割り当てて、NULLに初期化します。

16.1.99.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_new();

16.1.99.2 パラメータ

この関数にパラメータはありません。

16.1.99.3 戻り値

この関数は、新しく割り振られた空のままのSlapi_DN構造体へのポインタを戻します。

16.1.99.4 説明

この関数は、必要なメモリーを割り当てて、DN値と正規化されたDN値の両方をNULLに初期化することによって、新しいSlapi_DN構造体を作成します。

16.1.99.5 関連項目

slapi_sdn_copy()

slapi_sdn_done()

slapi_sdn_free()

16.1.100 slapi_sdn_new_dn_byref()

新しいSlapi_DN構造体を作成して、DN値を設定します。

16.1.100.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_new_dn_byref(const char *dn);

16.1.100.2 パラメータ

この関数は、次のパラメータを取ります。

dn

新しいSlapi_DN構造体で設定されるDN値

16.1.100.3 戻り値

この関数は、dnのコンテンツに設定されたDN値を含む、新しいSlapi_DN構造体へのポインタを戻します。

16.1.100.4 説明

この関数は、新しいSlapi_DN構造体を作成し、dnの値を使用してそのDNを初期化します。新しい構造体のDNは、dnが指す文字列と同じものを指します(DN値は参照によってパラメータに渡されます)。ただし、FLAG_DNフラグは設定されず、カウンタは増分されません。

16.1.100.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.100.6 関連項目

slapi_sdn_new_dn_byval()

slapi_sdn_new_dn_passin()

16.1.101 slapi_sdn_new_dn_byval()

新しいSlapi_DN構造体を作成して、DN値を設定します。

16.1.101.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_new_dn_byval(const char *dn);

16.1.101.2 パラメータ

この関数は、次のパラメータを取ります。

dn

新しいSlapi_DN構造体で設定されるDN値

16.1.101.3 戻り値

この関数は、dnのコンテンツに設定されたDN値を含む、新しいSlapi_DN構造体へのポインタを戻します。

16.1.101.4 説明

この関数は、新しいSlapi_DN構造体を作成し、dnの値を使用してそのDNを初期化します。新しい構造体のDNは、dnが指す文字列のコピーを指します(DN値は値でパラメータに渡されます)。FLAG_DNフラグが設定され、内部カウンタが増分されます。

16.1.101.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.101.6 関連項目

slapi_sdn_new_dn_byref()

slapi_sdn_new_dn_passin()

16.1.102 slapi_sdn_new_dn_passin()

新しいSlapi_DN構造体を作成して、DN値を設定します。

16.1.102.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_new_dn_passin(const char *dn);

16.1.102.2 パラメータ

この関数は、次のパラメータを取ります。

dn

新しいSlapi_DN構造体で設定されるDN値

16.1.102.3 戻り値

この関数は、dnのコンテンツに設定されたDN値を含む、新しいSlapi_DN構造体へのポインタを戻します。

16.1.102.4 説明

この関数は、新しいSlapi_DN構造体を作成し、dnの値を使用してそのDNを初期化します。新しい構造体のDNは、dnが指す文字列を指します。FLAG_DNフラグが設定され、内部カウンタが増分されます。

16.1.102.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.102.6 関連項目

slapi_sdn_new_dn_byref()

slapi_sdn_new_dn_byval()

16.1.103 slapi_sdn_new_ndn_byref()

新しいSlapi_DN構造体を作成して、正規化されたDN値を設定します。

16.1.103.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_new_ndn_byref(const char *ndn);

16.1.103.2 パラメータ

この関数は、次のパラメータを取ります。

ndn

新しいSlapi_DN構造体で設定される正規化されたDN値

16.1.103.3 戻り値

この関数は、ndnのコンテンツに設定された正規化されたDN値を含む、新しいSlapi_DN構造体へのポインタを戻します。

16.1.103.4 説明

この関数は、新しいSlapi_DN構造体を作成し、ndnの値を使用してその正規化されたDNを初期化します。新しい構造体の正規化されたDNは、ndnが指す文字列と同じものを指します(正規化されたDN値は参照によってパラメータに渡されます)。ただし、FLAG_NDNフラグは設定されず、カウンタは増分されません。

16.1.103.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.103.6 関連項目

slapi_sdn_new_ndn_byval()

16.1.104 slapi_sdn_new_ndn_byval()

新しいSlapi_DN構造体を作成して、正規化されたDN値を設定します。

16.1.104.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_new_ndn_byval(const char *ndn);

16.1.104.2 パラメータ

この関数は、次のパラメータを取ります。

ndn

新しいSlapi_DN構造体で設定される正規化されたDN値

16.1.104.3 戻り値

この関数は、ndnのコンテンツに設定された正規化されたDN値を含む、新しいSlapi_DN構造体へのポインタを戻します。

16.1.104.4 説明

この関数は、新しいSlapi_DN構造体を作成し、ndnの値を使用してその正規化されたDNを初期化します。新しい構造体の正規化されたDNは、ndnが指す文字列のコピーを指します(正規化されたDN値は値でパラメータに渡されます)。FLAG_DNDフラグが設定され、内部カウンタが増分されます。

16.1.104.5 メモリーに関する注意事項

メモリーは、関数自体によって割り当てられます。

16.1.104.6 関連項目

slapi_sdn_new_ndn_byref()

16.1.105 slapi_sdn_scope_test()

エントリ(指定されたDN)が、特定のベースDNの範囲内にあるかどうかを確認します。

16.1.105.1 構文

#include "slapi-plugin.h"
int slapi_sdn_scope_test( const Slapi_DN *dn, const Slapi_DN *base,
int scope );

16.1.105.2 パラメータ

この関数は、次のパラメータを取ります。

dn

範囲テストのエントリ対象のDN。

base

dnをテストする対象となるベースDN。

scope

テストする範囲。このパラメータには、次のいずれかのレベルを使用できます。

- LDAP_SCOPE_BASE - エントリDNはベースDNと同じである必要があります。

- LDAP_SCOPE_ONELEVEL - ベースDNはエントリDNの親である必要があります。

- LDAP_SCOPE_SUBTREE - ベースDNは、少なくともエントリDNのサフィックスである必要があります。

16.1.105.3 戻り値

この関数は、dnがbaseおよびscopeによって指定されたスコーピング基準と一致する場合には、ゼロ以外を戻します。

16.1.105.4 説明

この関数では単純なテストを実行し、dnパラメータで渡されるDNが、scopeおよびbaseの各パラメータに渡される値に応じて、実際にベースDNの範囲内にあるかどうかを確認します。

16.1.105.5 関連項目

slapi_sdn_compare()

slapi_sdn_isparent()

slapi_sdn_issuffix()

16.1.106 slapi_sdn_set_dn_byref()

Slapi_DN構造体にDN値を設定します。

16.1.106.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_dn_byref(Slapi_DN *sdn, const char *dn);

16.1.106.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

ターゲットのSlapi_DN構造体

dn

sdnに設定されるDN値

16.1.106.3 戻り値

この関数は、新しいDN値を含むSlapi_DN構造体へのポインタを戻します。

16.1.106.4 説明

この関数は、Slapi_DN構造体にDN値を設定します。新しい構造体のDNは、dnが指す文字列と同じものを指します(DN値は値でパラメータに渡されます)。ただし、FLAG_DNフラグは設定されず、内部カウンタは増分されません。

16.1.106.5 関連項目

slapi_sdn_set_dn_byval()

slapi_sdn_set_dn_passin()

16.1.107 slapi_sdn_set_dn_byval()

Slapi_DN構造体にDN値を設定します。

16.1.107.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_dn_byval(Slapi_DN *sdn, const char *dn);

16.1.107.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

ターゲットのSlapi_DN構造体

dn

sdnに設定されるDN値

16.1.107.3 戻り値

この関数は、新しいDN値を含むSlapi_DN構造体へのポインタを戻します。

16.1.107.4 説明

この関数は、Slapi_DN構造体にDN値を設定します。新しい構造体のDNは、dnが指す文字列のコピーを指します(DN値は値でパラメータに渡されます)。FLAG_DNフラグが設定され、内部カウンタが増分されます。

16.1.107.5 関連項目

slapi_log_info_ex()

slapi_sdn_set_dn_passin()

16.1.108 slapi_sdn_set_dn_passin()

Slapi_DN構造体にDN値を設定します。

16.1.108.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_dn_passin(Slapi_DN *sdn, const char *dn);

16.1.108.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

ターゲットのSlapi_DN構造体

dn

sdnに設定されるDN値

16.1.108.3 戻り値

この関数は、新しいDN値を含むSlapi_DN構造体へのポインタを戻します。

16.1.108.4 説明

この関数は、Slapi_DN構造体にDN値を設定します。新しい構造体のDNは、dnが指す文字列と同じものを指します。FLAG_DNフラグが設定され、内部カウンタが増分されます。

16.1.108.5 関連項目

slapi_log_info_ex()

slapi_sdn_set_dn_byval()

16.1.109 slapi_sdn_set_ndn_byref()

Slapi_DN構造体に正規化されたDNを設定します。

16.1.109.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_ndn_byref(Slapi_DN *sdn, const char *ndn);

16.1.109.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

ターゲットのSlapi_DN構造体

dn

sdnに設定される正規化されたDN値

16.1.109.3 戻り値

この関数は、新しい正規化されたDN値を含むSlapi_DN構造体へのポインタを戻します。

16.1.109.4 説明

この関数は、Slapi_DN構造体に正規化されたDN値を設定します。新しい構造体の正規化されたDNは、ndnが指す文字列と同じものを指します(正規化されたDN値は参照によってパラメータに渡されます)。ただし、FLAG_DNフラグは設定されず、内部カウンタは増分されません。

16.1.109.5 関連項目

slapi_sdn_set_ndn_byval()

slapi_sdn_set_dn_passin()

16.1.110 slapi_sdn_set_ndn_byval()

Slapi_DN構造体に正規化されたDN値を設定します。

16.1.110.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_ndn_byval(Slapi_DN *sdn, const char *ndn);

16.1.110.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

ターゲットのSlapi_DN構造体

dn

sdnに設定される正規化されたDN値

16.1.110.3 戻り値

この関数は、新しい正規化されたDN値を含むSlapi_DN構造体へのポインタを戻します。

16.1.110.4 説明

この関数は、Slapi_DN構造体に正規化されたDN値を設定します。新しい構造体の正規化されたDNは、ndnが指す文字列のコピーを指します(正規化されたDN値は値でパラメータに渡されます)。FLAG_DNフラグが設定され、内部カウンタが増分されます。

16.1.110.5 関連項目

slapi_log_info_ex()

slapi_sdn_set_dn_passin()

16.1.111 slapi_sdn_set_parent()

指定されたエントリに新しい親を設定します。

16.1.111.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_parent(Slapi_DN *sdn,
const Slapi_DN *parentdn);

16.1.111.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

エントリのDNを含むSlapi_DN構造体

parentdn

新しい親DN

16.1.111.3 戻り値

この関数は、新しい親DNが設定された後、エントリのDNを含むSlapi_DN構造体へのポインタを戻します。

16.1.111.4 説明

この関数は、エントリに新しい親を設定します。このことは、エントリの元のDNのRDNを保持し、その新しい親のDN(parentdn)を追加することによって行われます。

16.1.111.5 関連項目

slapi_sdn_get_parent()

slapi_sdn_isparent()

16.1.112 slapi_sdn_set_rdn()

指定されたエントリに新しいRDNを設定します。

16.1.112.1 構文

#include "slapi-plugin.h"
Slapi_DN *slapi_sdn_set_rdn(Slapi_DN *sdn, const Slapi_RDN *rdn);

16.1.112.2 パラメータ

この関数は、次のパラメータを取ります。

sdn

エントリのDNを含むSlapi_DN構造体

rdn

新しいRDN

16.1.112.3 戻り値

この関数は、新しいRDNが設定された後、エントリのDNを保持するSlapi_DN構造体へのポインタを戻します。

16.1.112.4 説明

この関数は、エントリに新しいRDNを設定します。このことは、エントリの元のDNの親のDNを取得し、その後それをRDN(rdnの値)に追加することによって実行されます。

16.1.112.5 関連項目

slapi_sdn_get_rdn()

16.1.113 slapi_search_internal_callback_pb()

パラメータ・ブロックに基づいてLDAP検索操作を実行し、ディレクトリを検索します。slapi_search_internal_pb()とは異なり、この関数を使用すると、検索操作で一致するエントリまたは参照を含むエントリが検出された場合に起動されるコールバック関数を指定できます。

16.1.113.1 構文

#include "slapi-plugin.h"
int slapi_search_internal_callback_pb(Slapi_PBlock *pb,
void *callback_data, plugin_result_callback prc,
plugin_search_entry_callback psec,
plugin_referral_entry_callback prec);

16.1.113.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_search_internal_set_pb()を使用して初期化されたパラメータ・ブロック。

callback_data

コールバック関数に渡す必要がある任意のプラグインまたは操作固有データへのポインタ。

prc

結果コードを送信するために、サーバーによってコールされるコールバック関数。この関数には、plugin_result_callbackによって指定されたプロトタイプが必要です。

psec

一致するエントリがディレクトリで検出された場合に、サーバーによってコールされるコールバック関数。この関数には、plugin_search_entry_callbackによって指定されたプロトタイプが必要です。

prec

LDAP v3参照を含むエントリが検出された場合に、サーバーによってコールされるコールバック関数。この関数には、plugin_referral_entry_callbackによって指定されたプロトタイプが必要です。

16.1.113.3 戻り値

渡されたパラメータがNULLポインタの場合、この関数は-1を戻します。それ以外の場合は0を戻します。

作成したコードでこの関数をコールすると、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTが適切なLDAP結果コードに設定されます。したがって、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTをチェックすると、エラーが発生したかどうかを確認できます。

16.1.113.4 説明

slapi_search_internal_pb()のように、この関数を使用すると、プラグイン関数からディレクトリを検索できます。

クライアントによって要求された検索操作とは異なり、結果コード、検索エントリまたは参照がslapi_search_internal_callback_pb()によってクライアントに送信されることはありません。ただし、次のイベントが発生した場合に起動される、独自のコールバック関数を作成できます。

- 検索操作によって結果コードが正常にクライアントに送信された場合に起動される、コールバック関数を作成できます。この関数には、plugin_result_callbackによって指定されたプロトタイプが必要です。この関数は、slapi_search_internal_callback_pb()のprc引数で指定します。

- 検索操作によって検索エントリが正常にクライアントに送信された場合に起動される、コールバック関数を作成できます。この関数には、plugin_search_entry_callbackによって指定されたプロトタイプが必要です。この関数は、slapi_search_internal_callback_pb()のpsec引数で指定します。

- 検索操作によってLDAP v3検索結果参照が正常に送信された場合に起動される、コールバック関数を作成できます。この関数には、plugin_referral_entry_callbackによって指定されたプロトタイプが必要です。この関数は、slapi_search_internal_callback_pb()のprec引数で指定します。
任意プラグインまたは操作固有データをこれらのコールバック関数に渡すこともできます。slapi_search_internal_callback_pb()のcallback_data引数として渡すデータを指定します。

16.1.113.5 メモリーに関する注意事項

検索エントリのコールバック関数に渡されるエントリを解放する必要はありません。コールバック関数から復帰した後、エントリにアクセスする必要がある場合は、slapi_entry_dup()をコールしてコピーを作成します。

参照エントリのコールバック関数に渡される参照URLを解放する必要はありません。コールバック関数から復帰した後、参照文字列にアクセスする必要がある場合は、slapi_ch_strdup()をコールしてコピーを作成します。

slapi_search_internal_callback_pb()をコールした後、slapi_free_search_results_internal()をコールする必要はありません。

16.1.114 slapi_search_internal_get_entry()

内部検索操作を実行して、エントリを1つ読み取ります(つまり、基本オブジェクト検索を実行します)。

16.1.114.1 構文

#include "slapi-plugin.h"
int slapi_search_internal_get_entry( Slapi_DN const *dn, char ** attrlist,
Slapi_Entry **ret_entry, void *caller_identity);

16.1.114.2 パラメータ

この関数は、次のパラメータを取ります。

dn

読み取るエントリのDN。

attrlist

フィルタと一致するエントリから戻される属性タイプのNULL終了配列。NULLを指定すると、すべての属性が戻されます。

ret_entry

検出された場合にエントリを受信するSlapi_Entryポインタのアドレス。

caller_identity

プラグインまたはコンポーネント識別子。この値は、プラグイン初期化関数に渡されるパラメータ・ブロックのSLAPI_PLUGIN_IDENTITYフィールドから取得できます。

16.1.114.3 戻り値

この関数は、検索操作のLDAP結果コードを戻します。

16.1.114.4 説明

この関数は内部検索操作を実行して、エントリを1つ読み取ります(つまり、基本オブジェクト検索を実行します)。dnで指定されたエントリが検出された場合、ret_entryポインタは、attrlistパラメータで指定された属性値を含むエントリのコピーを指すように設定されます。

16.1.114.5 メモリーに関する注意事項

戻されたエントリ(*ret_entry)は、slapi_entry_free()をコールして解放する必要があります。

16.1.114.6 関連項目

slapi_entry_free()

slapi_search_internal_pb()

16.1.115 slapi_search_internal_pb()

パラメータ・ブロックに基づいてLDAP検索操作を実行し、ディレクトリを検索します。

16.1.115.1 構文

#include "slapi-plugin.h"
int slapi_search_internal_pb(Slapi_PBlock *pb);

16.1.115.2 パラメータ

この関数は、次のパラメータを取ります。

pb

slapi_search_internal_set_pb()を使用して初期化されたパラメータ・ブロック。

16.1.115.3 戻り値

渡されたパラメータがNULLポインタの場合、この関数は-1を戻します。それ以外の場合は0を戻します。

作成したコードでこの関数をコールすると、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTが適切なLDAP結果コードに設定されます。したがって、パラメータ・ブロックのSLAPI_PLUGIN_INTOP_RESULTをチェックすると、エラーが発生したかどうかを確認できます。

16.1.115.4 説明

この関数は、パラメータ・ブロックに基づいて内部検索を実行します。このパラメータ・ブロックは、slapi_search_internal_set_pb()関数をコールして初期化する必要があります。

16.1.115.5 メモリーに関する注意事項

slapi_search_internal_pb()のコールによって割り当てられたエントリや他のアイテムを解放するには、slapi_free_search_results_internal()をコールする必要があります。

16.1.116 slapi_search_internal_set_pb()

内部検索のためのパラメータ・ブロックを設定します。

16.1.116.1 構文

#include slapi-plugin.h
int slapi_search_internal_set_pb(Slapi_PBlock *pb,
const char *base, int scope, const char *filter,
char **attrs, int attrsonly,LDAPControl **controls,
const char *uniqueid,Slapi_ComponentId *plugin_identity,
int operation_flags);

16.1.116.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

base

検索のベース。

scope

LDAP_SCOPE_SUBTREE、LDAP_SCOPE_ONELEVELまたはLDAP_SCOPE_BASE。

filter

検索フィルタ。

attrs

リクエスト属性リスト。attrsの値に応じて戻されるエントリ属性です。

NULL: 属性タイプのリストを表す文字列の、すべての属性Null終了配列。エントリ属性のサブセット(具体的には、エントリに存在する場合にはattrsに指定された属性、および、rdnで使用される属性のような他のいくつかの属性)。

attrsonly

1を指定すると、属性タイプのみが取得されます。0を指定すると、属性タイプと属性値が取得されます。

controls

アタッチするLDAPコントロール。

uniqueid

一意のIDはNULLに設定する必要があります。

plugin_identity

プラグイン初期化中に、SLAPI_PLUGIN_IDENTITYから取得されるプラグイン識別子。

operation_flags

このリリースで公開されているフラグは、SLAPI_OP_FLAG_NEVER_CHAINのみです。このフラグが設定されていると、エントリが連鎖したバックエンドである場合、検索は実行されません。

16.1.116.3 戻り値

この関数は、正常終了した場合は0を戻します。それ以外の場合はLDAPエラー・コードを戻します。

16.1.116.4 説明

この関数を使用して、内部検索を実行するパラメータ・ブロックを設定します。内部検索操作関数slapi_search_internal_pb()を使用するには、この関数が必要です。

通常、slapi_pblock_new()を使用してSlapi_PBlock構造体を作成し、このパラメータ・ブロックをslapi_search_internal_pb()に渡してから、実際に検索を実行するために同じパラメータ・ブロックを渡します。

戻されるエントリは、最初のコールバックに指定されたエントリか、またはslapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &entries) ()によって取得された配列で指定されたエントリです。

16.1.116.5 メモリーに関する注意事項

この関数をコールする前に、slapi_pblock_new()を使用してパラメータ・ブロックを割り当てます。

Directory Serverは、この関数に渡されたパラメータを解放しません。

slapi_search_internal_pb()をコールした後、パラメータ・ブロックを解放します。

16.1.116.6 関連項目

slapi_pblock_new()

slapi_search_internal_pb()

16.1.117 slapi_send_ldap_referral()

エントリのLDAP v3参照(エントリのref属性で見つかります)を処理します。LDAP v3クライアントの場合、この関数はLDAP参照をクライアントに戻します。LDAP v2クライアントの場合は、この関数によって参照がberval構造体の配列にコピーされ、後で、この構造をslapi_send_ldap_result()関数に渡すことができます。

16.1.117.1 構文

#include "slapi-plugin.h"
int slapi_send_ldap_referral( Slapi_PBlock *pb, Slapi_Entry *e,
struct berval **refs, struct berval ***urls );

16.1.117.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

e

処理中のエントリを表すSlapi_Entry構造体へのポインタ

refs

エントリで検出されるLDAP v3参照(検索結果の参照)を含むberval構造体のNULL終了配列へのポインタ

urls

LDAP v2クライアントのLDAP参照の収集に使用されるberval構造体の配列へのポインタ

16.1.117.3 戻り値

この関数は、成功した場合は0を戻し、エラーが発生した場合には-1を戻します。

16.1.117.4 説明

この関数をコールすると、refs引数で指定されたLDAP参照が処理されます。参照は、クライアントでサポートされるLDAPプロトコルのバージョンに応じて、異なる方法で処理されます。

- LDAP v3プロトコルでは、他のLDAPサーバーへの参照(検索結果参照)を検索結果としてクライアントに送信できます。(たとえば、サーバーでは、検索によって検出されたエントリと参照の混在を検索結果として他のLDAPサーバーに送信できます。)
LDAP v3クライアントについてslapi_send_ldap_referral()関数をコールすると、refs引数で指定された参照が、検索結果参照としてクライアントに戻されます。(この場合、urls引数は使用されません。)

- LDAP v2プロトコルでは、クライアントを参照するLDAP結果コードLDAP_PARTIAL_RESULTSを他のLDAPサーバーに送信できます。
LDAP v2クライアントについてslapi_send_ldap_referral()関数をコールすると、urls引数のrefsで指定された参照が収集されます。データは、LDAP v2クライアントには送信されません。

LDAP v2クライアントへの参照を取得するには、urls引数を(LDAP_PARTIAL_RESULTS結果コードとともに) slapi_send_ldap_result()関数に渡す必要があります。slapi_send_ldap_result()によって、urls引数で指定された参照が連結され、結果として得られる文字列が、エラー・メッセージの一部としてクライアントに送信されます。

参照を送信するために独自の関数を定義する場合は、タイプ定義send_ldap_search_entry_fn_ptr_tに準拠する関数を作成し、その関数の名前に合わせて、パラメータ・ブロックのSLAPI_PLUGIN_DB_REFERRAL_FNパラメータを設定します。

16.1.117.5 関連項目

slapi_send_ldap_result()

slapi_send_ldap_search_entry()

16.1.118 slapi_send_ldap_result()

LDAP結果コードをクライアントに戻します。

16.1.118.1 構文

#include "slapi-plugin.h"
void slapi_send_ldap_result( Slapi_PBlock *pb, int err,
char *matched, char *text, int nentries, struct berval **urls );

16.1.118.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

err

クライアントに戻すLDAP結果コード(LDAP_SUCCESSなど)。

matched

LDAP_NO_SUCH_OBJECT結果コードを返信するときに、この引数を使用して、一致する可能性があるターゲットDNの部分を指定する。(他の状況ではNULLを渡す。)

text

クライアントに返信するエラー・メッセージ。(エラー・メッセージを返信しない場合はNULLを渡す。)

nentries

LDAP検索操作の結果コードを返信するときに、この引数を使用して、検出された一致エントリの数を指定する。

urls

LDAP_PARTIAL_RESULTS結果コードをLDAP v2クライアントに返信するとき、またはLDAP_REFERRAL結果コードをLDAP v3クライアントに返信するときに、この引数を使用して、参照URLを含むberval構造体の配列を指定する。(他の状況ではNULLを渡す。)

16.1.118.3 説明

slapi_send_ldap_result()をコールして、LDAP結果コード(LDAP_SUCCESSなど)をクライアントに戻します。

次の引数は、特定の状況でのみ使用できます。

- matched
LDAP_NO_SUCH_OBJECT結果コードをクライアントに戻す場合、matchedを使用して、データベースで検索できるターゲットDNの数を指定します。たとえば、クライアントによって、次のDNの検索が試行されるとします。

cn=Babs Jensen, ou=Product Division, o=Example, c=US

このとき、データベースにc=USおよびo=Example, c=USのエントリが含まれるものの、ou=Product Division, o=Example, c=USのエントリは含まれない場合、matchedパラメータを次のように設定する必要があります。

o=Example, c=US

- urls
LDAP_PARTIAL_RESULTS結果コードをLDAP v2クライアントに戻すか、またはLDAP_REFERRAL結果コードをLDAP v3クライアントに戻す場合、urlsを使用して参照URLを指定します。

LDAP v3参照の場合は、slapi_send_ldap_result()をコールして参照をLDAP v3クライアントに送信し、LDAP v2クライアントのために、これらの参照を収集できます。収集された参照の配列をslapi_send_ldap_result()のurls引数に渡すことができます。次に例を示します。

struct berval **urls;
...
slapi_send_ldap_referral(ld, e, &refs, &urls);
slapi_send_ldap_result(ld,LDAP_PARTIAL_RESULTS,NULL,NULL,0,urls);

結果コードを送信するために独自の関数を定義する場合は、タイプ定義send_ldap_search_entry_fn_ptr_tに準拠する関数を作成し、その関数の名前に合わせて、パラメータ・ブロックのSLAPI_PLUGIN_DB_RESULT_FNパラメータを設定します。

16.1.118.4 関連項目

slapi_send_ldap_referral()

slapi_send_ldap_search_entry()

16.1.119 slapi_send_ldap_search_entry()

検索で見つかったエントリをクライアントに返信します。

16.1.119.1 構文

#include "slapi-plugin.h"
int slapi_send_ldap_search_entry( Slapi_PBlock *pb, Slapi_Entry *e,
LDAPControl **ectrls, char **attrs, int attrsonly );

16.1.119.2 パラメータ

この関数は、次のパラメータを取ります。

pb

パラメータ・ブロックです。

e

クライアントに戻すエントリを表すSlapi_Entry構造体へのポインタ。

ectrls

検索リクエストに関連付けられるコントロールを表すLDAPControl構造体の配列へのポインタ。

attrs

LDAP検索リクエストに指定された属性タイプ。

attrsonly

属性値を結果とともに戻す必要があるかどうかを指定します。

- 0の場合、値が含まれます。

- 1の場合、値は含まれません。

16.1.119.3 戻り値

この関数は、成功した場合には0を戻し、エントリが送信されない場合(アクセス制御によって送信が許可されない場合など)には1を戻し、エラーが発生した場合には-1を戻します。

16.1.119.4 説明

slapi_send_ldap_search_entry()をコールして、検索によって検出されたエントリをクライアントに戻します。

attrsは、エントリから送信する属性タイプの配列です。この値は、パラメータ・ブロックのSLAPI_SEARCH_ATTRSパラメータと同じになります。

attrsonlyは、属性タイプのみを送信するか、または属性タイプとその値を送信するかを指定します。

- 属性タイプと値の両方をクライアントに送信する場合には、このパラメータに0を渡します。

- 属性タイプのみ(属性値は含まない)をクライアントに送信する場合には、このパラメータに1を渡します。
この値は、パラメータ・ブロックのSLAPI_SEARCH_ATTRSONLYパラメータと同じになります。

エントリを送信するために独自の関数を定義する場合は、タイプ定義send_ldap_search_entry_fn_ptr_tに準拠する関数を作成し、その関数名に合わせて、パラメータ・ブロックのSLAPI_PLUGIN_DB_ENTRY_FNパラメータを設定します。

16.1.119.5 関連項目

slapi_send_ldap_referral()

slapi_send_ldap_result()

16.1.120 slapi_set_object_extension()

オブジェクトの拡張を変更します。

16.1.120.1 構文

#include "slapi-plugin.h"
void slapi_set_object_extension(int objecttype, void *object,
int extensionhandle, void *extension);

16.1.120.2 パラメータ

この関数は、次のパラメータを取ります。

objecttype

サーバーによって設定され、拡張を取得するために使用されます。

object

拡張されたオブジェクト

extensionhandle

サーバーによって設定され、拡張を取得するために使用されます。

extension

オブジェクトにアタッチする新しい拡張

16.1.120.3 説明

この関数は、オブジェクトについての拡張を変更します。

16.1.120.4 関連項目

slapi_register_object_extension()

16.1.121 slapi_str2entry()

ディレクトリ・エントリ(文字列値)のLDIF表現をSlapi_Entryタイプのエントリに変換します。

16.1.121.1 構文

#include "slapi-plugin.h"
Slapi_Entry *slapi_str2entry( char *s, int flags );

16.1.121.2 パラメータ

この関数は、次のパラメータを取ります。

s

Slapi_Entryに変換するエントリの説明

flags

エントリの生成方法を指定する1つ以上のフラグ

flags引数の値は、次のいずれかの値にすることができます。

SLAPI_STR2ENTRY_REMOVEDUPVALS

エントリの属性における重複値を削除します。

SLAPI_STR2ENTRY_ADDRDNVALS

相対識別名(RDN)コンポーネント(uid=bjensenなど)をエントリの属性として追加します。

16.1.121.3 戻り値

エントリを表すSlapi_Entry構造体へのポインタを戻し、文字列を変換できない場合(文字列にDNが指定されていない場合など)にはNULLを戻します。

16.1.121.4 説明

ディレクトリ・エントリは、LDIFフォーマットの文字列によって表現できます。

slapi_str2entry()関数をコールすると、このフォーマットの文字列表現がSlapi_Entry構造体に変換され、これを他のAPI関数に渡すことができます。

注意:

この関数は、文字列引数sを変更します。この文字列値を再度使用する必要がある場合は、slapi_str2entry()をコールする前に、この文字列のコピーを作成します。

変換プロセス中にエラーが発生した場合、この関数はエントリのかわりにNULLを戻します。

エントリに対する作業が完了したら、slapi_entry_free()関数をコールする必要があります。

エントリを文字列表現に変換するには、slapi_entry2str()関数をコールします。

16.1.121.5 メモリーに関する注意事項

エントリの解放にfree()またはslapi_ch_free()を使用しないでください。かわりに、常にslapi_entry_free()を使用します。

16.1.121.6 関連項目

slapi_entry2str()

slapi_entry_free()

16.1.122 slapi_str2filter()

検索フィルタの文字列表現をSlapi_Filterタイプのフィルタに変換します。

16.1.122.1 構文

#include "slapi-plugin.h"
Slapi_Filter *slapi_str2filter( char *str );

16.1.122.2 パラメータ

この関数は、次のパラメータを取ります。

str

検索フィルタの文字列表現

16.1.122.3 メモリーに関する注意事項

この関数に静的文字列を渡さないでください。かわりに、slapi_ch_strdup()を使用して複製を作成します。このフィルタに対する作業が完了したら、slapi_filter_free()をコールしてSlapi_Filter構造体を解放する必要があります。

16.1.122.4 戻り値

検索フィルタを表すSlapi_Filter構造体へのポインタを戻し、文字列を変換できない場合(空の文字列が指定されたり、フィルタ構文が正しくない場合など)にはNULLを戻します。

16.1.123 slapi_unlock_mutex()

指定されたmutexをロック解除します。

16.1.123.1 構文

#include "slapi-plugin.h"
int slapi_unlock_mutex( Slapi_Mutex *mutex );

16.1.123.2 パラメータ

この関数は、次のパラメータを取ります。

mutex

ロックを解除するmutexを表すSlapi_Mutex構造体へのポインタ

16.1.123.3 戻り値

次のいずれかの値です。

- mutexが正常にロック解除された場合には、ゼロ以外の値

- mutexがNULLであるか、またはコール側スレッドによってロックされていない場合には、0

16.1.123.4 説明

この関数は、Slapi_Mutex構造体によって指定されたmutexをロック解除します。

16.1.123.5 関連項目

slapi_destroy_mutex()

slapi_lock_mutex()

slapi_new_mutex()

16.1.124 slapi_UTF-8CASECMP()

2つのUTF-8文字列を比較します。

16.1.124.1 構文

#include "slapi-plugin.h"
int slapi_UTF-8CASECMP(char *s0, char *s1);

16.1.124.2 パラメータ

この関数は、次のパラメータを取ります。

s0

NULLで終了するUTF-8文字列

s1

NULLで終了するUTF-8文字列

16.1.124.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- s0がs1の後の場合には、正の数値

- 大/小文字を区別せずに2つの文字列が同一である場合には、0

- s1がs0の後の場合には、負の数値

16.1.124.4 説明

この関数には、次のルールがあります。

- 両方のUTF-8文字列がNULLまたは長さが0である場合、0を戻します。

- いずれかの文字列がNULLまたは長さが0である場合、NULLまたは長さが0の文字列の方が小さくなります。

- いずれかまたは両方の文字列がUTF-8でない場合、システムによって提供されるstrcasecmpが使用されます。

- 2つのうちいずれかの文字列に8ビットの文字が含まれない場合、strcasecmpが使用されます。

- 文字列は、小文字のUTF-8に変換された後に比較されます。

- 各文字は最初から比較されます。
評価は次の順序で行われます。

- 一方の文字が他方の文字より短い場合、2つの長さの差異を戻します。

- 対応する文字の長さが同じである場合、文字の各バイトが比較されます。

- 2つのバイト間に差異がある場合、その差異を戻します。

- 一方の文字列が他方の文字列より短い場合、その差異を戻します。

16.1.125 slapi_UTF-8NCASECMP()

指定されたUTF-8文字数を比較します。

16.1.125.1 構文

#include "slapi-plugin.h"
int slapi_UTF-8NCASECMP(char *s0, char *s1, int n);

16.1.125.2 パラメータ

この関数は、次のパラメータを取ります。

s0

NULLで終了するUTF-8文字列

s1

NULLで終了するUTF-8文字列

n

比較するs0とs1のUTF-8の文字数(バイトではありません)

16.1.125.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- s0がs1の後の場合には、正の数値

- 大/小文字を区別せずに2つの文字列が同一である場合には、0

- s1がs0の後の場合には、負の数値

16.1.125.4 説明

この関数には、次のルールがあります。

- 両方のUTF-8文字列がNULLまたは長さが0である場合、0を戻します。

- いずれかの文字列がNULLまたは長さが0である場合、NULLまたは長さが0の文字列の方が小さくなります。

- いずれかまたは両方の文字列がUTF-8でない場合、システムによって提供されるstrcasecmpが使用されます。

- 2つのうちいずれかの文字列に8ビットの文字が含まれない場合、strcasecmpが使用されます。

- 文字列は、小文字のUTF-8に変換された後に比較されます。

- 各文字は最初から比較されます。
評価は次の順序で行われます。

- 一方の文字が他方の文字より短い場合、2つの長さの差異を戻します。

- 対応する文字の長さが同じである場合、文字の各バイトが比較されます。

- 2つのバイト間に差異がある場合、その差異を戻します。

- 一方の文字列が他方の文字列より短い場合、その差異を戻します。

16.1.126 slapi_UTF-8ISLOWER()

UTF-8文字が小文字かどうかを確認します。

16.1.126.1 構文

#include "slapi-plugin.h"
int slapi_UTF-8ISLOWER(char *s);

16.1.126.2 パラメータ

この関数は、次のパラメータを取ります。

s

UTF-8の単一文字(マルチバイト可)へのポインタ

16.1.126.3 戻り値

この関数は、文字が小文字である場合には1を戻し、小文字でない場合には0を戻します。

16.1.127 slapi_UTF-8ISUPPER()

1つのUTF-8文字が大文字かどうかを確認します。

16.1.127.1 構文

#include "slapi-plugin.h"
int slapi_UTF-8ISUPPER(char *s);

16.1.127.2 パラメータ

この関数は、次のパラメータを取ります。

s

UTF-8の単一文字(マルチバイト可)へのポインタ

16.1.127.3 戻り値

この関数は、文字が大文字である場合には1を戻し、大文字でない場合には0を戻します。

16.1.128 slapi_UTF-8STRTOLOWER()

UTF-8文字列を小文字に変換します。

16.1.128.1 構文

#include "slapi-plugin.h"
unsigned char *slapi_UTF-8STRTOLOWER(char *s);

16.1.128.2 パラメータ

この関数は、次のパラメータを取ります。

s

小文字に変換する、NULLで終了するUTF-8文字列

16.1.128.3 戻り値

この関数は、NULLで終了するUTF-8文字列(小文字に変換される)へのポインタを戻します。大文字でない文字はそのままコピーされます。文字列がUTF-8文字列でない場合、この関数はNULLを戻します。

16.1.128.4 説明

この関数は、slapi_UTF-8TOLOWER()での場合のようにUTF-8の単一文字を変換するのではなく、複数文字の文字列を変換します。

16.1.128.5 メモリーに関する注意事項

割り当てられた出力文字列は、必要でなくなったときにリリースする必要があります。

16.1.128.6 関連項目

slapi_UTF-8TOLOWER()

16.1.129 slapi_UTF-8STRTOUPPER()

UTF-8文字で構成される文字列を変換し、それを大文字に変換します。

16.1.129.1 構文

#include "slapi-plugin.h"
unsigned char *slapi_UTF-8STRTOUPPER(char *s);

16.1.129.2 パラメータ

この関数は、次のパラメータを取ります。

s

大文字に変換するNULLで終了するUTF-8文字列

16.1.129.3 戻り値

この関数は、大文字に変換された文字を含むNULLで終了するUTF-8文字列を戻します。小文字でない文字はそのままコピーされます。文字列がUTF-8文字列でないとみなされると、この関数はNULLを戻します。

16.1.129.4 メモリーに関する注意事項

この関数に割り当てられた出力文字列は、必要でなくなったときにリリースする必要があります。

16.1.130 slapi_UTF-8TOLOWER()

UTF-8文字を小文字に変換します。

16.1.130.1 構文

#include "slapi-plugin.h"
void slapi_UTF-8TOLOWER(char *s, char *d, int *ssz, int *dsz);

16.1.130.2 パラメータ

この関数は、次のパラメータを取ります。

s

UTF-8の単一文字(マルチバイト可)。

d

小文字形式のsへのポインタ。このためのメモリーは、関数をコールする前に、コール元によって割り当てられる必要があります。

ssz

入力文字の長さをバイト単位で戻します。

dsz

出力文字の長さをバイト単位で戻します。

16.1.131 slapi_UTF-8TOUPPER()

小文字のUTF-8文字を大文字に変換します。

16.1.131.1 構文

#include "slapi-plugin.h"
void slapi_UTF-8TOUPPER(char *s, char *d, int *ssz, int *dsz);

16.1.131.2 パラメータ

この関数は、次のパラメータを取ります。

s

UTF-8の単一文字(マルチバイト可)へのポインタ

d

大文字バージョンのsへのポインタ。このためのメモリーは、関数をコールする前に、コール元によって割り当てられる必要があります。

ssz

入力文字の長さをバイト単位で戻します。

dsz

出力文字の長さをバイト単位で戻します。

16.1.132 slapi_value_compare()

指定された属性の2つの値を比較し、それらが等しいかどうかを判別します。

16.1.132.1 構文

#include "slapi-plugin.h"
int slapi_value_compare(const Slapi_Attr *a, const Slapi_Value *v1,
const Slapi_Value *v2);

16.1.132.2 パラメータ

この関数は、次のパラメータを取ります。

a

2つの値の比較方法を決定するのに使用される属性へのポインタ

v1

比較する最初の値を含むSlapi_ValueSet構造体へのポインタ

v2

比較する2番目の値を含むSlapi_Value構造体へのポインタ

16.1.132.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 2つの値が同一である場合には、0

- v1がv2より小さい場合には、-1

- v1がv2より大きい場合には、1

16.1.132.4 説明

この関数は、属性aに関連付けられる一致ルールを使用して、2つのSlapi_Valuesを比較します。

この関数は、前のリリースで使用されていた非推奨のslapi_attr_value_cmp()関数に置き換わるものであり、berval属性値のかわりにSlapi_Value属性値を使用します。

16.1.133 slapi_value_done()

Slapi_Value構造体の内部を解放します。

16.1.133.1 構文

#include "slapi-plugin.h"
void slapi_value_done(Slapi_Value *v);

16.1.133.2 パラメータ

この関数は、次のパラメータを取ります。

v

その内部を解放するSlapi_Value構造体へのポインタ

16.1.133.3 関連項目

slapi_value_init()、slapi_value_init_berval()、slapi_value_init_string()

16.1.134 slapi_value_dup()

値を複製します。

16.1.134.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_dup(const Slapi_Value *v);

16.1.134.2 パラメータ

この関数は、次のパラメータを取ります。

v

複製するSlapi_Value構造体へのポインタ

16.1.134.3 戻り値

この関数は、新しく割り当てられたSlapi_Valueへのポインタを戻します。

16.1.134.4 メモリーに関する注意事項

新しいSlapi_Valueが割り当てられますが、これは、slapi_value_free()を使用してコール元によって解放される必要があります。

16.1.134.5 関連項目

slapi_value_free()

16.1.135 slapi_value_free()

指定されたSlapi_Value構造体およびそのメンバーをメモリーから解放します。

16.1.135.1 構文

#include "slapi-plugin.h"
void slapi_value_free(Slapi_Value **value);

16.1.135.2 パラメータ

この関数は、次のパラメータを取ります。

value

解放するSlapi_Valueへのポインタのアドレス

16.1.135.3 説明

この関数は、Slapi_Value構造体および(NULLでない場合には)そのメンバーを解放し、ポインタをNULLに設定します。

16.1.135.4 メモリーに関する注意事項

この関数は、構造体に対する作業が完了したときにコールします。

16.1.136 slapi_valuearray_free()

Slapi_Value構造体の指定された配列およびそのメンバーをメモリーから解放します。

16.1.136.1 構文

#include "slapi-plugin.h"
void slapi_valuearray_free(Slapi_Value ***value);

16.1.136.2 パラメータ

この関数は、次のパラメータを取ります。

value

解放するSlapi_Value構造体の配列

16.1.136.3 説明

この関数は、各Slapi_Value構造体およびそのメンバーを解放し、ポインタをNULLに設定します。

16.1.136.4 メモリーに関する注意事項

この関数は、値の配列に対する作業が完了したときにコールします。

16.1.137 slapi_value_get_berval()

値のberval構造体を取得します。

16.1.137.1 構文

#include "slapi-plugin.h"
const struct berval * slapi_value_get_berval(
const Slapi_Value *value);

16.1.137.2 パラメータ

この関数は、次のパラメータを取ります。

value

bervalの取得元となるSlapi_Valueへのポインタ

16.1.137.3 戻り値

Slapi_Valueに含まれるberval構造体へのポインタを戻します。この関数は、コピーではない実際のberval構造体へのポインタを戻します。

16.1.137.4 メモリーに関する注意事項

slapi_value_set_berval()をコールして置き換える予定である場合を除き、berval構造体を解放しないでください。

16.1.137.5 関連項目

slapi_value_set_berval()

16.1.138 slapi_value_get_int()

値を整数に変換します。

16.1.138.1 構文

#include "slapi-plugin.h"
int slapi_value_get_int(const Slapi_Value *value);

16.1.138.2 パラメータ

この関数は、次のパラメータを取ります。

value

整数としての取得元となるSlapi_Valueへのポインタ

16.1.138.3 戻り値

この関数は、Slapi_Value構造体に格納された値に対応する整数を戻し、値がない場合には0を戻します。

16.1.138.4 説明

Slapi_Value内の値を整数に変換します。

16.1.138.5 関連項目

slapi_value_get_long()

slapi_value_get_uint()

16.1.139 slapi_value_get_length()

値の実際の長さを取得します。

16.1.139.1 構文

#include "slapi-plugin.h"
size_t slapi_value_get_length(const Slapi_Value *value);

16.1.139.2 パラメータ

この関数は、次のパラメータを取ります。

value

長さの取得元となるSlapi_Valueへのポインタ

16.1.139.3 戻り値

この関数は、Slapi_Valueに含まれた値の長さを戻し、値がない場合には0を戻します。

16.1.139.4 説明

この関数は、Slapi_Value構造体に含まれる値の実際の長さを戻します。

16.1.140 slapi_value_get_long()

値をLong整数に変換します。

16.1.140.1 構文

#include "slapi-plugin.h"
long slapi_value_get_long(const Slapi_Value *value);

16.1.140.2 パラメータ

この関数は、次のパラメータを取ります。

value

Long整数としての取得元となるSlapi_Valueへのポインタ

16.1.140.3 戻り値

この関数は、Slapi_Value構造体に格納された値に対応するLong整数を戻し、値がない場合には0を戻します。

16.1.140.4 説明

この関数は、Slapi_Value構造体に含まれた値をLong整数に変換します。

16.1.140.5 関連項目

slapi_value_get_int()

slapi_value_get_uint()

slapi_value_get_ulong()

16.1.141 slapi_value_get_string()

値を文字列として返します。

16.1.141.1 構文

#include "slapi-plugin.h"
const char * slapi_value_get_string(const Slapi_Value *value);

16.1.141.2 パラメータ

この関数は、次のパラメータを取ります。

value

文字列としての取得元となるSlapi_Valueへのポインタ

16.1.141.3 戻り値

この関数は、値を含む文字列を戻し、値がない場合にはNULLを戻します。

この関数は、コピーではない、Slapi_Value内の実際の文字列値へのポインタを戻します。

16.1.141.4 メモリーに関する注意事項

slapi_value_set_string()をコールして置き換える予定である場合を除き、文字列を解放しないでください。

16.1.141.5 関連項目

slapi_value_set_string()

16.1.142 slapi_value_get_uint()

値を符号なし整数に変換します。

16.1.142.1 構文

#include "slapi-plugin.h"
unsigned int slapi_value_get_uint(const Slapi_Value *value);

16.1.142.2 パラメータ

この関数は、次のパラメータを取ります。

value

符号なし整数としての取得元となるSlapi_Valueへのポインタ

16.1.142.3 戻り値

この関数は、Slapi_Value構造体に格納された値に対応する符号なし整数を戻し、値がない場合には0を戻します。

16.1.142.4 説明

Slapi_Valueに含まれた値を符号なし整数に変換します。

16.1.142.5 関連項目

slapi_value_get_int()

slapi_value_get_long()

slapi_value_get_ulong()

16.1.143 slapi_value_get_ulong()

値を符号なしLong整数に変換します。

16.1.143.1 構文

#include "slapi-plugin.h"
unsigned long slapi_value_get_ulong(const Slapi_Value *value);

16.1.143.2 パラメータ

この関数は、次のパラメータを取ります。

value

符号なしLong整数としての取得元となるSlapi_Valueへのポインタ

16.1.143.3 戻り値

この関数は、Slapi_Value構造体に格納された値に対応する符号なしLong整数を戻し、値がない場合には0を戻します。

16.1.143.4 説明

Slapi_Value構造体に含まれた値を符号なしLong整数に変換します。

16.1.143.5 関連項目

slapi_value_get_int()

slapi_value_get_long()

slapi_value_get_uint()

16.1.144 slapi_value_init()

値を使用せずにSlapi_Value構造体を初期化します。

16.1.144.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_init(Slapi_Value *v);

16.1.144.2 パラメータ

この関数は、次のパラメータを取ります。

v

初期化する値へのポインタ。ポインタをNULLにすることはできません。

16.1.144.3 戻り値

この関数は、初期化されたSlapi_Value構造体(自体)へのポインタを戻します。

16.1.144.4 説明

この関数は、Slapi_Value構造体を初期化し、そのすべてのフィールドをゼロにリセットします。パラメータとして渡される値は、有効なSlapi_Valueである必要があります。

16.1.144.5 メモリーに関する注意事項

Slapi_Value構造体の使用が終了したら、slapi_value_done()を使用して、その内部構造体を解放します。

16.1.145 slapi_value_init_berval()

berval構造体からSlapi_Value構造体を初期化します。

16.1.145.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_init_berval(Slapi_Value *v,
struct berval *bval);

16.1.145.2 パラメータ

この関数は、次のパラメータを取ります。

v

初期化する値へのポインタポインタをNULLにすることはできません。

bval

値を初期化するために使用するberval構造体へのポインタ

16.1.145.3 戻り値

この関数は、初期化されたSlapi_Value構造体(自体)へのポインタを戻します。

16.1.145.4 説明

この関数は、berval構造体に含まれる値を使用して、Slapi_Value構造体を初期化します。berval構造体のコンテンツは複製されます。

16.1.145.5 メモリーに関する注意事項

Slapi_Value構造体の使用が終了したら、slapi_value_done()を使用して、その内部構造体を解放します。

16.1.146 slapi_value_init_string()

文字列からSlapi_Value構造体を初期化します。

16.1.146.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_init_string(Slapi_Value *v,const char *s);

16.1.146.2 パラメータ

この関数は、次のパラメータを取ります。

v

初期化する値へのポインタ。ポインタをNULLにすることはできません。

s

値の初期化に使用されるNULLで終了する文字列

16.1.146.3 戻り値

この関数は、初期化されたSlapi_Value構造体(自体)へのポインタを戻します。

16.1.146.4 説明

この関数は、文字列に含まれる値を使用して、Slapi_Value構造体を初期化します。文字列は複製されます。

16.1.146.5 メモリーに関する注意事項

Slapi_Value構造体の使用が終了したら、slapi_value_done()を使用して、その内部構造体を解放します。

16.1.147 slapi_value_init_string_passin()

文字列に含まれる値を使用して、Slapi_Value構造体を初期化します。

16.1.147.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_init_string_passin (Slapi_value *v,
char *s);

16.1.147.2 パラメータ

この関数は、次のパラメータを取ります。

v

初期化する値へのポインタ。ポインタをNULLにすることはできません。

s

値の初期化に使用されるNULLで終了する文字列

16.1.147.3 戻り値

この関数は、初期化されたSlapi_Value構造体(自体)へのポインタを戻します。

16.1.147.4 説明

この関数は、文字列に含まれる値を使用して、Slapi_Value構造体を初期化します。文字列は複製されず、解放する必要があります。

16.1.147.5 メモリーに関する注意事項

slapi_value_free()をコールしてSlapi_Value構造体がメモリーから解放されると、文字列が解放されます。

16.1.147.6 関連項目

slapi_value_free()

slapi_value_new_string_passin()

slapi_value_set_string_passin()

16.1.148 slapi_value_new()

新しいSlapi_Value構造体を割り当てます。

16.1.148.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_new();

16.1.148.2 パラメータ

この関数ではパラメータを使用しません。

16.1.148.3 戻り値

この関数は、新しく割り当てられたSlapi_Value構造体へのポインタを戻します。領域を割り当てられない場合(仮想メモリーが足りない場合など)は、slapdプログラムが停止します。

16.1.148.4 説明

この関数は、空のSlapi_Value構造体を戻します。APIの他の関数をコールして値を設定できます。

16.1.148.5 メモリーに関する注意事項

この値が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放します。

16.1.148.6 関連項目

slapi_value_dup()

slapi_value_free()

slapi_value_new_berval()

16.1.149 slapi_value_new_berval()

新しいSlapi_Value構造体を割り当てて、berval構造体から初期化します。

16.1.149.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_new_berval(const struct berval *bval);

16.1.149.2 パラメータ

この関数は、次のパラメータを取ります。

bval

新しく割り当てられたSlapi_Valueを初期化するために使用するberval構造体へのポインタ

16.1.149.3 戻り値

この関数は、新しく割り当てられたSlapi_Valueへのポインタを戻します。領域を割り当てることができない場合(仮想メモリーがこれ以上存在しない場合など)、slapdプログラムは終了します。

16.1.149.4 説明

この関数は、パラメータとして渡されたberval構造体から複製された値を含む、Slapi_Value構造体を戻します。

16.1.149.5 メモリーに関する注意事項

この値が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.149.6 関連項目

slapi_value_dup()

slapi_value_free()

slapi_value_new()

slapi_value_new_string()

16.1.150 slapi_value_new_string()

新しいSlapi_Value構造体を割り当て、この構造体を文字列から初期化します。

16.1.150.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_new_string(const char *s);

16.1.150.2 パラメータ

この関数は、次のパラメータを取ります。

s

新しく割り当てられたSlapi_Valueを初期化するために使用されるNULLで終了する文字列

16.1.150.3 戻り値

この関数は、新しく割り当てられたSlapi_Valueへのポインタを戻します。領域を割り当てることができない場合(仮想メモリーがこれ以上存在しない場合など)、slapdプログラムは終了します。

16.1.150.4 説明

この関数は、パラメータとして渡された文字列から複製された値を含む、Slapi_Value構造体を戻します。

16.1.150.5 メモリーに関する注意事項

この値が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.150.6 関連項目

slapi_value_dup()

slapi_value_free()

slapi_value_new()

slapi_value_new_berval()

16.1.151 slapi_value_new_string_passin()

新しいSlapi_Value構造体を割り当て、この構造体を文字列から初期化します。

16.1.151.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_new_string_passin ( char *s );

16.1.151.2 パラメータ

この関数は、次のパラメータを取ります。

s

新しく割り当てられたSlapi_Value構造体を初期化するために使用されるNULLで終了する文字列

16.1.151.3 戻り値

この関数は、新しく割り当てられたSlapi_Value構造体へのポインタを戻します。領域を割り当てることができない場合(仮想メモリーが存在しない場合など)、slapdプログラムは終了します。

16.1.151.4 説明

この関数は、パラメータとして渡された文字列を含む、Slapi_Value構造体を戻します。渡された文字列をメモリーから解放することはできません。

16.1.151.5 メモリーに関する注意事項

値は、slapi_value_free()を使用し、コール元によって解放される必要があります。

16.1.151.6 関連項目

slapi_value_dup()

slapi_value_free()

slapi_value_new()

16.1.152 slapi_value_new_value()

新しいSlapi_Value構造体を割り当てて、別のSlapi_Value構造体から初期化します。

16.1.152.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_new_value(const Slapi_Value *v);

16.1.152.2 パラメータ

この関数は、次のパラメータを取ります。

v

新しく割り当てられたSlapi_Valueを初期化するために使用するSlapi_Value構造体へのポインタ

16.1.152.3 戻り値

この関数は、新しく割り当てられたSlapi_Valueへのポインタを戻します。領域を割り当てることができない場合(仮想メモリーがこれ以上存在しない場合など)、slapdプログラムは終了します。

16.1.152.4 説明

この関数は、パラメータとして渡されたSlapi_Value構造体から複製された値を含む、Slapi_Value構造体を戻します。この関数は、slapi_value_dup()と同じです。

16.1.152.5 メモリーに関する注意事項

この値が必要でなくなったときは、slapi_value_free()関数をコールして、メモリーから解放する必要があります。

16.1.152.6 関連項目

slapi_value_dup()

slapi_value_free()

16.1.153 slapi_value_set()

Slapi_Value構造体に値を設定します。

16.1.153.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_set(Slapi_Value *value, void *val,
unsigned long len);

16.1.153.2 パラメータ

この関数は、次のパラメータを取ります。

value

値を設定するSlapi_Valueへのポインタ

val

値へのポインタ

len

値の長さ

16.1.153.3 戻り値

この関数は、値が設定されたSlapi_Valueへのポインタを戻します。

16.1.153.4 説明

この関数は、Slapi_Value構造体に値を設定します。この値はvalが指すデータの複製であり、長さはlenです。

16.1.153.5 メモリーに関する注意事項

Slapi_Value構造体へのポインタがNULLである場合、何も実行されず、関数はNULLを戻します。Slapi_Value構造体にすでに値が含まれている場合、この値は、新しい値が設定される前にメモリーから解放されます。

Slapi_Value構造体が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.153.6 関連項目

slapi_value_free()

16.1.154 slapi_value_set_berval()

berval構造体からSlapi_Value構造体に値をコピーします。

16.1.154.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_set_berval(Slapi_Value *value,
const struct berval *bval );

16.1.154.2 パラメータ

この関数は、次のパラメータを取ります。

value

値を設定するSlapi_Value構造体へのポインタ

bval

コピーするberval値へのポインタ

16.1.154.3 戻り値

この関数は、パラメータとして渡されたSlapi_Value構造体へのポインタを戻し、これがNULLであった場合にはNULLを戻します。

16.1.154.4 説明

この関数は、Slapi_Value構造体の値を設定します。値はberval構造体のbvalから複製されます。

16.1.154.5 メモリーに関する注意事項

Slapi_Value構造体へのポインタがNULLである場合、何も実行されず、関数はNULLを戻します。Slapi_Valueにすでに値が含まれている場合、この値は、新しい値が設定される前にメモリーから解放されます。

Slapi_Value構造体が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.154.6 関連項目

slapi_value_free()

16.1.155 slapi_value_set_int()

Slapi_Value構造体の整数値を設定します。

16.1.155.1 構文

#include "slapi-plugin.h"
int slapi_value_set_int(Slapi_Value *value, int intVal);

16.1.155.2 パラメータ

この関数は、次のパラメータを取ります。

value

整数値を設定するSlapi_Value構造体へのポインタ

intVal

設定する値を含む整数

16.1.155.3 戻り値

このファンクションは、次の値のいずれかを戻します。

- 値が設定されている場合には、0

- Slapi_ValueへのポインタがNULLである場合には、-1

16.1.155.4 説明

この関数は、整数intValからSlapi_Value構造体の値を設定します。

16.1.155.5 メモリーに関する注意事項

Slapi_Value構造体へのポインタがNULLである場合、何も実行されず、関数は-1を戻します。Slapi_Valueにすでに値が含まれている場合、この値は、新しい値が設定される前にメモリーから解放されます。

Slapi_Value構造体が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.155.6 関連項目

slapi_value_free()

16.1.156 slapi_value_set_string()

Slapi_Value構造体の値の文字列をコピーします。

16.1.156.1 構文

#include "slapi-plugin.h"
int slapi_value_set_string(Slapi_Value *value, const char *strVal);

16.1.156.2 パラメータ

この関数は、次のパラメータを取ります。

value

値を設定するSlapi_Value構造体へのポインタ

strVal

設定する値を含む文字列

16.1.156.3 戻り値

この関数は、次のいずれかを戻します。

- 値が設定されている場合には、0

- Slapi_ValueへのポインタがNULLである場合には、-1

16.1.156.4 説明

この関数は、文字列strValを複製することによって、Slapi_Value構造体の値を設定します。

16.1.156.5 メモリーに関する注意事項

Slapi_ValueへのポインタがNULLである場合、何も実行されず、関数は-1を戻します。Slapi_Valueにすでに値が含まれている場合、この値は、新しい値が設定される前にメモリーから解放されます。

Slapi_Value構造体が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.156.6 関連項目

slapi_value_free()

16.1.157 slapi_value_set_string_passin()

文字列から、Slapi_Value構造体の値を設定します。

16.1.157.1 構文

#include "slapi-plugin.h"
int slapi_value_set_string_passin(Slapi_Value *value, char *strVal);

16.1.157.2 パラメータ

この関数は、次のパラメータを取ります。

value

値を設定するSlapi_Value構造体へのポインタ

strVal

設定する値を含む文字列

16.1.157.3 戻り値

この関数は、値が設定されている場合には0を戻し、Slapi_Value構造体へのポインタがNULLである場合には-1を戻します。

16.1.157.4 説明

この関数は、文字列strValを使用して、Slapi_Value構造体の値を設定します。Slapi_Value構造体にすでに値が含まれている場合、この値は、新しい値が設定される前にメモリーから解放されます。文字列strValをメモリーから解放することはできません。

16.1.157.5 メモリーに関する注意事項

メモリーから解放する構造体に対する作業が完了したら、slapi_value_free()を使用します。

16.1.158 slapi_value_set_value()

Slapi_Value構造体の値をSlapi_Value構造体にコピーします。

16.1.158.1 構文

#include "slapi-plugin.h"
Slapi_Value * slapi_value_set_value(Slapi_Value *value,
const Slapi_Value *vfrom);

16.1.158.2 パラメータ

この関数は、次のパラメータを取ります。

value

値を設定するSlapi_Valueへのポインタ

vfrom

値の取得元となるSlapi_Valueへのポインタ

16.1.158.3 戻り値

この関数は、パラメータとして渡されたSlapi_Value構造体へのポインタを戻し、これがNULLであった場合にはNULLを戻します。

16.1.158.4 説明

この関数は、Slapi_Value構造体の値を設定します。この値はSlapi_Value構造体のvfromから複製されます。vfromをNULLにすることはできません。

16.1.158.5 メモリーに関する注意事項

Slapi_ValueへのポインタがNULLである場合、何も実行されず、関数はNULLを戻します。Slapi_Valueにすでに値が含まれている場合、この値は、新しい値が設定される前に解放されます。

Slapi_Value構造体が必要でなくなったときには、slapi_value_free()をコールして、メモリーから解放する必要があります。

16.1.158.6 関連項目

slapi_value_free()

16.1.159 slapi_valueset_add_value_optimised()

Slapi_ValueSet構造体にSlapi_Valueを追加します。

16.1.159.1 構文

#include "slapi-plugin.h"
void slapi_valueset_add_value_optimised(Slapi_ValueSet *vs,
const Slapi_Value *addval, void *syntax_plugin);

16.1.159.2 パラメータ

この関数は、次のパラメータを取ります。

vs

値を追加するSlapi_ValueSet構造体へのポインタ

addval

Slapi_ValueSetに追加するSlapi_Valueへのポインタ

syntax_plugin

slapi_attr_get_plugin()を使用して取得される、この属性タイプのプラグインへのポインタ

16.1.159.3 説明

この関数は、Slapi_Value構造体の形式で値をSlapi_ValueSet構造体に追加します。

16.1.159.4 メモリーに関する注意事項

値はSlapi_Value構造体から複製され、値の使用後には、Slapi_ValueSet構造体を変更することなくメモリーから解放できます。

この関数では、Slapi_ValueSet構造体に値がすでに存在するかどうかは検証しません。このことは、slapi_valueset_first_value_const()およびslapi_valueset_next_value_const()を使用して、手動で確認できます。

16.1.159.5 関連項目

slapi_valueset_first_value_const()

slapi_valueset_next_value_const()

16.1.160 slapi_valueset_count()

Slapi_ValueSet構造体に格納されている値の数を戻します。

16.1.160.1 構文

#include "slapi-plugin.h"
int slapi_valueset_count(const Slapi_ValueSet *vs);

16.1.160.2 パラメータ

この関数は、次のパラメータを取ります。

vs

件数の取得元となるSlapi_ValueSet構造体へのポインタ

16.1.160.3 戻り値

この関数は、Slapi_ValueSet構造体に含まれる値の数を戻します。

16.1.161 slapi_valueset_done()

Slapi_ValueSet構造体に格納されている値を解放します。

16.1.161.1 構文

#include "slapi-plugin.h"
void slapi_valueset_done(Slapi_ValueSet *vs);

16.1.161.2 パラメータ

この関数は、次のパラメータを取ります。

vs

その値を解放するSlapi_ValueSet構造体へのポインタ

16.1.161.3 メモリーに関する注意事項

この値が必要でなくなったものの、新しい値セットにSlapi_ValueSet構造体を再利用する場合は、この関数を使用します。

16.1.162 slapi_valueset_find_const()

属性の構文を使用して、値セットの値を検索します。

#include "slapi-plugin.h"
const Slapi_Value *slapi_valueset_find(const Slapi_Attr *a,
const Slapi_ValueSet *vs, const Slapi_Value *v);

16.1.162.1 パラメータ

この関数は、次のパラメータを取ります。

a

属性へのポインタ。これは、値の構文および値の一致方法を決定するために使用されます。

vs

値の取得元となるSlapi_ValueSet構造体へのポインタ。

v

戻り値のSlapi_Value構造体へのポインタのアドレス。

16.1.162.2 戻り値

この関数は、値が検出された場合、値セットの値へのポインタを戻します。それ以外の場合はNULLを戻します。

16.1.162.3 説明

この関数を使用して、属性の重複値を確認します。

16.1.163 slapi_valueset_first_value_const()

Slapi_ValueSet構造体の最初の値を取得します。

16.1.163.1 構文

#include "slapi-plugin.h"
int slapi_valueset_first_value_const(const Slapi_ValueSet *vs,
const Slapi_Value **v);

16.1.163.2 パラメータ

この関数は、次のパラメータを取ります。

vs

値の取得元となるSlapi_ValueSet構造体へのポインタ。

v

戻り値のSlapi_Value構造体へのポインタのアドレス。

16.1.163.3 戻り値

この関数は、Slapi_ValueSetの値の索引を戻し、値がなかった場合には-1を戻します。

16.1.163.4 説明

この関数は、Slapi_ValueSetの最初の値を取得したり、すべての値に対して処理を繰り返す場合にコールします。戻り値はSlapi_ValueSet構造体内の値の索引であり、次の値を取得するslapi_valueset_next_value_const()をコールするために渡される必要があります。

16.1.163.5 メモリーに関する注意事項

この関数は、Slapi_ValueSet内の実際の値へのポインタを戻します。これをメモリーから解放しないでください。

16.1.163.6 関連項目

slapi_valueset_next_value_const()

16.1.164 slapi_valueset_free()

指定されたSlapi_ValueSet構造体およびそのメンバーをメモリーから解放します。

16.1.164.1 構文

#include "slapi-plugin.h"
void slapi_valueset_free(Slapi_ValueSet *vs)

16.1.164.2 パラメータ

この関数は、次のパラメータを取ります。

vs

解放するSlapi_ValueSetへのポインタ

16.1.164.3 説明

この関数は、Slapi_ValueSet構造体および(NULLでない場合には)そのメンバーを解放します。この関数は、構造体に対する作業が完了したときにコールします。

16.1.164.4 関連項目

slapi_valueset_done()

16.1.165 slapi_valueset_init()

Slapi_ValueSet構造体を値のない状態にリセットします。

16.1.165.1 構文

#include "slapi-plugin.h"
void slapi_valueset_init(Slapi_ValueSet *vs);

16.1.165.2 パラメータ

この関数は、次のパラメータを取ります。

vs

リセットするSlapi_ValueSetへのポインタ

16.1.165.3 説明

この関数は、Slapi_ValueSet構造体に含まれる値を初期化します(値を0に設定します)。これにより、構造体に含まれる値が解放されることはありません。値を解放するには、slapi_valueset_done()を使用します。

16.1.165.4 メモリーに関する注意事項

Slapi_ValueSet構造体が必要でなくなったときには、slapi_valueset_free()を使用して、メモリーから解放する必要があります。

16.1.165.5 関連項目

slapi_valueset_done()

slapi_valueset_free()

16.1.166 slapi_valueset_new()

新しいSlapi_ValueSet構造体を割り当てます。

16.1.166.1 構文

#include "slapi-plugin.h"
Slapi_ValueSet *slapi_valueset_new( void );

16.1.166.2 パラメータ

この関数にパラメータはありません。

16.1.166.3 戻り値

この関数は、新しく割り当てられたSlapi_ValueSet構造体へのポインタを戻します。領域を割り当てることができない場合(仮想メモリーがこれ以上存在しない場合など)、slapdプログラムは終了します。

16.1.166.4 説明

この関数は、空のSlapi_ValueSet構造体を戻します。APIの他のslapi_valueset関数をコールして、Slapi_ValueSet構造体に値を設定できます。

16.1.166.5 メモリーに関する注意事項

この値が必要でなくなったときには、slapi_valueset_free()をコールして、メモリーから解放する必要があります。

16.1.166.6 関連項目

slapi_valueset_free()

16.1.167 slapi_valueset_next_value_const()

Slapi_ValueSet構造体から次の値を取得します。

16.1.167.1 構文

#include "slapi-plugin.h"
int slapi_valueset_next_value_const(const Slapi_ValueSet *vs, int index,
const Slapi_Value **v);

16.1.167.2 パラメータ

この関数は、次のパラメータを取ります。

vs

値の取得元となるSlapi_ValueSet構造体へのポインタ。

index

slapi_valueset_next_value_const ()またはslapi_valueset_first_value_const()への以前のコールによって戻された値

v

戻り値のSlapi_Value構造体へのポインタへのアドレス

16.1.167.3 戻り値

この関数は、Slapi_ValueSetの値の索引を戻し、値がこれ以上存在しないか、または入力索引が正しくない場合には-1を戻します。

16.1.167.4 説明

この関数は、最初にslapi_valueset_first_value_const()をコールした後、Slapi_ValueSetの次の値を取得する場合にコールします。戻り値はSlapi_ValueSet構造体内の値の索引であり、slapi_valueset_next_value_const()に渡される必要があります。

16.1.167.5 メモリーに関する注意事項

この関数は、Slapi_ValueSet内の実際の値へのポインタを戻し、このポインタをメモリーから解放しないようにする必要があります。

16.1.167.6 関連項目

slapi_valueset_first_value_const()

16.1.168 slapi_valueset_set_from_smod()

Slapi_Mod構造体の値をSlapi_ValueSet構造体にコピーします。

16.1.168.1 構文

#include "slapi-plugin.h"
void slapi_valueset_set_from_smod(Slapi_ValueSet *vs,
Slapi_Mod *smod);

16.1.168.2 パラメータ

この関数は、次のパラメータを取ります。

vs

値のコピー先となるSlapi_ValueSet構造体へのポインタ

smod

値のコピー元となるSlapi_Mod構造体へのポインタ

16.1.168.3 説明

この関数は、Slapi_Mod構造体に含まれるすべての値をSlapi_ValueSet構造体にコピーします。

16.1.168.4 メモリーに関する注意事項

この関数では、Slapi_ValueSet構造体に値がすでに含まれていることは検証されないため、この関数をコールする前に、値がないことを自分で検証する必要があります。この検証を行わないと、割り当てられたメモリー領域がリークします。slapi_valueset_done()をコールして、既存の値を解放できます。

16.1.168.5 関連項目

slapi_valueset_done()

16.1.169 slapi_valueset_set_valueset_optimised()

別のSlapi_ValueSet構造体からSlapi_ValueSet構造体を初期化します。

16.1.169.1 構文

#include "slapi-plugin.h"
void slapi_valueset_set_valueset_optimised(Slapi_ValueSet *vs1,
const Slapi_ValueSet *vs2, void *syntax_plugin);

16.1.169.2 パラメータ

この関数は、次のパラメータを取ります。

vs1

値の設定先となるSlapi_ValueSet構造体へのポインタ

vs2

値のコピー元となるSlapi_ValueSet構造体へのポインタ

syntax_plugin

slapi_attr_type2plugin()を使用して取得される、この属性タイプのプラグインへのポインタ

16.1.169.3 説明

この関数は、別のSlapi_ValueSet構造体に含まれる値をコピーすることによって、Slapi_ValueSet構造体を初期化します。

16.1.169.4 メモリーに関する注意事項

この関数では、Slapi_ValueSet構造体に値が含まれていることは検証されないため、この関数をコールする前に、値がないことを自分で検証する必要があります。この検証を行わないと、割り当てられたメモリー領域がリークします。slapi_valueset_done()をコールして、既存の値を解放できます。

16.1.169.5 関連項目

slapi_valueset_done()

16.1.170 slapi_vattr_attr_free()

仮想属性を解放します。

16.1.170.1 構文

#include "slapi-plugin.h"
void slapi_vattr_attr_free(Slapi_Attr **a, int buffer_flags);

16.1.170.2 パラメータ

この関数は、次のパラメータを取ります。

a

解放する属性

buffer_flags

SLAPI_VIRTUALATTRS_RETURNED_POINTERS、SLAPI_VIRTUALATTRS_RETURNED_COPIES、SLAPI_VIRTUALATTRS_REALATTRS_ONLY、SLAPI_VIRTUALATTRS_RETURNED_TYPENAME_ONLYのビットマスク

16.1.170.3 説明

仮想属性に対する作業が完了したら、この関数を使用して解放します。

16.1.170.4 関連項目

slapi_vattr_attrs_free()

16.1.171 slapi_vattr_attrs_free()

仮想属性のリストを解放します。

16.1.171.1 構文

#include "slapi-plugin.h"
void slapi_vattr_attrs_free(vattr_type_thang **types, int flags);

16.1.171.2 パラメータ

この関数は、次のパラメータを取ります。

types

解放する属性のリスト

flags

slapi_vattr_list_attrs()にflagsとして渡されるSLAPI_REALATTRS_ONLY、SLAPI_VIRTUALATTRS_ONLY、SLAPI_VIRTUALATTRS_REQUEST_POINTERS、SLAPI_VIRTUALATTRS_LIST_OPERATIONAL_ATTRSのビットマスク

16.1.171.3 説明

この関数を使用して、slapi_vattr_list_attrs()を使用して取得される仮想属性のリストを解放します。

16.1.171.4 関連項目

slapi_vattr_attr_free()

slapi_vattr_list_attrs()

16.1.172 slapi_vattr_filter_test()

仮想属性を含む可能性のあるエントリに対するフィルタをテストします。

16.1.172.1 構文

#include "slapi-plugin.h"
int slapi_vattr_filter_test( Slapi_PBlock *pb, Slapi_Entry *e,
struct slapi_filter *f, int verify_access);

16.1.172.2 パラメータ

この関数は、次のパラメータを取ります。

pb

検索リクエストを含むパラメータ・ブロック

e

候補エントリ

f

確認するフィルタ

verify_access

確認前にエントリへのアクセスを検証するには1、それ以外の場合には0

16.1.172.3 説明

この関数は、候補エントリeがフィルタfと一致するかどうかを確認します。LDAP v3拡張一致フィルタはサポートされていません。

16.1.172.4 戻り値

この関数は、フィルタが一致するか、またはフィルタがNULLの場合には、0を戻します。そうでない場合は、-1を戻します。

16.1.173 slapi_vattr_is_registered()

属性が仮想である可能性があるかどうかを確認します。

16.1.173.1 構文

#include "slapi-plugin.h"
int slapi_vattr_is_registered(const char *attrtype,
const char *scopendn);

16.1.173.2 パラメータ

この関数は、次のパラメータを取ります。

attrtype

確認する属性タイプ

scopendn

確認する範囲のベース

16.1.173.3 説明

この関数は、指定された範囲内の属性タイプについて、仮想属性サービスが登録されているかどうかを確認します。

仮想属性サービスが属性タイプに登録されているという事実は、現在、サービスにより値を提供できることを保証するわけではありません。

16.1.173.4 戻り値

この関数は、指定された範囲において属性が仮想である可能性がある場合には、1を戻します。それ以外の場合は0を戻します。

16.1.174 slapi_vattr_is_virtual()

属性が仮想属性として生成されているかどうかを確認します。

16.1.174.1 構文

#include "slapi-plugin.h"
int slapi_vattr_is_virtual( Slapi_Entry *e, const char *attrtype,
Slapi_Value *v);

16.1.174.2 パラメータ

この関数は、次のパラメータを取ります。

e

確認するエントリ。

attrtype

確認する属性タイプ。

v

現在は使用されていません。

16.1.174.3 戻り値

この関数は、属性値が仮想属性として生成されている場合には1を戻します。それ以外の場合は0を戻します。

16.1.175 slapi_vattr_list_attrs()

エントリの実在属性および仮想属性のリストを取得します。

16.1.175.1 構文

#include "slapi-plugin.h"
int slapi_vattr_list_attrs(Slapi_Entry *e,
vattr_type_thang **types, int flags, int *buffer_flags);

16.1.175.2 パラメータ

この関数は、次のパラメータを取ります。

e

取得する属性のエントリ

types

サーバーによって設定された属性のリスト

flags

リストに何を設定するかを決定するSLAPI_REALATTRS_ONLY、SLAPI_VIRTUALATTRS_ONLY、SLAPI_VIRTUALATTRS_REQUEST_POINTERS、SLAPI_VIRTUALATTRS_LIST_OPERATIONAL_ATTRSのビットマスク

buffer_flags

仮想属性がどのように処理されるかを決定するSLAPI_VIRTUALATTRS_RETURNED_POINTERS、SLAPI_VIRTUALATTRS_RETURNED_COPIES、SLAPI_VIRTUALATTRS_REALATTRS_ONLY、SLAPI_VIRTUALATTRS_RETURNED_TYPENAME_ONLYのビットマスク

16.1.175.3 説明

この関数は、flagsパラメータに応じて、エントリeの属性の全リストを指すtypesを設定します。リストを解放する場合には、buffer_flagsパラメータを使用します。

属性にアクセスするには、slapi_vattr_values_type_thang_get()を使用します。

16.1.175.4 戻り値

この関数は、指定された範囲において属性が仮想である可能性がある場合には、1を戻します。それ以外の場合は0を戻します。

16.1.175.5 メモリーに関する注意事項

typesリストに対する作業が完了したら、slapi_vattr_attrs_free()を使用して解放します。

16.1.175.6 関連項目

vattr_type_thang

slapi_vattr_attrs_free()

slapi_vattr_values_type_thang_get()

16.1.176 slapi_vattr_value_compare()

指定されたエントリの属性タイプおよび名前を比較します。

16.1.176.1 構文

#include "slapi-plugin.h"
int slapi_vattr_value_compare( Slapi_Entry *e, char *type,
Slapi_Value *test_this, int *result, int flags);

16.1.176.2 パラメータ

この関数は、次のパラメータを取ります。

e

比較するエントリ。

type

属性タイプ名。

test_this

テストする値。

result

比較がtrueの場合には0、比較がfalseの場合には1。

flags

使用されません。このパラメータには0を渡す必要があります。

16.1.176.3 戻り値

この関数は、成功した場合には0を戻し、このとき、resultに比較の結果が含まれます。

それ以外の場合、この関数は次を戻します。

- SLAPI_VIRTUALATTRS_LOOP_DETECTED (仮想属性の評価に失敗しました)

- SLAPI_VIRTUAL_NOT_FOUND (エントリ内の仮想属性および実在属性によってタイプを認識できません)

- ENOMEM (メモリー・エラー)

16.1.176.4 説明

この関数をコールした後、slapi_vattr_values_free()をコールする必要はありません。

16.1.177 slapi_vattr_values_free()

値セットおよびタイプ名を解放します。

16.1.177.1 構文

#include "slapi-plugin.h"
void slapi_vattr_values_free(Slapi_ValueSet **value,
char **actual_type_name, int flags);

16.1.177.2 パラメータ

この関数は、次のパラメータを取ります。

value

解放する値セット。

actual_type_name

タイプ名のリスト。

flags

slapi_vattr_values_get_ex()から戻されるバッファ・フラグ。これには、解放する必要があるオブジェクトをこの関数によって決定する必要があるという情報が含まれます。

16.1.177.3 説明

この関数は、slapi_vattr_values_get_ex()から戻された値セットおよびタイプ名を解放する場合に使用する必要があります。

16.1.177.4 関連項目

slapi_vattr_values_get_ex()

16.1.178 slapi_vattr_values_get_ex()

エントリから属性タイプの値を戻します。

16.1.178.1 構文

#include "slapi-plugin.h"
int slapi_vattr_values_get_ex(Slapi_Entry *e, char *type,
Slapi_ValueSet*** results, int **type_name_disposition,
char ***actual_type_name, int flags, int *buffer_flags,
int *subtype_count);

16.1.178.2 パラメータ

この関数は、次のパラメータを取ります。

e

値の取得元となるエントリ。

type

属性タイプ名。

results

結果セットへのポインタ。

type_name_disposition

一致する結果。

actual_type_name

検出されたとおりのタイプ名。

flags

オプションのビットマスク。有効な値は次のとおりです。

- SLAPI_REALATTRS_ONLY

- SLAPI_VIRTUALATTRS_ONLY

- SLAPI_VIRTUALATTRS_REQUEST_POINTERS

- SLAPI_VIRTUALATTRS_LIST_OPERATIONAL_ATTRS

buffer_flags

slapi_vattr_values_free()の入力フラグとして使用されるビットマスク。

subtype_count

一致したサブタイプの数。

16.1.178.3 戻り値

この関数は、成功した場合には0を戻し、このとき、次のことが該当します。

- resultsには、eに含まれるすべてのサブタイプのタイプについて現在の値が含まれます。

- type_name_dispositionには、各タイプがどのように一致したかに関する情報が含まれます。有効な値は次のとおりです。

- SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_EXACTLY_OR_ALIAS

- SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_SUBTYPE

actual_type_nameには、検出されたとおりのタイプ名が含まれます。

- buffer_flagsには、slapi_vattr_values_free()の入力フラグとして使用されるビットマスクが含まれます。

- subtype_countには、一致したサブタイプの数が含まれます。
それ以外の場合、この関数は次を戻します。

- SLAPI_VIRTUALATTRS_LOOP_DETECTED (仮想属性の評価に失敗しました)

- SLAPI_VIRTUAL_NOT_FOUND (エントリ内の仮想属性および実在属性によってタイプを認識できません)

- ENOMEM (メモリー・エラー)

16.1.178.4 説明

この関数は、指定された属性タイプの任意のサブタイプに対する値など、エントリからの属性タイプの値を戻します。要求された場合は、このエントリ内の仮想属性の値がルーチンによって戻されます。

16.1.178.5 メモリーに関する注意事項

slapi_vattr_values_free()を使用して、このルーチンから戻されたbuffer_flags値を渡し、戻された結果セットおよびタイプ名を解放する必要があります。

16.1.178.6 関連項目

slapi_vattr_values_free()

16.1.179 slapi_vattr_values_type_thang_get()

エントリの実在属性および仮想属性のリストから、値を取得します。

16.1.179.1 構文

#include "slapi-plugin.h"
int slapi_vattr_values_type_thang_get(Slapi_Entry *e,
vattr_type_thang *type_thang, Slapi_ValueSet** results,
int *type_name_disposition, char **actual_type_name,
int flags, int *buffer_flags);

16.1.179.2 パラメータ

この関数は、次のパラメータを取ります。

e

属性が属するエントリ。

type_thang

実在または仮想属性のタイプ。

results

サーバーによって設定された、属性の値。

type_name_disposition

タイプ名の一致方法を反映するようにサーバーによって設定され、SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_EXACTLY_OR_ALIAS、SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_SUBTYPE、SLAPI_VIRTUALATTRS_NOT_FOUND (エントリ上にタイプの一致する実在属性または仮想属性がありません)またはSLAPI_VIRTUALATTRS_LOOP_DETECTED (仮想属性を評価できませんでした)のいずれかです。

actual_type_name

検出された実際のタイプ名に対してサーバーによって設定されます。

flags

slapi_vattr_list_attrs()を使用してリストを取得するときに適用されるSLAPI_REALATTRS_ONLY、SLAPI_VIRTUALATTRS_ONLY、SLAPI_VIRTUALATTRS_REQUEST_POINTERS、SLAPI_VIRTUALATTRS_LIST_OPERATIONAL_ATTRSのビットマスク。

buffer_flags

SLAPI_VIRTUALATTRS_RETURNED_POINTERS、SLAPI_VIRTUALATTRS_RETURNED_COPIES、SLAPI_VIRTUALATTRS_REALATTRS_ONLY、SLAPI_VIRTUALATTRS_RETURNED_TYPENAME_ONLYのビットマスクに対してサーバーによって設定され、リストの解放に役立ちます。

16.1.179.3 説明

この関数を使用すると、slapi_vattr_list_attrs()によって設定されたリスト内の属性値に、最適な方法でアクセスできます。

16.1.179.4 戻り値

この関数は、成功した場合には0を戻し、このとき、次のことが該当します。

- resultsには、eに含まれるすべてのサブタイプのタイプについて現在の値が含まれます。

- type_name_dispositionには、各タイプがどのように一致したかに関する情報が含まれます。有効な値は次のとおりです。

- SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_EXACTLY_OR_ALIAS

- SLAPI_VIRTUALATTRS_TYPE_NAME_MATCHED_SUBTYPE

actual_type_nameには、検出されたとおりのタイプ名が含まれます。

- buffer_flagsには、slapi_vattr_values_free()の入力フラグとして使用されるビットマスクが含まれます。

- subtype_countには、一致したサブタイプの数が含まれます。
それ以外の場合、この関数は次を戻します。

- SLAPI_VIRTUALATTRS_LOOP_DETECTED (仮想属性の評価に失敗しました)

- SLAPI_VIRTUAL_NOT_FOUND (エントリ内の仮想属性および実在属性によってタイプを認識できません)

- ENOMEM (メモリー・エラー)

16.1.179.5 関連項目

vattr_type_thang

slapi_vattr_list_attrs()

16.1.180 slapi_wait_condvar()

条件変数における変更を待機します。

16.1.180.1 構文

#include "slapi-plugin.h"
int slapi_wait_condvar(Slapi_CondVar *cvar,struct timeval *timeout);

16.1.180.2 パラメータ

この関数は、次のパラメータを取ります。

cvar

待機する条件変数。

timeout

NULLは、通知されるまでブロックすることを意味します。それ以外の場合、時間になるまでブロックしてから、ロックの取得を再試行します。

16.1.180.3 説明

この関数を使用すると、待機と通知のメカニズムを使用したスレッド同期を実行できます。

16.1.180.4 戻り値

成功した場合、この関数は1を戻します。それ以外の場合はNULLを戻します。

16.1.180.5 メモリーに関する注意事項

条件変数に対する変更を他のスレッドに通知するには、slapi_notify_condvar()をコールします。

16.1.180.6 関連項目

slapi_destroy_condvar()

slapi_new_condvar()

slapi_notify_condvar()

17 パラメータ・ブロック・リファレンス

この章では、パラメータ・ブロックのSlapi_PBlock構造体で使用可能なパラメータについて説明します。この章では、各パラメータに関連付けられたデータ型を一覧表示しています。

注意:

パラメータ値を読み取るには、slapi_pblock_get()を使用します。パラメータ値を書き込むには、slapi_pblock_set()を使用します。その他の関数を使用すると、サーバーがクラッシュすることがあります。

これらのパラメータの使用方法の詳細は、「プラグインAPIガイド」とinstall-path/examples/の下のサンプル・プラグインを参照してください。

17.1 パラメータ・カテゴリ

この章では、次のようにパラメータを分類します。

表17-1 Slapi_PBlockのパラメータ・カテゴリ

カテゴリ

可能なアクセス先

アクセス・ログ

すべてのプラグイン関数

追加

事前操作および事前操作追加関数

バックエンド情報

すべてのプラグイン関数

バインド

事前操作および事後操作バインド関数

比較

事前操作および事後操作比較関数

接続情報

すべてのプラグイン関数

削除

事前操作および事後操作削除関数

ディレクトリ構成情報

すべてのプラグイン関数

拡張操作

拡張操作関数

内部操作

すべてのプラグイン関数

変更

事前操作および事後操作変更関数

操作情報

すべてのプラグイン関数

プラグイン登録

プラグイン初期化関数とこの項で指定されている特定タイプ

パスワード検証

パスワード・チェック関数とデータ

事後操作エントリ・アクセス

事後操作プラグイン関数

名前変更(RDN変更)

事前操作および事後操作RDN変更関数

結果

すべてのプラグイン関数

検索

事前操作および事後操作検索関数

17.2 アクセス・ログ

次のパラメータによって、アクセス・ログの出力を構成できます。

表17-2 アクセス・ログのパラメータ

パラメータID

データ型

説明

SLAPI_OPERATION_NOTES

unsigned int

アクセス・ログで索引なし検索が示されることを指定するフラグ。

このパラメータをSLAPI_OP_NOTE_UNINDEXEDに設定すると、文字列Notes=Uが、索引なし検索を反映するアクセス・ログ・エントリに追加される。

17.3 追加

次のパラメータによって、パラメータ・ブロックを介してディレクトリに追加するエントリにアクセスできます。

表17-3 追加関数のパラメータ

パラメータID

データ型

説明

SLAPI_ADD_ENTRY

Slapi_Entry *

追加するエントリ

SLAPI_ADD_TARGET

char *

追加するエントリのDN

17.4 バックエンド情報

次のパラメータによって、パラメータ・ブロックを介してディレクトリ・バックエンドに関する情報にアクセスできます。

表17-4 バックエンド情報のパラメータ

パラメータID

データ型

説明

SLAPI_BACKEND

Slapi_Backend *

現在の操作を実行するバックエンド。

バックエンドが現在の操作に関連付けられていない場合は、NULLになることがある。

SLAPI_BE_LASTMOD

int

バックエンドが変更時間と変更者を追跡するかどうか。

- 0: 変更を追跡しない

- 1: 変更を追跡する

SLAPI_BE_READONLY

int

サーバー構成ファイルのnsslapd-readonlyの値。

- 0: バックエンドは書込み可能

- 1: バックエンドは読取り専用

SLAPI_BE_TYPE

char *

サーバー構成ファイルのnsslapd-databaseの値。

SLAPI_DBSIZE

unsigned int

バックエンド・データベースのサイズ(KB)。

17.5 バインド

次のパラメータによって、パラメータ・ブロックを介してバインド操作に関する情報にアクセスできます。

表17-5 バインド関数のパラメータ

パラメータID

データ型

説明

SLAPI_BIND_CREDENTIALS

struct berval *

バインド方法に応じた、パスワードまたはSASLメカニズム資格証明などのバインド・リクエスト資格証明

SLAPI_BIND_METHOD

int

使用される認証方法

- LDAP_AUTH_NONE (匿名)

- LDAP_AUTH_SASL (SASL)

- LDAP_AUTH_SIMPLE (パスワード)

- LDAP_AUTH_SSL (証明書)

SLAPI_BIND_RET_SASLCREDS

struct berval *

クライアントに送信するSASLサーバー資格証明

SLAPI_BIND_SASLMECHANISM

char *

バインドに使用されるSASLメカニズム

SLAPI_BIND_TARGET

char *

バインドに使用されるDN

17.6 比較

次のパラメータによって、パラメータ・ブロックを介して比較で使用するエントリまたは属性にアクセスできます。

表17-6 比較関数のパラメータ

パラメータID

データ型

説明

SLAPI_COMPARE_TARGET

char *

比較で使用するエントリのDN

SLAPI_COMPARE_TYPE

char *

比較で使用する属性タイプ

SLAPI_COMPARE_VALUE

struct berval *

比較で使用する属性値

17.7 接続情報

次のパラメータによって、パラメータ・ブロックを介してクライアント接続に関する情報にアクセスできます。

表17-7 接続情報のパラメータ

パラメータID

データ型

説明

SLAPI_CLIENT_DNS

struct berval *

クライアントの完全修飾ドメイン名

SLAPI_CONN_AUTHMETHOD

char *

使用される認証方法

- SLAPD_AUTH_NONE (匿名)

- SLAPD_AUTH_SASL (拡張可能なSASL)

- SLAPD_AUTH_SIMPLE (パスワード)

- SLAPD_AUTH_SSL (証明書)

SLAPI_CONN_CLIENTNETADDR

PRNetAddr *

クライアントのIPアドレス

SLAPI_CONN_DN

char *

現行の接続の認証されたユーザーのDN

SLAPI_CONNECTION

Slapi_Connection *

現行の接続

SLAPI_CONN_ID

int

現行の接続の識別子

SLAPI_CONN_IS_REPLICATION_SESSION

int

接続がレプリケーション用かどうか

- 0: False

- 1: True

SLAPI_CONN_IS_SSL_SESSION

int

接続がSSL経由かどうか

- 0: False

- 1: True

SLAPI_CONN_SERVERNETADDR

PRNetAddr *

クライアントの接続先のIPアドレス

17.8 削除

次のパラメータによって、パラメータ・ブロックを介して削除するエントリにアクセスできます。

表17-8 削除関数のパラメータ

パラメータID

データ型

説明

SLAPI_DELETE_TARGET

char *

削除するエントリのDN

SLAPI_ORIGINAL_TARGET

char *

削除するエントリの非正規化されたDN

17.9ディレクトリ構成情報

次のパラメータによって、パラメータ・ブロックを介してディレクトリ・インスタンスの構成に関する情報にアクセスできます。

表17-9 ディレクトリ構成情報のパラメータ

パラメータID

データ型

説明

SLAPI_ARGC

int

起動時にサーバーに渡されるコマンドライン引数の数

SLAPI_ARGV

char **

起動時にサーバーに渡されるコマンドライン引数の配列

SLAPI_CONFIG_DIRECTORY

char *

インスタンスの構成ファイルを含むファイル・システム・ディレクトリ

SLAPI_CONFIG_FILENAME

char *

dse.ldifなどの使用される構成ファイル

17.10 拡張操作

次のパラメータによって、パラメータ・ブロックを介して拡張操作に関する情報にアクセスできます。

例17-10 拡張操作のパラメータ

パラメータID

データ型

説明

SLAPI_EXT_OP_REQ_OID

char *

リクエストで指定される拡張操作のオブジェクト識別子(OID)

SLAPI_EXT_OP_REQ_VALUE

struct berval *

リクエストで指定される値

SLAPI_EXT_OP_RET_OID

char *

クライアントに戻すオブジェクト識別子(OID)

SLAPI_EXT_OP_RET_VALUE

struct berval *

クライアントに送信する値

17.11 内部操作

次のパラメータによって、パラメータ・ブロックを介して内部操作に関する情報にアクセスできます。

表17-11 内部操作のパラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_INTOP_RESULT

int

内部操作の結果コード

SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES

Slapi_Entry **

内部検索で検出されるエントリの配列

SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS

char **

LDAP URLフォーマットで内部検索により検出される参照の配列

17.12 変更

次のパラメータによって、パラメータ・ブロックを介して変更するエントリにアクセスできます。

表17-12 変更関数のパラメータ

パラメータID

データ型

説明

SLAPI_MODIFY_MODS

LDAPMod **

ターゲット・エントリで実行する変更を含むLDAPMod構造体のNULL終了配列

SLAPI_MODIFY_TARGET

char *

変更するエントリのDN

SLAPI_ORIGINAL_TARGET

char *

変更するエントリの非正規化されたDN

17.13 操作情報

次のパラメータによって、パラメータ・ブロックを介して現在の操作に関する情報にアクセスできます。

表17-13 操作情報のパラメータ

パラメータID

データ型

説明

SLAPI_CONTROLS_ARG

LDAPControl **

操作が作成される前に渡されるコントロールの配列

SLAPI_IS_INTERNAL_OPERATION

int

操作が内部的なものか、クライアント・リクエストの結果かどうか

- 0: クライアント・リクエスト

- 1: 内部操作

SLAPI_IS_REPLICATED_OPERATION

int

操作が別のサーバーのレプリケーションの一部かどうか

- 0: False

- 1: True

SLAPI_OPERATION

Slapi_Operation *

現在進行中の操作

SLAPI_OPERATION_ID

int

操作の識別子

SLAPI_OPERATION_MSGID

long

操作のメッセージ識別子

SLAPI_OPINITIATED_TIME

time_t

サーバーが操作の処理を開始した時間

SLAPI_REQCONTROLS

LDAPControl **

リクエストで指定されたコントロールの配列

SLAPI_REQUESTOR_DN

char *

操作を要求したユーザーのDN

SLAPI_REQUESTOR_ISROOT

int

操作を要求したユーザーのバインドDNが、ルートDN(インスタンスのcn=configのnsslapd-rootdnの値)に対応するかどうか

- 0: False

- 1: True

SLAPI_TARGET_DN

char *

操作を適用するDN

17.14 プラグイン登録

次のパラメータは、プラグインとその関数をサーバーに登録するとき、およびプラグインのタイプとIDに関する情報にアクセスするときに使用します。

次の表に、すべてのタイプのプラグインにアクセス可能な情報を一覧表示します。

表17-14 プラグイン情報のパラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN

void *

プラグインの内部サーバー表現。

SLAPI_PLUGIN_ARGC

int

構成エントリの引数の数。

SLAPI_PLUGIN_ARGV

char *

構成エントリの引数の配列。

SLAPI_PLUGIN_IDENTITY

void *

内部操作を処理するときにサーバーによって設定および要求されるプラグイン識別子。

これをSlapi_ComponentIdにキャストすることもある。

SLAPI_PLUGIN_PRIVATE

void *

プラグイン関数に渡すプライベート・データ。

このデータ構造体を定義する。

SLAPI_PLUGIN_TYPE

int

プラグインの構成エントリのnsslapd-pluginTypeの値に対応するプラグイン関数のタイプ。(構成エントリでは、カッコで囲んで示されているプラグイン・タイプ値を使用する。)

- SLAPI_PLUGIN_EXTENDEDOP (extendedop)

- SLAPI_PLUGIN_INTERNAL_POSTOPERATION (internalpostoperation)

- SLAPI_PLUGIN_INTERNAL_PREOPERATION (internalpreoperation)

- SLAPI_PLUGIN_LDBM_ENTRY_FETCH_STORE (ldbmentryfetchstore)

- SLAPI_PLUGIN_MATCHINGRULE (matchingrule)

- SLAPI_PLUGIN_TYPE_OBJECT (object)

- SLAPI_PLUGIN_PASSWDCHECK (passwordcheck)

- SLAPI_PLUGIN_POSTOPERATION (postoperation)

- SLAPI_PLUGIN_PREOPERATION (preoperation)

- SLAPI_PLUGIN_PWD_STORAGE_SCHEME (pwdstoragescheme)

- SLAPI_PLUGIN_REVER_PWD_STORAGE_SCHEME (reverpwdstoragescheme)

SLAPI_PLUGIN_VERSION

char *

プラグインでサポートされているプラグインAPIのバージョン。

- SLAPI_PLUGIN_CURRENT_VERSION (現在はSLAPI_PLUGIN_VERSION_03)

- SLAPI_PLUGIN_VERSION_01 (3.x以上のサーバー)

- SLAPI_PLUGIN_VERSION_02 (4.x以上のサーバー)

- SLAPI_PLUGIN_VERSION_03 (5.xのサーバー)

17.15 パスワード検証

パスワード・チェック・プラグインで使用するパラメータは、次のとおりです。

表17-15 パスワード検証のパラメータ

パラメータID

データ型

説明

SLAPI_PASSWDCHECK_VALS

Slapi_Value **

チェックするパスワード値の配列。

SLAPI_PLUGIN_PASSWDCHECK_FN

void *

品質基準に対してパスワード値をチェックするためにコールされる関数。詳細は、「パスワード・チェック・プラグインが実行する必要があること」を参照。

17.16 事後操作エントリ・アクセス

事後操作プラグインで使用するパラメータは、次のとおりです。これらのパラメータによって、プラグインは操作前のエントリの状態と操作後のエントリの状態を比較できます。

表17-16 事後操作エントリ・アクセスのパラメータ

パラメータID

データ型

説明

SLAPI_ENTRY_PRE_OP

Slapi_Entry *

操作前のディレクトリ・エントリ

SLAPI_ENTRY_POST_OP

Slapi_Entry *

操作後のディレクトリ・エントリ

17.17 起動と停止

汎用プラグイン関数を登録するパラメータは、次のとおりです。これらの関数タイプは、プラグインによって登録されることがあります。

表17-17 汎用関数の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_CLOSE_FN

void *

サーバーの停止時にコールされる関数。

SLAPI_PLUGIN_START_FN

void *

サーバーの起動時にコールされる関数。2回以上コールされることがある。

17.18 拡張操作

extendedopプラグイン関数とオブジェクト識別子リストを登録するパラメータは、次のとおりです。

表17-18 拡張操作の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_EXT_OP_FN

void *

LDAP v3拡張操作のリクエストでコールされる関数

SLAPI_PLUGIN_EXT_OP_OIDLIST

char **

プラグインで処理されるオブジェクト識別子(OID)のNULL終了リスト

17.19 内部事後操作

internalpostoperationプラグイン関数を登録するパラメータは、次のとおりです。

表17-19 内部事後操作の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_INTERNAL_POST_ADD_FN

void *

内部の追加操作の完了後にコールされる関数

SLAPI_PLUGIN_INTERNAL_POST_DELETE_FN

void *

内部の削除操作の完了後にコールされる関数

SLAPI_PLUGIN_INTERNAL_POST_MODIFY_FN

void *

内部の変更操作の完了後にコールされる関数

SLAPI_PLUGIN_INTERNAL_POST_MODRDN_FN

void *

内部の名前変更(RDN変更)操作の完了後にコールされる関数

17.20 内部事前操作

internalpreoperationプラグイン関数を登録するパラメータは、次のとおりです。

表17-20 内部事前操作の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_INTERNAL_PRE_ADD_FN

void *

内部の追加操作の実行前にコールされる関数

SLAPI_PLUGIN_INTERNAL_PRE_DELETE_FN

void *

内部の削除操作の実行前にコールされる関数

SLAPI_PLUGIN_INTERNAL_PRE_MODIFY_FN

void *

内部の変更操作の実行前にコールされる関数

SLAPI_PLUGIN_INTERNAL_PRE_MODRDN_FN

void *

内部の名前変更(RDN変更)操作の実行前にコールされる関数

17.21 エントリの格納と取得

ldbmentryfetchstoreプラグイン関数を登録するパラメータは、次のとおりです。

表17-21 エントリ・ストア/フェッチ関数の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_ENTRY_FETCH_FUNC

void *

バックエンドからエントリを取得するときにコールされる関数

SLAPI_PLUGIN_ENTRY_STORE_FUNC

void *

バックエンドを介してエントリを格納する前にコールされる関数

17.22 一致ルール

matchingruleプラグイン関数と引数を登録するパラメータは、次のとおりです。

表17-22 一致ルール関数および引数の登録パラメータ

パラメータID

データ型

説明

SLAPI_MATCHINGRULE_DESC

-

slapi_matchingrule_set()を使用して一致ルールの説明を登録することを示すために使用される。

SLAPI_MATCHINGRULE_NAME

-

slapi_matchingrule_set()を使用して一致ルールの名前を登録することを示すために使用される。

SLAPI_MATCHINGRULE_OBSOLETE

-

slapi_matchingrule_set()を使用して登録するときに、一致ルールが廃止されたことを示すために使用される。

SLAPI_MATCHINGRULE_OID

-

slapi_matchingrule_set()を使用して一致ルール・オブジェクト識別子を登録することを示すために使用される。

SLAPI_MATCHINGRULE_SYNTAX

-

slapi_matchingrule_set()を使用して一致ルール構文を登録することを示すために使用される。

SLAPI_PLUGIN_DESTROY_FN

void *

フィルタ・オブジェクトに割り当てられたメモリーを解放するためにコールされる関数。

SLAPI_PLUGIN_MR_FILTER_CREATE_FN

void *

フィルタ・ファクトリ関数。

SLAPI_PLUGIN_MR_FILTER_INDEX_FN

void *

インデクサ関数を設定するためにコールされる関数。

SLAPI_PLUGIN_MR_FILTER_MATCH_FN

void *

一致をチェックするためにコールされる関数。

SLAPI_PLUGIN_MR_FILTER_RESET_FN

void *

一致フィルタをリセットするためにコールされる関数。

SLAPI_PLUGIN_MR_FILTER_REUSABLE

unsigned int

フィルタが再利用可能かどうか。

- 0: False

- 1: True

SLAPI_PLUGIN_MR_INDEXER_CREATE_FN

void *

索引ファクトリ関数。

SLAPI_PLUGIN_MR_INDEX_FN

void *

単一エントリに索引を付けるためにコールされる関数。

SLAPI_PLUGIN_MR_KEYS

struct berval **

属性値に対応する索引キーの配列。

SLAPI_PLUGIN_MR_OID

char *

拡張可能な一致ルールに対応するオブジェクト識別子(OID)。

SLAPI_PLUGIN_MR_QUERY_OPERATOR

int

一致のチェックに使用される演算子のタイプ。

SLAPI_OP_EQUAL

SLAPI_OP_GREATER

SLAPI_OP_GREATER_OR_EQUAL

SLAPI_OP_LESS

SLAPI_OP_LESS_OR_EQUAL

SLAPI_OP_SUBSTRING

SLAPI_PLUGIN_MR_TYPE

char *

一致ルールのフィルタ・タイプ。

SLAPI_PLUGIN_MR_USAGE

unsigned int

索引を付けるため、またはソートするためにルールを使用するかどうか。

SLAPI_PLUGIN_MR_USAGE_INDEX

SLAPI_PLUGIN_MR_USAGE_SORT

SLAPI_PLUGIN_MR_VALUE

struct berval *

一致させる属性値。

SLAPI_PLUGIN_MR_VALUES

struct berval **

一致させる属性値の配列。

SLAPI_PLUGIN_OBJECT

void *

拡張可能な一致のフィルタ・オブジェクト。

このデータ構造体を定義して、一致ルール・プラグインで使用する。

17.23 事後操作

postoperationプラグイン関数を登録するパラメータは、次のとおりです。

表17-23 事後操作関数の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_POST_ABANDON_FN

void *

操作が中止された後にコールされる関数。

SLAPI_PLUGIN_POST_ADD_FN

void *

追加操作が完了した後にコールされる関数。

SLAPI_PLUGIN_POST_BIND_FN

void *

バインド操作が完了した後にコールされる関数。

SLAPI_PLUGIN_POST_COMPARE_FN

void *

比較操作が完了した後にコールされる関数。

SLAPI_PLUGIN_POST_DELETE_FN

void *

削除操作が完了した後にコールされる関数。

SLAPI_PLUGIN_POST_ENTRY_FN

void *

エントリがクライアントに送信された後にコールされる関数。

SLAPI_PLUGIN_POST_MODIFY_FN

void *

変更操作が完了した後にコールされる関数。

SLAPI_PLUGIN_POST_MODRDN_FN

void *

名前変更(RDN変更)操作が完了した後にコールされる関数。

SLAPI_PLUGIN_POST_REFERRAL_FN

void *

参照がクライアントに送信された後にコールされる関数。

SLAPI_PLUGIN_POST_RESULT_FN

void *

結果がクライアントに送信された後にコールされる関数。

SLAPI_PLUGIN_POST_SEARCH_FN

void *

検索操作が完了した後にコールされる関数。

永続的な検索操作では、この関数はクライアントが検索を中断した後にコールされる。

SLAPI_PLUGIN_POST_UNBIND_FN

void *

アンバインド操作が完了した後にコールされる関数。

17.24 事前操作

preoperationプラグイン関数を登録するパラメータは、次のとおりです。

表17-24 事前操作関数の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_PRE_ABANDON_FN

void *

操作が中止される前にコールされる関数

SLAPI_PLUGIN_PRE_ADD_FN

void *

追加操作が実行される前にコールされる関数

SLAPI_PLUGIN_PRE_BIND_FN

void *

バインド操作が実行される前にコールされる関数

SLAPI_PLUGIN_PRE_COMPARE_FN

void *

比較操作が実行される前にコールされる関数

SLAPI_PLUGIN_PRE_DELETE_FN

void *

削除操作が実行される前にコールされる関数

SLAPI_PLUGIN_PRE_ENTRY_FN

void *

エントリがクライアントに送信される前にコールされる関数

SLAPI_PLUGIN_PRE_MODIFY_FN

void *

変更操作が実行される前にコールされる関数

SLAPI_PLUGIN_PRE_MODRDN_FN

void *

名前変更(RDN変更)操作を実行する前にコールされる関数

SLAPI_PLUGIN_PRE_REFERRAL_FN

void *

参照がクライアントに送信される前にコールされる関数

SLAPI_PLUGIN_PRE_RESULT_FN

void *

結果がクライアントに送信される前にコールされる関数

SLAPI_PLUGIN_PRE_SEARCH_FN

void *

検索操作が実行される前にコールされる関数

SLAPI_PLUGIN_PRE_UNBIND_FN

void *

アンバインド操作が実行される前にコールされる関数

17.25 一方向のパスワード記憶と可逆のパスワード記憶

pwdstorageおよびreverpwdstorageプラグイン関数を登録するパラメータは、次のとおりです。

表17-25 パスワード記憶関数の登録パラメータ

パラメータID

データ型

説明

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN

void *

格納およびエンコードされたパスワードとの比較用にパスワードをエンコードするためにコールされる関数

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_DB_PWD

char *

格納およびエンコードされたユーザー・パスワード

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_DEC_FN

void *

(reverpwdstorageプラグインのみ)暗号化されたパスワードをデコードするためにコールされる関数

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN

void *

記憶域のパスワードをエンコードするためにコールされる関数

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME

char *

サーバーがエンコーディング・スキームを識別するために使用する短いパスワード記憶スキームの名前

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_USER_PWD

char *

クリア・テキストのユーザー・パスワード

17.26 名前変更(RDN変更)

次のパラメータによって、パラメータ・ブロックを介して名前変更するエントリにアクセスできます。

表17-26 名前変更(RDN変更)関数のパラメータ

パラメータID

データ型

説明

SLAPI_MODRDN_DELOLDRDN

int

古い相対識別名(RDN)を削除するかどうか

- 0: False

- 1: True

SLAPI_MODRDN_NEWRDN

char *

エントリに割り当てる新しいRDN

SLAPI_MODRDN_NEWSUPERIOR

char *

名前変更されるエントリの新しい親のDN

SLAPI_MODRDN_TARGET

char *

名前変更するエントリのDN

SLAPI_ORIGINAL_TARGET

char *

名前変更するエントリの非正規化されたDN

17.27 結果

次のパラメータによって、パラメータ・ブロックを介して結果にアクセスできます。

表17-27 結果のパラメータ

パラメータID

データ型

説明

SLAPI_ADD_RESCONTROL

LDAPControl *

クライアントに送信するコントロール・セットにコントロールが追加される。

このパラメータでコントロールを追加するには、slapi_pblock_set()を使用する。

SLAPI_RES_CONTROLS

LDAPControl **

クライアントに送信するコントロールの配列。

slapi_pblock_set()と一緒に使用してクライアントに送信するコントロール・セットを変更する場合は、SLAPI_RES_CONTROLSが示す既存のコントロール・セットを取得して解放する必要がある。

SLAPI_RESULT_CODE

int

クライアントに送信する結果コード。

SLAPI_RESULT_MATCHED

char *

LDAP_NO_SUCH_OBJECTをクライアントに送信するときに一致していたターゲットDNの部分。

SLAPI_RESULT_TEXT

char *

クライアントに送信するメッセージ。

17.28 検索

次のパラメータによって、パラメータ・ブロックを介して検索パラメータにアクセスできます。

表17-28 検索関数のパラメータ

パラメータID

データ型

説明

SLAPI_NENTRIES

int

検索によって戻されるエントリの数。

SLAPI_SEARCH_ATTRS

char **

検索結果で戻すための属性タイプの配列。

アスタリスク(*)を使用して、すべての実在(非仮想)属性を示すことができる。

SLAPI_SEARCH_ATTRSONLY

int

属性タイプと属性値の両方を戻すかどうか。

- 0: 両方を戻す。

- 1: タイプのみを戻す。

SLAPI_SEARCH_DEREF

int

別名を処理する方法。

- LDAP_DEREF_ALWAYS

- LDAP_DEREF_FINDING

- LDAP_DEREF_NEVER

- LDAP_DEREF_SEARCHING

SLAPI_SEARCH_FILTER

Slapi_Filter *

検索に使用されるフィルタ。

SLAPI_SEARCH_REFERRALS

struct berval **

クライアントが参照するその他のLDAPサーバーに対するURLの配列。

SLAPI_SEARCH_RESULT_ENTRY

void *

結果セットによる反復中に戻されるエントリ。

これをSlapi_Entryにキャストすることがある。

SLAPI_SEARCH_SCOPE

int

検索範囲。

- LDAP_SCOPE_BASE

- LDAP_SCOPE_ONELEVEL

- LDAP_SCOPE_SUBTREE

SLAPI_SEARCH_SIZELIMIT

int

検索結果で戻すエントリの最大数。

SLAPI_SEARCH_STRFILTER

char *

検索に使用されるフィルタの文字列表現。

SLAPI_SEARCH_TARGET

char *

検索のベース・エントリのDN。

SLAPI_SEARCH_TIMELIMIT

int

検索に許可される最大秒数。

A NameFinderアプリケーション

この章では、NameFinderをデプロイおよび構成する方法について説明します。

NameFinderは、便利なブラウザベース・インタフェースを備えたWebアプリケーションです。このアプリケーションによって、Lightweight Directory Access Protocol (LDAP)ディレクトリで連絡先と組織情報を検索できます。

この章の内容は、次のとおりです。

- 前提条件となるソフトウェア

- NameFinderのデプロイ

- ディレクトリにアクセスするNameFinderの構成

- NameFinderのカスタマイズ

A.1 前提条件となるソフトウェア

NameFinderアプリケーションは、次の前提条件となるソフトウェア項目に依存します。

- Java 2 Platform Software Development Kit 1.4

- NameFinderのnfDSRK.war Webアプリケーション・ファイルをデプロイする次のWebアプリケーション・コンテナのいずれか

- Sun Application Server 7

- Sun Web Server 6 2004Q1 Update 1 Service Pack 2

- NameFinderアプリケーションに必要なデータを含むDirectory ServerなどのLDAPディレクトリ・サーバー

前提条件となるソフトウェアの次期バージョンも使用できます。NameFinderアプリケーションをデプロイする前に、前提条件となるソフトウェアをインストールして構成する必要があります。前提条件となるソフトウェアのインストールの詳細は、http://docs.oracle.com/cd/E19575-01/821-0844/のSun Java Enterprise System 7インストールおよびアップグレード・ガイド、またはより新しいエディションを参照してください。

A.2 NameFinderのデプロイ

NameFinderアプリケーションは、アプリケーション・サーバーまたはWebサーバーにデプロイできます。

A.2.1 アプリケーション・サーバーにデプロイするには

開始する前に

NameFinderアプリケーションをデプロイする前に、「前提条件となるソフトウェア」に一覧表示されたソフトウェアをインストールおよび構成していることを確認してください。

1. アプリケーション・サーバーのブラウザベース管理インタフェースにログインします。
たとえば、デフォルト・ポートを使用するようにアプリケーション・サーバーの管理インタフェースを構成した場合は、http://hostname:4848/に移動します。

2. NameFinderアプリケーションをデプロイするサーバー・インスタンスを選択します。
たとえば、デフォルト設定を使用するようにアプリケーション・サーバーを構成した場合は、server1を選択します。

3. nfDSRK.warをWebアプリケーションとしてアップロードし、デフォルト設定を確定します。
nfDSRK.war Webアプリケーション・アーカイブは、Directory Serverリソース・キットをインストールしたclassディレクトリ(install-path/dsrk/class/nfDSRK.war)にあります。

4. サーバー・インスタンスに変更を適用します。

5. 初めてNameFinderアプリケーションを表示します。
たとえば、デフォルト設定を使用するようにアプリケーション・サーバーを構成した場合は、http://hostname:81/nfDSRK/に移動します。

これで、「ディレクトリにアクセスするNameFinderの構成」に進むことができます。

A.2.2 Webサーバーにデプロイするには

開始する前に

NameFinderアプリケーションをデプロイする前に、「前提条件となるソフトウェア」に一覧表示されたソフトウェアをインストールおよび構成していることを確認してください。

1. Webサーバーのブラウザベース管理インタフェースにログインします。
たとえば、デフォルト・ポートを使用するようにWebサーバーの管理インタフェースを構成した場合は、http://hostname:8888/に移動します。

2. Webサーバー・ホスト名ドロップダウン・メニューの横の「管理」をクリックします。

3. 仮想サーバー・クラス・タブを選択し、仮想サーバー・クラス・ドロップダウン・メニューの横の管理をクリックします。

4. 仮想サーバー・ドロップダウン・メニューの横の管理をクリックします。
このページで、NameFinderアプリケーションをデプロイするサーバー・インスタンスを管理します。

5. Webアプリケーション・タブを選択し、アプリケーション・デプロイのWebフォームを完成させます。
nfDSRK.war Webアプリケーション・アーカイブは、Directory Serverリソース・キットをインストールしたclassディレクトリ(install-path/dsrk/class/nfDSRK.war)にあります。

Webフォームを完成させる際には、インストール・ディレクトリがinstall-path/dsrk/class/であることに注意してください。

さらに、アプリケーションURIの名前を変更できます。デフォルトは、/nfDSRKです。別の可能なアプリケーションURIは、/NameFinderです。

6. 変更を適用します。

7. サーバー・マネージャ・ページに戻ってサーバーを終了し、再度サーバーを起動します。

8. 初めてNameFinderアプリケーションを表示します。
たとえば、デフォルト設定を使用するようにWebサーバーを構成し、アプリケーションURIとして/nfDSRKを入力した場合は、http://hostname/nfDSRK/に移動します。

これで、「ディレクトリにアクセスするNameFinderの構成」に進むことができます。

A.3 ディレクトリにアクセスするためのNameFinderの構成

アプリケーション・サーバーまたはWebサーバーで、ディレクトリにアクセスするようにNameFinderを構成できます。

A.3.1 アプリケーション・サーバーを使用する場合のアクセスを構成するには

NameFinderアプリケーションをデプロイした後、アプリケーション・サーバーは、NameFinderファイルを保持するWEB-INF/コンテナ・ディレクトリを作成します。このディレクトリの場所は、アプリケーション・サーバー・インスタンスをインストールした場所に依存します。

WEB-INF/classes/NameFinder.propertiesファイルで、取得するデータを保持するディレクトリにアクセスする方法を指定する必要があります。

1. 必要に応じて、アプリケーション・サーバーのブラウザベース・インタフェースを使用して、NameFinderアプリケーションをデプロイしたパスを決定します。
WEB-INF/classes/NameFinder.propertiesファイルは、そのディレクトリにあります。

2. スーパーユーザーなど、ファイルを編集する権限を持つユーザーに変更します。

3. WEB-INF/classes/NameFinder.propertiesファイルのプロパティを調整し、アプリケーションがディレクトリにアクセスして変更を保存できるようにします。
NameFinder.propertiesファイルは、Javaプロパティ・ファイルです。ファイル内のすべての大文字と小文字が区別されます。少なくとも次の行を調整します。

NameFinder.ldapBase=baseDN
NameFinder.ldapServers=serverList
NameFinder.ldapVersion=3
NameFinder.ldapPort=ldapPort
NameFinder.ldapUser=bindDN
NameFinder.ldapPasswd=bindPassword

- baseDN: 組織内の個人のエントリのベースDNです(ou=people,dc=example,dc=comなど)。

- serverList: ディレクトリ・サーバーの|で区切られたリストです(directory|backup-directory|ext-directory.example.comなど)。

- ldapPort: サーバーがLDAPリクエストをリスニングするポート番号で、デフォルトは389です。

- bindDN: 認証に使用されるDNです。
バインドDNを引用符で囲まないでください。

- bindPassword: 認証に使用されるパスワードです。

調整できる項目に関するヒントは、WEB-INF/classes/sample.propertiesファイルのコメントを参照してください。

4. アプリケーション・サーバーのブラウザベース・インタフェースで、変更の適用ボタンを押してサーバー・インスタンスに変更を適用します。
変更を適用した後、NameFinderアプリケーションの使用を開始して、連絡先と組織情報を検索できます。

5. ブラウザベース・インタフェースを使用し、自分自身など既知のユーザーを検索してNameFinderアプリケーションが機能していることを確認します。
NameFinderアプリケーションが機能していることがわかったら、組織向けにアプリケーションをカスタマイズできます。

A.3.2 Webサーバーを使用する場合のアクセスを構成するには

NameFinderアプリケーションをデプロイした後、Webサーバーは、NameFinderファイルを保持するWEB-INF/コンテナ・ディレクトリを作成します。このディレクトリの場所は、Webサーバー・インスタンスをインストールした場所に依存します。

WEB-INF/classes/NameFinder.propertiesファイルで、取得するデータを保持するディレクトリにアクセスする方法を指定する必要があります。

1. 必要に応じて、Webサーバーのブラウザベース・インタフェースを使用して、NameFinderアプリケーションをデプロイしたパスを決定します。
WEB-INF/classes/NameFinder.propertiesファイルは、そのディレクトリにあります。

2. スーパーユーザーなど、ファイルを編集する権限を持つユーザーに変更します。

3. WEB-INF/classes/NameFinder.propertiesファイルのプロパティを調整し、アプリケーションがディレクトリにアクセスして変更を保存できるようにします。
NameFinder.propertiesファイルは、Javaプロパティ・ファイルです。ファイル内のすべての大文字と小文字が区別されます。少なくとも次の行を調整します。

NameFinder.ldapBase=baseDN
NameFinder.ldapServers=serverList
NameFinder.ldapVersion=3
NameFinder.ldapPort=ldapPort
NameFinder.ldapUser=bindDN
NameFinder.ldapPasswd=bindPassword

- baseDN: 組織内の個人のエントリのベースDNです(ou=people,dc=example,dc=comなど)。

- serverList: ディレクトリ・サーバーの|で区切られたリストです(directory|backup-directory|ext-directory.example.comなど)。

- ldapPort: サーバーがLDAPリクエストをリスニングするポート番号で、デフォルトは389です。

- bindDN: 認証に使用されるDNです。
バインドDNを引用符で囲まないでください。

- bindPassword: 認証に使用されるパスワードです。

調整できる項目に関するヒントは、WEB-INF/classes/sample.propertiesファイルのコメントを参照してください。

変更を有効にするには、Webサーバーを再起動する必要があります。

4. Webサーバーのブラウザベース・インタフェースのサーバー・マネージャ・ページに戻ってサーバーを終了し、再度起動します。
これで、NameFinderアプリケーションの使用を開始して、連絡先と組織情報を検索できます。

5. ブラウザベース・インタフェースを使用し、自分自身など既知のユーザーを検索してNameFinderアプリケーションが機能していることを確認します。
NameFinderアプリケーションが機能していることがわかったら、組織向けにアプリケーションをカスタマイズできます。

A.4 NameFinderのカスタマイズ

この項では、提供されたJavaプロパティ・ファイルのみを使用して、NameFinder Webアプリケーションでカスタマイズできる項目を説明します。個々のプロパティの詳細は、アプリケーションをデプロイしたディレクトリのWEB-INF/classes/sample.propertiesファイルを参照してください。

注意:

NameFinderは、Sunの内部Webアプリケーションとして設計されました。そのため、デフォルトの構成は、デフォルトのLDAPスキーマとDirectory Serverに付属のディレクトリ情報ツリー(DIT)に依存します。このスキーマとDITは、組織で使用中のスキーマとDITとは異なる可能性があります。

アプリケーション内でのカスタマイズに加え、検索フィールドのオプションを使用することによって検索をカスタマイズすることもできます。さらに、ブラウザベース・インタフェース内に表示する属性をカスタマイズできます。詳細は、NameFinderのオンライン・ヘルプを参照してください。

A.4.1 接続プロパティ

「ディレクトリにアクセスするNameFinderの構成」の説明に従って、アプリケーションからディレクトリにアクセスできるようにWEB-INF/classes/NameFinder.propertiesファイルをカスタマイズします。

通常、接続パラメータは、Javaプロパティ・ファイルの最初の数行に含まれています。NameFinderが接続するホストとポートの組合せを構成できます。また、LDAP v2またはv3を使用するかどうか、および特定のユーザーとしてバインドするかどうかも構成できます。

NameFinderの接続プロパティでは、ディレクトリに対する単純な認証接続のみを構成できます。接続プロパティを使用して、SSLまたはSASLメカニズムを使用して接続するようにNameFinderを構成することはできません。

A.4.2 検索属性プロパティ

NameFinderによって、検索オプション、検索する属性および戻される値のラベルを定義する属性が構成されます。そのような属性に対するJavaプロパティの定義は、次の形式になります。

NameFinder.attr#=optChar|colChar|attr|label|colLabel

#

10進数

順序内の数値が、コメント・アウトすることにより空白にならないようにしてください。NameFinderは、数値が昇順で並んでおり、空白がないことを想定しています。

optChar

検索で使用するオプション文字

たとえば、Pは、デフォルトで電話番号オプションです。NameFinderの検索フィールドに-P "1 234 567 8910"と入力することによって、電話番号1 234 567 8910を持つエントリを検索します。

Fをオプション文字として使用しないでください。この文字は、-F "(telephoneNumber=1 234 567 8910)"など、直接LDAP検索フィルタを入力できるように予約されています。

このパラメータは、WEB-INF/classes/sample.propertiesでarg1と呼ばれています。

colChar

NameFinderに対するパラメータとして表の列の定義に使用する文字

たとえば、デフォルトの構成を使用できます。複数のエントリを戻す検索で、NameFinderに対するURLのオプションの1つとしてfields=nfePを渡すことによって、デフォルトを使用します。NameFinderは、列のラベルがLastname、Firstname、eMailおよびPhone #の4列で構成される表で結果を表示します。

この引数は、WEB-INF/classes/sample.propertiesでarg2と呼ばれています。

attr

optCharを使用するときに検索するLDAP属性

この引数は、WEB-INF/classes/sample.propertiesでarg3と呼ばれています。

label

単一のLDAPエントリの結果を表示するときに、対応するattr値に対して表示するラベル

この引数は、WEB-INF/classes/sample.propertiesでarg4と呼ばれています。

colLabel

複数のLDAPエントリの結果を表示するときに、対応するattr値の表ヘッダーに表示する列ラベル

この引数は、WEB-INF/classes/sample.propertiesでarg5と呼ばれています。

検索属性プロパティの定義では、変数を空白のままにすることができます。

A.4.3 その他のプロパティ

接続プロパティと検索属性プロパティに加え、NameFinderによってWEB-INF/classes/NameFinder.propertiesファイルの複数のその他のプロパティを定義できます。これらのその他のプロパティは、次の項目を制御します。

- 検索によって複数のエントリが戻される場合に結果を表示するデフォルトの表レイアウト

- 電話番号と電子メール・アドレスを検索する場合に検索するLDAP属性のリスト

- NameFinder属性フィールドに対応するLDAP属性(これによって、NameFinderを特定のLDAPスキーマから抽出できます)

- チーム表示とマネージャの直属の部下の表を表示する表レイアウト

詳細は、WEB-INF/classes/sample.propertiesを参照してください。

索引

A  B  C  D  E  F  H  I  J  L  M  N  O  P  R  S  U  V

A

中止操作, 5.1.2

追加操作, 5.1.2, 5.5, 7

引数

プラグインへの受渡し, 3.4.1.3

属性

検索, 4.3

値の変更, 4.4

認証

バイパス, 6

資格証明, 6.4.2

SASLメカニズム, 6.1.1, 6.2.2, 6.4

簡易, 6.1.1, 6.3

B

バインド操作, 5.1.2, 5.2, 6.1.2

ビルド・ルール, 3.3

C

コールバック, 7.6

中央ログ・ディレクトリ, はじめに

証明書データベース

デフォルト・パス, はじめに

クライアント

エントリを送信, 5.1.3, 5.9

参照を送信, 5.1.3, 5.9

結果コードを送信, 5.1.3, 5.9

比較操作, 5.1.2, 5.4 構成設定, 3.4.1 変換

エントリからLDIF文字列, 4.2.2

LDIF文字列からエントリ, 4.2.1

D

デフォルトの場所, はじめに

削除操作, 5.1.2, 5.8, 7

非推奨機能, 2.1

Directory ServerプラグインAPIデータ構造体

berval, 14.2.1

computed_attr_context, 14.2.2

LDAPControl, 14.2.3

LDAPMod, 14.2.4

mrFilterMatchFn, 14.2.5

plugin_referral_entry_callback, 14.2.6

plugin_result_callback, 14.2.7

plugin_search_entry_callback, 14.2.8

roles_get_scope_fn_type, 14.2.9

send_ldap_referral_fn_ptr_t, 14.2.10

send_ldap_result_fn_ptr_t, 14.2.11

send_ldap_search_entry_fn_ptr_t, 14.2.12

Slapi_Attr, 14.2.13

Slapi_Backend, 14.2.14

Slapi_ComponentId, 14.2.15

slapi_compute_callback_t, 14.2.16

slapi_compute_output_t, 14.2.17

Slapi_CondVar, 14.2.18

Slapi_Connection, 14.2.19

Slapi_DN, 14.2.20

Slapi_Entry, 14.2.21

slapi_extension_constructor_fnptr, 14.2.22

slapi_extension_destructor_fnptr, 14.2.23

Slapi_Filter, 14.2.24

Slapi_MatchingRuleEntry, 14.2.25

Slapi_Mod, 14.2.26

Slapi_Mods, 14.2.27

Slapi_Mutex, 14.2.28

Slapi_Operation, 14.2.29

Slapi_PBlock, 14.2.30

slapi_plugin_init_fnptr, 14.2.32

Slapi_PluginDesc, 14.2.31

Slapi_RDN, 14.2.33

Slapi_Value, 14.2.34

Slapi_ValueSet, 14.2.35

vattr_type_thang, 14.2.36

Directory ServerプラグインAPI関数, 15, 16

アルファベット順, 15.2, 16

slapi_access_allowed (), 15.3.1

slapi_acl_check_mods (), 15.3.2

slapi_acl_verify_aci_syntax (), 15.3.3

slapi_add_entry_internal_set_pb (), 15.3.4

slapi_add_internal_pb (), 15.3.5

slapi_add_internal_set_pb (), 15.3.6

slapi_attr_add_value (), 15.3.7

slapi_attr_basetype (), 15.3.8

slapi_attr_dup (), 15.3.9

slapi_attr_first_value_const (), 15.3.10

slapi_attr_flag_is_set (), 15.3.11

slapi_attr_free (), 15.3.12

slapi_attr_get_bervals_copy (), 15.3.13

slapi_attr_get_flags (), 15.3.14

slapi_attr_get_numvalues (), 15.3.15

slapi_attr_get_oid_copy (), 15.3.16

slapi_attr_get_plugin (), 15.3.17

slapi_attr_get_type> (), 15.3.18

slapi_attr_get_valueset (), 15.3.19

slapi_attr_init (), 15.3.20

slapi_attr_new (), 15.3.21

slapi_attr_next_value_const (), 15.3.22

slapi_attr_syntax_normalize (), 15.3.23

slapi_attr_type_cmp (), 15.3.24

slapi_attr_types_equivalent (), 15.3.25

slapi_attr_value_cmp (), 15.3.26

slapi_attr_value_find (), 15.3.27

slapi_be_exist (), 15.3.28

slapi_be_get_name (), 15.3.29

slapi_be_get_readonly (), 15.3.30

slapi_be_getsuffix (), 15.3.31

slapi_be_gettype (), 15.3.32

slapi_be_is_flag_set (), 15.3.33

slapi_be_issuffix (), 15.3.34

slapi_be_logchanges (), 15.3.35

slapi_be_private (), 15.3.36

slapi_be_select (), 15.3.37

slapi_be_select_by_instance_name (), 15.3.38

slapi_build_control (), 15.3.40

slapi_build_control_from_berval (), 15.3.41

slapi_ch_array_free (), 15.3.42

slapi_ch_bvdup (), 15.3.43

slapi_ch_bvecdup (), 15.3.44

slapi_ch_calloc (), 15.3.45

slapi_ch_free (), 15.3.46

slapi_ch_free_string (), 15.3.47

slapi_ch_malloc (), 15.3.48

slapi_ch_realloc (), 15.3.49

slapi_ch_strdup (), 15.3.50

slapi_compute_add_evaluator (), 15.3.51

slapi_compute_add_search_rewriter_ex (), 15.3.52

slapi_control_present (), 15.3.53

slapi_delete_internal_pb (), 15.3.54

slapi_delete_internal_set_pb (), 15.3.55

slapi_destroy_condvar (), 15.3.56

slapi_destroy_mutex (), 15.3.57

slapi_dn_beparent (), 15.3.58

slapi_dn_ignore_case (), 15.3.59

slapi_dn_isbesuffix (), 15.3.60

slapi_dn_isbesuffix_norm (), 15.3.61

slapi_dn_isparent (), 15.3.62

slapi_dn_isroot (), 15.3.63

slapi_dn_issuffix (), 15.3.64

slapi_dn_normalize (), 15.3.65

slapi_dn_normalize_case (), 15.3.66

slapi_dn_normalize_to_end (), 15.3.67

slapi_dn_parent (), 15.3.68

slapi_dn_plus_rdn (), 15.3.69

slapi_dup_control (), 15.3.70

slapi_entry_add_rdn_values (), 15.3.74

slapi_entry_add_string (), 15.3.75

slapi_entry_add_value (), 15.3.76

slapi_entry_add_values_sv (), 15.3.77

slapi_entry_add_valueset (), 15.3.78

slapi_entry_alloc (), 15.3.79

slapi_entry_attr_delete (), 15.3.80

slapi_entry_attr_find (), 15.3.81

slapi_entry_attr_get_charptr (), 15.3.82

slapi_entry_attr_get_int (), 15.3.83

slapi_entry_attr_get_long (), 15.3.84

slapi_entry_attr_get_uint (), 15.3.85

slapi_entry_attr_get_ulong (), 15.3.86

slapi_entry_attr_hasvalue (), 15.3.87

slapi_entry_attr_merge_sv (), 15.3.88

slapi_entry_attr_replace_sv (), 15.3.89

slapi_entry_attr_set_charptr (), 15.3.90

slapi_entry_attr_set_int (), 15.3.91

slapi_entry_attr_set_long (), 15.3.92

slapi_entry_attr_set_uint (), 15.3.93

slapi_entry_attr_set_ulong (), 15.3.94

slapi_entry_delete_string (), 15.3.95

slapi_entry_delete_values_sv (), 15.3.96

slapi_entry_dup (), 15.3.97

slapi_entry_first_attr (), 15.3.98

slapi_entry_free (), 15.3.99

slapi_entry_get_dn (), 15.3.100

slapi_entry_get_dn_const (), 15.3.101

slapi_entry_get_ndn (), 15.3.102

slapi_entry_get_sdn (), 15.3.103

slapi_entry_get_sdn_const (), 15.3.104

slapi_entry_get_uniqueid (), 15.3.105

slapi_entry_has_children (), 15.3.106

slapi_entry_init (), 15.3.107

slapi_entry_isroot (), 15.3.108

slapi_entry_merge_values_sv (), 15.3.109

slapi_entry_next_attr (), 15.3.110

slapi_entry_rdn_values_present (), 15.3.111

slapi_entry_schema_check (), 15.3.112

slapi_entry_schema_check_ext (), 15.3.113

slapi_entry_set_dn (), 15.3.114

slapi_entry_set_sdn (), 15.3.115

slapi_entry_size (), 15.3.116

slapi_entry_syntax_check (), 15.3.117

slapi_entry_vattr_find (), 15.3.118

slapi_entry2mods (), 15.3.71

slapi_entry2str (), 15.3.72

slapi_entry2str_with_options (), 15.3.73

slapi_filter_compare (), 15.3.119

slapi_filter_free (), 15.3.120

slapi_filter_get_attribute_type (), 15.3.121

slapi_filter_get_ava (), 15.3.122

slapi_filter_get_choice (), 15.3.123

slapi_filter_get_subfilt (), 15.3.124

slapi_filter_get_type (), 15.3.125

slapi_filter_join (), 15.3.126

slapi_filter_list_first (), 15.3.127

slapi_filter_list_next (), 15.3.128

slapi_filter_test (), 15.3.129

slapi_filter_test_ext (), 15.3.130

slapi_filter_test_simple (), 15.3.131

slapi_find_matching_paren (), 15.3.132

slapi_free_search_results_internal (), 15.3.133

slapi_get_first_backend (), 15.3.135

slapi_get_next_backend (), 15.3.137

slapi_get_object_extension (), 15.3.136

slapi_get_suffix_list (), 15.3.138

slapi_get_supported_controls_copy (), 15.3.139

slapi_get_supported_extended_ops_copy (), 15.3.140

slapi_get_supported_saslmechanisms_copy (), 15.3.141

slapi_has8thBit (), 15.3.142

slapi_is_root_suffix (), 15.3.144

slapi_is_rootdse (), 15.3.143

slapi_ldap_init (), 15.3.145

slapi_ldap_unbind (), 15.3.146

slapi_ldapmods_syntax_check (), 15.3.147

slapi_lock_mutex (), 15.3.148, 16.1.40

slapi_log_info_ex (), 15.3.150

slapi_log_warning_ex (), 15.3.151

slapi_matchingrule_free (), 15.3.152

slapi_matchingrule_get (), 15.3.153

slapi_matchingrule_new (), 15.3.154

slapi_matchingrule_register (), 15.3.155

slapi_matchingrule_set (), 15.3.156

slapi_mod_add_value (), 15.3.157

slapi_mod_done (), 15.3.158

slapi_mod_dump (), 15.3.159

slapi_mod_free (), 15.3.160

slapi_mod_get_first_value (), 15.3.161

slapi_mod_get_ldapmod_byref (), 15.3.162

slapi_mod_get_ldapmod_passout (), 15.3.163

slapi_mod_get_next_value (), 15.3.164

slapi_mod_get_num_values (), 15.3.165

slapi_mod_get_operation (), 15.3.166

slapi_mod_get_type (), 15.3.167

slapi_mod_init (), 15.3.168

slapi_mod_init_byref (), 15.3.169

slapi_mod_init_byval (), 15.3.170

slapi_mod_init_passin (), 15.3.171

slapi_mod_isvalid (), 15.3.172

slapi_mod_new (), 15.3.173

slapi_mod_remove_value (), 15.3.174

slapi_mod_set_operation (), 15.3.175

slapi_mod_set_type (), 15.3.176

slapi_moddn_get_newdn (), 15.3.177

slapi_modify_internal_pb (), 16.1.1

slapi_modify_internal_set_pb (), 16.1.2

slapi_modrdn_internal_pb (), 16.1.3

slapi_mods_add (), 16.1.5

slapi_mods_add_ldapmod (), 16.1.6

slapi_mods_add_mod_values (), 16.1.7

slapi_mods_add_modbvps (), 16.1.8

slapi_mods_add_smod (), 16.1.9

slapi_mods_add_string (), 16.1.10

slapi_mods_done (), 16.1.11

slapi_mods_dump (), 16.1.12

slapi_mods_free (), 16.1.13

slapi_mods_get_first_mod (), 16.1.14

slapi_mods_get_first_smod (), 16.1.15

slapi_mods_get_ldapmods_byref (), 16.1.16

slapi_mods_get_ldapmods_passout (), 16.1.17

slapi_mods_get_next_mod (), 16.1.18

slapi_mods_get_next_smod (), 16.1.19

slapi_mods_get_num_mods (), 16.1.20

slapi_mods_init (), 16.1.21

slapi_mods_init_byref (), 16.1.22

slapi_mods_init_passin (), 16.1.23

slapi_mods_insert_after (), 16.1.24

slapi_mods_insert_at (), 16.1.25

slapi_mods_insert_before (), 16.1.26

slapi_mods_insert_smod_at (), 16.1.27

slapi_mods_iterator_backbone (), 16.1.29

slapi_mods_new (), 16.1.30

slapi_mods_remove (), 16.1.31

slapi_mods_remove_at (), 16.1.32

slapi_mods2entry (), 16.1.4

slapi_mr_filter_index (), 16.1.33

slapi_mr_indexer_create (), 16.1.34

slapi_new_condvar (), 16.1.35

slapi_new_mutex (), 16.1.36

slapi_notify_condvar (), 16.1.37

slapi_op_abandoned (), 16.1.38

slapi_op_get_type (), 16.1.39

slapi_pblock_destroy (), 16.1.40

slapi_pblock_get (), 16.1.41

slapi_pblock_new (), 16.1.42

slapi_pblock_set (), 16.1.43

slapi_pw_find_sv (), 16.1.44

slapi_pw_find_valueset (), 16.1.45

slapi_rdn_add (), 16.1.46

slapi_rdn_compare (), 16.1.47

slapi_rdn_contains (), 16.1.48

slapi_rdn_contains_attr (), 16.1.49

slapi_rdn_done (), 16.1.50

slapi_rdn_free (), 16.1.51

slapi_rdn_get_first (), 16.1.52

slapi_rdn_get_index (), 16.1.53

slapi_rdn_get_index_attr (), 16.1.54

slapi_rdn_get_next (), 16.1.55

slapi_rdn_get_num_components (), 16.1.56

slapi_rdn_get_rdn (), 16.1.57

slapi_rdn_init (), 16.1.58

slapi_rdn_init_dn (), 16.1.59

slapi_rdn_init_rdn (), 16.1.60

slapi_rdn_init_sdn (), 16.1.61

slapi_rdn_isempty (), 16.1.62

slapi_rdn_new (), 16.1.63

slapi_rdn_new_dn (), 16.1.64

slapi_rdn_new_rdn (), 16.1.65

slapi_rdn_new_sdn (), 16.1.66

slapi_rdn_remove (), 16.1.67

slapi_rdn_remove_attr (), 16.1.68

slapi_rdn_remove_index (), 16.1.69

slapi_rdn_set_dn (), 16.1.70

slapi_rdn_set_rdn (), 16.1.71

slapi_rdn_set_sdn (), 16.1.72

slapi_rdn_syntax_check (), 16.1.73

slapi_register_object_extension (), 16.1.74

slapi_register_plugin (), 16.1.75

slapi_register_role_get_scope (), 16.1.76

slapi_register_supported_control (), 16.1.77

slapi_register_supported_saslmechanism (), 16.1.78

slapi_role_check (), 16.1.80

slapi_role_get_scope (), 16.1.81

slapi_sdn_add_rdn (), 16.1.82

slapi_sdn_compare (), 16.1.83

slapi_sdn_copy (), 16.1.84

slapi_sdn_done (), 16.1.85

slapi_sdn_dup (), 16.1.86

slapi_sdn_free (), 16.1.87

slapi_sdn_get_backend_parent (), 16.1.88

slapi_sdn_get_dn (), 16.1.89

slapi_sdn_get_ndn (), 16.1.90

slapi_sdn_get_ndn_len (), 16.1.91

slapi_sdn_get_parent (), 16.1.92

slapi_sdn_get_rdn (), 16.1.93

slapi_sdn_get_suffix (), 16.1.94

slapi_sdn_isempty (), 16.1.95

slapi_sdn_isgrandparent (), 16.1.96

slapi_sdn_isparent (), 16.1.97

slapi_sdn_issuffix (), 16.1.98

slapi_sdn_new (), 16.1.99

slapi_sdn_new_dn_byref (), 16.1.100

slapi_sdn_new_dn_byval (), 16.1.101

slapi_sdn_new_dn_passin (), 16.1.102

slapi_sdn_new_ndn_byref (), 16.1.103

slapi_sdn_new_ndn_byval (), 16.1.104

slapi_sdn_scope_test (), 16.1.105

slapi_sdn_set_dn_byref (), 16.1.106

slapi_sdn_set_dn_byval (), 16.1.107

slapi_sdn_set_dn_passin (), 16.1.108

slapi_sdn_set_ndn_byref (), 16.1.109

slapi_sdn_set_ndn_byval (), 16.1.110

slapi_sdn_set_parent (), 16.1.111

slapi_sdn_set_rdn (), 16.1.112

slapi_search_internal_callback_pb (), 16.1.113

slapi_search_internal_get_entry (), 16.1.114

slapi_search_internal_pb (), 16.1.115

slapi_search_internal_set_pb (), 16.1.116

slapi_send_ldap_referral (), 16.1.117

slapi_send_ldap_result (), 16.1.118

slapi_send_ldap_search_entry (), 16.1.119

slapi_set_object_extension (), 16.1.120

slapi_str2entry (), 16.1.121

slapi_str2filter (), 16.1.122

slapi_unlock_mutex (), 16.1.128

slapi_UTF-8CASECMP (), 16.1.124

slapi_UTF-8ISLOWER (), 16.1.126

slapi_UTF-8ISUPPER (), 16.1.127

slapi_UTF-8NCASECMP (), 16.1.125

slapi_UTF-8STRTOLOWER (), 16.1.128

slapi_UTF-8STRTOUPPER (), 16.1.129

slapi_UTF-8TOLOWER (), 16.1.130

slapi_UTF-8TOUPPER (), 16.1.131

slapi_value_compare (), 16.1.132

slapi_value_done (), 16.1.133

slapi_value_dup (), 16.1.134

slapi_value_free (), 16.1.135

slapi_value_get_berval (), 16.1.137

slapi_value_get_int (), 16.1.138

slapi_value_get_length (), 16.1.139

slapi_value_get_long (), 16.1.140

slapi_value_get_string (), 16.1.141

slapi_value_get_uint (), 16.1.142

slapi_value_get_ulong (), 16.1.143

slapi_value_init (), 16.1.144

slapi_value_init_berval (), 16.1.145

slapi_value_init_string (), 16.1.146

slapi_value_init_string_passin (), 16.1.147

slapi_value_new (), 16.1.148

slapi_value_new_berval (), 16.1.149

slapi_value_new_string (), 16.1.150

slapi_value_new_string_passin (), 16.1.151

slapi_value_new_value (), 16.1.152

slapi_value_set (), 16.1.153

slapi_value_set_berval (), 16.1.154

slapi_value_set_int (), 16.1.155

slapi_value_set_string (), 16.1.156

slapi_value_set_string_passin (), 16.1.157

slapi_value_set_value (), 16.1.158

slapi_valuearray_free (), 16.1.136

slapi_valueset_add_value_optimised (), 16.1.159

slapi_valueset_count (), 16.1.160

slapi_valueset_done (), 16.1.161

slapi_valueset_find_const (), 16.1.162

slapi_valueset_first_value_const (), 16.1.163

slapi_valueset_free (), 16.1.164

slapi_valueset_init (), 16.1.165

slapi_valueset_new (), 16.1.166

slapi_valueset_next_value_const (), 16.1.167

slapi_valueset_set_from_smod (), 16.1.168

slapi_valueset_set_valueset_optimised (), 16.1.169

slapi_vattr_attr_free (), 16.1.170

slapi_vattr_attrs_free (), 16.1.171

slapi_vattr_filter_test (), 16.1.172

slapi_vattr_is_registered (), 16.1.173

slapi_vattr_is_virtual (), 16.1.174

slapi_vattr_list_attrs (), 16.1.175

slapi_vattr_value_compare (), 16.1.176

slapi_vattr_values_free (), 16.1.177

slapi_vattr_values_get_ex (), 16.1.178

slapi_vattr_values_type_thang_get (), 16.1.179

slapi_wait_condvar (), 16.1.180

機能領域別のサマリー, 15.1

Directory ServerプラグインAPIパラメータ

extendedop, 17.14

internalpostoperation, 17.14

internalpreoperation, 17.14

LDAP_DEREF_ALWAYS, 17.28

LDAP_DEREF_FINDING, 17.28

LDAP_DEREF_NEVER, 17.28

LDAP_DEREF_SEARCHING, 17.28

LDAP_SCOPE_BASE, 17.28

LDAP_SCOPE_ONELEVEL, 17.28

LDAP_SCOPE_SUBTREE, 17.28

ldbmentryfetchstore, 17.14, 17.21

matchingrule, 17.14

object, 17.14

passwordcheck, 17.14

postoperation, 17.14

preoperation, 17.14

pwdstoragescheme, 17.14

reverpwdstoragescheme, 17.14

SLAPI_ADD_ENTRY, 17.3

SLAPI_ADD_RESCONTROL, 17.27

SLAPI_ADD_TARGET, 17.3

SLAPI_ARGC, 17.9

SLAPI_ARGV, 17.9

SLAPI_BACKEND, 17.4

SLAPI_BE_LASTMOD, 17.4

SLAPI_BE_READONLY, 17.4

SLAPI_BE_TYPE, 17.4

SLAPI_BIND_CREDENTIALS, 17.5

SLAPI_BIND_METHOD, 17.5

SLAPI_BIND_RET_SASLCREDS, 17.5

SLAPI_BIND_SASLMECHANISM, 17.5

SLAPI_BIND_TARGET, 17.5

SLAPI_CLIENT_DNS, 17.7

SLAPI_COMPARE_TARGET, 17.6

SLAPI_COMPARE_TYPE, 17.6

SLAPI_COMPARE_VALUE, 17.6

SLAPI_CONFIG_DIRECTORY, 17.9

SLAPI_CONFIG_FILENAME, 17.9

SLAPI_CONN_AUTHMETHOD, 17.7

SLAPI_CONN_CLIENTNETADDR, 17.7

SLAPI_CONN_DN, 17.7

SLAPI_CONN_ID, 17.7

SLAPI_CONN_IS_REPLICATION_SESSION, 17.7

SLAPI_CONN_IS_SSL_SESSION, 17.7

SLAPI_CONN_SERVERNETADDR, 17.7

SLAPI_CONNECTION, 17.7

SLAPI_CONTROLS_ARG, 17.13

SLAPI_DBSIZE, 17.4

SLAPI_DELETE_TARGET, 17.8

SLAPI_ENTRY_POST_OP, 17.16

SLAPI_ENTRY_PRE_OP, 17.16

SLAPI_EXT_OP_REQ_OID, 17.10

SLAPI_EXT_OP_REQ_VALUE, 17.10

SLAPI_EXT_OP_RET_OID, 17.10

SLAPI_EXT_OP_RET_VALUE, 17.10

SLAPI_IS_INTERNAL_OPERATION, 17.13

SLAPI_IS_REPLICATED_OPERATION, 17.13

SLAPI_MATCHINGRULE_DESC, 17.22

SLAPI_MATCHINGRULE_NAME, 17.22

SLAPI_MATCHINGRULE_OBSOLETE, 17.22

SLAPI_MATCHINGRULE_OID, 17.22

SLAPI_MATCHINGRULE_SYNTAX, 17.22

SLAPI_MODIFY_MODS, 17.12

SLAPI_MODIFY_TARGET, 17.12

SLAPI_MODRDN_DELOLDRDN, 17.26

SLAPI_MODRDN_NEWRDN, 17.26

SLAPI_MODRDN_NEWSUPERIOR, 17.26

SLAPI_MODRDN_TARGET, 17.26

SLAPI_NENTRIES, 17.28

SLAPI_OPERATION, 17.13

SLAPI_OPERATION_ID, 17.13

SLAPI_OPERATION_MSGID, 17.13

SLAPI_OPERATION_NOTES, 17.2

SLAPI_OPINITIATED_TIME, 17.13

SLAPI_ORIGINAL_TARGET, 17.8, 17.12, 17.26

SLAPI_PASSWDCHECK_VALS, 17.15

SLAPI_PLUGIN, 17.14

SLAPI_PLUGIN_ARGC, 17.14

SLAPI_PLUGIN_ARGV, 17.14

SLAPI_PLUGIN_CLOSE_FN, 17.17

SLAPI_PLUGIN_CURRENT_VERSION, 17.14

SLAPI_PLUGIN_DESTROY_FN, 17.22

SLAPI_PLUGIN_ENTRY_FETCH_FUNC, 17.21

SLAPI_PLUGIN_ENTRY_STORE_FUNC, 17.21

SLAPI_PLUGIN_EXT_OP_FN, 17.18

SLAPI_PLUGIN_EXT_OP_OIDLIST, 17.18

SLAPI_PLUGIN_EXTENDEDOP, 17.14

SLAPI_PLUGIN_IDENTITY, 17.14

SLAPI_PLUGIN_INTERNAL_POST_ADD_FN, 17.19

SLAPI_PLUGIN_INTERNAL_POST_DELETE_FN, 17.19

SLAPI_PLUGIN_INTERNAL_POST_MODIFY_FN, 17.19

SLAPI_PLUGIN_INTERNAL_POST_MODRDN_FN, 17.19

SLAPI_PLUGIN_INTERNAL_POSTOPERATION, 17.14

SLAPI_PLUGIN_INTERNAL_PRE_ADD_FN, 17.20

SLAPI_PLUGIN_INTERNAL_PRE_DELETE_FN, 17.20

SLAPI_PLUGIN_INTERNAL_PRE_MODIFY_FN, 17.20

SLAPI_PLUGIN_INTERNAL_PRE_MODRDN_FN, 17.20

SLAPI_PLUGIN_INTERNAL_PREOPERATION, 17.14

SLAPI_PLUGIN_INTOP_RESULT, 17.11

SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, 17.11

SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS, 17.11

SLAPI_PLUGIN_LDBM_ENTRY_FETCH_STORE, 17.14

SLAPI_PLUGIN_MATCHINGRULE, 17.14

SLAPI_PLUGIN_MR_FILTER_CREATE_FN, 17.22

SLAPI_PLUGIN_MR_FILTER_INDEX_FN, 17.22

SLAPI_PLUGIN_MR_FILTER_MATCH_FN, 17.22

SLAPI_PLUGIN_MR_FILTER_RESET_FN, 17.22

SLAPI_PLUGIN_MR_FILTER_REUSABLE, 17.22

SLAPI_PLUGIN_MR_INDEX_FN, 17.22

SLAPI_PLUGIN_MR_INDEXER_CREATE_FN, 17.22

SLAPI_PLUGIN_MR_KEYS, 17.22

SLAPI_PLUGIN_MR_OID, 17.22

SLAPI_PLUGIN_MR_QUERY_OPERATOR, 17.22

SLAPI_PLUGIN_MR_TYPE, 17.22

SLAPI_PLUGIN_MR_USAGE, 17.22

SLAPI_PLUGIN_MR_VALUE, 17.22

SLAPI_PLUGIN_MR_VALUES, 17.22

SLAPI_PLUGIN_OBJECT, 17.22

SLAPI_PLUGIN_PASSWDCHECK, 17.14

SLAPI_PLUGIN_PASSWDCHECK_FN, 17.15

SLAPI_PLUGIN_POST_ABANDON_FN, 17.23

SLAPI_PLUGIN_POST_ADD_FN, 17.23

SLAPI_PLUGIN_POST_BIND_FN, 17.23

SLAPI_PLUGIN_POST_COMPARE_FN, 17.23

SLAPI_PLUGIN_POST_DELETE_FN, 17.23

SLAPI_PLUGIN_POST_ENTRY_FN, 17.23

SLAPI_PLUGIN_POST_MODIFY_FN, 17.23

SLAPI_PLUGIN_POST_MODRDN_FN, 17.23

SLAPI_PLUGIN_POST_REFERRAL_FN, 17.23

SLAPI_PLUGIN_POST_RESULT_FN, 17.23

SLAPI_PLUGIN_POST_SEARCH_FN, 17.23

SLAPI_PLUGIN_POST_UNBIND_FN, 17.23

SLAPI_PLUGIN_POSTOPERATION, 17.14

SLAPI_PLUGIN_PRE_ABANDON_FN, 17.24

SLAPI_PLUGIN_PRE_ADD_FN, 17.24

SLAPI_PLUGIN_PRE_BIND_FN, 17.24

SLAPI_PLUGIN_PRE_COMPARE_FN, 17.24

SLAPI_PLUGIN_PRE_DELETE_FN, 17.24

SLAPI_PLUGIN_PRE_ENTRY_FN, 17.24

SLAPI_PLUGIN_PRE_MODIFY_FN, 17.24

SLAPI_PLUGIN_PRE_MODRDN_FN, 17.24

SLAPI_PLUGIN_PRE_REFERRAL_FN, 17.24

SLAPI_PLUGIN_PRE_RESULT_FN, 17.24

SLAPI_PLUGIN_PRE_SEARCH_FN, 17.24

SLAPI_PLUGIN_PRE_UNBIND_FN, 17.24

SLAPI_PLUGIN_PREOPERATION, 17.14

SLAPI_PLUGIN_PRIVATE, 17.14

SLAPI_PLUGIN_PWD_STORAGE_SCHEME, 17.14

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_CMP_FN, 17.25

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_DB_PWD, 17.25

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_DEC_FN, 17.25

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_ENC_FN, 17.25

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_NAME, 17.25

SLAPI_PLUGIN_PWD_STORAGE_SCHEME_USER_PWD, 17.25

SLAPI_PLUGIN_REVER_PWD_STORAGE_SCHEME, 17.14

SLAPI_PLUGIN_START_FN, 17.17

SLAPI_PLUGIN_TYPE, 17.14

SLAPI_PLUGIN_TYPE_OBJECT, 17.14

SLAPI_PLUGIN_VERSION, 17.14

SLAPI_PLUGIN_VERSION_01, 17.14

SLAPI_PLUGIN_VERSION_02, 17.14

SLAPI_PLUGIN_VERSION_03, 17.14, 17.14

SLAPI_REQCONTROLS, 17.13

SLAPI_REQUESTOR_DN, 17.13

SLAPI_REQUESTOR_ISROOT, 17.13

SLAPI_RES_CONTROLS, 17.27

SLAPI_RESULT_CODE, 17.27

SLAPI_RESULT_MATCHED, 17.27

SLAPI_RESULT_TEXT, 17.27

SLAPI_SEARCH_ATTRS, 17.28

SLAPI_SEARCH_ATTRSONLY, 17.28

SLAPI_SEARCH_DEREF, 17.28

SLAPI_SEARCH_FILTER, 17.28

SLAPI_SEARCH_REFERRALS, 17.28

SLAPI_SEARCH_RESULT_ENTRY, 17.28

SLAPI_SEARCH_SCOPE, 17.28

SLAPI_SEARCH_SIZELIMIT, 17.28

SLAPI_SEARCH_STRFILTER, 17.28

SLAPI_SEARCH_TARGET, 17.28

SLAPI_SEARCH_TIMELIMIT, 17.28

SLAPI_TARGET_DN, 17.13

識別名(DN), 4.6

変更, 4.6.3

使用による親の検索, 4.6.1

使用によるサフィックスの検索, 4.6.1

正規化, 4.6.4

識別名(DN), 2.2.1

E

暗号化

エントリ, 8.1.2, 8.2.2.3

パスワード, 11

エントリ, 2.2.2

作成, 4.1

クライアント・アプリケーションへの送信, 5.1.3, 5.9

スキーマ準拠の検証, 4.5

エントリ・フェッチ, 8.1 エントリ・ストア, 8.1, 8.1.2 errorsログ, 3.5.3 拡張操作, 9

F

フィルタ

拡張可能な一致, 10.1.2, 10.3

一致するエントリ, 10.3.2

検索, 5.3.2

関数。「プラグインAPI関数」を参照, 15, 16

H

hello world, 3.1

I

索引付け, 10.4

install-path, はじめに

instance-path, はじめに

内部操作, 7

追加, 7.3

削除, 7.7

変更, 7.4

名前変更またはサブツリーの移動, 7.5

検索, 7.6

isw- hostnameディレクトリ, はじめに

J

Java Naming and Directory Interface, はじめに

L

LDAP Data Interchange Format (LDIF), 4.2

ローカル・ログ・ディレクトリ, はじめに

ロギング, 3.5

M

一致ルール, 10

Message Queue, はじめに

変更, 2.2.3

変更操作, 5.1.2, 5.6, 7

RDN変更操作, 5.1.2, 5.7, 7

N

NameFinderアプリケーション, A

属性プロパティ, A.4.2

構成, A.3.1, A.3.2, A.4

接続プロパティ, A.3.1, A.3.2, A.4.1

カスタマイズ, A.4

説明, A

インストール, A.2

レイアウト・プロパティ, A.4.3

NameFinder.propertiesファイル, A.4

前提条件となるソフトウェア, A.1

sample.propertiesファイル, A.4

新機能, 2.2

O

オブジェクト識別子(OID), 9.1, 10.1.1, 10.6

P

パラメータ

プラグインへの受渡し, 3.4.1.3

パスワード

チェック, 11.2.2

品質のチェック, 12

暗号化および格納, 11

プラグイン

APIバージョン, 3.2.5.1

引数, 3.4.1.3

コール順序付け, 3.4.1.2

コンパイルおよびリンク, 3.3

定義, 1.1

依存関係, 3.4.1.1

ヘッダー・ファイル, 3.3.1

動作, 1.2

ID, 7.3

登録, 3.2.4, 5.1.3, 11.2.3

リターン・コード, 3.2.3

サポート, 1.1.1

タイプ, 1.2, 3.4.1.1

使用する状況, 1.1

事後操作, 5.1 事前操作, 5.1

R

参照

クライアント・アプリケーションへの送信, 5.1.3, 5.9

相対識別名(RDN), 5.7 名前の変更操作, 5.1.2, 5.7, 7 結果コード

クライアント・アプリケーションへの送信, 5.1.3, 5.9

リターン・コード, 3.2.3

S

スキーマ, 2.2.5

エントリの準拠の検証, 4.5

検索候補, 10.3.1 検索フィルタ

分類, 5.3.2

拡張可能な一致の操作, 10.3

一致ルールの要求, 10.1.2

検索操作, 5.1.2, 5.3, 7 serverrootディレクトリ, はじめに Simple Authentication and Security Layer (SASL), 6.1.1, 6.4 SLAMD分散負荷生成エンジン, はじめに ソート, 10.5 サフィックス, 2.2.6, 4.6.1 サポート, 1.1.1 構文, 2.2.7

U

アンバインド操作, 5.1.2

アップグレード, 2

V

仮想属性, 2.2.8, 4.3

Copyright © 2001, 2013, Oracle and/or its affiliates. All rights reserved.