]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: push UserGroups into _posix_acl_permission(), instead of passing it
authorGreg Farnum <gfarnum@redhat.com>
Wed, 3 Aug 2016 22:05:03 +0000 (15:05 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Wed, 21 Sep 2016 23:33:56 +0000 (16:33 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/client/Client.cc
src/client/Client.h

index dc05c98426bc367b40293ac00a89a938b2e0e0d2..31b4e0cbff8ff5dbd5ac91c6a880ebea6aff14b4 100644 (file)
@@ -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;
index 304160e6eb26af69a5df1e9165489bdb0c5d915e..6b4ea03858799a27e0fab4e07645c51b0987198c 100644 (file)
@@ -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;