File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / getgroups.c
Revision 1.1.1.4 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 00:32:36 2021 UTC (3 years, 3 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_2_3, HEAD
rsync 3.2.3

    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
    6:  * Copyright (C) 2003-2020 Wayne Davison
    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 main(UNUSED(int argc), UNUSED(char *argv[]))
   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>