X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsunrpc%2Fsvc.c;h=8c5b0517db7fe58dbba43e1de5e510c0a1ef2d89;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=db65a24a165887b6b9332124b59767743a70f3aa;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index db65a24a1..8c5b0517d 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -263,6 +263,7 @@ svc_process(struct svc_serv *serv, struct svc_rqst *rqstp) u32 *statp; u32 dir, prog, vers, proc, auth_stat, rpc_stat; + int auth_res; rpc_stat = rpc_success; @@ -304,12 +305,17 @@ svc_process(struct svc_serv *serv, struct svc_rqst *rqstp) 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: @@ -326,7 +332,6 @@ svc_process(struct svc_serv *serv, struct svc_rqst *rqstp) goto sendit; } - progp = serv->sv_program; if (prog != progp->pg_prog) goto err_bad_prog;