跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11 开发者安全性指南 Oracle Solaris 11 Information Library (简体中文) |
主状态码是按下图所示方式在 OM_uint32 中进行编码的。
图 B-1 主状态编码
如果 GSS-API 例程返回的 GSS 状态码的高 16 位包含非零值,则调用失败。 如果调用错误字段为非零值,则应用程序的例程调用是错误的。 表 B-1 中列出了调用错误。 如果例程错误字段为非零值,则说明该例程因例程特定错误(在表 B-2 中列出)而失败。 无论高 16 位指示失败还是成功,都可以设置状态码的补充信息字段中的位。 表 B-3 中列出了各个位的含义。
下表列出了 GSS-API 返回的调用错误。 这些错误特定于特定语言绑定(在本例中为 C)。
表 B-1 GSS-API 调用错误
|
下表列出了 GSS-API 例程错误,即 GSS-API 函数返回的一般错误。
表 B-2 GSS-API 例程错误
|
名称 GSS_S_COMPLETE(零值)指示缺少 API 错误或补充信息位。
下表列出了 GSS-API 函数返回的补充信息值。
表 B-3 GSS-API 补充信息代码
|
有关状态码的更多信息,请参见GSS-API 状态码。
函数 gss_display_status() 将 GSS-API 状态码转换为文本格式。 采用此格式,可以向用户显示代码或将代码置于文本日志中。gss_display_status() 一次仅显示一个状态码,而且某些函数可以返回多个状态条件。 因此,应该将 gss_display_status() 作为循环的一部分进行调用。 如果 gss_display_status() 指示非零状态码,则函数可以提取其他状态码。
示例 B-1 使用 gss_display_status() 显示状态码
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 定义的所有宏一次可以评估多个参数。