aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/nfsd/export.c15
-rw-r--r--fs/nfsd/nfs4idmap.c13
-rw-r--r--fs/nfsd/nfsfh.c2
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 *
1237rqst_exp_get_by_name(struct svc_rqst *rqstp, struct vfsmount *mnt, 1237rqst_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
1244struct svc_export * 1246struct svc_export *
1245rqst_exp_find(struct svc_rqst *rqstp, int fsid_type, u32 *fsidv) 1247rqst_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
1251struct svc_export * 1255struct svc_export *
1252rqst_exp_parent(struct svc_rqst *rqstp, struct vfsmount *mnt, 1256rqst_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
590static char *
591rqst_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
590static int 599static int
591idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen, 600idmap_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)