环境是借助 rpc_gss_seccreate() 调用加以创建的。该函数将下列作为其变元:
一个客户机句柄 (例如,由 clnt_create() 所返回的)
服务器授权对象的名称 (例如,nfs@acme.com)
用于对话的机制 (例如, Kerberos V5)
安全服务类型 (例如,隐私)
用于对话的 QOP
可以为大多数的使用情况保持为不透明的两个 GSS-API 参数 (也就是说,程序员可以提供 NULL 值)
它返回一个 AUTH 鉴别句柄。实例 8-1 显示如何可以借助 Kerberos V5 安全机制和完整性服务,用 rpc_gss_seccreate() 来创建一个环境:
CLIENT *clnt; /* client handle */ char server_host[] = "foo"; char service_name[] = "nfs@eng.acme.com"; char mech[] = "kerberos_v5"; clnt = clnt_create(server_host, SERVER_PROG, SERV_VERS, "netpath"); clnt->clnt_auth = rpc_gss_seccreate(clnt, service_name, mech, rpc_gss_svc_integrity, NULL, NULL, NULL); . . .
关于 实例 8-1,需要注意的一些事宜是:
尽管机制明确得以声明 (便于阅读),但借助 rpc_gss_get_mechanisms() 从一个可用机制表程序性地将其获得,则更为常见。
QOP 是作为一个 NULL 传递的,将 QOP 设定为该机制的默认值。否则,和机制一样,可以借助 rpc_gss_get_mechanisms() 程序性地获得一个有效的值。请参见 rpc_gss_get_mechanisms(3N) 手册页,了解更多的信息。
安全服务类型,rpc_gss_svc_integrity,是一个 enum,其 RPCSEC_GSS 类型为 rpc_gss_service_t。 rpc_gss_service_t 有下列格式:
typedef enum { rpc_gss_svc_default = 0, rpc_gss_svc_none = 1, rpc_gss_svc_integrity = 2, rpc_gss_svc_privacy = 3 } rpc_gss_service_t;
默认的安全服务映射到完整性,因而程序员本来可以指定 rpc_gss_svc_default 而获得同一结果。
如要了解更多的信息,请参见 rpc_gss_seccreate(3N) 手册页。