From e2b766bf72e7b7deff35746da1c665151aea5a67 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Fri, 29 Jul 2016 16:05:01 -0700 Subject: [PATCH] client: switch xattr_permission() implementation to UserPerm Signed-off-by: Greg Farnum --- src/client/Client.cc | 14 +++++--------- src/client/Client.h | 11 +++++++---- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 971189234911..a3837f9ab1bf 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 20bdc2a7beb5..559c0dfc982d 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) { -- 2.47.3