forked from Minki/linux
nfsd: Store ex_anon_uid and ex_anon_gid as kuids and kgids
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
03bc6d1cc1
commit
4c1e1b34d5
@ -58,7 +58,7 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
|
|||||||
|
|
||||||
for (i = 0; i < rqgi->ngroups; i++) {
|
for (i = 0; i < rqgi->ngroups; i++) {
|
||||||
if (gid_eq(GLOBAL_ROOT_GID, GROUP_AT(rqgi, i)))
|
if (gid_eq(GLOBAL_ROOT_GID, GROUP_AT(rqgi, i)))
|
||||||
GROUP_AT(gi, i) = make_kgid(&init_user_ns, exp->ex_anon_gid);
|
GROUP_AT(gi, i) = exp->ex_anon_gid;
|
||||||
else
|
else
|
||||||
GROUP_AT(gi, i) = GROUP_AT(rqgi, i);
|
GROUP_AT(gi, i) = GROUP_AT(rqgi, i);
|
||||||
}
|
}
|
||||||
|
@ -544,13 +544,17 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)
|
|||||||
err = get_int(&mesg, &an_int);
|
err = get_int(&mesg, &an_int);
|
||||||
if (err)
|
if (err)
|
||||||
goto out3;
|
goto out3;
|
||||||
exp.ex_anon_uid= an_int;
|
exp.ex_anon_uid= make_kuid(&init_user_ns, an_int);
|
||||||
|
if (!uid_valid(exp.ex_anon_uid))
|
||||||
|
goto out3;
|
||||||
|
|
||||||
/* anon gid */
|
/* anon gid */
|
||||||
err = get_int(&mesg, &an_int);
|
err = get_int(&mesg, &an_int);
|
||||||
if (err)
|
if (err)
|
||||||
goto out3;
|
goto out3;
|
||||||
exp.ex_anon_gid= an_int;
|
exp.ex_anon_gid= make_kgid(&init_user_ns, an_int);
|
||||||
|
if (!gid_valid(exp.ex_anon_gid))
|
||||||
|
goto out3;
|
||||||
|
|
||||||
/* fsid */
|
/* fsid */
|
||||||
err = get_int(&mesg, &an_int);
|
err = get_int(&mesg, &an_int);
|
||||||
@ -613,7 +617,7 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void exp_flags(struct seq_file *m, int flag, int fsid,
|
static void exp_flags(struct seq_file *m, int flag, int fsid,
|
||||||
uid_t anonu, uid_t anong, struct nfsd4_fs_locations *fslocs);
|
kuid_t anonu, kgid_t anong, struct nfsd4_fs_locations *fslocs);
|
||||||
static void show_secinfo(struct seq_file *m, struct svc_export *exp);
|
static void show_secinfo(struct seq_file *m, struct svc_export *exp);
|
||||||
|
|
||||||
static int svc_export_show(struct seq_file *m,
|
static int svc_export_show(struct seq_file *m,
|
||||||
@ -1179,15 +1183,17 @@ static void show_secinfo(struct seq_file *m, struct svc_export *exp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void exp_flags(struct seq_file *m, int flag, int fsid,
|
static void exp_flags(struct seq_file *m, int flag, int fsid,
|
||||||
uid_t anonu, uid_t anong, struct nfsd4_fs_locations *fsloc)
|
kuid_t anonu, kgid_t anong, struct nfsd4_fs_locations *fsloc)
|
||||||
{
|
{
|
||||||
show_expflags(m, flag, NFSEXP_ALLFLAGS);
|
show_expflags(m, flag, NFSEXP_ALLFLAGS);
|
||||||
if (flag & NFSEXP_FSID)
|
if (flag & NFSEXP_FSID)
|
||||||
seq_printf(m, ",fsid=%d", fsid);
|
seq_printf(m, ",fsid=%d", fsid);
|
||||||
if (anonu != (uid_t)-2 && anonu != (0x10000-2))
|
if (!uid_eq(anonu, make_kuid(&init_user_ns, (uid_t)-2)) &&
|
||||||
seq_printf(m, ",anonuid=%u", anonu);
|
!uid_eq(anonu, make_kuid(&init_user_ns, 0x10000-2)))
|
||||||
if (anong != (gid_t)-2 && anong != (0x10000-2))
|
seq_printf(m, ",anonuid=%u", from_kuid(&init_user_ns, anonu));
|
||||||
seq_printf(m, ",anongid=%u", anong);
|
if (!gid_eq(anong, make_kgid(&init_user_ns, (gid_t)-2)) &&
|
||||||
|
!gid_eq(anong, make_kgid(&init_user_ns, 0x10000-2)))
|
||||||
|
seq_printf(m, ",anongid=%u", from_kgid(&init_user_ns, anong));
|
||||||
if (fsloc && fsloc->locations_count > 0) {
|
if (fsloc && fsloc->locations_count > 0) {
|
||||||
char *loctype = (fsloc->migrated) ? "refer" : "replicas";
|
char *loctype = (fsloc->migrated) ? "refer" : "replicas";
|
||||||
int i;
|
int i;
|
||||||
|
@ -49,8 +49,8 @@ struct svc_export {
|
|||||||
struct auth_domain * ex_client;
|
struct auth_domain * ex_client;
|
||||||
int ex_flags;
|
int ex_flags;
|
||||||
struct path ex_path;
|
struct path ex_path;
|
||||||
uid_t ex_anon_uid;
|
kuid_t ex_anon_uid;
|
||||||
gid_t ex_anon_gid;
|
kgid_t ex_anon_gid;
|
||||||
int ex_fsid;
|
int ex_fsid;
|
||||||
unsigned char * ex_uuid; /* 16 byte fsid */
|
unsigned char * ex_uuid; /* 16 byte fsid */
|
||||||
struct nfsd4_fs_locations ex_fslocs;
|
struct nfsd4_fs_locations ex_fslocs;
|
||||||
|
Loading…
Reference in New Issue
Block a user