]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Client: add UserPerm translation functions for handling [x]attr stuff
authorGreg Farnum <gfarnum@redhat.com>
Wed, 27 Jul 2016 01:50:18 +0000 (18:50 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Wed, 31 Aug 2016 21:38:23 +0000 (14:38 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/client/Client.cc
src/client/Client.h

index 209c32e190854727accc223dd116ab2919e11200..77cda8583c8e406b9336afdb47cdccc2f44efdf8 100644 (file)
@@ -9907,7 +9907,8 @@ int Client::_getxattr(InodeRef &in, const char *name, void *value, size_t size)
     if (r < 0)
       return r;
   }
-  return _getxattr(in.get(), name, value, size);
+  UserPerm perms(0, 0); // FIXME
+  return _getxattr(in.get(), name, value, size, perms);
 }
 
 int Client::ll_getxattr(Inode *in, const char *name, void *value,
@@ -9923,7 +9924,7 @@ int Client::ll_getxattr(Inode *in, const char *name, void *value,
   tout(cct) << name << std::endl;
 
   if (!cct->_conf->fuse_default_permissions) {
-    int r = xattr_permission(in, name, MAY_READ, uid, gid);
+    int r = xattr_permission(in, name, MAY_READ, perms);
     if (r < 0)
       return r;
   }
@@ -10091,7 +10092,8 @@ int Client::_setxattr(InodeRef &in, const char *name, const void *value,
     if (r < 0)
       return r;
   }
-  return _setxattr(in.get(), name, value, size, flags);
+  UserPerm perms(0, 0); // FIXME
+  return _setxattr(in.get(), name, value, size, flags, perms);
 }
 
 int Client::check_data_pool_exist(string name, string value, const OSDMap *osdmap)
@@ -10212,7 +10214,8 @@ int Client::_removexattr(InodeRef &in, const char *name)
     if (r < 0)
       return r;
   }
-  return _removexattr(in.get(), name);
+  UserPerm perms(0, 0); // FIXME
+  return _removexattr(in.get(), name, perms);
 }
 
 int Client::ll_removexattr(Inode *in, const char *name, int uid, int gid)
index 0d1199cf648cafe2a74f965bd1bea49f8af345a9..290873ba2ac6fe688342f6d29e0b0978f7fac6a6 100644 (file)
@@ -796,19 +796,42 @@ private:
   int _mknod(Inode *dir, const char *name, mode_t mode, dev_t rdev, int uid=-1, int gid=-1, InodeRef *inp = 0);
   int _do_setattr(Inode *in, struct stat *attr, int mask, int uid, int gid, InodeRef *inp);
   int _setattr(Inode *in, struct stat *attr, int mask, int uid=-1, int gid=-1, InodeRef *inp = 0);
+  int _setattr(Inode *in, struct stat *attr, int mask, const UserPerm& perms,
+              InodeRef *inp = 0) {
+    return _setattr(in, attr, mask, perms.uid(), perms.gid(), inp);
+  }
   int _setattr(InodeRef &in, struct stat *attr, int mask);
   int _getattr(Inode *in, int mask, int uid=-1, int gid=-1, bool force=false);
   int _getattr(InodeRef &in, int mask, int uid=-1, int gid=-1, bool force=false) {
     return _getattr(in.get(), mask, uid, gid, force);
   }
+  int _getattr(InodeRef &in, int mask, const UserPerm& perms, bool force=false) {
+    return _getattr(in, mask, perms, force);
+  }
   int _readlink(Inode *in, char *buf, size_t size);
-  int _getxattr(Inode *in, const char *name, void *value, size_t len, int uid=-1, int gid=-1);
+  int _getxattr(Inode *in, const char *name, void *value, size_t len,
+               int uid=-1, int gid=-1);
   int _getxattr(InodeRef &in, const char *name, void *value, size_t len);
+  int _getxattr(Inode *in, const char *name, void *value, size_t len,
+               const UserPerm& perms) {
+    return _getxattr(in, name, value, len, perms.uid(), perms.gid());
+  }
   int _listxattr(Inode *in, char *names, size_t len, int uid=-1, int gid=-1);
+  int _listxattr(Inode *in, char *names, size_t len, const UserPerm& perms) {
+    return _listxattr(in, names, len, perms.uid(), perms.gid());
+  }
   int _do_setxattr(Inode *in, const char *name, const void *value, size_t len, int flags, int uid, int gid);
-  int _setxattr(Inode *in, const char *name, const void *value, size_t len, int flags, int uid=-1, int gid=-1);
+  int _setxattr(Inode *in, const char *name, const void *value, size_t len,
+               int flags, int uid=-1, int gid=-1);
+  int _setxattr(Inode *in, const char *name, const void *value, size_t len,
+               int flags, const UserPerm& perms) {
+    return _setxattr(in, name, value, len, flags, perms.uid(), perms.gid());
+  }
   int _setxattr(InodeRef &in, const char *name, const void *value, size_t len, int flags);
   int _removexattr(Inode *in, const char *nm, int uid=-1, int gid=-1);
+  int _removexattr(Inode *in, const char *nm, const UserPerm& perms) {
+    return _removexattr(in, nm, perms.uid(), perms.gid());
+  }
   int _removexattr(InodeRef &in, const char *nm);
   int _open(Inode *in, int flags, mode_t mode, Fh **fhp, int uid, int gid);
   int _renew_caps(Inode *in);