Interstage Application Server/Interstage Web Server 移行ガイド |
目次 索引 |
第4章 旧機能から新機能への移行方法 | > 4.3 InfoDirectoryからInterstage ディレクトリサービスへの移行 |
C言語アプリケーションの移行手順について説明します。
InfoDirectory SDKを使用したユーザアプリケーションは、Interstage ディレクトリサービス SDKとバイナリの互換性がありません。このため、アプリケーションを再コンパイルする必要があります。以降の記事を参照したうえで、アプリケーションを再コンパイルしてください。
また、一部の機能、インタフェースなどに変更がありますので、以下を参照して、アプリケーションを修正してください。
旧バージョン・レベルのAPIでは“draft-ietf-ldapext-ldap-c-api-05.txt”に準拠していますが、一部、古い仕様である“draft-ietf-ldapext-ldap-c-api-00.txt”に従って実装されているものがあります。
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を指定してください。 |
以下の関数で、関数宣言が変更され、const修飾子(太字部分)により宣言が厳格化されました。旧APIに準じたソースではコンパイル時に警告が出る場合があります。必要に応じて修正してください。
ldap_init() --------------------------------------------------------------------- LDAP *ldap_init( const char *hostname, int portno ); ---------------------------------------------------------------------
ldap_set_option() --------------------------------------------------------------------- int ldap_set_option( LDAP *ld, int option, const void *optdata ); ---------------------------------------------------------------------
ldap_simple_bind() --------------------------------------------------------------------- int ldap_simple_bind( LDAP *ld, const char *dn, const char *passwd ); ---------------------------------------------------------------------
ldap_simple_bind_s() --------------------------------------------------------------------- int ldap_simple_bind_s( LDAP *ld, const char *dn, const char *passwd ); ---------------------------------------------------------------------
ldap_search() --------------------------------------------------------------------- int ldap_search( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly ); ---------------------------------------------------------------------
ldap_search_s() --------------------------------------------------------------------- int ldap_search_s( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly, LDAPMessage **res ); ---------------------------------------------------------------------
ldap_search_st() --------------------------------------------------------------------- int ldap_search_st( LDAP *ld, const char *base, int scope, const char *filter, char **attrs, int attrsonly, struct timeval *timeout, LDAPMessage **res ); ---------------------------------------------------------------------
ldap_search_ext() --------------------------------------------------------------------- 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 ); ---------------------------------------------------------------------
ldap_search_ext_s() --------------------------------------------------------------------- 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 ); ---------------------------------------------------------------------
ldap_compare() --------------------------------------------------------------------- int ldap_compare( LDAP *ld, const char *dn, const char *attr, const char *value ); ---------------------------------------------------------------------
ldap_compare_s() --------------------------------------------------------------------- int ldap_compare_s( LDAP *ld, const char *dn, const char *attr, const char *value ); ---------------------------------------------------------------------
ldap_compare_ext() --------------------------------------------------------------------- int ldap_compare_ext( LDAP *ld, const char *dn, const char *attr, const struct berval *bvalue, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp ); ---------------------------------------------------------------------
ldap_compare_ext_s() --------------------------------------------------------------------- int ldap_compare_ext_s( LDAP *ld, const char *dn, const char *attr, const struct berval *bvalue, LDAPControl **serverctrls, LDAPControl **clientctrls ); ---------------------------------------------------------------------
ldap_modify() --------------------------------------------------------------------- int ldap_modify( LDAP *ld, const char *dn, LDAPMod **mods ); ---------------------------------------------------------------------
ldap_modify_s() --------------------------------------------------------------------- int ldap_modify_s( LDAP *ld, const char *dn, LDAPMod **mods ); ---------------------------------------------------------------------
ldap_modify_ext() --------------------------------------------------------------------- int ldap_modify_ext( LDAP *ld, const char *dn, LDAPMod **mods, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp ); ---------------------------------------------------------------------
ldap_modify_ext_s() --------------------------------------------------------------------- int ldap_modify_ext_s( LDAP *ld, const char *dn, LDAPMod **mods, LDAPControl **serverctrls, LDAPControl **clientctrls ); ---------------------------------------------------------------------
ldap_rename() --------------------------------------------------------------------- int ldap_rename( LDAP *ld, const char *dn, const char *newrdn, const char *newparent, int deleteoldrdn, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp ); ---------------------------------------------------------------------
ldap_rename_s() --------------------------------------------------------------------- int ldap_rename_s( LDAP *ld, const char *dn, const char *newrdn, const char *newparent, int deleteoldrdn, LDAPControl **serverctrls, LDAPControl **clientctrls ); ---------------------------------------------------------------------
ldap_add() --------------------------------------------------------------------- int ldap_add( LDAP *ld, const char *dn, LDAPMod **attrs ); ---------------------------------------------------------------------
ldap_add_s() --------------------------------------------------------------------- int ldap_add_s( LDAP *ld, const char *dn, LDAPMod **attrs ); ---------------------------------------------------------------------
ldap_add_ext() --------------------------------------------------------------------- int ldap_add_ext( LDAP *ld, const char *dn, LDAPMod **attrs, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp ); ---------------------------------------------------------------------
ldap_add_ext_s() --------------------------------------------------------------------- int ldap_add_ext_s( LDAP *ld, const char *dn, LDAPMod **attrs, LDAPControl **serverctrls, LDAPControl **clientctrls ); ---------------------------------------------------------------------
ldap_delete() --------------------------------------------------------------------- int ldap_delete( LDAP *ld, const char *dn ); ---------------------------------------------------------------------
ldap_delete_s() --------------------------------------------------------------------- int ldap_delete_s( LDAP *ld, const char *dn ); ---------------------------------------------------------------------
ldap_delete_ext() --------------------------------------------------------------------- int ldap_delete_ext( LDAP *ld, const char *dn, LDAPControl **serverctrls, LDAPControl **clientctrls, int *msgidp ); ---------------------------------------------------------------------
ldap_delete_ext_s() --------------------------------------------------------------------- int ldap_delete_ext_s( LDAP *ld, const char *dn, LDAPControl **serverctrls, LDAPControl **clientctrls ); ---------------------------------------------------------------------
ldap_get_values() --------------------------------------------------------------------- char **ldap_get_values( LDAP *ld, LDAPMessage *entry, const char *attr ); ---------------------------------------------------------------------
ldap_get_values_len() --------------------------------------------------------------------- struct berval **ldap_get_values_len( LDAP *ld, LDAPMessage *entry, const char *attr ); ---------------------------------------------------------------------
ldap_explode_dn() --------------------------------------------------------------------- char **ldap_explode_dn( const char *dn, int notypes ); ---------------------------------------------------------------------
ldap_explode_rdn() --------------------------------------------------------------------- char **ldap_explode_rdn( const char *rdn, int notypes ); ---------------------------------------------------------------------
ldap_dn2ufn() --------------------------------------------------------------------- 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 ディレクトリサービス
インクルードファイル
C:\Interstage\IDSDK\C\include
/opt/FJSVidsdk/C/include
C:\Interstage\IREPSDK\include
/opt/FJSVirepc/includeリンク用ライブラリ
C:\Interstage\IDSDK\C\lib
/opt/FJSVidsdk/C/lib
C:\Interstage\IREPSDK\lib
/opt/FJSVirepc/lib
以下が変更されました。
InfoDirectory
Interstage ディレクトリサービス
動的ライブラリ
libidldap2.dll
libidldap2.so上記の名前が右記に変更されました。
F3FMirepldap2.dll
libirepldap2.so (注)アプリケーションで使用するライブラリ名を上記に変更してください。
静的ライブラリ
libidldap2.lib
libidldap2.a上記の静的ライブラリは提供されません。
F3FMirepldap2.dll
libirepldap2.so上記の動的ライブラリを使用するように修正してください。
- 注)
- 動的ライブラリは/usr/libへのシンボリックリンクは設定されません。アプリケーション、または環境設定でライブラリへのパスを解決する必要があります。
目次 索引 |