GETGROUPLIST(3) Linux Programmer s Manual GETGROUPLIST(3)

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 func- tion is the number of group IDs actually stored. The group group is automatically included in the list of groups returned by getgrou- plist().

RETURN VALUE If *ngroups is smaller than the total number of groups found, then get- grouplist() returns a value of -1 . In all cases the actual number 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 non-standard; it appears on most BSDs.

VERSIONS 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("%d0, groups[i]);

return 0; }

SEE ALSO getgroups(3), setgroups(3)

GNU 2003-11-18 GETGROUPLIST(3)