Los contextos se crean con la llamada rpc_gss_seccreate(). Esta función toma los argumentos siguientes:
Un manejador de cliente (devuelto, por ejemplo, por clnt_create())
El nombre del principal de servidor (por ejemplo, nfs@acme.com)
El mecanismo para la sesión (por ejemplo, Kerberos V5)
El tipo de servicio de seguridad (por ejemplo, privacidad)
QOP para la sesión
Dos parámetros de GSS-API que pueden permanecer opacos para la mayoría de usos (es decir, el programador puede proporcionar valores nulos)
Devuelve un manejador de autenticación AUTH. Ejemplo 8-1 muestra cómo se puede utilizar rpc_gss_seccreate() para crear un contexto mediante el mecanismo de seguridad Kerberos V5 y el servicio de integridad:
CLIENT *clnt; /* manejador de cliente */ 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); . . .
Algunas de las cosas que se deben tener en cuenta sobre Ejemplo 8-1 son:
Aunque se declaró el mecanismo de forma explícita (para facilitar la lectura), habitualmente se obtendría por programación con rpc_gss_get_mechanisms() desde una tabla de mecanismos disponibles.
QOP se pasa como NULL, que la define como el valor predeterminado de este mecanismo. De otra forma, podría obtenerse un valor válido por programa con rpc_gss_get_mechanisms(), al igual que el mecanismo. Para obtener más información, véase la página del comando man rpc_gss_get_mechanisms(3N).
El tipo de servicio de seguridad, rpc_gss_svc_integrity, es un enum del tipo RPCSEC_GSS rpc_gss_service_t. rpc_gss_service_t tiene el formato siguiente:
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;
El sistema de seguridad predeterminado es la integridad, de forma que el programador podría haber especificado rpc_gss_svc_default y obtener el mismo resultado.
Para más información, véase la página del comando man de rpc_gss_seccreate(3N).