/* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. * You may only use this file in accordance with the terms of version * 1.0 of the CDDL. * * A full copy of the text of the CDDL should have accompanied this * source. A copy of the CDDL is also available via the Internet at * http://www.illumos.org/license/CDDL. */ /* * Copyright 2012 Nexenta Systems, Inc. All rights reserved. * Copyright 2021 Planets Communications B.V. */ #include #include #include #include #include #include "getent.h" int dogetnetgr(const char **list) { uint_t cnt; char *host, *user, *dom; const char *host_filter, *user_filter, *dom_filter; int rc = EXC_SUCCESS; if (list == NULL || *list == NULL) return (EXC_ENUM_NOT_SUPPORTED); /* * Count the arguments given. */ cnt = 0; while (list[cnt] != NULL) cnt++; switch (cnt) { case 1: if (setnetgrent(list[0]) != 0) return (EXC_ERROR); printf("%s", list[0]); while (getnetgrent(&host, &user, &dom) != 0) { printf(" (%s,%s,%s)", (host) ? host : "", (user) ? user : "", (dom) ? dom : ""); } printf("\n"); break; case 4: host_filter = (strcmp(list[1], "*") == 0) ? NULL : list[1]; user_filter = (strcmp(list[2], "*") == 0) ? NULL : list[2]; dom_filter = (strcmp(list[3], "*") == 0) ? NULL : list[3]; printf("%-21s (%s,%s,%s) = %d\n", list[0], (host_filter) ? host_filter : "", (user_filter) ? user_filter : "", (dom_filter) ? dom_filter : "", innetgr(list[0], host_filter, user_filter, dom_filter)); break; default: rc = EXC_SYNTAX; break; } return (rc); }