stdlib/tst-secure-getenv: handle >64 groups

This test would fail unnecessarily if the user running it had more than
64 groups since getgroups returns EINVAL if the size provided is less
than the number of supplementary group IDs. Instead dynamically
determine the number of supplementary groups the user has.
This commit is contained in:
Mike Gerow 2019-04-17 11:45:34 +02:00 committed by Florian Weimer
parent 6b5c8607a4
commit bae8cf0e93
2 changed files with 20 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2019-04-17 Mike Gerow <gerow@google.com>
* stdlib/tst-secure-getenv.c (choose_gid): Remove 64 supplemental
groups limit.
2019-04-11 Florian Weimer <fweimer@redhat.com>
* resolv/nss_dns/dns-network.c (getanswer_r): Do not replace root

View File

@ -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;
}