Para establecer un contexto de seguridad son necesarios dos tipos de nombres de principal:
Un nombre de principal de servidor. El nombre de principal del servidor siempre se especifica como una cadena ASCII finalizada en valor nulo con el formato servicio@sistema; por ejemplo, nfs@eng.acme.com.
Cuando un cliente crea un contexto de seguridad, especifica el nombre de principal del servidor en este formato (véase "Creación de un contexto"). De forma similar, cuando un servidor necesita el nombre de un principal al que representará, utiliza rpc_gss_set_svc_name(), que toma como argumento un nombre de principal en este formato.
Un nombre de principal de cliente. El nombre de principal de un cliente, tal como lo recibe un principal, tiene el formato de una estructura de nombre de principal rpc_gss_principal_t: una cadena de bytes opacos y contados determinados por el mecanismo utilizado. Esta estructura se describe en la página del comando man rpcsec_gss(3N).
Los servidores necesitan conocer los nombres de los principales a los que representarán cuando se inicien (un servidor puede hacer de más de un principal). rpc_gss_set_svc_name() establece el nombre del principal o principales:
char *principal, *mechanism; u_int req_time; principal = "nfs@eng.acme.com"; mechanism = "kerberos_v5"; req_time = 10000; /* tiempo durante el que debería ser válida la credencial */ rpc_gss_set_svc_name(principal, mechanism, req_time, SERV_PROG, SERV_VERS);
(Kerberos ignora el parámetro req_time. Es posible que otros sistemas de autenticación lo utilicen).
Para obtener más información, véase la página del comando man de rpc_gss_set_svc_name(3N).
Los servidores necesitan poder trabajar con el nombre de principal de un cliente; por ejemplo, para comparar el nombre de principal de un cliente con una lista de control de acceso o para consultar una credencial de UNIX para ese cliente, en caso de que exista. Estos nombres de principal se mantienen en forma de un puntero a una estructura rpc_gss_principal_t. (Para obtener más información sobre rpc_gss_principal_t, véase la página del comando man rpcsec_gss(3N)). Si un servidor desea comparar un nombre de principal recibido con el nombre de una entidad conocida, necesita poder generar un nombre de principal en ese formato.
La llamada rpc_gss_get_principal_name() toma varios parámetros de entrada que identifican de forma única a una persona de la red y genera un nombre de principal como un puntero de estructura rpc_gss_principal_t:
rpc_gss_principal_t *principal; rpc_gss_get_principal_name(principal, mecanismo, nombre, nodo, dominio); . . .
Los argumentos de rpc_gss_get_principal_name() son los siguientes:
principal es un puntero a la estructura rpc_gss_principal_t que se definirá.
mecanismo es el mecanismo de seguridad utilizado (recuerde que el nombre de principal que se está generando depende del mecanismo).
nombre es un nombre de persona o de servicio, como juan o nfs, o incluso el nombre de una aplicación definida por el usuario.
nodo podría ser, por ejemplo, un nombre de máquina de UNIX.
dominio podría ser, por ejemplo, un nombre de dominio de DNS, NIS, o NIS+ o un ámbito de Kerberos.
Cada mecanismo de seguridad necesita parámetros de identificación diferentes. Por ejemplo, Kerberos V5 necesita un nombre de usuario y, sólo de forma opcional, nombres completos de nombre y de dominio (en términos de Kerberos, nombres de sistema y de ámbito).
Para obtener más información, véase la página del comando man de rpc_gss_get_principal_name(3N).
Los nombres de principal se liberan mediante la llamada de biblioteca free().