nfsd: Convert idmap to use kuids and kgids

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>
This commit is contained in:
Eric W. Biederman 2013-02-02 03:24:21 -08:00
parent b5663898ec
commit 65e10f6d0a
2 changed files with 24 additions and 10 deletions

View File

@ -54,9 +54,9 @@ static inline void nfsd_idmap_shutdown(struct net *net)
} }
#endif #endif
__be32 nfsd_map_name_to_uid(struct svc_rqst *, const char *, size_t, __u32 *); __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, __u32 *); __be32 nfsd_map_name_to_gid(struct svc_rqst *, const char *, size_t, kgid_t *);
int nfsd_map_uid_to_name(struct svc_rqst *, __u32, char *); int nfsd_map_uid_to_name(struct svc_rqst *, kuid_t, char *);
int nfsd_map_gid_to_name(struct svc_rqst *, __u32, char *); int nfsd_map_gid_to_name(struct svc_rqst *, kgid_t, char *);
#endif /* LINUX_NFSD_IDMAP_H */ #endif /* LINUX_NFSD_IDMAP_H */

View File

@ -625,26 +625,40 @@ do_id_to_name(struct svc_rqst *rqstp, int type, u32 id, char *name)
__be32 __be32
nfsd_map_name_to_uid(struct svc_rqst *rqstp, const char *name, size_t namelen, 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 __be32
nfsd_map_name_to_gid(struct svc_rqst *rqstp, const char *name, size_t namelen, 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 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); return do_id_to_name(rqstp, IDMAP_TYPE_USER, id, name);
} }
int 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); return do_id_to_name(rqstp, IDMAP_TYPE_GROUP, id, name);
} }