diff options
author | Wayne Davison <wayned@samba.org> | 2004-02-20 17:01:33 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2004-02-20 17:01:33 +0000 |
commit | 40ae4f93a079ed71e491e6d51914d6d663ea3f10 (patch) | |
tree | 68544d4a457ffeb399b61eae4289228e517b2194 /getgroups.c | |
parent | 7a27e9b599a48f4b0ab6e6ade69a99a120c042fe (diff) | |
download | rsync-40ae4f93a079ed71e491e6d51914d6d663ea3f10.tar.gz rsync-40ae4f93a079ed71e491e6d51914d6d663ea3f10.tar.bz2 rsync-40ae4f93a079ed71e491e6d51914d6d663ea3f10.zip |
Don't use NGROUPS_MAX define.
Diffstat (limited to 'getgroups.c')
-rw-r--r-- | getgroups.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/getgroups.c b/getgroups.c index 8bb82f5d..6a8fac2e 100644 --- a/getgroups.c +++ b/getgroups.c @@ -26,21 +26,16 @@ #include "rsync.h" -#ifndef NGROUPS_MAX -/* It ought to be defined, but just in case. */ -# define NGROUPS_MAX 32 -#endif - int main(UNUSED(int argc), UNUSED(char *argv[])) { int n, i; - gid_t list[NGROUPS_MAX]; + gid_t *list; gid_t gid = MY_GID(); int gid_in_list = 0; #ifdef HAVE_GETGROUPS - if ((n = getgroups(NGROUPS_MAX, list)) < 0) { + if ((n = getgroups(0, NULL)) < 0) { perror("getgroups"); return 1; } @@ -48,6 +43,17 @@ main(UNUSED(int argc), UNUSED(char *argv[])) n = 0; #endif + list = (gid_t*)malloc(sizeof (gid_t) * (n + 1)); + if (!list) { + fprintf(stderr, "out of memory!\n"); + exit(1); + } + +#ifdef HAVE_GETGROUPS + if (n > 0) + n = getgroups(n, list); +#endif + for (i = 0; i < n; i++) { printf("%lu ", (unsigned long)list[i]); if (list[i] == gid) |