From c518f9a4b442af13bc5ac79011eb73a05585e0a9 Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Mon, 15 Jun 2009 17:49:35 -0700 Subject: [PATCH] Extend getent to handle the shadow database. BZ #10207 --- ChangeLog | 3 +++ nss/getent.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2bfa774655..91b3976d72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2009-06-15 Ulrich Drepper + [BZ #10207] + * nss/getent.c: Add support for print gshadow data. + [BZ #10203] * nis/nss_nis/nis-pwd.c (internal_nis_endpwent): Free all buffers, not just the currently used one and those which follow. diff --git a/nss/getent.c b/nss/getent.c index ea5608f1e2..dbcae26809 100644 --- a/nss/getent.c +++ b/nss/getent.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -232,6 +233,70 @@ group_keys (int number, char *key[]) return result; } +/* This is for gshadow */ +static void +print_gshadow (struct sgrp *sg) +{ + unsigned int i = 0; + + printf ("%s:%s:", + sg->sg_namp ? sg->sg_namp : "", + sg->sg_passwd ? sg->sg_passwd : ""); + + while (sg->sg_adm[i] != NULL) + { + fputs_unlocked (sg->sg_adm[i], stdout); + ++i; + if (sg->sg_adm[i] != NULL) + putchar_unlocked (','); + } + + putchar_unlocked (':'); + + i = 0; + while (sg->sg_mem[i] != NULL) + { + fputs_unlocked (sg->sg_mem[i], stdout); + ++i; + if (sg->sg_mem[i] != NULL) + putchar_unlocked (','); + } + + putchar_unlocked ('\n'); +} + +static int +gshadow_keys (int number, char *key[]) +{ + int result = 0; + int i; + + if (number == 0) + { + struct sgrp *sg; + + setsgent (); + while ((sg = getsgent ()) != NULL) + print_gshadow (sg); + endsgent (); + return result; + } + + for (i = 0; i < number; ++i) + { + struct sgrp *sg; + + sg = getsgnam (key[i]); + + if (sg == NULL) + result = 2; + else + print_gshadow (sg); + } + + return result; +} + /* This is for hosts */ static void print_hosts (struct hostent *host) @@ -756,6 +821,7 @@ D(ahostsv6) D(aliases) D(ethers) D(group) +D(gshadow) D(hosts) D(netgroup) D(networks)