diff options
author | Aurelien Jarno <aurelien@aurel32.net> | 2009-06-15 17:49:35 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-06-15 17:49:35 -0700 |
commit | c518f9a4b442af13bc5ac79011eb73a05585e0a9 (patch) | |
tree | 85df87f8af47e1c6b53b4f840e2d30a748b7b74d | |
parent | 233a182b9ee2a48eddbb15f70af8bc24add24af3 (diff) | |
download | glibc-c518f9a4b442af13bc5ac79011eb73a05585e0a9.tar.gz glibc-c518f9a4b442af13bc5ac79011eb73a05585e0a9.tar.xz glibc-c518f9a4b442af13bc5ac79011eb73a05585e0a9.zip |
Extend getent to handle the shadow database.
BZ #10207
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | nss/getent.c | 66 |
2 files changed, 69 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 2bfa774655..91b3976d72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2009-06-15 Ulrich Drepper <drepper@redhat.com> + [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 <ctype.h> #include <error.h> #include <grp.h> +#include <gshadow.h> #include <libintl.h> #include <locale.h> #include <mcheck.h> @@ -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) |