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

第2章 アプリケーション開発環境(LDAP C API)> 2.1 クライアントAPIライブラリの機能> 2.1.11 リフェラル機能

2.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()のどれかの関数を使用する必要があります。

 

2.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_RES_SEARCH_REFENCEが通知された場合、ldap_parse_reference()を使用して、LDAP URLの取得が可能です。

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

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

 

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

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

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

 

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

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

 

2.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_RES_SEARCH_REFENCEは、検索結果で通知されるメッセージに含まれているので、通知されたメッセージを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) 富士通株式会社 2006