From dbd8811b85ad43507dd04b31812322596e59f3b4 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Wed, 4 Feb 2004 19:25:11 +0000 Subject: [PATCH] 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). --- uidlist.c | 8 +++----- 1 file 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; -- 2.34.1