diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-04-12 16:54:43 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-04-12 16:54:43 -0400 |
| commit | a890b15c0990cc8d686edcc85f5fccde71ad5ce9 (patch) | |
| tree | 73162355b58283a2531f13fbbf663809f95c1483 /fs/nfsd/auth.c | |
| parent | 79fa1b677be3a985cc66b9218a4dd09818f1051b (diff) | |
| parent | 26ec634c31a11a003040e10b4d650495158632fd (diff) | |
Merge branch 'upstream'
Diffstat (limited to 'fs/nfsd/auth.c')
| -rw-r--r-- | fs/nfsd/auth.c | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c index cfe9ce881613..6e92b0fe5323 100644 --- a/fs/nfsd/auth.c +++ b/fs/nfsd/auth.c | |||
| @@ -14,46 +14,46 @@ | |||
| 14 | 14 | ||
| 15 | int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) | 15 | int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) |
| 16 | { | 16 | { |
| 17 | struct svc_cred *cred = &rqstp->rq_cred; | 17 | struct svc_cred cred = rqstp->rq_cred; |
| 18 | int i; | 18 | int i; |
| 19 | int ret; | 19 | int ret; |
| 20 | 20 | ||
| 21 | if (exp->ex_flags & NFSEXP_ALLSQUASH) { | 21 | if (exp->ex_flags & NFSEXP_ALLSQUASH) { |
| 22 | cred->cr_uid = exp->ex_anon_uid; | 22 | cred.cr_uid = exp->ex_anon_uid; |
| 23 | cred->cr_gid = exp->ex_anon_gid; | 23 | cred.cr_gid = exp->ex_anon_gid; |
| 24 | put_group_info(cred->cr_group_info); | 24 | cred.cr_group_info = groups_alloc(0); |
| 25 | cred->cr_group_info = groups_alloc(0); | ||
| 26 | } else if (exp->ex_flags & NFSEXP_ROOTSQUASH) { | 25 | } else if (exp->ex_flags & NFSEXP_ROOTSQUASH) { |
| 27 | struct group_info *gi; | 26 | struct group_info *gi; |
| 28 | if (!cred->cr_uid) | 27 | if (!cred.cr_uid) |
| 29 | cred->cr_uid = exp->ex_anon_uid; | 28 | cred.cr_uid = exp->ex_anon_uid; |
| 30 | if (!cred->cr_gid) | 29 | if (!cred.cr_gid) |
| 31 | cred->cr_gid = exp->ex_anon_gid; | 30 | cred.cr_gid = exp->ex_anon_gid; |
| 32 | gi = groups_alloc(cred->cr_group_info->ngroups); | 31 | gi = groups_alloc(cred.cr_group_info->ngroups); |
| 33 | if (gi) | 32 | if (gi) |
| 34 | for (i = 0; i < cred->cr_group_info->ngroups; i++) { | 33 | for (i = 0; i < cred.cr_group_info->ngroups; i++) { |
| 35 | if (!GROUP_AT(cred->cr_group_info, i)) | 34 | if (!GROUP_AT(cred.cr_group_info, i)) |
| 36 | GROUP_AT(gi, i) = exp->ex_anon_gid; | 35 | GROUP_AT(gi, i) = exp->ex_anon_gid; |
| 37 | else | 36 | else |
| 38 | GROUP_AT(gi, i) = GROUP_AT(cred->cr_group_info, i); | 37 | GROUP_AT(gi, i) = GROUP_AT(cred.cr_group_info, i); |
| 39 | } | 38 | } |
| 40 | put_group_info(cred->cr_group_info); | 39 | cred.cr_group_info = gi; |
| 41 | cred->cr_group_info = gi; | 40 | } else |
| 42 | } | 41 | get_group_info(cred.cr_group_info); |
| 43 | 42 | ||
| 44 | if (cred->cr_uid != (uid_t) -1) | 43 | if (cred.cr_uid != (uid_t) -1) |
| 45 | current->fsuid = cred->cr_uid; | 44 | current->fsuid = cred.cr_uid; |
| 46 | else | 45 | else |
| 47 | current->fsuid = exp->ex_anon_uid; | 46 | current->fsuid = exp->ex_anon_uid; |
| 48 | if (cred->cr_gid != (gid_t) -1) | 47 | if (cred.cr_gid != (gid_t) -1) |
| 49 | current->fsgid = cred->cr_gid; | 48 | current->fsgid = cred.cr_gid; |
| 50 | else | 49 | else |
| 51 | current->fsgid = exp->ex_anon_gid; | 50 | current->fsgid = exp->ex_anon_gid; |
| 52 | 51 | ||
| 53 | if (!cred->cr_group_info) | 52 | if (!cred.cr_group_info) |
| 54 | return -ENOMEM; | 53 | return -ENOMEM; |
| 55 | ret = set_current_groups(cred->cr_group_info); | 54 | ret = set_current_groups(cred.cr_group_info); |
| 56 | if ((cred->cr_uid)) { | 55 | put_group_info(cred.cr_group_info); |
| 56 | if ((cred.cr_uid)) { | ||
| 57 | cap_t(current->cap_effective) &= ~CAP_NFSD_MASK; | 57 | cap_t(current->cap_effective) &= ~CAP_NFSD_MASK; |
| 58 | } else { | 58 | } else { |
| 59 | cap_t(current->cap_effective) |= (CAP_NFSD_MASK & | 59 | cap_t(current->cap_effective) |= (CAP_NFSD_MASK & |
