]>
git.saurik.com Git - apple/network_cmds.git/blob - revnetgroup.tproj/revnetgroup.c
88a0cfda1cf1adbf037fd62868b8e8300a78444e
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
23 /* $OpenBSD: revnetgroup.c,v 1.1 1997/04/15 22:06:15 maja Exp $ */
26 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
28 * Redistribution and use in source and binary forms, with or without
29 * modification, are permitted provided that the following conditions
31 * 1. Redistributions of source code must retain the above copyright
32 * notice, this list of conditions and the following disclaimer.
33 * 2. Redistributions in binary form must reproduce the above copyright
34 * notice, this list of conditions and the following disclaimer in the
35 * documentation and/or other materials provided with the distribution.
36 * 3. All advertising materials mentioning features or use of this software
37 * must display the following acknowledgement:
38 * This product includes software developed by Bill Paul.
39 * 4. Neither the name of the author nor the names of any co-contributors
40 * may be used to endorse or promote products derived from this software
41 * without specific prior written permission.
43 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
44 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46 * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR CONTRIBUTORS BE LIABLE
47 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55 * reverse netgroup map generator program
57 * Written by Bill Paul <wpaul@ctr.columbia.edu>
58 * Center for Telecommunications Research
59 * Columbia University, New York City
61 * $FreeBSD: revnetgroup.c,v 1.7 1997/03/28 15:48:15 imp Exp $
72 static const char rcsid
[] = "$OpenBSD: revnetgroup.c,v 1.1 1997/04/15 22:06:15 maja Exp $";
75 /* Default location of netgroup file. */
76 char *netgroup
= "/etc/netgroup";
78 /* Stored hash table version of 'forward' netgroup database. */
79 struct group_entry
*gtable
[TABLESIZE
];
82 * Stored hash table of 'reverse' netgroup member database
83 * which we will construct.
85 struct member_entry
*mtable
[TABLESIZE
];
90 fprintf (stderr
,"usage: %s -u|-h [-f netgroup file]\n",prog
);
102 char readbuf
[LINSIZ
];
103 struct group_entry
*gcur
;
104 struct member_entry
*mcur
;
105 char *host
, *user
, *domain
;
107 char *key
= NULL
, *data
= NULL
;
113 while ((ch
= getopt(argc
, argv
, "uhf:")) != -1) {
117 warnx("please use only one of -u or -h");
124 warnx("please use only one of -u or -h");
141 if (strcmp(netgroup
, "-")) {
142 if ((fp
= fopen(netgroup
, "r")) == NULL
) {
149 /* Stuff all the netgroup names and members into a hash table. */
150 while (fgets(readbuf
, LINSIZ
, fp
)) {
151 if (readbuf
[0] == '#')
153 /* handle backslash line continuations */
154 while(readbuf
[strlen(readbuf
) - 2] == '\\') {
155 fgets((char *)&readbuf
[strlen(readbuf
) - 2],
156 sizeof(readbuf
) - strlen(readbuf
), fp
);
159 if ((data
= (char *)(strpbrk(readbuf
, " \t") + 1)) < (char *)2)
161 key
= (char *)&readbuf
;
163 store(gtable
, key
, data
);
169 * Find all members of each netgroup and keep track of which
170 * group they belong to.
172 for (i
= 0; i
< TABLESIZE
; i
++) {
175 __setnetgrent(gcur
->key
);
176 while(__getnetgrent(&host
, &user
, &domain
) != NULL
) {
178 if (!(host
&& !strcmp(host
,"-"))) {
182 domain
? domain
: "*");
185 if (!(user
&& !strcmp(user
,"-"))) {
189 domain
? domain
: "*");
197 /* Release resources used by the netgroup parser code. */
200 /* Spew out the results. */
201 for (i
= 0; i
< TABLESIZE
; i
++) {
204 struct grouplist
*tmp
;
205 printf ("%s.%s\t", mcur
->key
, mcur
->domain
);
208 printf ("%s", tmp
->groupname
);
218 /* Let the OS free all our resources. */