]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: switch xattr_permission() implementation to UserPerm
authorGreg Farnum <gfarnum@redhat.com>
Fri, 29 Jul 2016 23:05:01 +0000 (16:05 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Wed, 21 Sep 2016 23:33:49 +0000 (16:33 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/client/Client.cc
src/client/Client.h

index 971189234911f67f290b820ef2e625cdba67977b..a3837f9ab1bf1724e65205c5418cdf53f5d5609f 100644 (file)
@@ -5022,14 +5022,10 @@ int Client::inode_permission(Inode *in, uid_t uid, UserGroups& groups, unsigned
   return 0;
 }
 
-int Client::xattr_permission(Inode *in, const char *name, unsigned want, int uid, int gid)
+int Client::xattr_permission(Inode *in, const char *name, unsigned want,
+                            const UserPerm& perms)
 {
-  if (uid < 0)
-    uid = get_uid();
-  if (gid < 0)
-    gid = get_gid();
-  RequestUserGroups groups(this, uid, gid);
-  UserPerm perms(uid, gid);
+  RequestUserGroups groups(this, perms.uid(), perms.gid());
 
   int r = _getattr_for_perm(in, perms);
   if (r < 0)
@@ -5037,10 +5033,10 @@ int Client::xattr_permission(Inode *in, const char *name, unsigned want, int uid
 
   r = 0;
   if (strncmp(name, "system.", 7) == 0) {
-    if ((want & MAY_WRITE) && (uid != 0 && (uid_t)uid != in->uid))
+    if ((want & MAY_WRITE) && (perms.uid() != 0 && perms.uid() != in->uid))
       r = -EPERM;
   } else {
-    r = inode_permission(in, uid, groups, want);
+    r = inode_permission(in, perms, want);
   }
 out:
   ldout(cct, 3) << __func__ << " " << in << " = " << r <<  dendl;
index 20bdc2a7beb5147da3b94fc960bab21a97cb2432..559c0dfc982dce4afdb2c37a8c128121b782ac54 100644 (file)
@@ -898,7 +898,8 @@ private:
   };
 
   int inode_permission(Inode *in, uid_t uid, UserGroups& groups, unsigned want);
-  int xattr_permission(Inode *in, const char *name, unsigned want, int uid=-1, int gid=-1);
+  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);
   int may_open(Inode *in, int flags, const UserPerm& perms);
   int may_lookup(Inode *dir, const UserPerm& perms);
@@ -910,9 +911,11 @@ private:
     RequestUserGroups groups(this, perms.uid(), perms.gid());
     return inode_permission(in, perms.uid(), groups, want);
   }
-  int xattr_permission(Inode *in, const char *name, unsigned want,
-                      const UserPerm& perms) {
-    return xattr_permission(in, name, want, perms.uid(), perms.gid());
+  int xattr_permission(Inode *in, const char *name, unsigned want, int uid=-1, int gid=-1) {
+    if (uid < 0) uid = get_uid();
+    if (gid < 0) gid = get_gid();
+    UserPerm perms(uid, gid);
+    return xattr_permission(in, name, want, perms);
   }
 
   int may_setattr(Inode *in, struct stat *st, int mask, int uid=-1, int gid=-1) {