about summary refs log tree commit diff
path: root/grp/initgroups.c
diff options
context:
space:
mode:
Diffstat (limited to 'grp/initgroups.c')
-rw-r--r--grp/initgroups.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/grp/initgroups.c b/grp/initgroups.c
index 73c15c6479..35af575ac7 100644
--- a/grp/initgroups.c
+++ b/grp/initgroups.c
@@ -70,28 +70,27 @@ initgroups (user, group)
 	register char **m;
 
 	for (m = g->gr_mem; *m != NULL; ++m)
-	  if (!strcmp (*m, user))
-	    break;
-
-	if (*m == NULL)
-	  {
-	    /* Matched the user.  Insert this group.  */
-	    if (n == ngroups && limit <= 0)
-	      {
-		/* Need a bigger buffer.  */
-		groups = memcpy (__alloca (ngroups * 2 * sizeof *groups),
-				 groups, ngroups * sizeof *groups);
-		ngroups *= 2;
-	      }
-
-	    groups[n++] = g->gr_gid;
-
-	    if (n == limit)
-	      /* Can't take any more groups; stop searching.  */
+	  if (strcmp (*m, user) == 0)
+	    {
+	      /* Matches user.  Insert this group.  */
+	      if (n == ngroups && limit <= 0)
+		{
+		  /* Need a bigger buffer.  */
+		  groups = memcpy (__alloca (ngroups * 2 * sizeof *groups),
+				   groups, ngroups * sizeof *groups);
+		  ngroups *= 2;
+		}
+
+	      groups[n++] = g->gr_gid;
+
+	      if (n == limit)
+		/* Can't take any more groups; stop searching.  */
+		goto done;
+
 	      break;
-	  }
+	    }
       }
-
+done:
   endgrent ();
 
   return setgroups (n, groups);