summaryrefslogtreecommitdiff
path: root/lib/getugroups.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1998-03-13 15:24:43 +0000
committerJim Meyering <jim@meyering.net>1998-03-13 15:24:43 +0000
commitbf3840957f16ad999515c5c5287f6ef13e211379 (patch)
treee2938ac7731b055bfb4d57c5649f683148df7ae6 /lib/getugroups.c
parenta19e601b42a86b59b4af13aa9f960397f5306c38 (diff)
downloadgnulib-bf3840957f16ad999515c5c5287f6ef13e211379.tar.gz
(getugroups): Don't add a group number if it would be a duplicate.
From Ulrich Drepper.
Diffstat (limited to 'lib/getugroups.c')
-rw-r--r--lib/getugroups.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/getugroups.c b/lib/getugroups.c
index 6c818f1108..7b99d649b3 100644
--- a/lib/getugroups.c
+++ b/lib/getugroups.c
@@ -1,5 +1,5 @@
/* getugroups.c -- return a list of the groups a user is in
- Copyright (C) 1990, 1991 Free Software Foundation.
+ Copyright (C) 1990, 1991, 1998 Free Software Foundation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -59,16 +59,27 @@ getugroups (maxcount, grouplist, username)
for (cp = grp->gr_mem; *cp; ++cp)
if (!strcmp (username, *cp))
{
- if (maxcount != 0)
+ int n;
+
+ /* See if this group number is already on the list. */
+ for (n = 0; n < count; ++n)
+ if (grouplist[n] == grp->gr_gid)
+ break;
+
+ /* If it's a new group number, then try to add it to the list. */
+ if (n == count)
{
- if (count >= maxcount)
+ if (maxcount != 0)
{
- endgrent ();
- return count;
+ if (count >= maxcount)
+ {
+ endgrent ();
+ return count;
+ }
+ grouplist[count] = grp->gr_gid;
}
- grouplist[count] = grp->gr_gid;
+ count++;
}
- count++;
}
endgrent ();
return count;