diff options
author | Wayne Davison <wayned@samba.org> | 2004-01-22 09:13:36 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2004-01-22 09:13:36 +0000 |
commit | 58743a87b8a6b8160c6bd562ed4dd8dcfcb2d4e2 (patch) | |
tree | b2fa9415d0cfa29450913a81eca4fa83f5fea72f | |
parent | 54bf456e8584eac5b0afdf8f7e003c79aa87ffe8 (diff) | |
download | rsync-58743a87b8a6b8160c6bd562ed4dd8dcfcb2d4e2.tar.gz |
Improved to add the default gid if it is missing from the list.
-rw-r--r-- | getgroups.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/getgroups.c b/getgroups.c index 3aa152fc..4a10fe7d 100644 --- a/getgroups.c +++ b/getgroups.c @@ -26,24 +26,32 @@ #include "rsync.h" -#ifndef NGROUPS +#ifndef NGROUPS_MAX /* It ought to be defined, but just in case. */ -# define NGROUPS 32 +# define NGROUPS_MAX 32 #endif int main(UNUSED(int argc), UNUSED(char *argv[])) { int n, i; - gid_t list[NGROUPS]; + gid_t list[NGROUPS_MAX]; + gid_t gid = getgid(); + int gid_in_list = 0; - if ((n = getgroups(NGROUPS, list)) == -1) { + if ((n = getgroups(NGROUPS_MAX, list)) < 0) { perror("getgroups"); return 1; } - for (i = 0; i < n; i++) + for (i = 0; i < n; i++) { printf("%lu ", (unsigned long)list[i]); + if (list[i] == gid) + gid_in_list = 1; + } + /* The default gid might not be in the list on some systems. */ + if (!gid_in_list) + printf("%lu", (unsigned long)gid); printf("\n"); return 0; |