C言語アプリケーションの移行手順について説明します。
■アプリケーションの再コンパイルについて
InfoDirectory SDKを使用したユーザアプリケーションは、Interstage ディレクトリサービス SDKとバイナリの互換性がありません。このため、アプリケーションを再コンパイルする必要があります。以降の記事を参照したうえで、アプリケーションを再コンパイルしてください。
また、一部の機能、インタフェースなどに変更がありますので、以下を参照して、アプリケーションを修正してください。
■機能差異
Interstage ディレクトリサービス LDAPクライアントAPIライブラリでは、最新の規約に正しく準拠するため、以下のAPIで機能差異が発生します。
関数仕様
関数 | 変更点 | 移行方法 | |
---|---|---|---|
ldap_get_option() | セションハンドルオプションの扱いが変更されています。 |
| |
LDAP_OPT_DESC | 推奨されないインタフェースに変更されました。 | 推奨されませんが、従来どおり利用できます。 | |
LDAP_OPT_HOST_NAME | アプリケーションが復帰領域をldap_memfree()で解放する必要があります。解放しない場合は、メモリリークとなります。 | ldap_get_option()で復帰したアドレスを不要になったタイミングでldap_memfree()で解放してください。 | |
LDAP_OPT_RESTART | パラメタが、"void *"から"int *"に変更されました。旧APIでint型を使用していない場合は、アプリケーションが異常終了する可能性があります。 | ldap_get_option()の第3パラメタはint型変数のポインタを指定してください。 | |
ldap_set_option() | セションハンドルオプションの扱いが変更されています。 |
| |
LDAP_OPT_HOST_NAME | パラメタが、"char **"から"char *"に変更されました。旧APIのままでは、アプリケーションが異常終了します。 | 下記の例1のように修正してください。 | |
LDAP_OPT_ERROR_NUMBER | 旧バージョン・レベルでは、ldap_get_option()で参照だけができましたが、新バージョン・レベルでは、ldap_set_option()で更新できるようになりました。 | 基本的に修正不要ですが、アプリケーションの仕様に応じて修正してください。 | |
LDAP_OPT_RESTART | 旧バージョン・レベルでは、パラメタがマニュアルでは"void *"でしたが、ライブラリでは"int *"で扱っていました。新バージョン・レベルでは、ライブラリでも"void *"で扱います。従来の指定方法のままでは、常にLDAP_OPT_ONが設定されたと認識されるため、アプリケーションが正しく動作しない可能性があります。 | 下記の例2のように修正してください。 | |
ldap_version() | 構造体メンバのsdk_versionが、旧バージョン・レベルでは100を返しますが、ライブラリのバージョンとして200以上を返します。 | 構造体のメンバsdk_versionをチェックしている場合は修正してください。 | |
ldap_search() | filterパラメタにNULLを指定した場合、旧バージョン・レベルではパラメタエラー(LDAP_PARAM_ERROR)となりますが、新バージョン・レベルでは、"(objectClass=*)"を指定したとみなします。 | 基本的に修正不要ですが、アプリケーションの仕様に応じて修正してください。 | |
ldap_search_st() | timeoutパラメタの構造体メンバのtv_sec、tv_usecともに0を指定した場合、または、どちらか一方、または両方に負の値を設定した場合、旧バージョン・レベルでは無限に待ち合わせします。新バージョン・レベルではパラメタエラー(LDAP_PARAM_ERROR)となるため、旧APIのままでは検索できません。 | タイムアウトを無制限にする場合は、timeoutパラメタにNULLを指定してください。 |
例
例1)
旧バージョン・レベル
char *host = "localhost"; ldap_set_option( ld, LDAP_OPT_HOST_NAME, &host );
新バージョン・レベル
char *host = "localhost";
ldap_set_option( ld, LDAP_OPT_HOST_NAME, host );
例2)
旧バージョン・レベル
int value = LDAP_OPT_ON; ldap_set_option( ld, LDAP_OPT_RESTART, &value );
新バージョン・レベル
ldap_set_option( ld, LDAP_OPT_RESTART, LDAP_OPT_ON );
関数宣言
以下の関数で、関数宣言が変更され、const修飾子(太字部分)により宣言が厳格化されました。旧APIに準じたソースではコンパイル時に警告が出る場合があります。必要に応じて修正してください。
LDAP *ldap_init(
const char *hostname,
int portno );
int ldap_set_option(
LDAP *ld,
int option,
const void *optdata );
int ldap_simple_bind( LDAP *ld, const char *dn, const char *passwd );
int ldap_simple_bind_s( LDAP *ld, const char *dn, const char *passwd );
int ldap_search( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly );
int ldap_search_s( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly, LDAPMessage **res );
int ldap_search_st( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly, struct timeval *timeout, LDAPMessage **res );
int ldap_search_ext( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly, LDAPControl **serverctrls, LDAPControl **clientctrls, struct timeval *timeout, int sizelimit, int *msgidp );
int ldap_search_ext_s( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly, LDAPControl **serverctrls, LDAPControl **clientctrls, struct timeval *timeout, int sizelimit, LDAPMessage **res );
int ldap_compare( LDAP *ld, const char *dn, const char *attr, const char *value );
int ldap_compare_s( LDAP *ld, const char *dn, const char *attr, const char *value );
int ldap_compare_ext( LDAP *ld, const char *dn, const char *attr, const struct berval *bvalue, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp );
int ldap_compare_ext_s( LDAP *ld, const char *dn, const char *attr, const struct berval *bvalue, LDAPControl **serverctrls, LDAPControl **clientctrls );
int ldap_modify(
LDAP *ld,
const char *dn,
LDAPMod **mods );
int ldap_modify_s(
LDAP *ld,
const char *dn,
LDAPMod **mods );
int ldap_modify_ext(
LDAP *ld,
const char *dn,
LDAPMod **mods,
LDAPControl **serverctrls,
LDAPControl **clientctrls,
int *msgidp );
int ldap_modify_ext_s(
LDAP *ld,
const char *dn,
LDAPMod **mods,
LDAPControl **serverctrls,
LDAPControl **clientctrls );
int ldap_rename( LDAP *ld, const char *dn, const char *newrdn, const char *newparent, int deleteoldrdn, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp );
int ldap_rename_s( LDAP *ld, const char *dn, const char *newrdn, const char *newparent, int deleteoldrdn, LDAPControl **serverctrls, LDAPControl **clientctrls );
int ldap_add(
LDAP *ld,
const char *dn,
LDAPMod **attrs );
int ldap_add_s(
LDAP *ld,
const char *dn,
LDAPMod **attrs );
int ldap_add_ext(
LDAP *ld,
const char *dn,
LDAPMod **attrs,
LDAPControl **serverctrls,
LDAPControl **clientctrls,
int *msgidp );
int ldap_add_ext_s(
LDAP *ld,
const char *dn,
LDAPMod **attrs,
LDAPControl **serverctrls,
LDAPControl **clientctrls );
int ldap_delete(
LDAP *ld,
const char *dn );
int ldap_delete_s(
LDAP *ld,
const char *dn );
int ldap_delete_ext(
LDAP *ld,
const char *dn,
LDAPControl **serverctrls,
LDAPControl **clientctrls,
int *msgidp );
int ldap_delete_ext_s(
LDAP *ld,
const char *dn,
LDAPControl **serverctrls,
LDAPControl **clientctrls );
char **ldap_get_values(
LDAP *ld,
LDAPMessage *entry,
const char *attr );
struct berval **ldap_get_values_len(
LDAP *ld,
LDAPMessage *entry,
const char *attr );
char **ldap_explode_dn(
const char *dn,
int notypes );
char **ldap_explode_rdn(
const char *rdn,
int notypes );
char *ldap_dn2ufn(
const char *dn );
■推奨されないインタフェース
以下に示すインタフェースは、推奨されないインタフェースとなります。引き続き使用できますが、新インタフェースへの移行を推奨します。
推奨されないインタフェース | 新インタフェース |
---|---|
ldap_ber_free() | ber_free()に変更となります。パラメタの変更はありません。 |
ldap_version() | ldap_get_option()のオプションにLDAP_OPT_API_INFOを指定して獲得します。 (注) |
ldap_get_option() |
|
注意
通知される情報は、以下の形式です
typedef struct ldapapiinfo { int ldapai_info_version; int ldapai_api_version; int ldapai_protocol_version; char **ldapai_extensions; char *ldapai_vendor_name; int ldapai_vendor_version; } LDAPAPIInfo;
構造体メンバの設定値
ldapai_info_version 本構造体のバージョン情報 ldapai_api_version LDAP-SDKのバージョン情報 ldapai_protocol_version LDAPプロトコルのサポートバージョン ldapai_extensions 未使用(NULL) ldapai_vendor_name ベンダー名 ldapai_vendor_version ベンダーの内部バージョン
■サポートされないインタフェース
InfoDirectoryで使用していたC言語アプリケーションを移行する場合は、一部サポートされない機能がありますので、必要に応じて、アプリケーションを修正してください。
Interstage ディレクトリサービスでサポートされない機能と、その対処方法を以下に示します。
サポートされない機能 | 対処方法 |
---|---|
証明書ベースの認証機能
| ldap_simple_bind()、またはldap_simple_bind_s()による認証に修正してください。 |
リフェラル機能
| リフェラルを含むメッセージは返却されないため、左記の関数を使用している場合は、関数を削除してください。 例) |
LDAPプロトコル拡張機能
| 左記の関数を使用している場合は、LDAPプロトコル拡張を使用しないように、関数を削除してください。 |
拡張コントロール機能
| 左記の関数を削除し次の方法で修正してください。
|
エイリアス(別名参照)
| エイリアスを使用している場合は、アプリケーションの左記の関数を削除し、Interstage ディレクトリサービスに同一エントリを複数登録してください。 |
■開発環境の変更
以下の位置が変更されました。
InfoDirectory | Interstage ディレクトリサービス | |
---|---|---|
インクルードファイル |
|
|
リンク用ライブラリ |
|
|
■ライブラリについて
以下が変更されました。
InfoDirectory | Interstage ディレクトリサービス | |
---|---|---|
動的ライブラリ |
上記の名前が右記に変更されました。 |
アプリケーションで使用するライブラリ名を上記に変更してください。 |
静的ライブラリ |
上記の静的ライブラリは提供されません。 |
上記の動的ライブラリを使用するように修正してください。 |
注意
動的ライブラリは/usr/lib、/usr/lib64へのシンボリックリンクは設定されません。アプリケーション、または環境設定でライブラリへのパスを解決する必要があります。
Java言語(JNDI)アプリケーションの移行手順について説明します。
■サポートされないインタフェース
InfoDirectoryで使用していたJNDIアプリケーションを移行する場合は、一部サポートされない機能がありますので、必要に応じて、アプリケーションを修正してください。
Interstage ディレクトリサービスでサポートされない機能と、その対処方法を以下に示します。
サポートされない機能 | 対処方法 |
---|---|
証明書ベースの認証機能
| 左記の環境プロパティで"external"を使用している場合は、簡易認証("simple")に修正してください。 |
リフェラル機能
| リフェラルを含むメッセージは返却されないため、左記の環境プロパティを使用している場合は、環境プロパティを削除してください。 |
拡張コントロール機能
| 左記を使用している場合は次の方法で修正してください。
|
エイリアス(別名参照)
| エイリアスを使用している場合は、アプリケーションの左記の環境プロパティを削除し、Interstage ディレクトリサービスに同一エントリを複数登録してください。 |
LDAPコマンドには、以下の変更がありますので、注意してください。
■コマンドの格納先
コマンドの格納先を変更しました。
InfoDirectory | Interstage ディレクトリサービス |
---|---|
|
|
|
|
■オプションの機能差異
Interstage ディレクトリサービスのLDAPクライアントSDKでは、LDAPの最新の規約に正しく準拠するため、InfoDirectory SDKのLDAPコマンドと比較して、LDAPコマンドのオプションに機能差異があります。機能差異となるLDAPコマンドのオプションについて、以下に説明します。
また、各コマンドの詳細情報の出力形式についても違いがあります。詳細は、「-vオプションで出力する詳細情報の差異」で説明しています。
旧オプション | 新オプション | 移行方法 |
---|---|---|
-H | -m | 新オプションを指定してコマンドを実行してください。 |
-C type | -G type | 新オプションを指定してコマンドを実行してください。 |
なし | -H uri | 新規追加オプション |
なし | -r | 新規追加オプション |
なし | -V | 新規追加オプション |
-v | -v | 機能は同じです。出力形式が違いますので、「-vオプションで出力する詳細情報の差異」で確認してください。 |
旧オプション | 新オプション | 移行方法 |
---|---|---|
-H | -m | 新オプションを指定してコマンドを実行してください。 |
-C type | -G type | 新オプションを指定してコマンドを実行してください。 |
-b | オプション廃止 | LDIFファイル内での外部ファイルの指定方法を変更してください。 |
なし | -H uri | 新規追加オプション |
なし | -S file | 新規追加オプション |
なし | -V | 新規追加オプション |
-v | -v | 機能は同じです。出力形式が違いますので、「-vオプションで出力する詳細情報の差異」で確認してください。 |
旧オプション | 新オプション | 移行方法 |
---|---|---|
-H | -m | 新オプションを指定してコマンドを実行してください。 |
-C type | -G type | 新オプションを指定してコマンドを実行してください。 |
-U path | -T path | 新オプションを指定してコマンドを実行してください。 |
-Q attr | オプション廃止 | -tオプションを使用してください。 |
-e | オプション廃止 | なし。 |
-E | オプション廃止 | なし。 |
-S attr | -S attr | 属性attrで結果をソート(昇順)するためには、attributesオプションに、属性attrを指定してください。 |
-t | -t | 機能は同じです。作成したファイルの絶対パスの表現が違いますので、確認してください。 |
filter | filter | 基本的に修正不要です。必要に応じて対応してください。 |
なし | -H uri | 新規追加オプション |
なし | -V | 新規追加オプション |
-v | -v | 機能は同じです。出力形式が違いますので、「-vオプションで出力する詳細情報の差異」で確認してください。 |
LDAPコマンドの-vオプションで出力する詳細情報の差異を示します。
項目 | 旧LDAPコマンド | 新LDAPコマンド |
---|---|---|
接続先ホスト名、ポート番号 | ldap server name: XXXX | ldap_init( XXXX, 99999 ) |
LDAPプロトコルバージョン | ldap protocol version: 3 | なし。 |
文字コード系 | character type: SJIS | character type: SJIS |
送信コード系 | transmission type: UTF8 | なし。 |
認証機構 | mechanism: SIMPLE | なし。 |
認証方式 | authentication method: PASSWORD | SSL接続時 |
リフェラル追跡 | follow referrals: ON | なし。 |
接続先ホスト名、ポート番号のURI形式指定 | なし。 | ldap_initialize( %s ) |
項目 | 旧LDAPコマンド | 新LDAPコマンド |
---|---|---|
削除するエントリのDN | deleting entry cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com | deleting entry "cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com" |
削除成功時 | entry removed | Delete Result: |
下位エントリ削除 | なし。 | deleting children of: ou=Users2,ou=interstage,o=fujitsu,dc=com |
項目 | 旧LDAPコマンド | 新LDAPコマンド |
---|---|---|
追加/更新するエントリのDN | adding new entry cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com | adding new entry "cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com" |
変名 | new RDN: cn=User002 (keep existing values) | modifying rdn of entry "cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com" |
変名 | new RDN: cn=User002 (do not keep existing values) | modifying rdn of entry "cn=User001,ou=User,ou=interstage,o=fujitsu,dc=com" |
項目 | 旧LDAPコマンド | 新LDAPコマンド |
---|---|---|
サーチベース | search base: ou=interstage,o=fujitsu,dc=com | なし。 |
-fオプションでの検索フィルタのファイル指定 | filter pattern: read filters file | filter pattern: (objectclass=*) |
属性指定 | returning: dn | requesting: dn |
検索フィルタ指定 | [filter: objectclass=*] | filter: objectclass=* |
検索条件合致数 | X matches | なし。 |
■メッセージ
Interstage ディレクトリサービスのLDAPクライアントSDKでは、LDAPの最新の規約に正しく準拠するため、メッセージを変更/追加しました。また、InfoDirectory SDKのLDAPコマンドで出力していたメッセージラベルのない形式(「メッセージ集」の「Interstage ディレクトリサービスが出力するメッセージ」を参照)から、メッセージラベルのある形式に変更しました。詳細は、「メッセージ内容の変更について」の「B.20 Interstage ディレクトリサービスのメッセージ」を参照してください。
■LDIFの仕様
Interstage ディレクトリサービスのLDAPクライアントSDKでは、LDAPの最新の規約に正しく準拠するため、InfoDirectory SDKのLDIFでサポートしていた、Base64形式の外部ファイルはサポートしていません。LDIFに直接Base64形式で指定してください。
属性値を外部ファイルから参照する場合、URL形式だけを指定できます。
以下のように指定してください。
description:< file:///C:\data\utf8.txt
description:< file:///data/utf8.txt