I contesti vengono creati con la chiamata rpc_gss_seccreate(). Questa funzione accetta come argomenti:
Un handle di un client (restituito, ad esempio, da clnt_create())
Il nome principale del server (ad esempio, nfs@spa.it)
Il meccanismo (ad esempio, Kerberos V5) per la sessione
Il tipo di servizio di sicurezza (ad esempio, il servizio di riservatezza)
Il QOP per la sessione
Due parametri della GSS-API che possono restare invisibili per la maggior parte degli usi (in cui cioè il programmatore può fornire valori NULL)
Essa restituisce un handle di autenticazione AUTH. L'Esempio 8-1 mostra come usare rpc_gss_seccreate() per creare un contesto usando il meccanismo di sicurezza Kerberos V5 e il servizio di integrità:
CLIENT *clnt; /* handle client */ char server_host[] = "foo"; char service_name[] = "nfs@euro.spa.it"; 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); . . .
Alcuni aspetti da notare nell'Esempio 8-1 sono i seguenti:
Benché il meccanismo sia stato dichiarato in modo esplicito (per facilità di lettura), esso viene generalmente ricavato con rpc_gss_get_mechanisms() da una tabella dei meccanismi disponibili.
Il QOP viene passato come NULL, e viene quindi impostato in base al valore predefinito del meccanismo. Sarebbe anche possibile, come per il meccanismo, ricavare un valore valido con rpc_gss_get_mechanisms(). Per maggiori informazioni, vedere la pagina man rpc_gss_get_mechanisms(3N).
Il tipo di servizio di sicurezza, rpc_gss_svc_integrity, è un enum del tipo RPCSEC_GSSrpc_gss_service_t. rpc_gss_service_t e ha il seguente formato:
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;
Il servizio di sicurezza predefinito è quello di integrità, perciò il programmatore potrebbe aver specificato rpc_gss_svc_default e ottenuto lo stesso risultato.
Per maggiori informazioni, vedere la pagina man rpc_gss_seccreate(3N).