diff options
| author | vmallika <vmallika@redhat.com> | 2016-04-02 12:02:22 +0530 | 
|---|---|---|
| committer | Vijaikumar Mallikarjuna <vmallika@redhat.com> | 2016-04-06 05:08:26 -0700 | 
| commit | 1546572b7d46c1aee906608140c843160a529937 (patch) | |
| tree | 6870c8fc4f89475281bcf1825423571b6e87d5cd /xlators | |
| parent | 7927149f71adc49cad92f28f805a8e688534156e (diff) | |
posix_acl: skip acl_permits for special clients
Change-Id: I3f478b7e4ecab517200f50eb09f65a634c029437
BUG: 1320818
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/13894
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/system/posix-acl/src/posix-acl.c | 39 | 
1 files changed, 28 insertions, 11 deletions
diff --git a/xlators/system/posix-acl/src/posix-acl.c b/xlators/system/posix-acl/src/posix-acl.c index 61d2d6647f6..688e60914dc 100644 --- a/xlators/system/posix-acl/src/posix-acl.c +++ b/xlators/system/posix-acl/src/posix-acl.c @@ -158,11 +158,16 @@ sticky_permits (call_frame_t *frame, inode_t *parent, inode_t *inode)          struct posix_acl_ctx  *par = NULL;          struct posix_acl_ctx  *ctx = NULL; +        if ((0 > frame->root->pid) || frame_is_super_user (frame)) +                return 1; +          par = posix_acl_ctx_get (parent, frame->this); -        ctx = posix_acl_ctx_get (inode, frame->this); +        if (par == NULL) +                return 0; -        if (frame_is_super_user (frame)) -                return 1; +        ctx = posix_acl_ctx_get (inode, frame->this); +        if (ctx == NULL) +                return 0;          if (!(par->perm & S_ISVTX))                  return 1; @@ -192,16 +197,12 @@ acl_permits (call_frame_t *frame, inode_t *inode, int want)          conf = frame->this->private; +        if ((0 > frame->root->pid) || frame_is_super_user (frame)) +                goto green; +          ctx = posix_acl_ctx_get (inode, frame->this); -        if (!ctx) { -                gf_log_callingfn (frame->this->name, GF_LOG_ERROR, -                                  "inode ctx is NULL for %s", -                                  uuid_utoa (inode->gfid)); +        if (!ctx)                  goto red; -        } - -        if (frame_is_super_user (frame)) -                goto green;          posix_acl_get (inode, frame->this, &acl, NULL);          if (!acl) { @@ -318,12 +319,20 @@ posix_acl_ctx_new (inode_t *inode, xlator_t *this)  {          struct posix_acl_ctx *ctx = NULL; +        if (inode == NULL) { +                gf_log_callingfn (this->name, GF_LOG_WARNING, "inode is NULL"); +                return NULL; +        } +          LOCK (&inode->lock);          {                  ctx = __posix_acl_ctx_get (inode, this, _gf_true);          }          UNLOCK (&inode->lock); +        if (ctx == NULL) +                gf_log_callingfn (this->name, GF_LOG_ERROR, "creating inode ctx" +                                  "failed for %s", uuid_utoa (inode->gfid));          return ctx;  } @@ -332,12 +341,20 @@ posix_acl_ctx_get (inode_t *inode, xlator_t *this)  {          struct posix_acl_ctx *ctx = NULL; +        if (inode == NULL) { +                gf_log_callingfn (this->name, GF_LOG_WARNING, "inode is NULL"); +                return NULL; +        } +          LOCK (&inode->lock);          {                  ctx = __posix_acl_ctx_get (inode, this, _gf_false);          }          UNLOCK (&inode->lock); +        if (ctx == NULL) +                gf_log_callingfn (this->name, GF_LOG_ERROR, "inode ctx is NULL " +                                  "for %s", uuid_utoa (inode->gfid));          return ctx;  }  | 
