From cc94e1da26bac8148efbdaf564e4d77ddbf1d96b Mon Sep 17 00:00:00 2001 From: Tony Levi Date: Thu, 25 May 2017 16:51:07 +0930 Subject: [PATCH] Fix chown_nocopy losing existing uid/gid if unspecified --- src/s3fs.cpp | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/s3fs.cpp b/src/s3fs.cpp index eee909c..8df9aa2 100644 --- a/src/s3fs.cpp +++ b/src/s3fs.cpp @@ -1705,15 +1705,6 @@ static int s3fs_chown(const char* path, uid_t uid, gid_t gid) return result; } - struct passwd* pwdata= getpwuid(uid); - struct group* grdata = getgrgid(gid); - if(pwdata){ - uid = pwdata->pw_uid; - } - if(grdata){ - gid = grdata->gr_gid; - } - if(S_ISDIR(stbuf.st_mode) && IS_REPLACEDIR(nDirType)){ // Should rebuild directory object(except new type) // Need to remove old dir("dir" etc) and make new dir("dir/") @@ -1769,6 +1760,13 @@ static int s3fs_chown_nocopy(const char* path, uid_t uid, gid_t gid) return result; } + if((uid_t)(-1) == uid){ + uid = stbuf.st_uid; + } + if((gid_t)(-1) == gid){ + gid = stbuf.st_gid; + } + // Get attributes if(S_ISDIR(stbuf.st_mode)){ result = chk_dir_object_type(path, newpath, strpath, nowcache, NULL, &nDirType); @@ -1781,15 +1779,6 @@ static int s3fs_chown_nocopy(const char* path, uid_t uid, gid_t gid) return result; } - struct passwd* pwdata= getpwuid(uid); - struct group* grdata = getgrgid(gid); - if(pwdata){ - uid = pwdata->pw_uid; - } - if(grdata){ - gid = grdata->gr_gid; - } - if(S_ISDIR(stbuf.st_mode)){ // Should rebuild all directory object // Need to remove old dir("dir" etc) and make new dir("dir/")