getgrouplist
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)