InfoDirectory使用手引書 |
目次 索引 |
第3部 SDK編 | > 第5章 アプリケーション開発環境(LDAP C API) | > 5.1 クライアントAPIライブラリの機能 | > 5.1.11 リフェラル機能 |
リフェラル情報として通知されるLDAP URLおよびエラーが発生した場合のエラー情報の取得方法について示します。
LDAP URLは、InfoDirectoryサーバからリフェラル情報として通知される場合とリフェラル先のInfoDirectoryサーバでエラーが発生した場合のエラー情報として通知される場合があります。
LDAP URLの取得には、InfoDirectoryサーバから通知されるresult情報の解析が必要になります。そのため、result情報を通知するインタフェースをもつldap_result()、ldap_search_s()、ldap_search_ext_st()、ldap_search_ext_s()のいずれかの関数を使用する必要があります。
リフェラルの自動追跡を行う場合、本ライブラリ関数内でリフェラル先のInfoDirectoryサーバへ自動的に接続を行い、その結果を受信します。そのためアプリケーションプログラムで、InfoDirectoryサーバから通知されたリフェラル情報(LDAP URL)は、取得できません。
しかし、リフェラル先のInfoDirectoryサーバでエラーが発生した場合などは、発生したリフェラル先のInfoDirectoryサーバを示すためにLDAP URLが通知されます。LDAP URLは以下の処理で取得することが可能です。
非同期型の関数を使用し、メッセージの受信に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サーバへのアクセスが行われます。
ただし、メモリエラーなど継続できないエラーの場合は途中で復帰する場合があります。
リフェラルの自動追跡を行わない場合、アプリケーションプログラムでリフェラルを行うことになります。その場合、まずリフェラル情報として通知されるLDAP URLを取得します。LDAP URLは以下の処理で取得することが可能です。
リフェラルの手動追跡時には、InfoDirectoryサーバから通知されたメッセージを解析する必要があります。そのため、非同期関数もしくはメッセージを取得できるインタフェースをもつ同期関数( ldap_search_s()、ldap_search_st()、ldap_search_ext_s() )を使用する必要があります。
検索要求の結果としてメッセージタイプ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サーバでのエラー情報となります。
目次 索引 |