Release 4.15 fs/nfsd/auth.c
// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> */
#include <linux/sched.h>
#include "nfsd.h"
#include "auth.h"
int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp)
{
struct exp_flavor_info *f;
struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors;
for (f = exp->ex_flavors; f < end; f++) {
if (f->pseudoflavor == rqstp->rq_cred.cr_flavor)
return f->flags;
}
return exp->ex_flags;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| J. Bruce Fields | 72 | 100.00% | 2 | 100.00% |
| Total | 72 | 100.00% | 2 | 100.00% |
int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
{
struct group_info *rqgi;
struct group_info *gi;
struct cred *new;
int i;
int flags = nfsexp_flags(rqstp, exp);
validate_process_creds();
/* discard any old override before preparing the new set */
revert_creds(get_cred(current_real_cred()));
new = prepare_creds();
if (!new)
return -ENOMEM;
new->fsuid = rqstp->rq_cred.cr_uid;
new->fsgid = rqstp->rq_cred.cr_gid;
rqgi = rqstp->rq_cred.cr_group_info;
if (flags & NFSEXP_ALLSQUASH) {
new->fsuid = exp->ex_anon_uid;
new->fsgid = exp->ex_anon_gid;
gi = groups_alloc(0);
if (!gi)
goto oom;
} else if (flags & NFSEXP_ROOTSQUASH) {
if (uid_eq(new->fsuid, GLOBAL_ROOT_UID))
new->fsuid = exp->ex_anon_uid;
if (gid_eq(new->fsgid, GLOBAL_ROOT_GID))
new->fsgid = exp->ex_anon_gid;
gi = groups_alloc(rqgi->ngroups);
if (!gi)
goto oom;
for (i = 0; i < rqgi->ngroups; i++) {
if (gid_eq(GLOBAL_ROOT_GID, rqgi->gid[i]))
gi->gid[i] = exp->ex_anon_gid;
else
gi->gid[i] = rqgi->gid[i];
}
/* Each thread allocates its own gi, no race */
groups_sort(gi);
} else {
gi = get_group_info(rqgi);
}
if (uid_eq(new->fsuid, INVALID_UID))
new->fsuid = exp->ex_anon_uid;
if (gid_eq(new->fsgid, INVALID_GID))
new->fsgid = exp->ex_anon_gid;
set_groups(new, gi);
put_group_info(gi);
if (!uid_eq(new->fsuid, GLOBAL_ROOT_UID))
new->cap_effective = cap_drop_nfsd_set(new->cap_effective);
else
new->cap_effective = cap_raise_nfsd_set(new->cap_effective,
new->cap_permitted);
validate_process_creds();
put_cred(override_creds(new));
put_cred(new);
validate_process_creds();
return 0;
oom:
abort_creds(new);
return -ENOMEM;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| David Howells | 143 | 36.11% | 5 | 21.74% |
| Linus Torvalds (pre-git) | 118 | 29.80% | 3 | 13.04% |
| Andrew Morton | 34 | 8.59% | 3 | 13.04% |
| Eric W. Biedermann | 31 | 7.83% | 2 | 8.70% |
| J. Bruce Fields | 24 | 6.06% | 3 | 13.04% |
| Alexey Dobriyan | 16 | 4.04% | 1 | 4.35% |
| Andrew G. Morgan | 10 | 2.53% | 1 | 4.35% |
| Neil Brown | 9 | 2.27% | 1 | 4.35% |
| Thiago Rafael Becker | 6 | 1.52% | 1 | 4.35% |
| Kinglong Mee | 2 | 0.51% | 1 | 4.35% |
| Jeff Layton | 2 | 0.51% | 1 | 4.35% |
| Ben Hutchings | 1 | 0.25% | 1 | 4.35% |
| Total | 396 | 100.00% | 23 | 100.00% |
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| David Howells | 143 | 29.85% | 5 | 17.24% |
| Linus Torvalds (pre-git) | 123 | 25.68% | 3 | 10.34% |
| J. Bruce Fields | 99 | 20.67% | 6 | 20.69% |
| Andrew Morton | 34 | 7.10% | 3 | 10.34% |
| Eric W. Biedermann | 31 | 6.47% | 2 | 6.90% |
| Alexey Dobriyan | 16 | 3.34% | 1 | 3.45% |
| Andrew G. Morgan | 10 | 2.09% | 1 | 3.45% |
| Neil Brown | 9 | 1.88% | 1 | 3.45% |
| Thiago Rafael Becker | 6 | 1.25% | 1 | 3.45% |
| Kinglong Mee | 2 | 0.42% | 1 | 3.45% |
| Jeff Layton | 2 | 0.42% | 1 | 3.45% |
| Harvey Harrison | 1 | 0.21% | 1 | 3.45% |
| Boaz Harrosh | 1 | 0.21% | 1 | 3.45% |
| Ben Hutchings | 1 | 0.21% | 1 | 3.45% |
| Greg Kroah-Hartman | 1 | 0.21% | 1 | 3.45% |
| Total | 479 | 100.00% | 29 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.