From 82e9a1f7df488c62a214ee63847b2c884dcba565 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 15 Jun 2011 20:54:31 -0400 Subject: Add initgroups lookup support to getent --- nss/getent.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'nss') diff --git a/nss/getent.c b/nss/getent.c index a33bcb4..9d43e2f 100644 --- a/nss/getent.c +++ b/nss/getent.c @@ -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) -- cgit v1.1