xref: /minix3/external/bsd/libpcap/dist/Win32/Src/getnetent.c (revision d56f51ea7d8b9045e5c8e2028422523d3f9a5840)
1*d56f51eaSDavid van Moolenbroek /*
2*d56f51eaSDavid van Moolenbroek  * Copyright (c) 1983 Regents of the University of California.
3*d56f51eaSDavid van Moolenbroek  * All rights reserved.
4*d56f51eaSDavid van Moolenbroek  *
5*d56f51eaSDavid van Moolenbroek  * Redistribution and use in source and binary forms are permitted
6*d56f51eaSDavid van Moolenbroek  * provided that the above copyright notice and this paragraph are
7*d56f51eaSDavid van Moolenbroek  * duplicated in all such forms and that any documentation,
8*d56f51eaSDavid van Moolenbroek  * advertising materials, and other materials related to such
9*d56f51eaSDavid van Moolenbroek  * distribution and use acknowledge that the software was developed
10*d56f51eaSDavid van Moolenbroek  * by the University of California, Berkeley.  The name of the
11*d56f51eaSDavid van Moolenbroek  * University may not be used to endorse or promote products derived
12*d56f51eaSDavid van Moolenbroek  * from this software without specific prior written permission.
13*d56f51eaSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14*d56f51eaSDavid van Moolenbroek  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15*d56f51eaSDavid van Moolenbroek  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16*d56f51eaSDavid van Moolenbroek  */
17*d56f51eaSDavid van Moolenbroek 
18*d56f51eaSDavid van Moolenbroek #if defined(LIBC_SCCS) && !defined(lint)
19*d56f51eaSDavid van Moolenbroek static char sccsid[] = "@(#)getnetent.c	5.5 (Berkeley) 6/27/88";
20*d56f51eaSDavid van Moolenbroek #endif /* LIBC_SCCS and not lint */
21*d56f51eaSDavid van Moolenbroek 
22*d56f51eaSDavid van Moolenbroek #include "inetprivate.h"
23*d56f51eaSDavid van Moolenbroek 
24*d56f51eaSDavid van Moolenbroek #define	MAXALIASES	35
25*d56f51eaSDavid van Moolenbroek 
26*d56f51eaSDavid van Moolenbroek static char NETDB[] = _PATH_NETWORKS;
27*d56f51eaSDavid van Moolenbroek static FILE *netf = NULL;
28*d56f51eaSDavid van Moolenbroek static char line[BUFSIZ+1];
29*d56f51eaSDavid van Moolenbroek static struct netent net;
30*d56f51eaSDavid van Moolenbroek static char *net_aliases[MAXALIASES];
31*d56f51eaSDavid van Moolenbroek static char *any(char *, char *);
32*d56f51eaSDavid van Moolenbroek 
33*d56f51eaSDavid van Moolenbroek int _net_stayopen;
34*d56f51eaSDavid van Moolenbroek extern u_int32_t inet_network(const char *cp);
35*d56f51eaSDavid van Moolenbroek 
36*d56f51eaSDavid van Moolenbroek void
setnetent(f)37*d56f51eaSDavid van Moolenbroek setnetent(f)
38*d56f51eaSDavid van Moolenbroek 	int f;
39*d56f51eaSDavid van Moolenbroek {
40*d56f51eaSDavid van Moolenbroek 	if (netf == NULL)
41*d56f51eaSDavid van Moolenbroek 		netf = fopen(NETDB, "r" );
42*d56f51eaSDavid van Moolenbroek 	else
43*d56f51eaSDavid van Moolenbroek 		rewind(netf);
44*d56f51eaSDavid van Moolenbroek 	_net_stayopen |= f;
45*d56f51eaSDavid van Moolenbroek }
46*d56f51eaSDavid van Moolenbroek 
47*d56f51eaSDavid van Moolenbroek void
endnetent()48*d56f51eaSDavid van Moolenbroek endnetent()
49*d56f51eaSDavid van Moolenbroek {
50*d56f51eaSDavid van Moolenbroek 	if (netf) {
51*d56f51eaSDavid van Moolenbroek 		fclose(netf);
52*d56f51eaSDavid van Moolenbroek 		netf = NULL;
53*d56f51eaSDavid van Moolenbroek 	}
54*d56f51eaSDavid van Moolenbroek 	_net_stayopen = 0;
55*d56f51eaSDavid van Moolenbroek }
56*d56f51eaSDavid van Moolenbroek 
57*d56f51eaSDavid van Moolenbroek struct netent *
getnetent()58*d56f51eaSDavid van Moolenbroek getnetent()
59*d56f51eaSDavid van Moolenbroek {
60*d56f51eaSDavid van Moolenbroek 	char *p;
61*d56f51eaSDavid van Moolenbroek 	register char *cp, **q;
62*d56f51eaSDavid van Moolenbroek 
63*d56f51eaSDavid van Moolenbroek 	if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL)
64*d56f51eaSDavid van Moolenbroek 		return (NULL);
65*d56f51eaSDavid van Moolenbroek again:
66*d56f51eaSDavid van Moolenbroek 	p = fgets(line, BUFSIZ, netf);
67*d56f51eaSDavid van Moolenbroek 	if (p == NULL)
68*d56f51eaSDavid van Moolenbroek 		return (NULL);
69*d56f51eaSDavid van Moolenbroek 	if (*p == '#')
70*d56f51eaSDavid van Moolenbroek 		goto again;
71*d56f51eaSDavid van Moolenbroek 	cp = any(p, "#\n");
72*d56f51eaSDavid van Moolenbroek 	if (cp == NULL)
73*d56f51eaSDavid van Moolenbroek 		goto again;
74*d56f51eaSDavid van Moolenbroek 	*cp = '\0';
75*d56f51eaSDavid van Moolenbroek 	net.n_name = p;
76*d56f51eaSDavid van Moolenbroek 	cp = any(p, " \t");
77*d56f51eaSDavid van Moolenbroek 	if (cp == NULL)
78*d56f51eaSDavid van Moolenbroek 		goto again;
79*d56f51eaSDavid van Moolenbroek 	*cp++ = '\0';
80*d56f51eaSDavid van Moolenbroek 	while (*cp == ' ' || *cp == '\t')
81*d56f51eaSDavid van Moolenbroek 		cp++;
82*d56f51eaSDavid van Moolenbroek 	p = any(cp, " \t");
83*d56f51eaSDavid van Moolenbroek 	if (p != NULL)
84*d56f51eaSDavid van Moolenbroek 		*p++ = '\0';
85*d56f51eaSDavid van Moolenbroek 	net.n_net = inet_network(cp);
86*d56f51eaSDavid van Moolenbroek 	net.n_addrtype = AF_INET;
87*d56f51eaSDavid van Moolenbroek 	q = net.n_aliases = net_aliases;
88*d56f51eaSDavid van Moolenbroek 	if (p != NULL)
89*d56f51eaSDavid van Moolenbroek 		cp = p;
90*d56f51eaSDavid van Moolenbroek 	while (cp && *cp) {
91*d56f51eaSDavid van Moolenbroek 		if (*cp == ' ' || *cp == '\t') {
92*d56f51eaSDavid van Moolenbroek 			cp++;
93*d56f51eaSDavid van Moolenbroek 			continue;
94*d56f51eaSDavid van Moolenbroek 		}
95*d56f51eaSDavid van Moolenbroek 		if (q < &net_aliases[MAXALIASES - 1])
96*d56f51eaSDavid van Moolenbroek 			*q++ = cp;
97*d56f51eaSDavid van Moolenbroek 		cp = any(cp, " \t");
98*d56f51eaSDavid van Moolenbroek 		if (cp != NULL)
99*d56f51eaSDavid van Moolenbroek 			*cp++ = '\0';
100*d56f51eaSDavid van Moolenbroek 	}
101*d56f51eaSDavid van Moolenbroek 	*q = NULL;
102*d56f51eaSDavid van Moolenbroek 	return (&net);
103*d56f51eaSDavid van Moolenbroek }
104*d56f51eaSDavid van Moolenbroek 
105*d56f51eaSDavid van Moolenbroek static char *
any(cp,match)106*d56f51eaSDavid van Moolenbroek any(cp, match)
107*d56f51eaSDavid van Moolenbroek 	register char *cp;
108*d56f51eaSDavid van Moolenbroek 	char *match;
109*d56f51eaSDavid van Moolenbroek {
110*d56f51eaSDavid van Moolenbroek 	register char *mp, c;
111*d56f51eaSDavid van Moolenbroek 
112*d56f51eaSDavid van Moolenbroek 	while (c = *cp) {
113*d56f51eaSDavid van Moolenbroek 		for (mp = match; *mp; mp++)
114*d56f51eaSDavid van Moolenbroek 			if (*mp == c)
115*d56f51eaSDavid van Moolenbroek 				return (cp);
116*d56f51eaSDavid van Moolenbroek 		cp++;
117*d56f51eaSDavid van Moolenbroek 	}
118*d56f51eaSDavid van Moolenbroek 	return ((char *)0);
119*d56f51eaSDavid van Moolenbroek }
120