summaryrefslogtreecommitdiff
path: root/getgroups.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2004-02-20 17:01:33 +0000
committerWayne Davison <wayned@samba.org>2004-02-20 17:01:33 +0000
commit40ae4f93a079ed71e491e6d51914d6d663ea3f10 (patch)
tree68544d4a457ffeb399b61eae4289228e517b2194 /getgroups.c
parent7a27e9b599a48f4b0ab6e6ade69a99a120c042fe (diff)
downloadrsync-40ae4f93a079ed71e491e6d51914d6d663ea3f10.tar.gz
Don't use NGROUPS_MAX define.
Diffstat (limited to 'getgroups.c')
-rw-r--r--getgroups.c20
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)