The client create routines do not have any facilities for client authentication. Some clients might have to authenticate themselves to the server.
The following example illustrates one of the least secure authentication methods in common use. See Authentication for information on more secure authentication techniques.
CLIENT *clnt; clnt = clnt_create( "somehost", SOMEPROG, SOMEVERS, "visible" ); if (clnt != (CLIENT *)NULL) { /* To set AUTH_SYS style authentication */ clnt->cl_auth = authsys_createdefault(); }
Authentication information is important to servers that have to achieve some level of security. This extra information is supplied to the server as a second argument.
The following example is for a server that checks client authentication data. It is modified from printmessage_1() in rpcgen Tutorial. The code allows only superusers to print a message to the console.
int * printmessage_1(msg, req) char **msg; struct svc_req *req; { static int result; /* Must be static */ FILE *f; struct authsys_parms *aup; aup = (struct authsys_parms *)req->rq_clntcred; if (aup->aup_uid != 0) { result = 0; return (&result) } /* Same code as before. */ }