From: Greg Farnum Date: Fri, 29 Jul 2016 23:05:01 +0000 (-0700) Subject: client: switch xattr_permission() implementation to UserPerm X-Git-Tag: v11.0.1~36^2~60 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e2b766bf72e7b7deff35746da1c665151aea5a67;p=ceph.git client: switch xattr_permission() implementation to UserPerm Signed-off-by: Greg Farnum --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 97118923491..a3837f9ab1b 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -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; diff --git a/src/client/Client.h b/src/client/Client.h index 20bdc2a7beb..559c0dfc982 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -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) {