#include <grp.h>
#include <pwd.h>
-
+#ifndef HAVE_GETGROUPLIST
/*
This is a *much* faster way of getting the list of groups for a user
without changing the current supplemenrary group list. The old
return ret;
}
+#endif
int main(int argc, char *argv[])
{
pwd = getpwnam(user);
- count = NGROUPS_MAX;
+ if (!pwd) {
+ printf("Unknown user '%s'\n", user);
+ exit(1);
+ }
+
+ count = 11;
ret = getgrouplist(user, pwd->pw_gid, gids, &count);
+ printf("ret=%d\n", ret);
+
+ if (ret == -1) {
+ printf("getgrouplist failed\n");
+ return -1;
+ }
+
printf("Got %d groups\n", ret);
if (ret != -1) {
for (i=0;i<count;i++) {
#include <grp.h>
#include <pwd.h>
#include <sys/types.h>
-
-#include <asm/unistd.h>
-static int setgroups(size_t size, const gid_t *list)
-{
- return syscall(__NR_setgroups, size, list);
-}
-
-static int getgroups(int size, gid_t list[])
-{
- return syscall(__NR_getgroups, size, list);
-}
-
+#include <errno.h>
int listgroups(char *user)
{
#include <sys/types.h>
-#include <asm/unistd.h>
-static int setgroups(size_t size, const gid_t *list)
-{
- return syscall(__NR_setgroups, size, list);
-}
-
-static int getgroups(int size, gid_t list[])
-{
- return syscall(__NR_getgroups, size, list);
-}
-
static int trygroups(int n)
{
gid_t *gids;