nfsd: Convert nfs3xdr to use kuids and kgids
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 2 Feb 2013 12:16:08 +0000 (04:16 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 13 Feb 2013 14:16:04 +0000 (06:16 -0800)
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>
fs/nfsd/nfs3xdr.c

index 1884a3fbb584726b41ca515247510539590a1ff1..925c944bc0bc4182eb382547e13cb1a10d59123c 100644 (file)
@@ -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 {
This page took 0.027298 seconds and 5 git commands to generate.