getgrouplist — list of groups a user belongs to
#include <grp.h>
int
getgrouplist( |
const char * | user, |
| gid_t | group, | |
| gid_t * | groups, | |
| int * | ngroups); |
![]() |
Note | ||
|---|---|---|---|
|
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 getgrouplist().
If *ngroups is
smaller than the total number of groups found, then
getgrouplist() returns
−1. In all cases the actual number of groups is stored
in *ngroups.
The glibc 2.3.2 implementation of this function is broken:
it overwrites memory when the actual number of groups is
larger than *ngroups.
/* This crashes with glibc 2.3.2 */
#include <stdio.h>
#include <stdlib.h>
#include <grp.h>
#include <pwd.h>
int
main(void)
{
int i, ng = 0;
char *user = "who"; /* username here */
gid_t *groups = NULL;
struct passwd *pw = getpwnam(user);
if (pw == NULL)
exit(EXIT_SUCCESS);
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]);
exit(EXIT_SUCCESS);
}
This page is part of release 3.00 of the Linux man-pages project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man-pages/.
|
Copyright 2002 Walter Harms (walter.harmsinformatik.uni-oldenburg.de) Distributed under GPL Thanks to glibc info pages Modified 2003-11-18, aeb: glibc is broken |