From: Greg Farnum Date: Wed, 3 Aug 2016 22:05:03 +0000 (-0700) Subject: client: push UserGroups into _posix_acl_permission(), instead of passing it X-Git-Tag: v11.0.1~36^2~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c04c52036f7757b15ea89f0a6bfe6f24f34cd41d;p=ceph.git client: push UserGroups into _posix_acl_permission(), instead of passing it Signed-off-by: Greg Farnum --- diff --git a/src/client/Client.cc b/src/client/Client.cc index dc05c98426bc..31b4e0cbff8f 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -5025,11 +5025,8 @@ int Client::inode_permission(Inode *in, const UserPerm& perms, unsigned want) if (perms.uid() == 0) return 0; - RequestUserGroups groups(perms.uid(), perms.gid()); - init_groups(&groups); - if (perms.uid() != in->uid && (in->mode & S_IRWXG)) { - int ret = _posix_acl_permission(in, perms.uid(), groups, want); + int ret = _posix_acl_permission(in, perms, want); if (ret != -EAGAIN) return ret; } @@ -12361,12 +12358,15 @@ int Client::check_pool_perm(Inode *in, int need) return 0; } -int Client::_posix_acl_permission(Inode *in, uid_t uid, UserGroups& groups, unsigned want) +int Client::_posix_acl_permission(Inode *in, const UserPerm& perms, unsigned want) { if (acl_type == POSIX_ACL) { if (in->xattrs.count(ACL_EA_ACCESS)) { const bufferptr& access_acl = in->xattrs[ACL_EA_ACCESS]; - return posix_acl_permits(access_acl, in->uid, in->gid, uid, groups, want); + RequestUserGroups groups(perms.uid(), perms.gid()); + init_groups(&groups); + + return posix_acl_permits(access_acl, in->uid, in->gid, perms.uid(), groups, want); } } return -EAGAIN; diff --git a/src/client/Client.h b/src/client/Client.h index 304160e6eb26..6b4ea0385879 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -923,7 +923,7 @@ private: int _posix_acl_create(Inode *dir, mode_t *mode, bufferlist& xattrs_bl, const UserPerm& perms); int _posix_acl_chmod(Inode *in, mode_t mode, const UserPerm& perms); - int _posix_acl_permission(Inode *in, uid_t uid, UserGroups& groups, unsigned want); + int _posix_acl_permission(Inode *in, const UserPerm& perms, unsigned want); mds_rank_t _get_random_up_mds() const;