]> Pileus Git - ~andy/linux/commitdiff
nfsd: Convert idmap to use kuids and kgids
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 2 Feb 2013 11:24:21 +0000 (03:24 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 13 Feb 2013 14:15:49 +0000 (06:15 -0800)
Convert nfsd_map_name_to_uid to return a kuid_t value.
Convert nfsd_map_name_to_gid to return a kgid_t value.
Convert nfsd_map_uid_to_name to take a kuid_t parameter.
Convert nfsd_map_gid_to_name to take a kgid_t paramater.

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/idmap.h
fs/nfsd/nfs4idmap.c

index 9d513efc01baad65a0807284082315c3d5a68206..bf95f6b817a49c36ceb3b1be4af4ab7ea9eaf19b 100644 (file)
@@ -54,9 +54,9 @@ static inline void nfsd_idmap_shutdown(struct net *net)
 }
 #endif
 
-__be32 nfsd_map_name_to_uid(struct svc_rqst *, const char *, size_t, __u32 *);
-__be32 nfsd_map_name_to_gid(struct svc_rqst *, const char *, size_t, __u32 *);
-int nfsd_map_uid_to_name(struct svc_rqst *, __u32, char *);
-int nfsd_map_gid_to_name(struct svc_rqst *, __u32, char *);
+__be32 nfsd_map_name_to_uid(struct svc_rqst *, const char *, size_t, kuid_t *);
+__be32 nfsd_map_name_to_gid(struct svc_rqst *, const char *, size_t, kgid_t *);
+int nfsd_map_uid_to_name(struct svc_rqst *, kuid_t, char *);
+int nfsd_map_gid_to_name(struct svc_rqst *, kgid_t, char *);
 
 #endif /* LINUX_NFSD_IDMAP_H */
index 7e84dfa23d839f4dc772af94ed6197bc5b52ff1b..0ce12346df9c8613bd4cac8b6389a454413f893f 100644 (file)
@@ -625,26 +625,40 @@ do_id_to_name(struct svc_rqst *rqstp, int type, u32 id, char *name)
 
 __be32
 nfsd_map_name_to_uid(struct svc_rqst *rqstp, const char *name, size_t namelen,
-               __u32 *id)
+               kuid_t *uid)
 {
-       return do_name_to_id(rqstp, IDMAP_TYPE_USER, name, namelen, id);
+       __be32 status;
+       u32 id = -1;
+       status = do_name_to_id(rqstp, IDMAP_TYPE_USER, name, namelen, &id);
+       *uid = make_kuid(&init_user_ns, id);
+       if (!uid_valid(*uid))
+               status = nfserr_badowner;
+       return status;
 }
 
 __be32
 nfsd_map_name_to_gid(struct svc_rqst *rqstp, const char *name, size_t namelen,
-               __u32 *id)
+               kgid_t *gid)
 {
-       return do_name_to_id(rqstp, IDMAP_TYPE_GROUP, name, namelen, id);
+       __be32 status;
+       u32 id = -1;
+       status = do_name_to_id(rqstp, IDMAP_TYPE_GROUP, name, namelen, &id);
+       *gid = make_kgid(&init_user_ns, id);
+       if (!gid_valid(*gid))
+               status = nfserr_badowner;
+       return status;
 }
 
 int
-nfsd_map_uid_to_name(struct svc_rqst *rqstp, __u32 id, char *name)
+nfsd_map_uid_to_name(struct svc_rqst *rqstp, kuid_t uid, char *name)
 {
+       u32 id = from_kuid(&init_user_ns, uid);
        return do_id_to_name(rqstp, IDMAP_TYPE_USER, id, name);
 }
 
 int
-nfsd_map_gid_to_name(struct svc_rqst *rqstp, __u32 id, char *name)
+nfsd_map_gid_to_name(struct svc_rqst *rqstp, kgid_t gid, char *name)
 {
+       u32 id = from_kgid(&init_user_ns, gid);
        return do_id_to_name(rqstp, IDMAP_TYPE_GROUP, id, name);
 }