Add initgroups lookup support to getent

This commit is contained in:
Ulrich Drepper 2011-06-15 20:54:31 -04:00
parent c41af17eed
commit 82e9a1f7df
2 changed files with 36 additions and 0 deletions

View file

@ -1,5 +1,8 @@
2011-06-15 Ulrich Drepper <drepper@gmail.com>
* nss/getent.c: Add support for initgroups lookups through getgrouplist
interface.
* grp/initgroups.c (__nss_initgroups_database): Renamed and exported.
(internal_getgrouplist): Adjust to name change.
Update use_initgroups_entry if this is not the first call.

View file

@ -501,6 +501,38 @@ netgroup_keys (int number, char *key[])
return result;
}
/* This is for initgroups */
static int
initgroups_keys (int number, char *key[])
{
int ngrps = 100;
size_t grpslen = ngrps * sizeof (gid_t);
gid_t *grps = alloca (grpslen);
for (int i = 0; i < number; ++i)
{
int no = ngrps;
int n;
while ((n = getgrouplist (key[i], -1, grps, &no)) == -1
&& no > ngrps)
{
grps = extend_alloca (grps, grpslen, no * sizeof (gid_t));
ngrps = no;
}
if (n == -1)
return 1;
printf ("%-21s", key[i]);
for (int j = 0; j < n; ++j)
if (grps[j] != -1)
printf (" %ld", (long int) grps[j]);
putchar_unlocked ('\n');
}
return 0;
}
/* This is for networks */
static void
print_networks (struct netent *net)
@ -829,6 +861,7 @@ D(ethers)
D(group)
D(gshadow)
D(hosts)
D(initgroups)
D(netgroup)
D(networks)
D(passwd)