可以使用 cookie 的另一个地方就是回调。服务器可以指定一个 (用户定义的) 回调,以便知道某个环境首次得到使用的时间,方法是通过使用 rpc_gss_set_callback() 函数。在为所指定的程序和版本建立环境之后,某个环境第一次用于数据交换时,就调用回调。
用户定义的回调例程具有下面的形式:
第二个和第三个变元, deleg 和 gss_context是 GSS-API 数据类型,且当前尚未对外披露,因而回调函数可以将其忽略。 (简而言之, deleg 是任何所代表的对等机的身份,而 gss_context 是一个到 GSS-API 环境的指针,以备程序想在环境上进行 GSS-API 操作 - 即,测试接受范畴。) 我们业已见过 cookie 变元。
lock 变元是到一个 rpc_gss_lock_t 结构的指针:
typedef struct { bool_t locked; rpc_gss_rawcred_t *raw_cred; } rpc_gss_lock_t;该参数使得一个服务器为对话强制执行一个具体的 QOP 和服务。QOP 和服务见于 实例 8-5 中所描述的 rpc_gss_rawcred_t 结构。 (服务器不应更改服务和 QOP 的值。) 当用户定义的回调被调用时, locked 字段就设定为 FALSE。如果服务器将 locked 设定为 TRUE,则只有其 QOP 和rpc_gss_rawcred_t 结构中的服务值与 QOP 和服务值相匹配的请求被接受。
如要了解更多的信息,请参见 rpc_gss_set_callback(3N) 手册页。