Per stabilire e mantenere un contesto di sicurezza sono necessari due tipi di nomi principali:
Un nome principale di un server. I nomi principali dei server vengono sempre specificati come stringhe ASCII terminate con NULL nel formato servizio@host; ad esempio, nfs@euro.spa.it.
Quando un client crea un contesto di sicurezza, esso specifica il nome principale del server in questo formato (vedere "Creazione di un contesto"). Allo stesso modo, quando un server deve impostare un nome principale che dovrà rappresentare, esso utilizza rpc_gss_set_svc_name(), che accetta come argomento un nome principale in questo formato.
Un nome principale di un client. Il nome principale di un client, quando viene ricevuto da un server, assume la forma di una struttura rpc_gss_principal_t: una stringa di byte numerata e invisibile determinata dal meccanismo utilizzato. Questa struttura è descritta nella pagina man rpcsec_gss(3N).
All'avvio, un server deve essere informato dei nomi principali che dovrà rappresentare. (Ogni server può assumere l'identità di più nomi principali.) I nomi principali vengono impostati da rpc_gss_set_svc_name():
char *principal, *mechanism; u_int req_time; principal = "nfs@euro.spa.it"; mechanism = "kerberos_v5"; req_time = 10000; /* tempo in cui le credenziali dovrebbero essere valide */ rpc_gss_set_svc_name(principal, mechanism, req_time, SERV_PROG, SERV_VERS);
(Kerberos ignora il parametro req_time, ma altri sistemi di autenticazione potrebbero usarlo.)
Per maggiori informazioni, vedere la pagina man rpc_gss_set_svc_name(3N).
I server devono poter operare sui nomi principali dei client, ad esempio per confrontare il nome principale di un client con il contenuto di una lista di controllo degli accessi, o per cercare una credenziale UNIX per quel client. Questi nomi principali sono tenuti in forma di puntatori a una struttura rpc_gss_principal_t. (Per maggiori informazioni su rpc_gss_principal_t, vedere la pagina man rpcsec_gss(3N).) Se un server vuole confrontare il nome principale che ha ricevuto con il nome di un'entità nota, esso deve poter generare un nome principale in quella forma.
La chiamata rpc_gss_get_principal_name() accetta come input diversi parametri che identificano in modo univoco una persona in una rete, e genera un nome principale in forma di puntatore alla struttura rpc_gss_principal_t:
rpc_gss_principal_t *principal; rpc_gss_get_principal_name(nome_principale, meccanismo, nome, nodo, dominio); . . .
Gli argomenti accettati da rpc_gss_get_principal_name() sono i seguenti:
nome_principale è un puntatore alla struttura rpc_gss_principal_t da impostare.
meccanismo è il meccanismo di sicurezza utilizzato (si ricordi che il nome principale generato è dipendente dal meccanismo).
nome può essere il nome di una persona o di un servizio, ad esempio mario o nfs, oppure il nome di un'applicazione definita dall'utente.
nodo può essere, ad esempio, il nome di un sistema UNIX.
dominio può essere, ad esempio, un dominio DNS, NIS o NIS+, oppure un settore Kerberos.
Ogni meccanismo di sicurezza richiede parametri di identificazione differenti. Ad esempio, Kerberos V5 richiede un nome utente e, solo opzionalmente, i nomi qualificati del nodo e del dominio (nella terminologia Kerberos, i nomi dell'host e del settore).
Per maggiori informazioni, vedere la pagina man rpc_gss_get_principal_name(3N).
I nomi principali vengono resi disponibili con la chiamata alla libreria free().