28) Come viene trattato il problema delle autenticazioni nell’RPC?
Per avere sicurezza nell'accesso ai dati nel messaggio di protocollo RPC c’è uno spazio dedicato alle informazioni per autenticare il client presso il server e viceversa.
Come default vale AUTH_NULL (ovvero mancanza di dati per l'identificazione)
Se vale AUTH_UNIX allora si spedisce l'identificazione del mittente, ma non si verificano le credenziali.

Funzioni clnt[udp | tcp]_create() inizializzano l’handle che passa le informazioni di autenticazione.
L'informazione del tipo di autenticazione scelta per l’RPC all'interno del gestore di trasporto del processo client è contenuta nel campo cl_auth con un riferimento al gestore delle autenticazioni
autenticazione AUTH_NULL: clnt->cl_auth = authnone_create();
autenticazione AUTH_UNIX : clnt->cl_auth = authunix_create_default();
Quindi si crea il cient RPC
clnt *CLIENT;
clnt clnt[udp | tcp]_create()(address, prog, vers, wait, sockp);
ogni chiamata RPC nel messaggio di richiesta propone le credenziali:
struct authunix_parms {
u_long aup_time; /* orario di creazione delle credenziali */
char *aup_machname; /* host mittente */
int aup_uid; /* User ID del mittente */
int aup_gid; /* Group ID del mittente */
u_int aup_len; /* numero elementi del campo successivo */
int *aup_gids;} /* vettore di gruppi a cui il mittente appartiene*/
Il contenuto dei campi sopra elencati è assegnato automaticamente dalla funzione authunix_create_default(); per l’inserimento autonomo occorre invece usare la authunix_create()
AUTH * authunix_create(host,uid,gid,len,aup_gids)
char *host;
int uid,gid,len,*aup_gids;
il risultato è un puntatore ad AUTH, rappresentato dal campo cl_auth nel gestore di trasporto.
Necessità di deallocare area occupata usando auth_destroy(clnt->cl_auth) che restituisce un puntatore ad AUTH
Vi sono due campi relativi alle credenziali in svc_req
rq_cred, di tipo opaque_auth
struct opaque_auth {
enum_t oa_flavor; /* formato delle credenziali del mittente RPC */
caddr_t oa_base;
u_int oa_lenght;};
e rq_clntcred, di tipo caddr_t
con i seguenti significati:
il campo rq_cred fornisce l'indicazione del tipo credenziali nel sottocampo oa_flavor
il campo rq_clntcred punta ad una struttura dati con le credenziali nel formato ricavato come sopra:
se il formato è UNIX, il puntatore può subire un casting a authunix_parms
se NULL, il formato non è tenuto in conto