summaryrefslogtreecommitdiff
path: root/getgroups.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2004-01-22 09:13:36 +0000
committerWayne Davison <wayned@samba.org>2004-01-22 09:13:36 +0000
commit58743a87b8a6b8160c6bd562ed4dd8dcfcb2d4e2 (patch)
treeb2fa9415d0cfa29450913a81eca4fa83f5fea72f /getgroups.c
parent54bf456e8584eac5b0afdf8f7e003c79aa87ffe8 (diff)
downloadrsync-58743a87b8a6b8160c6bd562ed4dd8dcfcb2d4e2.tar.gz
Improved to add the default gid if it is missing from the list.
Diffstat (limited to 'getgroups.c')
-rw-r--r--getgroups.c18
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;