Close the group DB even when failing with 2^31 or more members.
authorJim Meyering <jim@meyering.net>
Thu, 5 Jul 2007 07:28:20 +0000 (07:28 +0000)
committerJim Meyering <jim@meyering.net>
Thu, 5 Jul 2007 07:28:20 +0000 (07:28 +0000)
* lib/getugroups.c (getugroups): Don't return without calling endgrent.

ChangeLog
lib/getugroups.c

index ffdb2c23ad0c1d7c52969239f6d095abffbe445f..b2bd707fb495180b3ed4fad505c2471708983f2a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-05  Jim Meyering  <jim@meyering.net>
+
+       Close the group DB even when failing with 2^31 or more members.
+       * lib/getugroups.c (getugroups): Don't return without calling endgrent.
+
 2007-07-04  Jim Meyering  <jim@meyering.net>
 
        * lib/getugroups.h: New file.
index 0293d278506a3294b6ca327ec8b88118bd768aeb..d63a6072e4861227f838f4d8aa60dd7eb1a71f6f 100644 (file)
@@ -84,21 +84,21 @@ getugroups (int maxcount, GETGROUPS_T *grouplist, char const *username,
              if (maxcount != 0)
                {
                  if (count >= maxcount)
-                   {
-                     endgrent ();
-                     return count;
-                   }
+                   goto done;
                  grouplist[count] = grp->gr_gid;
                }
              count++;
              if (count < 0)
                {
                  errno = EOVERFLOW;
-                 return -1;
+                 count = -1;
+                 goto done;
                }
            }
        }
     }
+
+ done:
   endgrent ();
 
   return count;