If a gid doesn't have a name on the originating system, the receiver
authorWayne Davison <wayned@samba.org>
Wed, 4 Feb 2004 19:25:11 +0000 (19:25 +0000)
committerWayne Davison <wayned@samba.org>
Wed, 4 Feb 2004 19:25:11 +0000 (19:25 +0000)
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

index 0319d60..c3322db 100644 (file)
--- 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;