From 58e920be97e4e2da6c01649fbaa6ef5b63028bcc Mon Sep 17 00:00:00 2001 From: Sam Lang Date: Thu, 18 Oct 2012 15:21:10 -0500 Subject: [PATCH] client: Fix permissions checking for O_WRONLY O_RDONLY is 0 in glibc, so we have to assume the flags bits are mutually exclusive, otherwise we always request read perms and write-only modes break. Signed-off-by: Sam Lang --- src/client/Inode.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/client/Inode.cc b/src/client/Inode.cc index ee3191cd18583..cef19ff77f458 100644 --- a/src/client/Inode.cc +++ b/src/client/Inode.cc @@ -267,15 +267,14 @@ Dir *Inode::open_dir() bool Inode::check_mode(uid_t ruid, gid_t rgid, gid_t *sgids, int sgids_count, uint32_t rflags) { - unsigned mflags = rflags & O_ACCMODE; unsigned fmode = 0; - if ((mflags & O_WRONLY) == O_WRONLY) - fmode |= 2; - if ((mflags & O_RDONLY) == O_RDONLY) - fmode |= 4; - if ((mflags & O_RDWR) == O_RDWR) - fmode |= 6; + if ((rflags & O_ACCMODE) == O_WRONLY) + fmode = 2; + else if ((rflags & O_ACCMODE) == O_RDWR) + fmode = 6; + else if ((rflags & O_ACCMODE) == O_RDONLY) + fmode = 4; // if uid is owner, owner entry determines access if (uid == ruid) { -- 2.39.5