From: Greg Farnum Date: Wed, 3 Aug 2016 21:27:02 +0000 (-0700) Subject: client: switch inode_permission() to UserPerm-based (over UserGroups) X-Git-Tag: v11.0.1~36^2~22 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=30c67879ea74ab9ab9f0e9cd1971510a04716559;p=ceph.git client: switch inode_permission() to UserPerm-based (over UserGroups) Signed-off-by: Greg Farnum --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 915a2d8bd787..e3e2e374c336 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -5020,19 +5020,22 @@ int Client::_getgrouplist(gid_t** sgids, int uid, int gid) #endif } -int Client::inode_permission(Inode *in, uid_t uid, UserGroups& groups, unsigned want) +int Client::inode_permission(Inode *in, const UserPerm& perms, unsigned want) { - if (uid == 0) + if (perms.uid() == 0) return 0; + + RequestUserGroups groups(perms.uid(), perms.gid()); + init_groups(&groups); - if (uid != in->uid && (in->mode & S_IRWXG)) { - int ret = _posix_acl_permission(in, uid, groups, want); + if (perms.uid() != in->uid && (in->mode & S_IRWXG)) { + int ret = _posix_acl_permission(in, perms.uid(), groups, want); if (ret != -EAGAIN) return ret; } // check permissions before doing anything else - if (!in->check_mode(uid, groups, want)) + if (!in->check_mode(perms.uid(), groups, want)) return -EACCES; return 0; } diff --git a/src/client/Client.h b/src/client/Client.h index c94517f13db6..304160e6eb26 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -846,7 +846,7 @@ private: friend class RequestUserGroups; void init_groups(RequestUserGroups *groups); - int inode_permission(Inode *in, uid_t uid, UserGroups& groups, unsigned want); + int inode_permission(Inode *in, const UserPerm& perms, unsigned want); int xattr_permission(Inode *in, const char *name, unsigned want, const UserPerm& perms); int may_setattr(Inode *in, struct stat *st, int mask, const UserPerm& perms); @@ -856,12 +856,6 @@ private: int may_delete(Inode *dir, const char *name, const UserPerm& perms); int may_hardlink(Inode *in, const UserPerm& perms); - int inode_permission(Inode *in, const UserPerm& perms, unsigned want) { - RequestUserGroups groups(perms.uid(), perms.gid()); - init_groups(&groups); - return inode_permission(in, perms.uid(), groups, want); - } - int _getattr_for_perm(Inode *in, const UserPerm& perms); int _getgrouplist(gid_t **sgids, int uid, int gid);