From b14a525554f1fce280874f0385fef6771ca93c89 Mon Sep 17 00:00:00 2001 From: Poornima Gurusiddaiah Date: Thu, 19 Jun 2014 16:19:23 +0530 Subject: libgfapi: In glfs_*chown, if uid or gid is -1, do not set the corresponding flag. Change-Id: I23d0caa36c37dd5372f6e1d6a27c7904f4df547b BUG: 1111563 Signed-off-by: Poornima Gurusiddaiah Reviewed-on: http://review.gluster.org/8115 Reviewed-by: Raghavendra Talur Reviewed-by: Prashanth Pai Reviewed-by: Niels de Vos Tested-by: Justin Clift Reviewed-by: Shyamsundar Ranganathan Tested-by: Gluster Build System Reviewed-by: Anand Avati --- api/src/glfs-fops.c | 51 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 15 deletions(-) (limited to 'api/src') diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c index 4bf33b859b6..d5f65272c8b 100644 --- a/api/src/glfs-fops.c +++ b/api/src/glfs-fops.c @@ -2295,15 +2295,22 @@ glfs_fchmod (struct glfs_fd *glfd, mode_t mode) int glfs_chown (struct glfs *fs, const char *path, uid_t uid, gid_t gid) { - int ret = -1; + int ret = 0; int valid = 0; struct iatt iatt = {0, }; - iatt.ia_uid = uid; - iatt.ia_gid = gid; - valid = GF_SET_ATTR_UID|GF_SET_ATTR_GID; + if (uid != (uid_t) -1) { + iatt.ia_uid = uid; + valid = GF_SET_ATTR_UID; + } - ret = glfs_setattr (fs, path, &iatt, valid, 1); + if (gid != (uid_t) -1) { + iatt.ia_gid = gid; + valid = valid | GF_SET_ATTR_GID; + } + + if (valid) + ret = glfs_setattr (fs, path, &iatt, valid, 1); return ret; } @@ -2312,15 +2319,22 @@ glfs_chown (struct glfs *fs, const char *path, uid_t uid, gid_t gid) int glfs_lchown (struct glfs *fs, const char *path, uid_t uid, gid_t gid) { - int ret = -1; + int ret = 0; int valid = 0; struct iatt iatt = {0, }; - iatt.ia_uid = uid; - iatt.ia_gid = gid; - valid = GF_SET_ATTR_UID|GF_SET_ATTR_GID; + if (uid != (uid_t) -1) { + iatt.ia_uid = uid; + valid = GF_SET_ATTR_UID; + } + + if (gid != (uid_t) -1) { + iatt.ia_gid = gid; + valid = valid | GF_SET_ATTR_GID; + } - ret = glfs_setattr (fs, path, &iatt, valid, 0); + if (valid) + ret = glfs_setattr (fs, path, &iatt, valid, 0); return ret; } @@ -2329,15 +2343,22 @@ glfs_lchown (struct glfs *fs, const char *path, uid_t uid, gid_t gid) int glfs_fchown (struct glfs_fd *glfd, uid_t uid, gid_t gid) { - int ret = -1; + int ret = 0; int valid = 0; struct iatt iatt = {0, }; - iatt.ia_uid = uid; - iatt.ia_gid = gid; - valid = GF_SET_ATTR_UID|GF_SET_ATTR_GID; + if (uid != (uid_t) -1) { + iatt.ia_uid = uid; + valid = GF_SET_ATTR_UID; + } - ret = glfs_fsetattr (glfd, &iatt, valid); + if (gid != (uid_t) -1) { + iatt.ia_gid = gid; + valid = valid | GF_SET_ATTR_GID; + } + + if (valid) + ret = glfs_fsetattr (glfd, &iatt, valid); return ret; } -- cgit