InfoDirectory使用手引書
目次 索引 前ページ次ページ

第3部 SDK編> 第5章 アプリケーション開発環境(LDAP C API)> 5.1 クライアントAPIライブラリの機能> 5.1.11 リフェラル機能

5.1.11.3 リフェラルが通知される場合のLDAP URLおよびエラーの取得

 リフェラル情報として通知されるLDAP URLおよびエラーが発生した場合のエラー情報の取得方法について示します。

 LDAP URLは、InfoDirectoryサーバからリフェラル情報として通知される場合とリフェラル先のInfoDirectoryサーバでエラーが発生した場合のエラー情報として通知される場合があります。

 LDAP URLの取得には、InfoDirectoryサーバから通知されるresult情報の解析が必要になります。そのため、result情報を通知するインタフェースをもつldap_result()ldap_search_s()、ldap_search_ext_st()、ldap_search_ext_s()のいずれかの関数を使用する必要があります。

 

5.1.11.3.1 リフェラルの自動追跡時

 リフェラルの自動追跡を行う場合、本ライブラリ関数内でリフェラル先のInfoDirectoryサーバへ自動的に接続を行い、その結果を受信します。そのためアプリケーションプログラムで、InfoDirectoryサーバから通知されたリフェラル情報(LDAP URL)は、取得できません。

 しかし、リフェラル先のInfoDirectoryサーバでエラーが発生した場合などは、発生したリフェラル先のInfoDirectoryサーバを示すためにLDAP URLが通知されます。LDAP URLは以下の処理で取得することが可能です。

 

メッセージタイプLDAP_RES_SEARCH_REFENCEが通知される場合

 非同期型の関数を使用し、メッセージの受信にldap_resultのパラメタとしてLDAP_MSG_ONEを指定する場合、検索要求の結果としてメッセージタイプLDAP_RES_SEARCH_REFENCEが通知されるときがあります。その場合、ldap_parse_reference()を使用し、LDAP URLの取得が可能です。

 これは検索結果として、通知されるメッセージに含まれているので、通知されたメッセージをldap_first_reference()/ldap_next_reference()を使用し、メッセージタイプLDAP_RES_SEARCH_REFENCEを含むメッセージを検出することで、ldap_parse_reference()の呼出しが可能になります。

 また、その後、ldap_get_optionでLDAP_OPT_ERROR_NUMBERを指定することにより、LDAPエラーコードが取得できます。リフェラルの自動追跡時にこのメッセージタイプが通知される場合は、検索要求でリフェラル先のInfoDirectoryサーバの接続に失敗した場合です(サーバダウン、アクセス拒否など)。接続に成功した後は、このメッセージタイプでは通知されません。

 

指定した要求に対応したメッセージタイプが通知される場合

 最後に取得したリフェラル先のInfoDirectoryサーバのエラー情報が取得できます。ldap_parse_result()を使用し、LDAP URLおよびLDAPエラーコードが取得できます。LDAP URLが取得できない場合は、リフェラル情報が通知されていません。

 通知されるメッセージタイプについては、ldap_resultを参照してください。なお、検索要求の場合は、LDAP_RES_SEARCH_RESULTになります。

 

注意事項

 同期型の本ライブラリ関数、もしくはメッセージの受信にldap_resultのパラメタとしてLDAP_MSG_ALLを指定している場合で、複数のリフェラル先のInfoDirectoryサーバへのアクセスがある場合、その中の1つからエラーが通知されても途中でエラー復帰せず、すべてのリフェラル先のInfoDirectoryサーバへのアクセスが行われます。

 ただし、メモリエラーなど継続できないエラーの場合は途中で復帰する場合があります。

 

5.1.11.3.2 リフェラルの手動追跡時

 リフェラルの自動追跡を行わない場合、アプリケーションプログラムでリフェラルを行うことになります。その場合、まずリフェラル情報として通知されるLDAP URLを取得します。LDAP URLは以下の処理で取得することが可能です。

 リフェラルの手動追跡時には、InfoDirectoryサーバから通知されたメッセージを解析する必要があります。そのため、非同期関数もしくはメッセージを取得できるインタフェースをもつ同期関数( ldap_search_s()ldap_search_st()ldap_search_ext_s() )を使用する必要があります。

 

メッセージタイプLDAP_RES_SEARCH_REFENCEが通知される場合

 検索要求の結果としてメッセージタイプLDAP_RES_SEARCH_REFENCEが通知される場合、ldap_parse_reference()を使用し、LDAP URLが取得できます。これは検索結果として、通知されるメッセージに含まれているので、通知されたメッセージをldap_first_reference()ldap_next_reference()を使用し、メッセージタイプLDAP_RES_SEARCH_REFENCEを含むメッセージを検出することで、ldap_parse_reference()の呼出しが可能になります。

 

指定した要求に対応したメッセージタイプが通知される場合

 ldap_parse_result()を使用し、LDAP URLが取得できます。LDAP URLが取得できない場合は、リフェラル情報が通知されていません。多くの場合、LDAPエラーコードとしてLDAP_REFERRAL(0x0a)が同時に通知されますが、LDAP_REFERRAL以外の場合にもLDAP URLが通知される場合があります。通知されるメッセージタイプについては、ldap_resultを参照してください。なお、検索要求の場合は、LDAP_RES_SEARCH_RESULTになります。

 リフェラルの自動追跡を行わない場合、リフェラル先へのアクセス制御はアプリケーションプログラムで行うことになるので、リフェラル先でエラーが発生した場合には、本ライブラリ関数のエラー情報がそのままそのリフェラル先のInfoDirectoryサーバでのエラー情報となります。


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

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