diff options
author | Sachin Pandit <spandit@redhat.com> | 2014-11-25 07:20:38 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-12-01 08:04:06 -0800 |
commit | eee41566697583f74784d9f9ff78651535d6eb91 (patch) | |
tree | b84841671ca459ae8e3e07999d4eb37999af0f9d /xlators | |
parent | a93164cd2a7f7ec37cf30d52b1a73fdc211981c3 (diff) |
USS : fill proper uid and gid during a access call from nfs
Problem : when an user tries to access a file/folder for which
he does not have a proper permission required then fuse gives out
a proper error "Permission denied", but nfs does not give out that
error, rather he can access the file/folder. The reason being uid and
gid of call frame stack takes a default value of uid and gid which
point to root permission.
Solution : Set a proper uid and gid during a access call from nfs
Change-Id: Ib060706fde66ec7e60f242fab1f3e59122ed2245
BUG: 1167580
Signed-off-by: Sachin Pandit <spandit@redhat.com>
Reviewed-on: http://review.gluster.org/9194
Reviewed-by: Vijaikumar Mallikarjuna <vmallika@redhat.com>
Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/snapview-server/src/snapview-server.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/xlators/features/snapview-server/src/snapview-server.c b/xlators/features/snapview-server/src/snapview-server.c index d66150e769a..8655bf5636c 100644 --- a/xlators/features/snapview-server/src/snapview-server.c +++ b/xlators/features/snapview-server/src/snapview-server.c @@ -2016,8 +2016,13 @@ svs_access (call_frame_t *frame, xlator_t *this, loc_t *loc, int mask, fuse and nfs. So set frame->root->pid as fspid of the syncop if the call came from nfs */ - if (!is_fuse_call) + if (!is_fuse_call) { syncopctx_setfspid (&frame->root->pid); + syncopctx_setfsuid (&frame->root->uid); + syncopctx_setfsgid (&frame->root->gid); + syncopctx_setfsgroups (frame->root->ngrps, + frame->root->groups); + } ret = glfs_h_access (fs, object, mask); if (ret < 0) { |