1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2012 Nexenta Systems, Inc. All rights reserved.
14 * Copyright 2021 Planets Communications B.V.
15 */
16
17 #include <stdio.h>
18 #include <stdlib.h>
19 #include <errno.h>
20 #include <netdb.h>
21 #include <string.h>
22 #include "getent.h"
23
24 int
dogetnetgr(const char ** list)25 dogetnetgr(const char **list)
26 {
27 uint_t cnt;
28 char *host, *user, *dom;
29 const char *host_filter, *user_filter, *dom_filter;
30 int rc = EXC_SUCCESS;
31
32 if (list == NULL || *list == NULL)
33 return (EXC_ENUM_NOT_SUPPORTED);
34
35 /*
36 * Count the arguments given.
37 */
38 cnt = 0;
39 while (list[cnt] != NULL)
40 cnt++;
41
42 switch (cnt) {
43 case 1:
44 if (setnetgrent(list[0]) != 0)
45 return (EXC_ERROR);
46 printf("%s", list[0]);
47 while (getnetgrent(&host, &user, &dom) != 0) {
48 printf(" (%s,%s,%s)",
49 (host) ? host : "",
50 (user) ? user : "",
51 (dom) ? dom : "");
52 }
53 printf("\n");
54 break;
55 case 4:
56 host_filter = (strcmp(list[1], "*") == 0) ? NULL : list[1];
57 user_filter = (strcmp(list[2], "*") == 0) ? NULL : list[2];
58 dom_filter = (strcmp(list[3], "*") == 0) ? NULL : list[3];
59 printf("%-21s (%s,%s,%s) = %d\n", list[0],
60 (host_filter) ? host_filter : "",
61 (user_filter) ? user_filter : "",
62 (dom_filter) ? dom_filter : "",
63 innetgr(list[0], host_filter, user_filter, dom_filter));
64 break;
65 default:
66 rc = EXC_SYNTAX;
67 break;
68 }
69
70 return (rc);
71 }
72