Interstage Application Server 移行ガイド
目次 索引 前ページ次ページ

第2章 旧バージョン・レベルからの変更> 2.1 主な変更内容> 2.1.4 InfoDirectoryからSmart Repositoryへの移行

2.1.4.4 C言語アプリケーションの移行手順

 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で機能差異が発生します。

(1) 関数仕様

ldap_get_option()

 セションハンドルオプションの扱いが変更されています。

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_set_option()

 セションハンドルオプションの扱いが変更されています。

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 );

 

ldap_version()

[変更点]
 構造体メンバのsdk_versionが、旧バージョンでは100を返しますが、ライブラリのバージョンとして200以上を返します。

[移行方法]
 構造体のメンバsdk_versionをチェックしている場合は修正してください。

 

ldap_search()、ldap_search_s()、ldap_search_st()、ldap_search_ext()、ldap_search_ext_s()

[変更点]
 filterパラメタにNULLを指定した場合、旧バージョンではパラメタエラー(LDAP_PARAM_ERROR)となりますが、新バージョンでは、"(objectClass=*)"を指定したとみなします。

[移行方法]
 基本的に修正不要ですが、アプリケーションの仕様に応じて修正してください。

 

ldap_search_st()、ldap_search_ext()、ldap_search_ext_s()

[変更点]
 timeoutパラメタの構造体メンバのtv_sec、tv_usecともに0を指定した場合、または、どちらか一方、または両方に負の値を設定した場合、旧バージョンでは無限に待ち合わせします。新バージョンではパラメタエラー(LDAP_PARAM_ERROR)となるため、旧APIのままでは検索できません。

[移行方法]
 タイムアウトを無制限にする場合は、timeoutパラメタにNULLを指定してください。ただし、ldap_set_option()のLDAP_OPT_TIMELIMITを使用している場合は“リファレンスマニュアル(API編)”の“C言語インタフェース”-“Smart Repositoryインタフェース”-“セションハンドルオプションの設定/参照インタフェース”を参照してください。

 

(2) 関数宣言

 以下の関数で、関数宣言が変更され、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を指定して獲得します。通知される情報は、以下の形式となります。

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     ベンダーの内部バージョン

 

ldap_get_option() / ldap_set_option()

サポートされないインタフェース

 以下の機能は、本製品では未サポートです。それぞれの対処に従ってアプリケーションを修正してください。

証明書ベースの認証

 Smart Repositoryでは証明書ベースの認証をサポートしていません。ldap_simple_bind()、またはldap_simple_bind_s()による認証に修正してください。

リフェラル

 Smart Repositoryは、リフェラル機能をサポートしていません。リフェラルを含むメッセージは返却されないため、下記の関数を使用している場合は、関数を削除してください。

LDAPプロトコル拡張機能

 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

 

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007