diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/export.c | 15 | ||||
-rw-r--r-- | fs/nfsd/nfs4idmap.c | 13 | ||||
-rw-r--r-- | fs/nfsd/nfsfh.c | 2 |
3 files changed, 22 insertions, 8 deletions
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index 9b569af695ab..ac225a79376c 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c | |||
@@ -1237,21 +1237,28 @@ struct svc_export * | |||
1237 | rqst_exp_get_by_name(struct svc_rqst *rqstp, struct vfsmount *mnt, | 1237 | rqst_exp_get_by_name(struct svc_rqst *rqstp, struct vfsmount *mnt, |
1238 | struct dentry *dentry) | 1238 | struct dentry *dentry) |
1239 | { | 1239 | { |
1240 | return exp_get_by_name(rqstp->rq_client, mnt, dentry, | 1240 | struct auth_domain *clp; |
1241 | &rqstp->rq_chandle); | 1241 | |
1242 | clp = rqstp->rq_gssclient ? rqstp->rq_gssclient : rqstp->rq_client; | ||
1243 | return exp_get_by_name(clp, mnt, dentry, &rqstp->rq_chandle); | ||
1242 | } | 1244 | } |
1243 | 1245 | ||
1244 | struct svc_export * | 1246 | struct svc_export * |
1245 | rqst_exp_find(struct svc_rqst *rqstp, int fsid_type, u32 *fsidv) | 1247 | rqst_exp_find(struct svc_rqst *rqstp, int fsid_type, u32 *fsidv) |
1246 | { | 1248 | { |
1247 | return exp_find(rqstp->rq_client, fsid_type, fsidv, | 1249 | struct auth_domain *clp; |
1248 | &rqstp->rq_chandle); | 1250 | |
1251 | clp = rqstp->rq_gssclient ? rqstp->rq_gssclient : rqstp->rq_client; | ||
1252 | return exp_find(clp, fsid_type, fsidv, &rqstp->rq_chandle); | ||
1249 | } | 1253 | } |
1250 | 1254 | ||
1251 | struct svc_export * | 1255 | struct svc_export * |
1252 | rqst_exp_parent(struct svc_rqst *rqstp, struct vfsmount *mnt, | 1256 | rqst_exp_parent(struct svc_rqst *rqstp, struct vfsmount *mnt, |
1253 | struct dentry *dentry) | 1257 | struct dentry *dentry) |
1254 | { | 1258 | { |
1259 | struct auth_domain *clp; | ||
1260 | |||
1261 | clp = rqstp->rq_gssclient ? rqstp->rq_gssclient : rqstp->rq_client; | ||
1255 | return exp_parent(rqstp->rq_client, mnt, dentry, &rqstp->rq_chandle); | 1262 | return exp_parent(rqstp->rq_client, mnt, dentry, &rqstp->rq_chandle); |
1256 | } | 1263 | } |
1257 | 1264 | ||
diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c index 45aa21ce6784..2cf9a9a2d89c 100644 --- a/fs/nfsd/nfs4idmap.c +++ b/fs/nfsd/nfs4idmap.c | |||
@@ -587,6 +587,15 @@ idmap_lookup(struct svc_rqst *rqstp, | |||
587 | return ret; | 587 | return ret; |
588 | } | 588 | } |
589 | 589 | ||
590 | static char * | ||
591 | rqst_authname(struct svc_rqst *rqstp) | ||
592 | { | ||
593 | struct auth_domain *clp; | ||
594 | |||
595 | clp = rqstp->rq_gssclient ? rqstp->rq_gssclient : rqstp->rq_client; | ||
596 | return clp->name; | ||
597 | } | ||
598 | |||
590 | static int | 599 | static int |
591 | idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen, | 600 | idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen, |
592 | uid_t *id) | 601 | uid_t *id) |
@@ -600,7 +609,7 @@ idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen | |||
600 | return -EINVAL; | 609 | return -EINVAL; |
601 | memcpy(key.name, name, namelen); | 610 | memcpy(key.name, name, namelen); |
602 | key.name[namelen] = '\0'; | 611 | key.name[namelen] = '\0'; |
603 | strlcpy(key.authname, rqstp->rq_client->name, sizeof(key.authname)); | 612 | strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname)); |
604 | ret = idmap_lookup(rqstp, nametoid_lookup, &key, &nametoid_cache, &item); | 613 | ret = idmap_lookup(rqstp, nametoid_lookup, &key, &nametoid_cache, &item); |
605 | if (ret == -ENOENT) | 614 | if (ret == -ENOENT) |
606 | ret = -ESRCH; /* nfserr_badname */ | 615 | ret = -ESRCH; /* nfserr_badname */ |
@@ -620,7 +629,7 @@ idmap_id_to_name(struct svc_rqst *rqstp, int type, uid_t id, char *name) | |||
620 | }; | 629 | }; |
621 | int ret; | 630 | int ret; |
622 | 631 | ||
623 | strlcpy(key.authname, rqstp->rq_client->name, sizeof(key.authname)); | 632 | strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname)); |
624 | ret = idmap_lookup(rqstp, idtoname_lookup, &key, &idtoname_cache, &item); | 633 | ret = idmap_lookup(rqstp, idtoname_lookup, &key, &idtoname_cache, &item); |
625 | if (ret == -ENOENT) | 634 | if (ret == -ENOENT) |
626 | return sprintf(name, "%u", id); | 635 | return sprintf(name, "%u", id); |
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c index 180e068ea064..22cb5be79ad0 100644 --- a/fs/nfsd/nfsfh.c +++ b/fs/nfsd/nfsfh.c | |||
@@ -120,8 +120,6 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access) | |||
120 | int data_left = fh->fh_size/4; | 120 | int data_left = fh->fh_size/4; |
121 | 121 | ||
122 | error = nfserr_stale; | 122 | error = nfserr_stale; |
123 | if (rqstp->rq_client == NULL) | ||
124 | goto out; | ||
125 | if (rqstp->rq_vers > 2) | 123 | if (rqstp->rq_vers > 2) |
126 | error = nfserr_badhandle; | 124 | error = nfserr_badhandle; |
127 | if (rqstp->rq_vers == 4 && fh->fh_size == 0) | 125 | if (rqstp->rq_vers == 4 && fh->fh_size == 0) |