X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fnfsd%2Fauth.c;h=672a9b1ee42023ee320772c6d014d90a9624b464;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=d947261c8cbaca55481a538e9e15f98a54b0dd75;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c index d947261c8..672a9b1ee 100644 --- a/fs/nfsd/auth.c +++ b/fs/nfsd/auth.c @@ -15,49 +15,48 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp) { - struct svc_cred cred = rqstp->rq_cred; + struct svc_cred *cred = &rqstp->rq_cred; int i; int ret; if (exp->ex_flags & NFSEXP_ALLSQUASH) { - cred.cr_uid = exp->ex_anon_uid; - cred.cr_gid = exp->ex_anon_gid; - cred.cr_group_info = groups_alloc(0); + cred->cr_uid = exp->ex_anon_uid; + cred->cr_gid = exp->ex_anon_gid; + put_group_info(cred->cr_group_info); + cred->cr_group_info = groups_alloc(0); } else if (exp->ex_flags & NFSEXP_ROOTSQUASH) { struct group_info *gi; - if (!cred.cr_uid) - cred.cr_uid = exp->ex_anon_uid; - if (!cred.cr_gid) - cred.cr_gid = exp->ex_anon_gid; - gi = groups_alloc(cred.cr_group_info->ngroups); + if (!cred->cr_uid) + cred->cr_uid = exp->ex_anon_uid; + if (!cred->cr_gid) + cred->cr_gid = exp->ex_anon_gid; + gi = groups_alloc(cred->cr_group_info->ngroups); if (gi) - for (i = 0; i < cred.cr_group_info->ngroups; i++) { - if (!GROUP_AT(cred.cr_group_info, i)) + for (i = 0; i < cred->cr_group_info->ngroups; i++) { + if (!GROUP_AT(cred->cr_group_info, i)) GROUP_AT(gi, i) = exp->ex_anon_gid; else - GROUP_AT(gi, i) = GROUP_AT(cred.cr_group_info, i); + GROUP_AT(gi, i) = GROUP_AT(cred->cr_group_info, i); } - cred.cr_group_info = gi; - } else - get_group_info(cred.cr_group_info); + put_group_info(cred->cr_group_info); + cred->cr_group_info = gi; + } - if (cred.cr_uid != (uid_t) -1) - current->fsuid = INOXID_UID(XID_TAG_NFSD, cred.cr_uid, cred.cr_gid); + if (cred->cr_uid != (uid_t) -1) + current->fsuid = INOXID_UID(XID_TAG_NFSD, cred->cr_uid, cred->cr_gid); else current->fsuid = exp->ex_anon_uid; - if (cred.cr_gid != (gid_t) -1) - current->fsgid = INOXID_GID(XID_TAG_NFSD, cred.cr_uid, cred.cr_gid); + if (cred->cr_gid != (gid_t) -1) + current->fsgid = INOXID_GID(XID_TAG_NFSD, cred->cr_uid, cred->cr_gid); else current->fsgid = exp->ex_anon_gid; - /* this desperately needs a tag :) */ - current->xid = INOXID_XID(XID_TAG_NFSD, cred.cr_uid, cred.cr_gid, 0); + current->xid = INOXID_XID(XID_TAG_NFSD, cred->cr_uid, cred->cr_gid, 0); - if (!cred.cr_group_info) + if (!cred->cr_group_info) return -ENOMEM; - ret = set_current_groups(cred.cr_group_info); - put_group_info(cred.cr_group_info); - if (INOXID_UID(XID_TAG_NFSD, cred.cr_uid, cred.cr_gid)) { + ret = set_current_groups(cred->cr_group_info); + if (INOXID_UID(XID_TAG_NFSD, cred->cr_uid, cred->cr_gid)) { cap_t(current->cap_effective) &= ~CAP_NFSD_MASK; } else { cap_t(current->cap_effective) |= (CAP_NFSD_MASK &