Deux types de nom de principal sont requis pour établir et maintenir un contexte de sécurité :
Un nom de principal de serveur . Le nom de principal d'un serveur est toujours spécifié sous forme d'un chaîne de caractères ASCII se terminant par un caractère NULL, ayant la forme service@hôte -- par exemple, nfs@eng.acme.com.
Lorsqu'un client crée un contexte de sécurité, il spécifie le nom du principal du serveur dans ce format (voir "Création d'un contexte"). De même, lorsqu'un serveur doit définir le nom d'un principal à représenter, il utilise rpc_gss_set_svc_name(), qui emploie un nom de principal ayant ce format comme argument.
Un nom de principal de client . Le nom de principal d'un client, tel que reçu par un serveur, a la forme d'une structure rpc_gss_principal_t : une chaîne d'octets comptée et opaque déterminée par le mécanisme employé. Cette structure est décrite à la page de manuel rpcsec_gss(3N).
Un serveur doit connaître les noms des principaux qu'il représentera lors de son démarrage (un serveur peut agir comme plus d'un principal). rpc_gss_set_svc_name() définit le nom du/des principal(aux) :
char *principal, *mechanism ; u_int req_time; principal = "nfs@eng.acme.com"; mechanism = "kerberos_v5"; req_time = 10000; /* temps durant lequel le justificatif d'identité doit être valide */ rpc_gss_set_svc_name(principal, mécanisme, req_time, SERV_PROG, SERV_VERS);
(Kerberos ne tient pas compte du paramètre req_time, mais d'autres systèmes d'authentification peuvent l'utiliser.)
Pour de plus amples renseignements, consultez la page de manuel rpc_gss_set_svc_name(3N).
Les serveurs doivent pouvoir agir sur le nom de principal d'un client -- par exemple, pour comparer le nom de principal d'un client à une liste de contrôle d'accès, ou pour consulter un justificatif d'identité UNIX relativement à ce client, si un tel justificatif d'identité existe. Ces noms de principal sont conservés sous la forme d'un pointeur de structure rpc_gss_principal_t. (Consultez la page de manuel rpcsec_gss(3N) pour plus de détails sur rpc_gss_principal_t.) Si un serveur veut comparer un nom de principal reçu au nom d'une entité connue, il doit pouvoir générer un nom de principal dans cette forme.
L'appel rpc_gss_get_principal_name() a comme entrées plusieurs paramètres identifiant de manière unique une personne sur un réseau, et génère un nom de principal comme pointeur de structure rpc_gss_principal_t :
rpc_gss_principal_t *principal; rpc_gss_get_principal_name(principal, mécanisme, nom, noeud, domaine), . . .
Voici les arguments de rpc_gss_get_principal_name() :
principal est un pointeur désignant la structure rpc_gss_principal_t à définir.
mécanisme est le mécanisme de sécurité employé (n'oubliez pas que le nom de principal généré dépend du mécanisme).
nom est un nom de personne ou de service, par exemple jean ou nfs, ou même le nom d'une application définie par l'utilisateur.
noeud peut être, par exemple, un nom d'ordinateur UNIX.
domaine peut être, par exemple, un nom de domaine DNS, NIS, ou NIS+, ou un secteur Kerberos.
Chaque mécanisme de sécurité exige des paramètres d'identification différents. Par exemple, Kerberos V5 exige un nom d'utilisateur et, facultativement, des noms de domaine et de noeud qualifiés (dans la terminologie Kerberos, des noms d'hôte et de secteur).
Pour de plus amples renseignements, consultez la page de manuel rpc_gss_get_principal_name(3N).
Les noms de principal sont libérés au moyen de l'appel de bibliothèque free().