メジャー状態コードは OM_uint32 に符号化されます (図 B–1 を参照)。
GSS-API ルーチンが上位 16 ビットに 0 以外の値が入った GSS 状態コードを戻す場合、その呼び出しは失敗したことを示します。呼び出しエラーフィールドが 0 以外の場合、呼び出し側アプリケーションのルーチンの呼び出しにエラーがあったことを示します。表 B–2 に、呼び出しエラーのリストを示します。ルーチンエラーフィールドが 0 以外の場合、ルーチン固有のエラーのためにルーチンが失敗したことを示します。表 B–3 に、ルーチンエラーのリストを示します。上位 16 ビットが失敗または成功のどちらを示すかに関わらず、ルーチンは追加情報を状態コードの補足情報フィールドに設定できます。表 B–4 に、補足情報フィールドの個々のビットの意味を示します。
次の表に、GSS-API が戻す呼び出しエラーのリストを示します。これは、特定の言語バインディング (この場合は C) に固有なエラーのことです。
表 B–2 呼び出しエラー
エラー |
フィールドの値 |
意味 |
---|---|---|
GSS_S_CALL_INACCESSIBLE_READ |
1 |
要求された入力パラメータを読み取れない。 |
GSS_S_CALL_INACCESSIBLE_WRITE |
2 |
要求された出力パラメータに書き込めない。 |
GSS_S_CALL_BAD_STRUCTURE |
3 |
パラメータの形式が間違っている。 |
次の表に、GSS-API が戻すルーチンエラーのリストを示します。つまり、GSS-API 関数が戻す一般的なエラーのことです。
表 B–3 ルーチンエラー
エラー |
フィールドの値 |
意味 |
---|---|---|
GSS_S_BAD_MECH |
1 |
要求された機構がサポートされていない。 |
GSS_S_BAD_NAME |
2 |
提供された名前が無効である。 |
GSS_S_BAD_NAMETYPE |
3 |
提供された名前型がサポートされていない。 |
GSS_S_BAD_BINDINGS |
4 |
提供されたチャネルバインディングが間違っている。 |
GSS_S_BAD_STATUS |
5 |
提供された状態コードが無効である。 |
GSS_S_BAD_MIC, GSS_S_BAD_SIG |
6 |
トークンが持っている MIC が無効である。 |
GSS_S_NO_CRED |
7 |
資格が提供されていない。あるいは、資格を使用またはアクセスできない。 |
GSS_S_NO_CONTEXT |
8 |
コンテキストが全く確立されていない。 |
GSS_S_DEFECTIVE_TOKEN |
9 |
トークンが無効である。 |
GSS_S_DEFECTIVE_CREDENTIAL |
10 |
資格が無効である。 |
GSS_S_CREDENTIALS_EXPIRED |
11 |
参照された資格の有効期間が終了している。 |
GSS_S_CONTEXT_EXPIRED |
12 |
コンテキストの有効期間が終了している。 |
GSS_S_FAILURE |
13 |
その他のエラー (テキストを参照)。 |
GSS_S_BAD_QOP |
14 |
要求された保護品質を提供できない。 |
GSS_S_UNAUTHORIZED |
15 |
当該操作はローカルのセキュリティポリシーによって禁止されている。 |
GSS_S_UNAVAILABLE |
16 |
当該操作またはオプションは使用できない。 |
GSS_S_DUPLICATE_ELEMENT |
17 |
要求された資格要素はすでに存在している。 |
GSS_S_NAME_NOT_MN |
18 |
提供された名前が機構名 (MN) ではない。 |
ルーチンの説明では、GSS_S_COMPLETE という名前も使用していました。この値は 0 で、API エラーと補足情報ビットがどちらも存在しないことを示します。
次の表に、GSS-API 関数が戻す補足情報の値のリストを示します。
表 B–4 補足情報コード
コード |
ビット番号 |
意味 |
---|---|---|
GSS_S_CONTINUE_NEEDED |
0 (LSB) |
gss_init_sec_context() または gss_accept_sec_context() だけが戻す。関数を完了させるには、もう一度ルーチンを呼び出す必要があることを示す。 |
GSS_S_DUPLICATE_TOKEN |
1 |
トークンは以前のトークンの複製である。 |
GSS_S_OLD_TOKEN |
2 |
トークンの有効期間が終了している。 |
GSS_S_UNSEQ_TOKEN |
3 |
後方にあるトークンをすでに処理している。 |
GSS_S_GAP_TOKEN |
4 |
期待していたメッセージ毎トークンを受信していない。 |
GSS メジャー状態コードの GSS_S_FAILURE は、実際の機構が特定の GSS–API 状態コードに定義されていないエラーを検出したことを示します。この場合、機構に固有な状態コード (マイナー状態コード) にエラーの詳細が提供されます。
状態コードについての詳細は、状態コードを参照してください。
gss_display_status() 関数は GSS-API 状態コードをテキスト形式に変換して、ユーザーに表示したり、テキストログに格納したりできます。gss_display_status() は一度に 1 つの状態コードしか表示できず、さらに、複数の状態を戻す関数も存在するため、gss_display_status() はループの一部として呼び出す必要があります。gss_display_status() が 0 以外の値コード (例 B–1 の message_context パラメータに戻される値) を示している間、関数は別の状態コードを取得できます。
OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do { maj_status = gss_display_status( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); fprintf(stderr, "%.*s\n", \ (int)status_string.length, \ (char *)status_string.value); gss_release_buffer(&min_status, &status_string,); } while (message_context != 0); |
マクロ GSS_CALLING_ERROR()、GSS_ROUTINE_ERROR()、および GSS_SUPPLEMENTARY_INFO() はそれぞれ、GSS 状態コードを引数として受け取り、関係のないフィールドをすべて削除します。たとえば、GSS_ROUTINE_ERROR() を状態コードに適用して得た値には、呼び出しエラーフィールドと補足情報フィールドが削除され、ルーチンエラーフィールドだけが残ります。このようなマクロが提供する値は、適切な型の GSS_S_xxx シンボルと直接比較できます。また、マクロ GSS_ERROR() もあります。このマクロを GSS–API 状態コードに適用すると、状態コードが呼び出しエラーまたはルーチンエラーを示す場合は 0 以外の値を戻し、それ以外の場合は 0 の値を戻します。GSS-API で定義されているすべてのマクロは引数を 1 つだけしか受け取りません。