diff options
Diffstat (limited to 'fs/nfsd/auth.c')
| -rw-r--r-- | fs/nfsd/auth.c | 23 | 
1 files changed, 9 insertions, 14 deletions
diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c index 79717a40dab..72f44823adb 100644 --- a/fs/nfsd/auth.c +++ b/fs/nfsd/auth.c @@ -10,7 +10,7 @@ int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp)  	struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors;  	for (f = exp->ex_flavors; f < end; f++) { -		if (f->pseudoflavor == rqstp->rq_flavor) +		if (f->pseudoflavor == rqstp->rq_cred.cr_flavor)  			return f->flags;  	}  	return exp->ex_flags; @@ -24,7 +24,6 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)  	struct cred *new;  	int i;  	int flags = nfsexp_flags(rqstp, exp); -	int ret;  	validate_process_creds(); @@ -46,9 +45,9 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)  		if (!gi)  			goto oom;  	} else if (flags & NFSEXP_ROOTSQUASH) { -		if (!new->fsuid) +		if (uid_eq(new->fsuid, GLOBAL_ROOT_UID))  			new->fsuid = exp->ex_anon_uid; -		if (!new->fsgid) +		if (gid_eq(new->fsgid, GLOBAL_ROOT_GID))  			new->fsgid = exp->ex_anon_gid;  		gi = groups_alloc(rqgi->ngroups); @@ -56,7 +55,7 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)  			goto oom;  		for (i = 0; i < rqgi->ngroups; i++) { -			if (!GROUP_AT(rqgi, i)) +			if (gid_eq(GLOBAL_ROOT_GID, GROUP_AT(rqgi, i)))  				GROUP_AT(gi, i) = exp->ex_anon_gid;  			else  				GROUP_AT(gi, i) = GROUP_AT(rqgi, i); @@ -65,17 +64,15 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)  		gi = get_group_info(rqgi);  	} -	if (new->fsuid == (uid_t) -1) +	if (uid_eq(new->fsuid, INVALID_UID))  		new->fsuid = exp->ex_anon_uid; -	if (new->fsgid == (gid_t) -1) +	if (gid_eq(new->fsgid, INVALID_GID))  		new->fsgid = exp->ex_anon_gid; -	ret = set_groups(new, gi); +	set_groups(new, gi);  	put_group_info(gi); -	if (ret < 0) -		goto error; -	if (new->fsuid) +	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, @@ -87,9 +84,7 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)  	return 0;  oom: -	ret = -ENOMEM; -error:  	abort_creds(new); -	return ret; +	return -ENOMEM;  }  | 
