aboutsummaryrefslogtreecommitdiff
path: root/stdlib/tst-secure-getenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/tst-secure-getenv.c')
-rw-r--r--stdlib/tst-secure-getenv.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/stdlib/tst-secure-getenv.c b/stdlib/tst-secure-getenv.c
index 74580b8..94de199 100644
--- a/stdlib/tst-secure-getenv.c
+++ b/stdlib/tst-secure-getenv.c
@@ -41,8 +41,14 @@ static char MAGIC_ARGUMENT[] = "run-actual-test";
static gid_t
choose_gid (void)
{
- const int count = 64;
- gid_t groups[count];
+ int count = getgroups (0, NULL);
+ if (count < 0)
+ {
+ printf ("getgroups: %m\n");
+ exit (1);
+ }
+ gid_t *groups;
+ groups = xcalloc (count, sizeof (*groups));
int ret = getgroups (count, groups);
if (ret < 0)
{
@@ -50,12 +56,17 @@ choose_gid (void)
exit (1);
}
gid_t current = getgid ();
+ gid_t not_current = 0;
for (int i = 0; i < ret; ++i)
{
if (groups[i] != current)
- return groups[i];
+ {
+ not_current = groups[i];
+ break;
+ }
}
- return 0;
+ free (groups);
+ return not_current;
}