struct svc_program *progp;
struct svc_version *versp = NULL; /* compiler food */
struct svc_procedure *procp = NULL;
- struct iovec * argv = &rqstp->rq_arg.head[0];
- struct iovec * resv = &rqstp->rq_res.head[0];
+ struct kvec * argv = &rqstp->rq_arg.head[0];
+ struct kvec * resv = &rqstp->rq_res.head[0];
kxdrproc_t xdr;
u32 *statp;
u32 dir, prog, vers, proc,
auth_stat, rpc_stat;
+ int auth_res;
rpc_stat = rpc_success;
rqstp->rq_vers = vers = ntohl(svc_getu32(argv)); /* version number */
rqstp->rq_proc = proc = ntohl(svc_getu32(argv)); /* procedure number */
+ progp = serv->sv_program;
/*
* Decode auth data, and add verifier to reply buffer.
* We do this before anything else in order to get a decent
* auth verifier.
*/
- switch (svc_authenticate(rqstp, &auth_stat)) {
+ if (progp->pg_authenticate != NULL)
+ auth_res = progp->pg_authenticate(rqstp, &auth_stat);
+ else
+ auth_res = svc_authenticate(rqstp, &auth_stat);
+ switch (auth_res) {
case SVC_OK:
break;
case SVC_GARBAGE:
goto sendit;
}
- progp = serv->sv_program;
if (prog != progp->pg_prog)
goto err_bad_prog;