diff options
author | Guy Helmer <ghelmer@FreeBSD.org> | 2013-05-23 20:52:30 +0000 |
---|---|---|
committer | Guy Helmer <ghelmer@FreeBSD.org> | 2013-05-23 20:52:30 +0000 |
commit | 08ad1a7ac6406722ab06c14e81ae4317a6e3c35f (patch) | |
tree | eb9ebe38d97cf11e5fcc1111eeeb5cf44794d766 /usr.bin | |
parent | 601848d2b2ea447eb6297763e1d47938eb59e6e8 (diff) | |
download | src-08ad1a7ac6406722ab06c14e81ae4317a6e3c35f.tar.gz src-08ad1a7ac6406722ab06c14e81ae4317a6e3c35f.zip |
Add support for netgroup, based on patch in the PR but made consistent
with existing style.
PR: bin/132692
Notes
Notes:
svn path=/head/; revision=250942
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/getent/getent.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/usr.bin/getent/getent.c b/usr.bin/getent/getent.c index 74245773d69f..89c58a280c16 100644 --- a/usr.bin/getent/getent.c +++ b/usr.bin/getent/getent.c @@ -61,6 +61,7 @@ static int parsenum(const char *, unsigned long *); static int ethers(int, char *[]); static int group(int, char *[]); static int hosts(int, char *[]); +static int netgroup(int, char *[]); static int networks(int, char *[]); static int passwd(int, char *[]); static int protocols(int, char *[]); @@ -89,6 +90,7 @@ static struct getentdb { { "rpc", rpc, }, { "services", services, }, { "shells", shells, }, + { "netgroup", netgroup, }, { "utmpx", utmpx, }, { NULL, NULL, }, @@ -571,6 +573,47 @@ shells(int argc, char *argv[]) } /* + * netgroup + */ +static int +netgroup(int argc, char *argv[]) +{ + char *host, *user, *domain; + int first; + int rv, i; + + assert(argc > 1); + assert(argv != NULL); + +#define NETGROUPPRINT(s) (((s) != NULL) ? (s) : "") + + rv = RV_OK; + if (argc == 2) { + fprintf(stderr, "Enumeration not supported on netgroup\n"); + rv = RV_NOENUM; + } else { + for (i = 2; i < argc; i++) { + setnetgrent(argv[i]); + first = 1; + while (getnetgrent(&host, &user, &domain) != 0) { + if (first) { + first = 0; + (void)fputs(argv[i], stdout); + } + (void)printf(" (%s,%s,%s)", + NETGROUPPRINT(host), + NETGROUPPRINT(user), + NETGROUPPRINT(domain)); + } + if (!first) + (void)putchar('\n'); + endnetgrent(); + } + } + return rv; +} + +/* * utmpx */ |