所有 GSS-API 函数都会返回两种类型的代码,其中提供了有关该函数执行成败与否的信息。 这两种类型的状态码都以 OM_uint32 值的形式返回。 这两种类型的返回码如下所示:
主状态码-指示以下错误的代码:
常规的 GSS-API 例程错误,如为例程提供无效机制
特定于指定 GSS-API 语言绑定的调用错误,如函数参数无法读取、无法写入或格式有误
以上两种类型的错误
此外,主状态码还可以提供有关例程状态的补充信息。 例如,代码可能会指示操作尚未完成或者令牌未按顺序发送。 如果未出现任何错误,例程将返回主状态值 GSS_S_COMPLETE。
主状态码按如下方式返回:
OM_uint32 major_status ; /* status returned by GSS-API */ major_status = gss_generic_function(arg1, arg2 ...);
主状态返回码的处理方式与任何其他 OM_uint32 的处理方式相同。 例如,请考虑以下代码:
OM_uint32 maj_stat; maj_sta = gss_generic_function(arg1, arg2 ...); if (maj_stat == GSS_CREDENTIALS_EXPIRED) <do something...>
主状态码可以通过 GSS_ROUTINE_ERROR()、GSS_CALLING_ERROR() 和 GSS_SUPPLEMENTARY_INFO() 等宏进行处理。 GSS-API 状态码介绍了如何读取主状态码并提供了 GSS-API 状态码的列表。
次状态码-基础机制返回的代码。 这些代码未在本手册中具体说明。
每个 GSS-API 函数都将次状态码的 OM_uint32 类型作为第一个参数。 该函数返回到调用函数时,次状态码将存储到 OM_uint32 参数中。 请考虑以下代码:
OM_uint32 *minor_status ; /* status returned by mech */ major_status = gss_generic_function(&minor_status, arg1, arg2 ...);
即使返回了致命的主状态码错误,minor_status 参数也始终由 GSS-API 例程设置。 请注意,大多数其他输出参数均可以保持未设置状态。 但是,需要将应当返回特定指针的输出参数设置为 NULL,这些指针指向该例程已分配的存储空间。 NULL 表示并未实际分配存储空间。 正如在 gss_buffer_desc 结构中一样,与此类指针相关联的任何长度字段均设置为零。 在此类情况下,应用程序无需释放这些缓冲区。