From: NeilBrown <neilb@cse.unsw.edu.au>
The credentials (uid/gid) of a process are set when a filehandle is
verified. Nfsv4 allows requests without an explicit filehandle (instead,
an implicit 'root' filehandle) so we much make sure the credentials are set
for these requests too.
From: "J. Bruce Fields" <bfields@fieldses.org>
From: Andros: added a call to nfsd_setuser in nfsd4_putrootfh so that nfsd
runs as the rpc->cred user.
static inline int
nfsd4_putrootfh(struct svc_rqst *rqstp, struct svc_fh *current_fh)
{
+ int status;
+
fh_put(current_fh);
- return exp_pseudoroot(rqstp->rq_client, current_fh,
+ status = exp_pseudoroot(rqstp->rq_client, current_fh,
&rqstp->rq_chandle);
+ if (!status)
+ status = nfsd_setuser(rqstp, current_fh->fh_export);
+ return status;
}
static inline int