Annotation of embedaddon/rsync/getgroups.c, revision 1.1.1.3
1.1 misho 1: /*
2: * Print out the gids of all groups for the current user. This is like
3: * `id -G` on Linux, but it's too hard to find a portable equivalent.
4: *
5: * Copyright (C) 2002 Martin Pool
1.1.1.3 ! misho 6: * Copyright (C) 2003-2015 Wayne Davison
1.1 misho 7: *
8: * This program is free software; you can redistribute it and/or modify
9: * it under the terms of the GNU General Public License version 3 as
10: * published by the Free Software Foundation.
11: *
12: * This program is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: * GNU General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public License along
18: * with this program; if not, visit the http://fsf.org website.
19: */
20:
21: #include "rsync.h"
22:
23: int
24: main(UNUSED(int argc), UNUSED(char *argv[]))
25: {
26: int n, i;
27: gid_t *list;
28: gid_t gid = MY_GID();
29: int gid_in_list = 0;
30:
31: #ifdef HAVE_GETGROUPS
32: if ((n = getgroups(0, NULL)) < 0) {
33: perror("getgroups");
34: return 1;
35: }
36: #else
37: n = 0;
38: #endif
39:
40: list = (gid_t*)malloc(sizeof (gid_t) * (n + 1));
41: if (!list) {
42: fprintf(stderr, "out of memory!\n");
43: exit(1);
44: }
45:
46: #ifdef HAVE_GETGROUPS
47: if (n > 0)
48: n = getgroups(n, list);
49: #endif
50:
51: for (i = 0; i < n; i++) {
52: printf("%lu ", (unsigned long)list[i]);
53: if (list[i] == gid)
54: gid_in_list = 1;
55: }
56: /* The default gid might not be in the list on some systems. */
57: if (!gid_in_list)
58: printf("%lu", (unsigned long)gid);
59: printf("\n");
60:
61: return 0;
62: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>