aboutsummaryrefslogtreecommitdiffstats
path: root/uidlist.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2004-02-04 19:25:11 +0000
committerWayne Davison <wayned@samba.org>2004-02-04 19:25:11 +0000
commitdbd8811b85ad43507dd04b31812322596e59f3b4 (patch)
tree0d5145aa1c9fd3b860e4d8dae01253cc4f5a044e /uidlist.c
parent05118158f4f59a5f512e5bab640f253332a6e181 (diff)
downloadandroid_external_rsync-dbd8811b85ad43507dd04b31812322596e59f3b4.tar.gz
android_external_rsync-dbd8811b85ad43507dd04b31812322596e59f3b4.tar.bz2
android_external_rsync-dbd8811b85ad43507dd04b31812322596e59f3b4.zip
If a gid doesn't have a name on the originating system, the receiver
won't see it in the list of IDs to remap. That means that we need to call the is_in_group() function from inside match_gid() to know if we can set the group or not (if we're not root).
Diffstat (limited to 'uidlist.c')
-rw-r--r--uidlist.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/uidlist.c b/uidlist.c
index 0319d606..c3322dbd 100644
--- a/uidlist.c
+++ b/uidlist.c
@@ -130,10 +130,8 @@ static int is_in_group(gid_t gid)
return last_out;
if (ngroups < -1) {
gid_t mygid = MY_GID();
- ngroups = getgroups(0, 0);
- /* If that didn't work, perhaps 0 isn't treated specially? */
- if (ngroups <= 0)
- ngroups = NGROUPS_MAX;
+ if ((ngroups = getgroups(0, 0)) < 0)
+ ngroups = 0;
gidset = new_array(GETGROUPS_T, ngroups+1);
if (ngroups > 0)
ngroups = getgroups(ngroups, gidset);
@@ -194,7 +192,7 @@ static gid_t match_gid(gid_t gid)
list = list->next;
}
- if (am_root)
+ if (am_root || is_in_group(gid))
last_out = gid;
else
last_out = GID_NONE;