X-Git-Url: https://git.cameronkatri.com/getent-darwin.git/blobdiff_plain/e25b8b107fb02526bef485d5459e0e0a734e9ee6..HEAD:/getent.c diff --git a/getent.c b/getent.c index 7424577..c8a869a 100644 --- a/getent.c +++ b/getent.c @@ -1,6 +1,8 @@ /* $NetBSD: getent.c,v 1.7 2005/08/24 14:31:02 ginsbach Exp $ */ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2004 The NetBSD Foundation, Inc. * All rights reserved. * @@ -39,7 +41,6 @@ __FBSDID("$FreeBSD$"); #include #include #include /* for INET6_ADDRSTRLEN */ -#include #include #include @@ -56,11 +57,16 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include "utmpx-defines.h" +int setutxdb(int db, const char *file); + static int usage(void); 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 *[]); @@ -83,6 +89,7 @@ static struct getentdb { { "ethers", ethers, }, { "group", group, }, { "hosts", hosts, }, + { "netgroup", netgroup, }, { "networks", networks, }, { "passwd", passwd, }, { "protocols", protocols, }, @@ -570,6 +577,47 @@ shells(int argc, char *argv[]) return rv; } +/* + * 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 */