面向开发者的 Oracle® Solaris 11 安全性指南

退出打印视图

更新时间: 2014 年 7 月
 
 

GSS-API 状态码

所有 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 Status Codes介绍了如何读取主状态码并提供了 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 结构中一样,与此类指针相关联的任何长度字段均设置为零。在此类情况下,应用程序无需释放这些缓冲区。