summaryrefslogtreecommitdiffstats
path: root/xlators/system
diff options
context:
space:
mode:
authorJiffin Tony Thottan <jthottan@redhat.com>2016-11-17 18:22:39 +0530
committerKaleb KEITHLEY <kkeithle@redhat.com>2016-12-14 05:01:07 -0800
commite81fd0b85c8dd3f521e54e32b7da2f99a513f2f2 (patch)
tree4b5a7e9f7d528dcb156f4628b5bba0fa88b6ef59 /xlators/system
parentff2a58d784bc20ccafab8183d82787ceb8ac471b (diff)
access_control : address O_TRUNC and O_APPEND flag properly in posix_acl_open
In posix_acl_open, in switch value passed is (flag & O_ACCMODE). The value for O_ACCMODE is 0003, so the result will always be less than or equal to 3. But value for O_TRUNC is 01000 and O_APPEND is 02000, so it is not right to check it in switch case Change-Id: Ia17db80a6a5f681c35e08e062d384f33ef7e0354 BUG: 1387241 Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com> Reviewed-on: http://review.gluster.org/15688 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Niels de Vos <ndevos@redhat.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Diffstat (limited to 'xlators/system')
-rw-r--r--xlators/system/posix-acl/src/posix-acl.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/xlators/system/posix-acl/src/posix-acl.c b/xlators/system/posix-acl/src/posix-acl.c
index 9b3698618fa..dbe0e716e2b 100644
--- a/xlators/system/posix-acl/src/posix-acl.c
+++ b/xlators/system/posix-acl/src/posix-acl.c
@@ -1203,8 +1203,6 @@ posix_acl_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,
break;
case O_WRONLY:
- case O_APPEND:
- case O_TRUNC:
perm = POSIX_ACL_WRITE;
break;
case O_RDWR:
@@ -1212,6 +1210,9 @@ posix_acl_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags,
break;
}
+ if (flags & (O_TRUNC | O_APPEND))
+ perm |= POSIX_ACL_WRITE;
+
if (acl_permits (frame, loc->inode, perm))
goto green;
else