From: Greg Farnum Date: Wed, 27 Jul 2016 01:50:18 +0000 (-0700) Subject: Client: add UserPerm translation functions for handling [x]attr stuff X-Git-Tag: v11.0.1~36^2~88 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c0061cfdf7d99dd95ba728ee7694871a8106dd1e;p=ceph.git Client: add UserPerm translation functions for handling [x]attr stuff Signed-off-by: Greg Farnum --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 209c32e1908..77cda8583c8 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -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) diff --git a/src/client/Client.h b/src/client/Client.h index 0d1199cf648..290873ba2ac 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -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);