mirror of https://gitee.com/openkylin/linux.git
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:
parent
b5663898ec
commit
65e10f6d0a
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue