JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11 开发者安全性指南     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

1.  面向开发者的 Oracle Solaris 安全(概述)

2.  开发特权应用程序

3.  编写 PAM 应用程序和服务

4.  编写使用 GSS-API 的应用程序

5.  GSS-API 客户机示例

6.  GSS-API 服务器示例

7.  编写使用 SASL 的应用程序

8.  Oracle Solaris 加密框架介绍

9.  编写用户级加密应用程序

10.  Oracle Solaris 密钥管理框架介绍

A.  适用于开发者的安全编码准则

B.  基于 C 的 GSS-API 样例程序

C.  GSS-API 参考信息

GSS-API 函数

早期 GSS-API 版本中的函数

用于处理 OID 的函数

重命名的函数

GSS-API 状态码

GSS-API 主状态码值

显示状态码

状态码宏

GSS-API 数据类型和值

基本 GSS-API 数据类型

OM_uint32

gss_buffer_desc

gss_OID_desc

gss_OID_set_desc

gss_channel_bindings_struct

名称类型

通道绑定的地址类型

GSS-API 中特定于实现的功能

特定于 Oracle Solaris 的函数

人工可读的名称语法

匿名名称的格式

实现选定数据类型

删除上下文和存储数据

保护通道绑定信息

上下文导出和进程间令牌

支持的凭证类型

凭证到期

上下文到期

回绕大小限制和 QOP 值

使用 minor_status 参数

Kerberos v5 状态码

Kerberos v5 中状态码 1 的返回消息

Kerberos v5 中状态码 2 的返回消息

Kerberos v5 中状态码 3 的返回消息

Kerberos v5 中状态码 4 的返回消息

Kerberos v5 中状态码 5 的返回消息

Kerberos v5 中状态码 6 的返回消息

Kerberos v5 中状态码 7 的返回消息

D.  指定 OID

E.  SASL 示例的源代码

F.  SASL 参考信息表

词汇表

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

GSS-API 状态码

主状态码是按下图所示方式在 OM_uint32 中进行编码的。

图 C-1 主状态编码

image:图中显示在 OM_uint32 中对主状态码进行编码的方式。

如果 GSS-API 例程返回的 GSS 状态码的高 16 位包含非零值,则调用失败。如果调用错误字段为非零值,则应用程序的例程调用是错误的。表 C-1 中列出了调用错误。如果例程错误字段为非零,例程将因例程特定错误(在表 C-2 中列出)而失败。无论高 16 位指示失败还是成功,都可以设置状态码的补充信息字段中的位。表 C-3 中列出了各个位的含义。

GSS-API 主状态码值

下表列出了 GSS-API 返回的调用错误。这些错误特定于特定语言绑定(在本例中为 C)。

表 C-1 GSS-API 调用错误

错误
字段中的值
含义
GSS_S_CALL_INACCESSIBLE_READ
1
不能读取所需的输入参数
GSS_S_CALL_INACCESSIBLE_WRITE
2
不能写入所需的输出参数
GSS_S_CALL_BAD_STRUCTURE
3
参数格式错误

下表列出了 GSS-API 例程错误,即 GSS-API 函数返回的一般错误。

表 C-2 GSS-API 例程错误

错误
字段中的值
含义
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–API 状态码的错误。机制特定状态码(即次状态码)提供了有关错误的更多详细信息。
GSS_S_BAD_QOP
14
无法提供请求的保护质量。
GSS_S_UNAUTHORIZED
15
本地安全策略禁止该操作。
GSS_S_UNAVAILABLE
16
操作或选项不可用。
GSS_S_DUPLICATE_ELEMENT
17
请求的凭证元素已存在。
GSS_S_NAME_NOT_MN
18
提供的名称不是机制名称 (mechanism name, MN)。

名称 GSS_S_COMPLETE(零值)指示缺少 API 错误或补充信息位。

下表列出了 GSS-API 函数返回的补充信息值。

表 C-3 GSS-API 补充信息代码

Code(代码)
位数
含义
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-API 状态码

显示状态码

函数 gss_display_status() 将 GSS-API 状态码转换为文本格式。采用此格式,可以向用户显示代码或将代码置于文本日志中。gss_display_status() 一次仅显示一个状态码,而且某些函数可以返回多个状态条件。因此,应该将 gss_display_status() 作为循环的一部分进行调用。如果 gss_display_status() 指示非零状态码,则函数可以提取其他状态码。

示例 C-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 定义的所有宏一次可以评估多个参数。