lkml.org 
[lkml]   [2013]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH review 64/85] nfsd: Convert idmap to use kuids and kgids
    From: "Eric W. Biederman" <ebiederm@xmission.com>

    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 | 8 ++++----
    fs/nfsd/nfs4idmap.c | 26 ++++++++++++++++++++------
    2 files changed, 24 insertions(+), 10 deletions(-)

    diff --git a/fs/nfsd/idmap.h b/fs/nfsd/idmap.h
    index 9d513ef..bf95f6b 100644
    --- a/fs/nfsd/idmap.h
    +++ b/fs/nfsd/idmap.h
    @@ -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 */
    diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c
    index 7e84dfa..0ce1234 100644
    --- a/fs/nfsd/nfs4idmap.c
    +++ b/fs/nfsd/nfs4idmap.c
    @@ -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);
    }
    --
    1.7.5.4


    \
     
     \ /
      Last update: 2013-02-13 20:22    [W:32.073 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site