git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
fs
/
nfsd
/
auth.c
diff --git
a/fs/nfsd/auth.c
b/fs/nfsd/auth.c
index
05822ee
..
76d42df
100644
(file)
--- a/
fs/nfsd/auth.c
+++ b/
fs/nfsd/auth.c
@@
-9,54
+9,55
@@
#include <linux/sunrpc/svc.h>
#include <linux/sunrpc/svcauth.h>
#include <linux/nfsd/nfsd.h>
#include <linux/sunrpc/svc.h>
#include <linux/sunrpc/svcauth.h>
#include <linux/nfsd/nfsd.h>
-#include <linux/vs
erver/xid
.h>
+#include <linux/vs
_tag
.h>
#define CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE))
int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
{
#define CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE))
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) {
int i;
int ret;
if (exp->ex_flags & NFSEXP_ALLSQUASH) {
- 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);
+ cred.cr_uid = exp->ex_anon_uid;
+ cred.cr_gid = exp->ex_anon_gid;
+ cred.cr_group_info = groups_alloc(0);
} else if (exp->ex_flags & NFSEXP_ROOTSQUASH) {
struct group_info *gi;
} 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)
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) = 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);
}
}
-
put_group_info(cred->cr_group_info)
;
- cred->cr_group_info = gi;
- }
+
cred.cr_group_info = gi
;
+ } else
+ get_group_info(cred.cr_group_info);
- if (cred
->
cr_uid != (uid_t) -1)
- current->fsuid = INO
XID_UID(cred->cr_uid, cred->
cr_gid);
+ if (cred
.
cr_uid != (uid_t) -1)
+ current->fsuid = INO
TAG_UID(DX_TAG_NFSD, cred.cr_uid, cred.
cr_gid);
else
current->fsuid = exp->ex_anon_uid;
else
current->fsuid = exp->ex_anon_uid;
- if (cred
->
cr_gid != (gid_t) -1)
- current->fsgid = INO
XID_GID(cred->cr_uid, cred->
cr_gid);
+ if (cred
.
cr_gid != (gid_t) -1)
+ current->fsgid = INO
TAG_GID(DX_TAG_NFSD, cred.cr_uid, cred.
cr_gid);
else
current->fsgid = exp->ex_anon_gid;
else
current->fsgid = exp->ex_anon_gid;
-
- current->xid = INOXID_XID(cred->cr_uid, cred->cr_gid, 0);
- if (!cred->cr_group_info)
+ /* this desperately needs a tag :) */
+ current->xid = (xid_t)INOTAG_TAG(DX_TAG_NFSD, cred.cr_uid, cred.cr_gid, 0);
+
+ if (!cred.cr_group_info)
return -ENOMEM;
return -ENOMEM;
- ret = set_current_groups(cred->cr_group_info);
- if ((cred->cr_uid)) {
+ ret = set_current_groups(cred.cr_group_info);
+ put_group_info(cred.cr_group_info);
+ if (INOTAG_UID(DX_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 &
cap_t(current->cap_effective) &= ~CAP_NFSD_MASK;
} else {
cap_t(current->cap_effective) |= (CAP_NFSD_MASK &