getgrouplist

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
GETGROUPLIST(2)		  Linux Programmer’s Manual	      GETGROUPLIST(2)



NAME
       getgrouplist -  list of groups a user belongs to

SYNOPSIS
       #include <grp.h>

       int getgrouplist (const char *user, gid_t group,
			 gid_t *groups, int *ngroups);

DESCRIPTION
       The  getgrouplist()  function  scans  the  group	 database for all the
       groups user belongs to.	Up to *ngroups	group  IDs  corresponding  to
       these groups are stored in the array groups; the return value from the
       function is the number of group IDs actually stored. The	 group	group
       is  automatically included in the list of groups returned by getgroup-
       list().

RETURN VALUE
       If *ngroups is smaller than the total number  of	 groups	 found,	 then
       getgrouplist()  returns a value of ‘-1’.	 In all cases the actual num-
       ber of groups is stored in *ngroups.

BUGS
       The glibc 2.3.2 implementation of this function is  broken:  it	over-
       writes  memory  when  the  actual  number  of  groups  is  larger than
       *ngroups.

CONFORMING TO
       This function is present since glibc 2.2.4.

EXAMPLE
       /* This crashes with glibc 2.3.2 */
       #include <stdio.h>
       #include <stdlib.h>
       #include <grp.h>
       #include <pwd.h>

       int main() {
	       int i, ng = 0;
	       char *user = "who";   /* username here */
	       gid_t *groups = NULL;
	       struct passwd *pw = getpwnam(user);
	       if (pw == NULL)
		       return 0;

	       if (getgrouplist(user, pw->pw_gid, NULL, &ng) < 0) {
		       groups = (gid_t *) malloc(ng * sizeof (gid_t));
		       getgrouplist(user, pw->pw_gid, groups, &ng);
	       }

	       for(i = 0; i < ng; i++)
		       printf("%d\n", groups[i]);

	       return 0;
       }

SEE ALSO
       getgroups(3), setgroups(3)



GNU				  2003-11-18		      GETGROUPLIST(2)