changeset 1262:662622cf616f

(getugroups): Don't add a group number if it would be a duplicate. From Ulrich Drepper.
author Jim Meyering <jim@meyering.net>
date Fri, 13 Mar 1998 15:24:43 +0000
parents 67cadf165f7f
children ecbdcfdb813a
files lib/getugroups.c
diffstat 1 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
     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;