diff options
| author | Wayne Davison <wayned@samba.org> | 2004-02-04 19:25:11 +0000 |
|---|---|---|
| committer | Wayne Davison <wayned@samba.org> | 2004-02-04 19:25:11 +0000 |
| commit | dbd8811b85ad43507dd04b31812322596e59f3b4 (patch) | |
| tree | 0d5145aa1c9fd3b860e4d8dae01253cc4f5a044e /uidlist.c | |
| parent | 05118158f4f59a5f512e5bab640f253332a6e181 (diff) | |
| download | android_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.c | 8 |
1 files changed, 3 insertions, 5 deletions
@@ -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; |
