diff options
author | Wayne Davison <wayned@samba.org> | 2004-02-03 23:28:19 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2004-02-03 23:28:19 +0000 |
commit | a2687b64a2eccb39cff400eafdedcaf0f9a2875a (patch) | |
tree | 45aa6ea515ece9bb96a419f9d8be208fab52140d /uidlist.c | |
parent | c284f34a498a4b7c85666df867024be63a511d55 (diff) | |
download | rsync-a2687b64a2eccb39cff400eafdedcaf0f9a2875a.tar.gz rsync-a2687b64a2eccb39cff400eafdedcaf0f9a2875a.tar.bz2 rsync-a2687b64a2eccb39cff400eafdedcaf0f9a2875a.zip |
Added a little more compatibility code for non-standard systems.
Diffstat (limited to 'uidlist.c')
-rw-r--r-- | uidlist.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -97,7 +97,8 @@ static uid_t match_uid(uid_t uid) static uid_t last_in, last_out; struct idlist *list = uidlist; - if (uid == last_in) return last_out; + if (uid == last_in) + return last_out; last_in = uid; @@ -116,7 +117,7 @@ static uid_t match_uid(uid_t uid) static int is_in_group(gid_t gid) { #ifdef GETGROUPS_T - static gid_t last_in = (gid_t) -2, last_out; + static gid_t last_in = GID_NONE, last_out; static int ngroups = -2; static GETGROUPS_T *gidset; int n; @@ -127,7 +128,7 @@ static int is_in_group(gid_t gid) gid_t mygid = getgid(); ngroups = getgroups(0, 0); /* If that didn't work, perhaps 0 isn't treated specially? */ - if (ngroups < 0) + if (ngroups <= 0) ngroups = NGROUPS_MAX; gidset = new_array(GETGROUPS_T, ngroups+1); if (ngroups > 0) @@ -142,26 +143,27 @@ static int is_in_group(gid_t gid) } last_in = gid; - last_out = 0; for (n = 0; n < ngroups; n++) { - if (gidset[n] == gid) { - last_out = 1; - break; - } + if (gidset[n] == gid) + return last_out = 1; } - return last_out; + return last_out = 0; #else - return 0; + static gid_t mygid = GID_NONE; + if (mygid == GID_NONE) + mygid = getgid(); + return gid == mygid; #endif } static gid_t match_gid(gid_t gid) { - static gid_t last_in = (gid_t) -2, last_out; + static gid_t last_in = GID_NONE, last_out = GID_NONE; struct idlist *list = gidlist; - if (gid == last_in) return last_out; + if (gid == last_in) + return last_out; last_in = gid; |