forked from Minki/linux
nfsd: Convert nfs3xdr to use kuids and kgids
When reading uids and gids off the wire convert them to kuids and kgids. When putting kuids and kgids onto the wire first convert them to uids and gids the other side will understand. Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
parent
e097258f2e
commit
458878a705
@ -105,12 +105,14 @@ decode_sattr3(__be32 *p, struct iattr *iap)
|
||||
iap->ia_mode = ntohl(*p++);
|
||||
}
|
||||
if (*p++) {
|
||||
iap->ia_valid |= ATTR_UID;
|
||||
iap->ia_uid = ntohl(*p++);
|
||||
iap->ia_uid = make_kuid(&init_user_ns, ntohl(*p++));
|
||||
if (uid_valid(iap->ia_uid))
|
||||
iap->ia_valid |= ATTR_UID;
|
||||
}
|
||||
if (*p++) {
|
||||
iap->ia_valid |= ATTR_GID;
|
||||
iap->ia_gid = ntohl(*p++);
|
||||
iap->ia_gid = make_kgid(&init_user_ns, ntohl(*p++));
|
||||
if (gid_valid(iap->ia_gid))
|
||||
iap->ia_valid |= ATTR_GID;
|
||||
}
|
||||
if (*p++) {
|
||||
u64 newsize;
|
||||
@ -167,8 +169,8 @@ encode_fattr3(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp,
|
||||
*p++ = htonl(nfs3_ftypes[(stat->mode & S_IFMT) >> 12]);
|
||||
*p++ = htonl((u32) stat->mode);
|
||||
*p++ = htonl((u32) stat->nlink);
|
||||
*p++ = htonl((u32) stat->uid);
|
||||
*p++ = htonl((u32) stat->gid);
|
||||
*p++ = htonl((u32) from_kuid(&init_user_ns, stat->uid));
|
||||
*p++ = htonl((u32) from_kgid(&init_user_ns, stat->gid));
|
||||
if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) {
|
||||
p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user