From d53b07fef8be65763b5b03ecd99ac36c86f3a277 Mon Sep 17 00:00:00 2001 From: shishir gowda Date: Thu, 7 Jul 2011 04:57:27 +0000 Subject: NFS access control list: Decode the NFS requests into mode format Signed-off-by: shishir gowda Signed-off-by: Vijay Bellur BUG: 3057 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3057 --- xlators/nfs/server/src/nfs-fops.c | 6 ++++-- xlators/nfs/server/src/nfs3-helpers.c | 15 +++++++++++++++ xlators/nfs/server/src/nfs3-helpers.h | 3 +++ 3 files changed, 22 insertions(+), 2 deletions(-) (limited to 'xlators') diff --git a/xlators/nfs/server/src/nfs-fops.c b/xlators/nfs/server/src/nfs-fops.c index 0a0e01fc9..7150cc468 100644 --- a/xlators/nfs/server/src/nfs-fops.c +++ b/xlators/nfs/server/src/nfs-fops.c @@ -31,7 +31,7 @@ #include "nfs-fops.h" #include "inode.h" #include "nfs-common.h" - +#include "nfs3-helpers.h" #include #include @@ -375,6 +375,7 @@ nfs_fop_access (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, call_frame_t *frame = NULL; int ret = -EFAULT; struct nfs_fop_local *nfl = NULL; + uint32_t accessbits = 0; if ((!xl) || (!loc) || (!nfu)) return ret; @@ -384,8 +385,9 @@ nfs_fop_access (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, loc_t *loc, nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err); nfs_fop_save_root_ino (nfl, loc); + accessbits = nfs3_request_to_accessbits (accesstest); STACK_WIND_COOKIE (frame, nfs_fop_access_cbk, xl, xl, xl->fops->access, - loc, accesstest); + loc, accessbits); ret = 0; err: if (ret < 0) { diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c index caeff9261..523fdaee9 100644 --- a/xlators/nfs/server/src/nfs3-helpers.c +++ b/xlators/nfs/server/src/nfs3-helpers.c @@ -586,7 +586,22 @@ nfs3_accessbits (int32_t accbits) return accresult; } +uint32_t +nfs3_request_to_accessbits (int32_t accbits) +{ + uint32_t acc_request = 0; + + if (accbits & (ACCESS3_READ | ACCESS3_LOOKUP)) + acc_request |= POSIX_READ; + if (accbits & (ACCESS3_MODIFY | ACCESS3_EXTEND)) + acc_request |= POSIX_WRITE; + + if (accbits & ACCESS3_EXECUTE) + acc_request |= POSIX_EXEC; + + return acc_request; +} void nfs3_fill_access3res (access3res *res, nfsstat3 status, int32_t accbits) { diff --git a/xlators/nfs/server/src/nfs3-helpers.h b/xlators/nfs/server/src/nfs3-helpers.h index 73bb4b720..302d731d1 100644 --- a/xlators/nfs/server/src/nfs3-helpers.h +++ b/xlators/nfs/server/src/nfs3-helpers.h @@ -344,4 +344,7 @@ nfs3_fdcache_remove (struct nfs3_state *nfs3, fd_t *fd); extern int nfs3_is_parentdir_entry (char *entry); + +uint32_t +nfs3_request_to_accessbits (int32_t accbits); #endif -- cgit