GSS_ACCEPT_SEC_CONTEXT(3) | Programmer's Manual | GSS_ACCEPT_SEC_CONTEXT(3) |
名称
gss_accept_sec_context — ピア (相手側) のアプリケーションによって開始されたセキュリティコンテキストを受け付けます書式
#include < gssapi/gssapi.h> OM_uint32
gss_accept_sec_context( OM_uint32 *minor_status, gss_ctx_id_t *context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, const gss_name_t *src_name, gss_OID *mech_type, gss_buffer_t output_token, OM_uint32 *ret_flags, OM_uint32 *time_rec, gss_cred_id_t *delegated_cred_handle);
解説
アプリケーションとリモートピア (相手側) の間のリモートで開始されたセキュリティコンテキストを確立できます。ルーチンは、ピアアプリケーションが、それを gss_init_sec_context(3) に示すところで、ピアアプリケーションに転送されるべきである output_token を返します。トークンを送信する必要がないなら、 gss_accept_sec_context() は、 output_token 引数の長さフィールドを 0 に設定することによって、これを指示します。コンテキスト確立を完了するためには、1 つ以上の応答トークンが、ピアアプリケーションから要求されます。そうであるなら、 gss_accept_sec_context() は、 input_token パラメータを通して gss_accept_sec_context() にトークンを渡して、応答トークンがピアアプリケーションから受信されるとき、再びそれを呼び出す呼べきである場合に、 GSS_S_CONTINUE_NEEDED の状態フラグを返します。移植性のあるアプリケーションは、トークンの長さを使用して構成され、トークンが、送信されるか、またはウェート (待つ) する必要であるかどうか決定するための状態を返すべきです。したがって、一般的な移植性のある呼び出し側は、ループ中で常に gss_accept_sec_context() を呼び出すべきです:
gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; } while (maj_stat & GSS_S_CONTINUE_NEEDED);
ルーチンが値 GSS_S_CONTINUE_NEEDED を含んでいる主要な状態を返すときはいつも、コンテキストが、完全に確立されるというわけではなく、次の制限が、出力パラメータに適用されます:
time_rec パラメータによって返される値は、付随する ret_flags パラメータが、メッセージ毎のサービスが成功して終了した状態より前に適用されることを示す、ビット GSS_C_PROT_READY_FLAG を含んでいないなら、未定義で、 mech_type パラメータを通して返された値は、ルーチンが GSS_S_COMPLETE の主要な状態の値を返すまで、未定義です。
文脈設立が成功するなら、ビットがパラメータが含むべきである ret_flags パラメータを通して返された GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG と GSS_C_ANON_FLAG ビットの値は、コンテキストの設立が成功するなら、有効となる実装が予想する値を含むべきです。
ret_flags 中の GSS_C_PROT_READY_FLAG と GSS_C_TRANS_FLAG ビットの値は、 gss_accept_sec_context() が、コンテキストが完全に確立されるかどうかを返す、その時点の実際の状態を示すべきです。
これは、GSS-API 実装が呼び出し側に返された最後の ret_flags に GSS_C_PROT_READY_FLAG を設定することを必要としますが (すなわち、 GSS_S_COMPLETE ステータスコードに付随して起こるとき)、アプリケーションは、フラグが GSS-API のバージョン 1 で定義されなかったように、この振る舞いに依存するべきではありません。代わりに、アプリケーションは、 GSS_C_INTEG_FLAG と GSS_C_CONF_FLAG 値に従って、成功したコンテキストの確立の後にメッセージ毎のサービスを使用するように準備されるべきです。
ret_flags 引数中の他のすべてのビットは、0 に設定されるべきです。ルーチンが GSS_S_CONTINUE_NEEDED を返している間に、 ret_flags 引数で返された値は、実装が確立したコンテキストから利用可能であると予想するサービスを示します。
gss_accept_sec_context() の初期の呼び出しが失敗するなら、実装は、コンテキストオブジェクトを作成するべきではなく、context_handle パラメータの値は、これを示すように GSS_C_NO_CONTEXT に設定されたままにするべきです。その後の呼び出しでの失敗の場合には、実装は、"半分構築"のセキュリティコンテキストを削除するのが許可されますが (その場合、それは、 context_handle パラメータに GSS_C_NO_CONTEXT を設定するべきです)、好ましい振る舞いは、セキュリティコンテキスト (と、context_handle パラメータ) をアプリケーションが ( gss_delete_sec_context(3) を使用して) 削除するように変更しない状態のままにしておくことです。
コンテキスト設立の間、情報のステータスビット GSS_S_OLD_TOKEN と GSS_S_DUPLICATE_TOKEN は、致命的な誤りを示し、GSS-API メカニズムは、常に GSS_S_FAILURE ルーチンのエラーと関連してそれらを返すべきです。組み合わせのためのこの要件は、GSS-API 仕様のバージョン 1 に存在しなかったので、バージョン 1 の実装をはみ出したいアプリケーションは、これらのコードを特別な場合とせざるを得ません。
パラメータ
- context_handle
- 新しいコンテキストのためのコンテキストハンドル。最初の呼び出しのためには、 GSS_C_NO_CONTEXT を供給します。その後の呼び出しで返された値を使用します。いったん gss_accept_sec_context() がこのパラメータを通して値を返すと、リソースは、対応するコンテキストに割り当てられ、 gss_delete_sec_context(3) への呼び出しで使用された後にアプリケーションによって解放されなければなりません。
- acceptor_cred_handle
- コンテキストアクセプタによって要求される資格証明ハンドル。デフォルトのプリンシパルとしてコンテキストを受け付けるために GSS_C_NO_CREDENTIAL を指定します。 GSS_C_NO_CREDENTIAL が指定されますが、デフォルトのアクセプタプリンシパルが定義されないなら、 GSS_S_NO_CRED が返されます。
- input_token_buffer
- リモートアプリケーションから得られるトークン。
- input_chan_bindings
- アプリケーションで指定されるバインド (結合)。アプリケーションは、セキュリティコンテキストへのチャネル識別情報を安全にバインドできます。チャネルバインドが使用されていないなら、 GSS_C_NO_CHANNEL_BINDINGS を指定します。
- src_name
- コンテキスト開始ブログラムの認証された名前。使用の後に、この名前は、それを gss_release_name(3) に渡すことによって、割り付け解放されるべきです。必要でないなら、 NULL を指定します。
- mech_type
- 使用されるセキュリティメカニズム。返された OID 値は、静的な記憶行へのポインタであり、呼び出し側によって読み込み専用として扱われるべきです (特に、それを解放する必要はありません)。必要でないなら、 NULL を指定します。
- output_token
- ピア (相手側) アプリケーションに渡されるトークン。返されたトークンバッファの長さのフィールドが 0 であるなら、トークンは、ピアアプリケーションに渡される必要はありません。 0 以外の長さフィールドが返されるなら、関連する記憶域は、 gss_release_buffer(3) への呼び出しでアプリケーションによって使用された後に解放されなければなりません。
- ret_flags
-
コンテキストが特定のサービスオプションをサポートすることをそれぞれしめす、様々な独立しているフラグを含んでいます。必要でないなら、
NULL を指定します。シンボリック名は、各フラグに提供され、必要なフラグに対応するシンボリック名は、与えられたオプションがコンテキストによってサポートされているかどうかをテストするための
ret_flags 値で、論理的 AND されるべきです。フラグは、次の通りです:
- GSS_C_DELEG_FLAG
-
- True
- 委任された資格証明は、delegated_cred_handle パラメータを通して利用可能です。
- False
- 資格証明は、委任されませんでした。
- GSS_C_MUTUAL_FLAG
-
- True
- 相互の認証が要求されるリモートピア
- False
- リモートピアは、相互の認証を要求しませんでした
- GSS_C_REPLAY_FLAG
-
- True
- 保護されたメッセージの応答は、検出されます。
- False
- 応答されたメッセージは、検出されません。
- GSS_C_SEQUENCE_FLAG
-
- True
- 順序が狂った保護されたメッセージは、検出されます。
- False
- 順序が狂ったメッセージは、検出されません。
- GSS_C_CONF_FLAG
-
- True
- 秘密保持サービスは、 gss_wrap(3) ルーチンを呼び出すことによって、呼び出されます。
- False
- ( gss_wrap(3) を通して) 秘密保持サービスは、利用可能でありません。 gss_wrap(3) は、メッセージのカプセル化、データ起源認証と整合性サービスだけを提供します。
- GSS_C_INTEG_FLAG
-
- True
- 整合性サービスは、 gss_get_mic(3) または gss_wrap(3) ルーチンのいずれかを呼び出すことによって、呼び出されます。
- False
- メッセージ毎の整合性サービスは、利用不可能です。
- GSS_C_ANON_FLAG
-
- True
- 開始プログラムは、認証されたくはありません。 src_name パラメータ (要求されるなら) は、匿名の内部名を含んでいます。
- False
- 通常、開始プログラムは、認証されました。
- GSS_C_PROT_READY_FLAG
-
- True
- ( GSS_C_CONF_FLAG と GSS_C_INTEG_FLAG の状態によって指定されるような) 保護サービスは、付随の主要な状態の返り値が GSS_S_COMPLETE または GSS_S_CONTINUE_NEEDED. のいずれかであるなら、利用可能です。
- False
- ( GSS_C_CONF_FLAG と GSS_C_INTEG_FLAG の状態によって指定されるような) 保護サービスは、付随の主要な状態の返り値が GSS_S_COMPLETE である場合にだけ利用可能です。
- GSS_C_TRANS_FLAG
-
- True
- 結果のセキュリティコンテキストは、 gss_export_sec_context(3) への呼び出しを通して他のプロセスに転送されます。
- False
- セキュリティコンテキストは、転送可能ではありません。
他のすべてのビットは、0 に設定されるべきです。
- time_rec
- コンテキストが有効なままで残っている秒数。必要でないなら、 NULL を指定します。
- delegated_cred_handle
- 資格証明のための資格証明ハンドルは、コンテキスト開始プログラムから受信されました。 ret_flags の GSS_C_DELEG_FLAG が真である場合のみ有効です、この場合、明白な資格証明ハンドル (すなわち、 GSS_C_NO_CREDENTIAL でない) が、返されます。偽であるなら、 gss_accept_context() は、このパラメータを GSS_C_NO_CREDENTIAL に設定します。資格証明ハンドルが返されるなら、関連するリソースは、 gss_release_cred(3) への呼び出しで使用した後にアプリケーションによって解放されなければなりません。必要でないなら、 NULL を指定します。
- minor_status
- メカニズム特有のステータスコード。
戻り値
- GSS_S_CONTINUE_NEEDED
- ピアアプリケーションからのトークンは、コンテキストを完了するために必要であり、そのトークンで gss_accept_sec_context を再び呼び出さなければならないことを示します。
- GSS_S_DEFECTIVE_TOKEN
- input_token で実行された一貫性のチェックが失敗したことを示します。
- GSS_S_DEFECTIVE_CREDENTIAL
- 資格証明で実行された一貫性のチェックが失敗したことを示します。
- GSS_S_NO_CRED
- 供給された資格証明は、コンテキスト承認には有効でなかったか、または資格証明ハンドルが、なにも資格証明を参照していませんでした。
- GSS_S_CREDENTIALS_EXPIRED
- 参照された資格証明は、期限が切れました。
- GSS_S_BAD_BINDINGS
- input_token は、input_chan_bindings パラメータを通して指定されたものと異なったチャネルバインドを含んでいます。
- GSS_S_NO_CONTEXT
- 供給されたコンテキストハンドルが、有効なコンテキストを参照しなかったことを示します。
- GSS_S_BAD_SIG
- input_token は、無効の MIC を含んでいます。
- GSS_S_OLD_TOKEN
- input_token が、古過ぎました。これは、コンテキスト設立の間の致命的なエラーです。
- GSS_S_DUPLICATE_TOKEN
- input_token は、有効ですが、既に処理されたトークンの複製です。これは、コンテキスト設立の間の致命的なエラーです。
- GSS_S_BAD_MECH
- 受信トークンは、実装または提供された信任状によってサポートされないメカニズムを指定しました。
関連項目
gss_delete_sec_context(3), gss_export_sec_context(3), gss_get_mic(3), gss_init_sec_context(3), gss_release_buffer(3), gss_release_cred(3), gss_release_name(3), gss_wrap(3)規格
- RFC 2743
- Generic Security Service Application Program Interface Version 2, Update 1
- RFC 2744
- Generic Security Service API Version 2 : C-bindings
歴史
gss_accept_sec_context のマニュアルページは、 FreeBSD 7.0 ではじめて登場しました。作者
John Wray, Iris AssociatesCOPYRIGHT
Copyright (C) The Internet Society (2000). All Rights Reserved.This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
January 26, 2010 | FreeBSD |