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

第4章 旧機能から新機能への移行方法> 4.3 InfoDirectoryからInterstage ディレクトリサービスへの移行

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

 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_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のままでは、アプリケーションが異常終了します。

例1)のように修正してください。

LDAP_OPT_ERROR_NUMBER
LDAP_OPT_ERROR_STRING

旧バージョン・レベルでは、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()
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言語インタフェース”-“Interstage ディレクトリサービスインタフェース”-“セションハンドルオプションの設定/参照インタフェース”を参照してください。

 例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_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()
ldap_set_option()

  • LDAP_OPT_CONNTIMEオプションを使用している場合は、LDAP_OPT_NETWORK_TIMEOUTを使用してください。修正時は、オプションの値を格納する領域optdataに指定するパラメタの形式を以下のように変更してください。
    • ldap_get_option()の場合、
      "int *"から"struct timeval **"に変更
    • ldap_set_option()の場合、
      "int *"から"struct timeval *"に変更
  • LDAP_OPT_ERROR_NUMBERは、LDAP_OPT_RESULT_CODEとして再定義されました。今後は、LDAP_OPT_RESULT_CODEを使用してください。
 注)
 通知される情報は、以下の形式となります。
---------------------------------------------------------------------
  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_sasl_bind()
  • ldap_sasl_bind_s()

ldap_simple_bind()、またはldap_simple_bind_s()による認証に修正してください。

リフェラル機能

  • ldap_first_reference()
  • ldap_next_reference()
  • ldap_count_references()
  • ldap_parse_reference()
  • セションハンドルオプションの以下のオプション
    • LDAP_OPT_REFERRALS
    • LDAP_OPT_REFERRAL_HOP_LIMIT
    • LDAP_OPT_REFERRAL_REBIND
    • LDAP_OPT_REFERRAL_REBIND_MAX

リフェラルを含むメッセージは返却されないため、左記の関数を使用している場合は、関数を削除してください。

LDAPプロトコル拡張機能

  • ldap_extended_operation()
  • ldap_extended_operation_s()
  • ldap_parse_extended_result()
  • ber_bvfree()

左記の関数を使用している場合は、LDAPプロトコル拡張を使用しないように、関数を削除してください。

拡張コントロール機能

  • ldap_create_paging_control()
  • ldap_create_more_paging_control()
  • ldap_create_sort_control()
  • ldap_control_free()
  • ldap_controls_free()
  • ldap_get_entry_controls()
  • セションハンドルオプションのLDAP_OPT_SERVER_CONTROLS

左記の関数を削除し次の方法で修正してください。

  • ページング機能を使用している場合は、フィルタ条件を変更し、分割して検索してください。
  • サーバソート機能を使用している場合は、アプリケーションで受信結果をソートしてください。

エイリアス(別名参照)

  • セションハンドルオプションのLDAP_OPT_DEREF

エイリアスを使用している場合は、アプリケーションの左記の関数を削除し、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へのシンボリックリンクは設定されません。アプリケーション、または環境設定でライブラリへのパスを解決する必要があります。

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

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