Interstage Application Server 移行ガイド |
目次
索引
![]() ![]() |
第2章 旧バージョン・レベルからの変更 | > 2.1 主な変更内容 | > 2.1.4 InfoDirectoryからSmart Repositoryへの移行 |
C言語アプリケーションの移行手順について説明します。
InfoDirectory SDKを使用したユーザアプリケーションは、Smart Repository SDKとバイナリの互換性がありません。このため、アプリケーションを再コンパイルする必要があります。以降の記事を参照したうえで、アプリケーションを再コンパイルしてください。
また、一部の機能、インタフェースに変更がありますので、“機能差異”、“推奨されないインタフェース”および“サポートされないインタフェース”を参照して、アプリケーションを修正してください。
旧バージョンのAPIでは“draft-ietf-ldapext-ldap-c-api-05.txt”に準拠していますが、一部、古い仕様である“draft-ietf-ldapext-ldap-c-api-00.txt”に従って実装されているものがあります。
Smart Repository LDAPクライアントAPIライブラリでは、最新の規約に正しく準拠するため、以下のAPIで機能差異が発生します。
セションハンドルオプションの扱いが変更されています。
LDAP_OPT_DESC
[変更点]
推奨されないインタフェースに変更されました。
[移行方法]
推奨されませんが、従来どおり利用できます。
LDAP_OPT_HOST_NAME
LDAP_OPT_ERROR_STRING
[変更点]
アプリケーションが復帰領域をldap_memfree()で解放する必要があります。解放しない場合は、メモリリークとなります。
[移行方法]
ldap_get_option()で復帰したアドレスを不要になったタイミングでldap_memfree()で解放してください。
LDAP_OPT_RESTART
[変更点]
パラメタが、"void *"から"int *" に変更されました。旧APIでint型を使用していない場合は、アプリケーションが異常終了する可能性があります。
[移行方法]
ldap_get_option()の第3パラメタはint型変数のポインタを指定してください。
セションハンドルオプションの扱いが変更されています。
LDAP_OPT_HOST_NAME
[変更点]
パラメタが、"char **"から"char *" に変更されました。旧APIのままでは、アプリケーションが異常終了します。
[移行方法]
次の例のように修正してください。
旧バージョン
char *host = "localhost"; ldap_set_option( ld, LDAP_OPT_HOST_NAME, &host );
新バージョン
char *host = "localhost"; ldap_set_option( ld, LDAP_OPT_HOST_NAME, host );
LDAP_OPT_ERROR_NUMBER
LDAP_OPT_ERROR_STRING
[変更点]
旧バージョンでは、ldap_get_option()で参照だけができましたが、新バージョンでは、ldap_set_option()で更新できるようになりました。
[移行方法]
基本的に修正不要ですが、アプリケーションの仕様に応じて修正してください。
LDAP_OPT_RESTART
[変更点]
旧バージョンでは、パラメタがマニュアルでは"void *"でしたが、ライブラリでは"int *"で扱っていました。新バージョンでは、ライブラリでも"void *"で扱います。従来の指定方法のままでは、常にLDAP_OPT_ONが設定されたと認識されるため、アプリケーションが正しく動作しない可能性があります。
[移行方法]
次の例のように修正してください。
旧バージョン
int value = LDAP_OPT_ON; ldap_set_option( ld, LDAP_OPT_RESTART, &value );
新バージョン
ldap_set_option( ld, LDAP_OPT_RESTART, LDAP_OPT_ON );
[変更点]
構造体メンバのsdk_versionが、旧バージョンでは100を返しますが、ライブラリのバージョンとして200以上を返します。
[移行方法]
構造体のメンバsdk_versionをチェックしている場合は修正してください。
[変更点]
filterパラメタにNULLを指定した場合、旧バージョンではパラメタエラー(LDAP_PARAM_ERROR)となりますが、新バージョンでは、"(objectClass=*)"を指定したとみなします。
[移行方法]
基本的に修正不要ですが、アプリケーションの仕様に応じて修正してください。
[変更点]
timeoutパラメタの構造体メンバのtv_sec、tv_usecともに0を指定した場合、または、どちらか一方、または両方に負の値を設定した場合、旧バージョンでは無限に待ち合わせします。新バージョンではパラメタエラー(LDAP_PARAM_ERROR)となるため、旧APIのままでは検索できません。
[移行方法]
タイムアウトを無制限にする場合は、timeoutパラメタにNULLを指定してください。ただし、ldap_set_option()のLDAP_OPT_TIMELIMITを使用している場合は“リファレンスマニュアル(API編)”の“C言語インタフェース”-“Smart Repositoryインタフェース”-“セションハンドルオプションの設定/参照インタフェース”を参照してください。
以下の関数で、関数宣言が変更され、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 ); |
以下に示すインタフェースは、推奨されないインタフェースとなります。引き続き使用できますが、新インタフェースへの移行を推奨します。
ber_free()に変更となります。パラメタの変更はありません。
ldap_get_option()のオプションにLDAP_OPT_API_INFOを指定して獲得します。通知される情報は、以下の形式となります。
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 ベンダーの内部バージョン
以下の機能は、本製品では未サポートです。それぞれの対処に従ってアプリケーションを修正してください。
Smart Repositoryでは証明書ベースの認証をサポートしていません。ldap_simple_bind()、またはldap_simple_bind_s()による認証に修正してください。
Smart Repositoryは、リフェラル機能をサポートしていません。リフェラルを含むメッセージは返却されないため、下記の関数を使用している場合は、関数を削除してください。
Smart Repositoryは、LDAPプロトコル拡張をサポートしていません。下記の関数を使用している場合は、LDAPプロトコル拡張を使用しないように、関数を削除してください。
Smart Repositoryは、拡張コントロール機能をサポートしていません。このため、以下の関数を削除し次の方法で修正してください。
削除する関数
Smart Repositoryはエイリアスをサポートしていません。エイリアスを使用している場合は、アプリケーションの以下の関数を削除し、Smart Repositoryに同一エントリを複数登録することで対処してください。
インクルードファイルの位置を変更しています。
OS |
InfoDirectory |
Smart Repository |
---|---|---|
|
C:\Interstage\IDSDK\C\include |
C:\Interstage\IREPSDK\include |
|
/opt/FJSVidsdk/C/include |
/opt/FJSVirepc/include |
リンク用ライブラリの位置を変更しています。
OS |
InfoDirectory |
Smart Repository |
---|---|---|
|
C:\Interstage\IDSDK\C\lib |
C:\Interstage\IREPSDK\lib |
|
/opt/FJSVidsdk/C/lib |
/opt/FJSVirepc/lib |
動的ライブラリの名前が変更されています。アプリケーションで使用するライブラリ名を変更してください。
OS
InfoDirectory
Smart Repository
libidldap2.dll
F3FMirepldap2.dll
libidldap2.so
libirepldap2.so
動的ライブラリは/usr/libへのシンボリックリンクは設定されません。アプリケーション、または環境設定でライブラリへのパスを解決する必要があります。
以下の静的ライブラリは提供されませんので、動的ライブラリを使用するように修正してください。
OS
InfoDirectory
Smart Repository
libidldap2.lib
F3FMirepldap2.dll
libidldap2.a
libirepldap2.so
目次
索引
![]() ![]() |