GSS-API 参考信息
其他 GSS-API 定义可在 gssapi.h 文件中找到。
GSS-API 函数
Oracle Solaris 软件实现了 GSS-API 函数。有关每个函数的更多信息,请参见其手册页。另请参见Functions From Previous Versions of GSS-API。
- gss_acquire_cred()
通过获取预先存在凭证的 GSS-API 凭证句柄来建立全局标识
- gss_add_cred()
以增量方式构造凭证
- gss_inquire_cred()
获取有关凭证的信息
- gss_inquire_cred_by_mech()
获取有关凭证的每机制信息
- gss_release_cred()
放弃凭证句柄
- gss_init_sec_context()
使用对等应用程序启动安全上下文
- gss_accept_sec_context()
接受对等应用程序启动的安全上下文
- gss_delete_sec_context()
放弃安全上下文
- gss_process_context_token()
在对等应用程序的安全上下文中处理令牌
- gss_context_time()
确定上下文处于有效状态的时间
- gss_inquire_context()
获取有关安全上下文的信息
- gss_wrap_size_limit()
确定上下文中 gss_wrap() 的令牌大小限制
- gss_export_sec_context()
将安全上下文传输给其他进程
- gss_import_sec_context()
导入传输的上下文
- gss_get_mic()
计算消息的加密消息完整性代码 (Message Integrity Code, MIC)
- gss_verify_mic()
根据消息检查 MIC,以验证收到消息的完整性
- gss_wrap()
将 MIC 附加到消息中,并有选择地加密消息内容
- gss_unwrap()
使用附加的 MIC 验证消息。解密消息内容(如果必要)
- gss_import_name()
将连续的字符串名称转换为内部格式名称
- gss_display_name()
将内部格式名称转换为文本
- gss_compare_name()
比较两个内部格式名称
- gss_release_name()
放弃内部格式名称
- gss_inquire_names_for_mech()
列出指定机制支持的名称类型
- gss_inquire_mechs_for_name()
列出支持指定名称类型的机制
- gss_canonicalize_name()
将内部名称转换为机制名称 (Mechanism Name, MN)
- gss_export_name()
将 MN 转换为导出格式
- gss_duplicate_name()
创建内部名称的副本
- gss_add_oid_set_member()
向组中添加对象标识符
- gss_display_status()
将 GSS-API 状态码转换为文本
- gss_indicate_mechs()
确定可用的基础验证机制
- gss_release_buffer()
放弃缓冲区
- gss_release_oid_set()
放弃一组对象标识符
- gss_create_empty_oid_set()
创建不含对象标识符的组
- gss_test_oid_set_member()
确定对象标识符是否为组的成员
早期 GSS-API 版本中的函数
本节说明了早期 GSS-API 版本中包含的函数。
用于处理 OID 的函数
尽管可以将机制的名称从字符串转换为 OID,但程序员应尽可能地使用缺省 GSS-API 机制。
重命名的函数
以下函数已被更新的函数所替代。在所有情况下,新函数的功能与较早的函数等效。尽管支持较早的函数,但开发者应尽可能地将这些函数替换为更新的函数。
gss_sign() 已被替换为 gss_get_mic()。
gss_verify() 已被替换为 gss_verify_mic()。
gss_seal() 已被替换为 gss_wrap()。
gss_unseal() 已被替换为 gss_unwrap()。
GSS-API 状态码
主状态码是按下图所示方式在 OM_uint32 中进行编码的。
图 C-1 主状态编码
如果 GSS-API 例程返回的 GSS 状态码的高 16 位包含非零值,则调用失败。如果调用错误字段为非零值,则应用程序的例程调用是错误的。Table C–1 中列出了调用错误。如果例程错误字段为非零,例程将因例程特定错误(在Table C–2 中列出)而失败。无论高 16 位指示失败还是成功,都可以设置状态码的补充信息字段中的位。Table 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 补充信息代码 | | |
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 Status Codes。
显示状态码
函数 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 定义的所有宏一次可以评估多个参数。
GSS-API 数据类型和值
本节介绍各种类型的 GSS-API 数据类型和值。某些数据类型(如 gss_cred_id_t 或 gss_name_t)对用户是不透明的。这些数据类型无需介绍。本节介绍以下主题:
Basic GSS-API Data Types-给出 OM_uint32、gss_buffer_desc、gss_OID_desc、gss_OID_set_desc_struct 和 gss_channel_bindings_struct 数据类型的定义。
名称类型-给出为指定名称由 GSS-API 识别的各种名称格式。
Address Types for Channel Bindings-给出可用作 gss_channel_bindings_t 结构的 initiator_addrtype 和 acceptor_addrtype 字段的各种值。
基本 GSS-API 数据类型
本节介绍 GSS-API 使用的数据类型。
OM_uint32
OM_uint32 是与平台无关的 32 位无符号整数。
gss_buffer_desc
包含 gss_buffer_t 指针的 gss_buffer_desc 的定义采用以下格式:
typedef struct gss_buffer_desc_struct {
size_t length;
void *value;
} gss_buffer_desc, *gss_buffer_t;
gss_OID_desc
包含 gss_OID 指针的 gss_OID_desc 的定义采用以下格式:
typedef struct gss_OID_desc_struct {
OM_uint32 length;
void*elements;
} gss_OID_desc, *gss_OID;
gss_OID_set_desc
包含 gss_OID_set 指针的 gss_OID_set_desc 的定义采用以下格式:
typedef struct gss_OID_set_desc_struct {
size_t count;
gss_OID elements;
} gss_OID_set_desc, *gss_OID_set;
gss_channel_bindings_struct
gss_channel_bindings_struct 结构和 gss_channel_bindings_t 指针的定义的格式如下:
typedef struct gss_channel_bindings_struct {
OM_uint32 initiator_addrtype;
gss_buffer_desc initiator_address;
OM_uint32 acceptor_addrtype;
gss_buffer_desc acceptor_address;
gss_buffer_desc application_data;
} *gss_channel_bindings_t;
名称类型
名称类型指示关联名称的格式。有关名称和名称类型的更多信息,请参见Names in GSS-API和GSS-API OIDs。GSS-API 支持下表中的 gss_OID 名称类型。
- GSS_C_NO_NAME
建议将符号名称 GSS_C_NO_NAME 作为参数值,以指示在名称传输中未提供任何值。
- GSS_C_NO_OID
此值对应于空输入值,而不是实际的对象标识符。如果指定了该值,则该值基于机制特定缺省可列显语法指示关联名称的解释。
- GSS_C_NT_ANONYMOUS
标识匿名名称的方式。可以比较此值,以与机制无关的方式确定名称是否引用匿名主体。
- GSS_C_NT_EXPORT_NAME
使用 gss_export_name() 函数导出的名称。
- GSS_C_NT_HOSTBASED_SERVICE
用于表示与主机关联的服务。此名称格式是按照以下方式使用两个元素(服务和主机名)构造的:service@hostname。
- GSS_C_NT_MACHINE_UID_NAME
用于指示与本地系统中的用户对应的数字用户标识符。该值的解释特定于 OS。gss_import_name() 函数将此 UID 解析为用户名,之后该 UID 就表示为用户名形式。
- GSS_C_NT_STRING_STRING_UID_NAME
用于指示一个数字字符串,该字符串表示本地系统中的用户的数字用户标识符。该值的解释特定于 OS。此名称类型与计算机 UID 格式类似,不同的是缓冲区包含表示用户 ID 的字符串。
- GSS_C_NT_USER_NAME
本地系统中的命名用户。该值的解释特定于 OS。该值采用以下格式:username。
通道绑定的地址类型
下表给出了 gss_channel_bindings_struct 结构的 initiator_addrtype 和 acceptor_addrtype 字段的可能值。这些字段指示名称可以采用的格式,例如 ARPAnet IMP 地址或 AppleTalk 地址。通道绑定将在Using Channel Bindings in GSS-API中讨论。
表 C-4 通道绑定地址类型 | | |
GSS_C_AF_UNSPEC
| 0
| 未指定的地址类型
|
GSS_C_AF_LOCAL
| 1
| 本地主机
|
GSS_C_AF_INET
| 2
| Internet 地址类型,例如 IP
|
GSS_C_AF_IMPLINK
| 3
| ARPAnet IMP
|
GSS_C_AF_PUP
| 4
| pup 协议,例如 BSP
|
GSS_C_AF_CHAOS
| 5
| MIT CHAOS 协议
|
GSS_C_AF_NS
| 6
| XEROX NS
|
GSS_C_AF_NBS
| 7
| nbs
|
GSS_C_AF_ECMA
| 8
| ECMA
|
GSS_C_AF_DATAKIT
| 9
| Datakit 协议
|
GSS_C_AF_CCITT
| 10
| CCITT
|
GSS_C_AF_SNA
| 11
| IBM SNA
|
GSS_C_AF_DECnet
| 12
| DECnet
|
GSS_C_AF_DLI
| 13
| 直接数据链接接口
|
GSS_C_AF_LAT
| 14
| LAT
|
GSS_C_AF_HYLINK
| 15
| NSC 超级通道
|
GSS_C_AF_APPLETALK
| 16
| AppleTalk
|
GSS_C_AF_BSC
| 17
| BISYNC
|
GSS_C_AF_DSS
| 18
| 分布式系统服务
|
GSS_C_AF_OSI
| 19
| OSI TP4
|
GSS_C_AF_X25
| 21
| X.25
|
GSS_C_AF_NULLADDR
| 255
| 未指定任何地址
|
|
GSS-API 中特定于实现的功能
在 API 的实现之间 GSS-API 的某些方面可能有所不同。大多数情况下,实现之间的差异对程序只有很小的影响。在所有情况下,开发者都可以不依赖任何特定于给定实现(包括 Oracle Solaris 实现)的操作来最大化可移植性。
特定于 Oracle Solaris 的函数
Oracle Solaris 实现中没有定制的 GSS-API 函数。
人工可读的名称语法
GSS-API 实现在与名称对应的可列显语法中可能有所不同。对于可移植性,应用程序不应该比较使用人工可读(即可列显)格式的名称。相反,这些应用程序应该使用 gss_compare_name() 来确定内部格式名称是否与任何其他名称匹配。
Oracle Solaris gss_display_name() 实现按以下方式显示名称。如果 input_name 参数表示用户主体,则 gss_display_name() 将返回user_principal@realm 作为 output_name_buffer,返回gss_OID 值作为 output_name_type。如果 Kerberos v5 是基础机制,则 gss_OID 为 1.2.840.11354.1.2.2。
如果 gss_display_name() 接收到的名称是 gss_import_name() 使用 GSS_C_NO_OID 名称类型创建的,则 gss_display_name() 将在 output_name_type 参数中返回 GSS_C_NO_OID。
匿名名称的格式
gss_display_name() 函数将输出字符串 "<anonymous>",以指示匿名 GSS-API 主体。与此名称关联的名称类型 OID 为 GSS_C_NT_ANONYMOUS。Oracle Solaris 实现支持的其他有效可列显名称不应以尖括号 (<>) 括起。
实现选定数据类型
以下数据类型已作为指针实现,但某些实现可能将这些类型指定为算术类型:gss_cred_t、gss_ctx_id_t 和 gss_name_t。
删除上下文和存储数据
如果上下文建立失败,则 Oracle Solaris 实现不会自动删除部分生成的上下文。因此,应用程序应该通过使用 gss_delete_sec_context() 删除上下文来处理此事件。
Oracle Solaris 实现将通过内存管理自动释放存储的数据(如内部名称)。但是,当不再需要数据元素时,应用程序仍然应该调用相应的函数(如 gss_release_name())。
保护通道绑定信息
对通道绑定的支持随机制而变化。Diffie-Hellman 机制与 Kerberos v5 机制都支持通道绑定。
开发者应该假设通道绑定数据没有保密性保护。尽管 Kerberos v5 机制提供此保护,但通道绑定数据的保密性对于 Diffie-Hellman 机制不可用。
上下文导出和进程间令牌
Oracle Solaris 实现检测并拒绝相同上下文的多次导入尝试。
支持的凭证类型
Oracle Solaris 的 GSS-API 实现支持通过 gss_acquire_cred() 获取 GSS_C_INITIATE、GSS_C_ACCEPT 和 GSS_C_BOTH 凭证。
凭证到期
Oracle Solaris 的 GSS-API 实现支持凭证到期。因此,程序员可以在函数(如 gss_acquire_cred() 和 gss_add_cred())中使用与凭证生命周期相关的参数。
上下文到期
Oracle Solaris 的 GSS-API 实现支持上下文到期。因此,程序员可以在函数(如 gss_init_sec_context() 和 gss_inquire_context())中使用与上下文生命周期相关的参数。
回绕大小限制和 QOP 值
Oracle Solaris 的 GSS-API 实现(与任何基础机制相反)不对 gss_wrap() 处理的消息强加最大大小。应用程序可以使用 gss_wrap_size_limit() 确定最大消息大小。
调用 gss_wrap_size_limit() 时,Oracle Solaris 的 GSS-API 实现可以检测无效 QOP 值。
使用 minor_status 参数
在 Oracle Solaris 的 GSS-API 实现中,函数在 minor_status 参数中仅返回特定于机制的信息。其他实现可能在返回的次状态码中包括特定于实现的返回值。
Kerberos v5 状态码
每个 GSS-API 函数都会返回两个状态码:主状态码和次状态码。主状态码与 GSS-API 的行为相关。例如,如果应用程序尝试在安全上下文到期后传输消息,则 GSS-API 将返回 GSS_S_CONTEXT_EXPIRED 的主状态码。GSS-API Status Codes中列出了主状态码。
次状态码是由给定的 GSS-API 实现支持的基础安全机制返回的。每个 GSS-API 函数都采用 minor_status 或 minor_stat 参数作为第一个变量。无论函数是否成功返回,应用程序都可以检查此参数,以了解基础机制返回的状态。
下表列出了 minor_status 参数中的 Kerberos v5 返回的状态消息。有关 GSS-API 状态码的更多信息,请参见GSS-API Status Codes。
Kerberos v5 中状态码 1 的返回消息
下表列出了 Kerberos v5 中状态码 1 的返回的次状态消息。
表 C-5 Kerberos v5 状态码 1 | | |
KRB5KDC_ERR_NONE
| -1765328384L
| 无错误
|
KRB5KDC_ERR_NAME_EXP
| -1765328383L
| 数据库中的客户机项已到期
|
KRB5KDC_ERR_SERVICE_EXP
| -1765328382L
| 数据库中的服务器项已到期
|
KRB5KDC_ERR_BAD_PVNO
| -1765328381L
| 请求的协议版本不受支持
|
KRB5KDC_ERR_C_OLD_MAST_KVNO
| -1765328380L
| 客户机的密钥用旧的主密钥加密
|
KRB5KDC_ERR_S_OLD_MAST_KVNO
| -1765328379L
| 服务器的密钥用旧的主密钥加密
|
KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN
| -1765328378L
| 在 Kerberos 数据库中找不到客户机
|
KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
| -1765328377L
| 在 Kerberos 数据库中找不到服务器
|
KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE
| -1765328376L
| 主体具有 Kerberos 数据库中的多项
|
KRB5KDC_ERR_NULL_KEY
| -1765328375L
| 客户机或服务器具有空密钥
|
KRB5KDC_ERR_CANNOT_POSTDATE
| -1765328374L
| 票证的生效期不能延后
|
KRB5KDC_ERR_NEVER_VALID
| -1765328373L
| 请求的有效生命周期为负数或太短
|
KRB5KDC_ERR_POLICY
| -1765328372L
| KDC 策略拒绝请求
|
KRB5KDC_ERR_BADOPTION
| -1765328371L
| KDC 无法实现请求的选项
|
KRB5KDC_ERR_ETYPE_NOSUPP
| -1765328370L
| KDC 不支持加密类型
|
KRB5KDC_ERR_SUMTYPE_NOSUPP
| -1765328369L
| KDC 不支持校验和类型
|
KRB5KDC_ERR_PADATA_TYPE_NOSUPP
| -1765328368L
| KDC 不支持 padata 类型
|
KRB5KDC_ERR_TRTYPE_NOSUPP
| -1765328367L
| KDC 不支持传输的类型
|
KRB5KDC_ERR_CLIENT_REVOKED
| -1765328366L
| 已撤销客户机的凭证
|
KRB5KDC_ERR_SERVICE_REVOKED
| -1765328365L
| 已撤销服务器的凭证
|
|
Kerberos v5 中状态码 2 的返回消息
下表列出了 Kerberos v5 中状态码 2 的返回的次状态消息。
表 C-6 Kerberos v5 状态码 2 | | |
KRB5KDC_ERR_TGT_REVOKED
| -1765328364L
| 已撤销 TGT
|
KRB5KDC_ERR_CLIENT_NOTYET
| -1765328363L
| 客户机尚无效,请稍后重试
|
KRB5KDC_ERR_SERVICE_NOTYET
| -1765328362L
| 服务器尚无效,请稍后重试
|
KRB5KDC_ERR_KEY_EXP
| -1765328361L
| 口令已到期
|
KRB5KDC_ERR_PREAUTH_FAILED
| -1765328360L
| 预验证失败
|
KRB5KDC_ERR_PREAUTH_REQUIRED
| -1765328359L
| 需要其他预验证
|
KRB5KDC_ERR_SERVER_NOMATCH
| -1765328358L
| 请求的服务器和票证不匹配
|
KRB5PLACEHOLD_27 到 KRB5PLACEHOLD_30
| -1765328357L 到 -1765328354L
| KRB5 错误码 27 到 30(保留)
|
KRB5KRB_AP_ERR_BAD_INTEGRITY
| -1765328353L
| 解密完整性检查失败
|
KRB5KRB_AP_ERR_TKT_EXPIRED
| -1765328352L
| 票证已到期
|
KRB5KRB_AP_ERR_TKT_NYV
| -1765328351L
| 票证尚无效
|
KRB5KRB_AP_ERR_REPEAT
| -1765328350L
| 请求为重放
|
KRB5KRB_AP_ERR_NOT_US
| -1765328349L
| 票证不是供我们使用
|
KRB5KRB_AP_ERR_BADMATCH
| -1765328348L
| 票证/验证者不匹配
|
KRB5KRB_AP_ERR_SKEW
| -1765328347L
| 时钟相位差太大
|
KRB5KRB_AP_ERR_BADADDR
| -1765328346L
| 网络地址不正确
|
KRB5KRB_AP_ERR_BADVERSION
| -1765328345L
| 协议版本不匹配
|
KRB5KRB_AP_ERR_MSG_TYPE
| -1765328344L
| 消息类型无效
|
KRB5KRB_AP_ERR_MODIFIED
| -1765328343L
| 消息流已经过修改
|
KRB5KRB_AP_ERR_BADORDER
| -1765328342L
| 消息无序
|
KRB5KRB_AP_ERR_ILL_CR_TKT
| -1765328341L
| 非法的跨领域票证
|
KRB5KRB_AP_ERR_BADKEYVER
| -1765328340L
| 密钥版本不可用
|
|
Kerberos v5 中状态码 3 的返回消息
下表列出了 Kerberos v5 中状态码 3 的返回的次状态消息。
表 C-7 Kerberos v5 状态码 3 | | |
KRB5KRB_AP_ERR_NOKEY
| -1765328339L
| 服务密钥不可用
|
KRB5KRB_AP_ERR_MUT_FAIL
| -1765328338L
| 相互验证失败
|
KRB5KRB_AP_ERR_BADDIRECTION
| -1765328337L
| 消息方向不正确
|
KRB5KRB_AP_ERR_METHOD
| -1765328336L
| 需要替换验证方法
|
KRB5KRB_AP_ERR_BADSEQ
| -1765328335L
| 消息中的序列号不正确
|
KRB5KRB_AP_ERR_INAPP_CKSUM
| -1765328334L
| 消息中的校验和类型不适合
|
KRB5PLACEHOLD_51 到 KRB5PLACEHOLD_59
| -1765328333L 到 -1765328325L
| KRB5 错误码 51 到 59(保留)
|
KRB5KRB_ERR_GENERIC
| -1765328324L
| 一般性错误
|
KRB5KRB_ERR_FIELD_TOOLONG
| -1765328323L
| 字段对于此实现太长
|
KRB5PLACEHOLD_62 到 KRB5PLACEHOLD_127
| -1765328322L 到 -1765328257L
| KRB5 错误码 62 到 127(保留)
|
未返回值
| -1765328256L
| 仅供内部使用
|
KRB5_LIBOS_BADLOCKFLAG
| -1765328255L
| 文件锁定模式的标志无效
|
KRB5_LIBOS_CANTREADPWD
| -1765328254L
| 无法读取口令
|
KRB5_LIBOS_BADPWDMATCH
| -1765328253L
| 口令不匹配
|
KRB5_LIBOS_PWDINTR
| -1765328252L
| 口令读取中断
|
KRB5_PARSE_ILLCHAR
| -1765328251L
| 组件名称存在非法字符
|
KRB5_PARSE_MALFORMED
| -1765328250L
| 主体的错误格式表示
|
KRB5_CONFIG_CANTOPEN
| -1765328249L
| 无法打开/找到 Kerberos /etc/krb5/krb5 配置文件
|
KRB5_CONFIG_BADFORMAT
| -1765328248L
| Kerberos /etc/krb5/krb5 配置文件的格式不正确
|
KRB5_CONFIG_NOTENUFSPACE
| -1765328247L
| 空间不足,无法返回完整信息
|
KRB5_BADMSGTYPE
| -1765328246L
| 为编码指定了无效的消息类型
|
KRB5_CC_BADNAME
| -1765328245L
| 凭证高速缓存名称格式错误
|
|
Kerberos v5 中状态码 4 的返回消息
下表列出了 Kerberos v5 中状态码 4 的返回的次状态消息。
表 C-8 Kerberos v5 状态码 4 | | |
KRB5_CC_UNKNOWN_TYPE
| -1765328244L
| 未知的凭证高速缓存类型
|
KRB5_CC_NOTFOUND
| -1765328243L
| 未找到匹配的凭证
|
KRB5_CC_END
| -1765328242L
| 到达凭证高速缓存的结尾
|
KRB5_NO_TKT_SUPPLIED
| -1765328241L
| 请求未提供票证
|
KRB5KRB_AP_WRONG_PRINC
| -1765328240L
| 请求中的主体错误
|
KRB5KRB_AP_ERR_TKT_INVALID
| -1765328239L
| 票证具有无效的标志集
|
KRB5_PRINC_NOMATCH
| -1765328238L
| 请求的主体和票证不匹配
|
KRB5_KDCREP_MODIFIED
| -1765328237L
| KDC 回复与预期情况不匹配
|
KRB5_KDCREP_SKEW
| -1765328236L
| KDC 回复中的时钟相位差太大
|
KRB5_IN_TKT_REALM_MISMATCH
| -1765328235L
| 初始票证请求中的客户机/服务器领域不匹配
|
KRB5_PROG_ETYPE_NOSUPP
| -1765328234L
| 程序缺少加密类型支持
|
KRB5_PROG_KEYTYPE_NOSUPP
| -1765328233L
| 程序缺少密钥类型支持
|
KRB5_WRONG_ETYPE
| -1765328232L
| 消息中未使用请求的加密类型
|
KRB5_PROG_SUMTYPE_NOSUPP
| -1765328231L
| 程序缺少校验和类型支持
|
KRB5_REALM_UNKNOWN
| -1765328230L
| 找不到请求领域的 KDC
|
KRB5_SERVICE_UNKNOWN
| -1765328229L
| Kerberos 服务未知
|
KRB5_KDC_UNREACH
| -1765328228L
| 无法访问请求领域的任何 KDC
|
KRB5_NO_LOCALNAME
| -1765328227L
| 未找到主体名称的本地名称
|
KRB5_MUTUAL_FAILED
| -1765328226L
| 相互验证失败
|
KRB5_RC_TYPE_EXISTS
| -1765328225L
| 已注册重放高速缓存类型
|
KRB5_RC_MALLOC
| -1765328224L
| 无更多内存可供分配(用重放高速缓存代码)
|
KRB5_RC_TYPE_NOTFOUND
| -1765328223L
| 重放高速缓存类型未知
|
|
Kerberos v5 中状态码 5 的返回消息
下表列出了 Kerberos v5 中状态码 5 的返回的次状态消息。
表 C-9 Kerberos v5 状态码 5 | | |
KRB5_RC_UNKNOWN
| -1765328222L
| 一般性未知 RC 错误
|
KRB5_RC_REPLAY
| -1765328221L
| 消息为重放
|
KRB5_RC_IO
| -1765328220L
| 重放 I/O 操作失败
|
KRB5_RC_NOIO
| -1765328219L
| 重放高速缓存类型不支持非易失性存储
|
KRB5_RC_PARSE
| -1765328218L
| 重放高速缓存名称解析和格式错误
|
KRB5_RC_IO_EOF
| -1765328217L
| 重放高速缓存 I/O 的文件结束
|
KRB5_RC_IO_MALLOC
| -1765328216L
| 无更多内存可供分配(用重放高速缓存 I/O 代码)
|
KRB5_RC_IO_PERM
| -1765328215L
| 重放高速缓存代码中权限被拒绝
|
KRB5_RC_IO_IO
| -1765328214L
| 重放高速缓存 I/O 代码中的 I/O 错误
|
KRB5_RC_IO_UNKNOWN
| -1765328213L
| 一般性未知 RC/IO 错误
|
KRB5_RC_IO_SPACE
| -1765328212L
| 存储重放信息的系统空间不足
|
KRB5_TRANS_CANTOPEN
| -1765328211L
| 无法打开/找到领域转换文件
|
KRB5_TRANS_BADFORMAT
| -1765328210L
| 领域转换文件的格式不正确
|
KRB5_LNAME_CANTOPEN
| -1765328209L
| 无法打开或找到 lname 转换数据库
|
KRB5_LNAME_NOTRANS
| -1765328208L
| 不能对请求的主体进行转换
|
KRB5_LNAME_BADFORMAT
| -1765328207L
| 转换数据库项的格式不正确
|
KRB5_CRYPTO_INTERNAL
| -1765328206L
| 密码系统内部错误
|
KRB5_KT_BADNAME
| -1765328205L
| 密钥表名称格式错误
|
KRB5_KT_UNKNOWN_TYPE
| -1765328204L
| 未知的密钥表类型
|
KRB5_KT_NOTFOUND
| -1765328203L
| 未找到密钥表项
|
KRB5_KT_END
| -1765328202L
| 到达密钥表的结尾
|
KRB5_KT_NOWRITE
| -1765328201L
| 无法写入指定的密钥表
|
|
Kerberos v5 中状态码 6 的返回消息
下表列出了 Kerberos v5 中状态码 6 的返回的次状态消息。
表 C-10 Kerberos v5 状态码 6 | | |
KRB5_KT_IOERR
| -1765328200L
| 写入密钥表时出错
|
KRB5_NO_TKT_IN_RLM
| -1765328199L
| 找不到请求领域的票证
|
KRB5DES_BAD_KEYPAR
| -1765328198L
| DES 密钥包含错误的奇偶校验
|
KRB5DES_WEAK_KEY
| -1765328197L
| DES 密钥为弱密钥
|
KRB5_BAD_ENCTYPE
| -1765328196L
| 错误的加密类型
|
KRB5_BAD_KEYSIZE
| -1765328195L
| 密钥大小与加密类型不兼容
|
KRB5_BAD_MSIZE
| -1765328194L
| 消息大小与加密类型不兼容
|
KRB5_CC_TYPE_EXISTS
| -1765328193L
| 已注册凭证高速缓存类型
|
KRB5_KT_TYPE_EXISTS
| -1765328192L
| 已注册密钥表类型
|
KRB5_CC_IO
| -1765328191L
| 凭证高速缓存 I/O 操作失败
|
KRB5_FCC_PERM
| -1765328190L
| 凭证高速缓存文件权限不正确
|
KRB5_FCC_NOFILE
| -1765328189L
| 未找到凭证高速缓存文件
|
KRB5_FCC_INTERNAL
| -1765328188L
| 内部文件凭证高速缓存错误
|
KRB5_CC_WRITE
| -1765328187L
| 写入凭证高速缓存文件时出错
|
KRB5_CC_NOMEM
| -1765328186L
| 没有更多内存可供分配(用凭证高速缓存代码)
|
KRB5_CC_FORMAT
| -1765328185L
| 凭证高速缓存中的格式错误
|
KRB5_INVALID_FLAGS
| -1765328184L
| 无效的 KDC 选项组合,即内部库错误
|
KRB5_NO_2ND_TKT
| -1765328183L
| 请求缺失的第二个票证
|
KRB5_NOCREDS_SUPPLIED
| -1765328182L
| 未向库例程提供凭证
|
KRB5_SENDAUTH_BADAUTHVERS
| -1765328181L
| 发送了错误的 sendauth 版本
|
KRB5_SENDAUTH_BADAPPLVERS
| -1765328180L
| sendauth 发送了错误的应用程序版本
|
KRB5_SENDAUTH_BADRESPONSE
| -1765328179L
| 错误响应(sendauth 交换期间)
|
KRB5_SENDAUTH_REJECTED
| -1765328178L
| 服务器在执行 sendauth 交换期间拒绝验证
|
|
Kerberos v5 中状态码 7 的返回消息
下表列出了 Kerberos v5 中状态码 7 的返回的次状态消息。
表 C-11 Kerberos v5 状态码 7 | | |
KRB5_PREAUTH_BAD_TYPE
| -1765328177L
| 预验证类型不受支持
|
KRB5_PREAUTH_NO_KEY
| -1765328176L
| 未提供所需的预验证密钥
|
KRB5_PREAUTH_FAILED
| -1765328175L
| 一般性预验证故障
|
KRB5_RCACHE_BADVNO
| -1765328174L
| 重放高速缓存的格式版本号不受支持
|
KRB5_CCACHE_BADVNO
| -1765328173L
| 凭证高速缓存格式版本号不受支持
|
KRB5_KEYTAB_BADVNO
| -1765328172L
| 密钥表格式的版本号不受支持
|
KRB5_PROG_ATYPE_NOSUPP
| -1765328171L
| 程序缺少地址类型支持
|
KRB5_RC_REQUIRED
| -1765328170L
| 消息重放检测需要 rcache 参数
|
KRB5_ERR_BAD_HOSTNAME
| -1765328169L
| 主机名无法规范
|
KRB5_ERR_HOST_REALM_UNKNOWN
| -1765328168L
| 主机名无法规范
|
KRB5_SNAME_UNSUPP_NAMETYPE
| -1765328167L
| 未针对名称类型定义转换到服务主体
|
KRB5KRB_AP_ERR_V4_REPLY
| -1765328166L
| 最初的票证响应似乎为版本 4 错误
|
KRB5_REALM_CANT_RESOLVE
| -1765328165L
| 无法解析请求领域的 KDC
|
KRB5_TKT_NOT_FORWARDABLE
| -1765328164L
| 请求票证无法获取可转发票证
|
KRB5_FWD_BAD_PRINCIPAL
| -1765328163L
| 尝试转发凭证时的错误主体名称
|
KRB5_GET_IN_TKT_LOOP
| -1765328162L
| 在 krb5_get_in_tkt 中检测到循环
|
KRB5_CONFIG_NODEFREALM
| -1765328161L
| 配置文件 /etc/krb5/krb5.conf 未指定缺省领域
|
KRB5_SAM_UNSUPPORTED
| -1765328160L
| obtain_sam_padata 中的 SAM 标志错误
|
KRB5_KT_NAME_TOOLONG
| -1765328159L
| 密钥表名字太长
|
KRB5_KT_KVNONOTFOUND
| -1765328158L
| 密钥表中的主体的密钥版本号不正确
|
KRB5_CONF_NOT_CONFIGURED
| -1765328157L
| 未配置 Kerberos /etc/krb5/krb5.conf 配置文件
|
ERROR_TABLE_BASE_krb5
| -1765328384L
| 缺省值
|
|