From 0be976ec0a449279486eec94c33bd58b8c74201b Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Thu, 15 Jan 2004 07:06:45 +0000 Subject: [PATCH] Fixed a bug when a non-root user copies a GID=0 file with -g set and no permissions to set group 0. --- uidlist.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/uidlist.c b/uidlist.c index 5027e78f..bee35384 100644 --- a/uidlist.c +++ b/uidlist.c @@ -71,7 +71,7 @@ static char *gid_to_name(gid_t gid) static int map_uid(int id, char *name) { uid_t uid; - if (name_to_uid(name, &uid) && uid != 0) + if (uid != 0 && name_to_uid(name, &uid)) return uid; return id; } @@ -79,7 +79,7 @@ static int map_uid(int id, char *name) static int map_gid(int id, char *name) { gid_t gid; - if (name_to_gid(name, &gid) && gid != 0) + if (gid != 0 && name_to_gid(name, &gid)) return gid; return id; } @@ -316,12 +316,10 @@ void recv_uid_list(int f, struct file_list *flist) /* now convert the uid/gid of all files in the list to the mapped uid/gid */ - for (i=0;icount;i++) { - if (am_root && preserve_uid && flist->files[i]->uid != 0) { + for (i = 0; i < flist->count; i++) { + if (am_root && preserve_uid && flist->files[i]->uid != 0) flist->files[i]->uid = match_uid(flist->files[i]->uid); - } - if (preserve_gid && flist->files[i]->gid != 0) { + if (preserve_gid && (!am_root || flist->files[i]->gid != 0)) flist->files[i]->gid = match_gid(flist->files[i]->gid); - } } } -- 2.34.1