diff options
| author | Amar Tumballi <amarts@redhat.com> | 2012-07-26 17:16:00 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2012-08-09 09:38:37 -0700 | 
| commit | a1d071374365a10ebef508c38c39f61da0a0f855 (patch) | |
| tree | 11ef50220d985acfb2dcc12a76b4346ee02d3dc2 | |
| parent | 475efecfba7194c598a94879852bcd37ac2deb5d (diff) | |
acl: enable handling of FMODE_EXEC flag
on linux systems, with open(), we can get below flag as per
'linux/fs.h'.
/* File is opened for execution with sys_execve / sys_uselib */
'#define FMODE_EXEC              ((fmode_t)0x20)'
Instead of adding '#include <linux/fs.h>, its better to copy this
absolute number into other variable because then we have to deal
with declaring fmode_t etc etc..
With the fix, we can handle the file with '0711' permissions in
the same way as backend linux filesystems.
Change-Id: Ib1097fc0d2502af89c92d561eb4123cba15713f5
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 843960
Reviewed-on: http://review.gluster.com/3746
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | libglusterfs/src/glusterfs.h | 8 | ||||
| -rw-r--r-- | rpc/xdr/src/glusterfs3.h | 4 | ||||
| -rw-r--r-- | xlators/system/posix-acl/src/posix-acl.c | 7 | 
3 files changed, 18 insertions, 1 deletions
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index 98c901b9eea..5ce2fe227f4 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -33,6 +33,7 @@  #include <sys/poll.h>  #include <pthread.h> +  #include "list.h"  #include "logging.h" @@ -41,7 +42,12 @@  #ifndef O_LARGEFILE  /* savannah bug #20053, patch for compiling on darwin */ -#define O_LARGEFILE 0 +#define O_LARGEFILE 0100000 /* from bits/fcntl.h */ +#endif + +#ifndef O_FMODE_EXEC +/* redhat bug 843080, added from linux/fs.h */ +#define O_FMODE_EXEC 040 //0x20  #endif  #ifndef O_DIRECT diff --git a/rpc/xdr/src/glusterfs3.h b/rpc/xdr/src/glusterfs3.h index 82a9e200189..df0f1d138fa 100644 --- a/rpc/xdr/src/glusterfs3.h +++ b/rpc/xdr/src/glusterfs3.h @@ -54,6 +54,8 @@  #define GF_O_LARGEFILE     0100000 +#define GF_O_FMODE_EXEC        040 +  #define XLATE_BIT(from, to, bit)    do {                \                  if (from & bit)                         \                          to = to | GF_##bit;             \ @@ -112,6 +114,7 @@ gf_flags_from_flags (uint32_t flags)          XLATE_BIT (flags, gf_flags, O_CLOEXEC);  #endif          XLATE_BIT (flags, gf_flags, O_LARGEFILE); +        XLATE_BIT (flags, gf_flags, O_FMODE_EXEC);          return gf_flags;  } @@ -142,6 +145,7 @@ gf_flags_to_flags (uint32_t gf_flags)          UNXLATE_BIT (gf_flags, flags, O_CLOEXEC);  #endif          UNXLATE_BIT (gf_flags, flags, O_LARGEFILE); +        UNXLATE_BIT (gf_flags, flags, O_FMODE_EXEC);          return flags;  } diff --git a/xlators/system/posix-acl/src/posix-acl.c b/xlators/system/posix-acl/src/posix-acl.c index f2fe7d9c4c5..11653c9230f 100644 --- a/xlators/system/posix-acl/src/posix-acl.c +++ b/xlators/system/posix-acl/src/posix-acl.c @@ -919,6 +919,13 @@ posix_acl_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,          switch (flags & O_ACCMODE) {          case O_RDONLY:                  perm = POSIX_ACL_READ; + +                /* If O_FMODE_EXEC is present, its good enough +                   to have '--x' perm, and its not covered in +                   O_ACCMODE bits */ +                if (flags & O_FMODE_EXEC) +                        perm = POSIX_ACL_EXECUTE; +                  break;          case O_WRONLY:          case O_APPEND:  | 
