Annotation of embedaddon/rsync/getgroups.c, revision 1.1.1.4
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.4 ! misho 6: * Copyright (C) 2003-2020 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:
1.1.1.4 ! misho 23: int main(UNUSED(int argc), UNUSED(char *argv[]))
1.1 misho 24: {
25: int n, i;
26: gid_t *list;
27: gid_t gid = MY_GID();
28: int gid_in_list = 0;
29:
30: #ifdef HAVE_GETGROUPS
31: if ((n = getgroups(0, NULL)) < 0) {
32: perror("getgroups");
33: return 1;
34: }
35: #else
36: n = 0;
37: #endif
38:
39: list = (gid_t*)malloc(sizeof (gid_t) * (n + 1));
40: if (!list) {
41: fprintf(stderr, "out of memory!\n");
42: exit(1);
43: }
44:
45: #ifdef HAVE_GETGROUPS
46: if (n > 0)
47: n = getgroups(n, list);
48: #endif
49:
50: for (i = 0; i < n; i++) {
51: printf("%lu ", (unsigned long)list[i]);
52: if (list[i] == gid)
53: gid_in_list = 1;
54: }
55: /* The default gid might not be in the list on some systems. */
56: if (!gid_in_list)
57: printf("%lu", (unsigned long)gid);
58: printf("\n");
59:
60: return 0;
61: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>