diff options
Diffstat (limited to 'fs/nfsd/auth.c')
-rw-r--r-- | fs/nfsd/auth.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c index 294992e9bf69..808fc03a6fbd 100644 --- a/fs/nfsd/auth.c +++ b/fs/nfsd/auth.c | |||
@@ -27,6 +27,7 @@ int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp) | |||
27 | 27 | ||
28 | int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) | 28 | int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) |
29 | { | 29 | { |
30 | struct cred *act_as = current->cred ; | ||
30 | struct svc_cred cred = rqstp->rq_cred; | 31 | struct svc_cred cred = rqstp->rq_cred; |
31 | int i; | 32 | int i; |
32 | int flags = nfsexp_flags(rqstp, exp); | 33 | int flags = nfsexp_flags(rqstp, exp); |
@@ -55,25 +56,26 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) | |||
55 | get_group_info(cred.cr_group_info); | 56 | get_group_info(cred.cr_group_info); |
56 | 57 | ||
57 | if (cred.cr_uid != (uid_t) -1) | 58 | if (cred.cr_uid != (uid_t) -1) |
58 | current->fsuid = cred.cr_uid; | 59 | act_as->fsuid = cred.cr_uid; |
59 | else | 60 | else |
60 | current->fsuid = exp->ex_anon_uid; | 61 | act_as->fsuid = exp->ex_anon_uid; |
61 | if (cred.cr_gid != (gid_t) -1) | 62 | if (cred.cr_gid != (gid_t) -1) |
62 | current->fsgid = cred.cr_gid; | 63 | act_as->fsgid = cred.cr_gid; |
63 | else | 64 | else |
64 | current->fsgid = exp->ex_anon_gid; | 65 | act_as->fsgid = exp->ex_anon_gid; |
65 | 66 | ||
66 | if (!cred.cr_group_info) | 67 | if (!cred.cr_group_info) |
67 | return -ENOMEM; | 68 | return -ENOMEM; |
68 | ret = set_current_groups(cred.cr_group_info); | 69 | ret = set_groups(act_as, cred.cr_group_info); |
69 | put_group_info(cred.cr_group_info); | 70 | put_group_info(cred.cr_group_info); |
70 | if ((cred.cr_uid)) { | 71 | if ((cred.cr_uid)) { |
71 | current->cap_effective = | 72 | act_as->cap_effective = |
72 | cap_drop_nfsd_set(current->cap_effective); | 73 | cap_drop_nfsd_set(act_as->cap_effective); |
73 | } else { | 74 | } else { |
74 | current->cap_effective = | 75 | act_as->cap_effective = |
75 | cap_raise_nfsd_set(current->cap_effective, | 76 | cap_raise_nfsd_set(act_as->cap_effective, |
76 | current->cap_permitted); | 77 | act_as->cap_permitted); |
77 | } | 78 | } |
78 | return ret; | 79 | return ret; |
79 | } | 80 | } |
81 | |||