1d7ce700605e1af0e455e31ec11f19ff21d26b525darylm/* 2d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * Copyright (c) 1983, 1993 3d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * The Regents of the University of California. All rights reserved. 4d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 5d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * Redistribution and use in source and binary forms, with or without 6d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * modification, are permitted provided that the following conditions 7d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * are met: 8d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 1. Redistributions of source code must retain the above copyright 9d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * notice, this list of conditions and the following disclaimer. 10d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 2. Redistributions in binary form must reproduce the above copyright 11d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * notice, this list of conditions and the following disclaimer in the 12d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * documentation and/or other materials provided with the distribution. 13d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 3. All advertising materials mentioning features or use of this software 14d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * must display the following acknowledgement: 15d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * This product includes software developed by the University of 16d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * California, Berkeley and its contributors. 17d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 4. Neither the name of the University nor the names of its contributors 18d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * may be used to endorse or promote products derived from this software 19d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * without specific prior written permission. 20d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 21d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * SUCH DAMAGE. 32d7ce700605e1af0e455e31ec11f19ff21d26b525darylm */ 33d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 34d7ce700605e1af0e455e31ec11f19ff21d26b525darylm/* Portions Copyright (c) 1993 Carlos Leandro and Rui Salgueiro 35d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * Dep. Matematica Universidade de Coimbra, Portugal, Europe 36d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 37d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * Permission to use, copy, modify, and distribute this software for any 38d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * purpose with or without fee is hereby granted, provided that the above 39d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * copyright notice and this permission notice appear in all copies. 40d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * 41d7ce700605e1af0e455e31ec11f19ff21d26b525darylm * from getnetent.c 1.1 (Coimbra) 93/06/02 42d7ce700605e1af0e455e31ec11f19ff21d26b525darylm */ 43d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 44d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#if defined(LIBC_SCCS) && !defined(lint) 45d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic char sccsid[] = "@(#)getnetent.c 8.1 (Berkeley) 6/4/93"; 46d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic char orig_rcsid[] = "From: Id: getnetent.c,v 8.4 1997/06/01 20:34:37 vixie Exp"; 47d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic chat rcsid[] = "$Id: getnetbyht.c,v 1.1.1.1 2003/11/19 01:51:27 kyu3 Exp $"; 48d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#endif /* LIBC_SCCS and not lint */ 49d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 50d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <sys/types.h> 51d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <sys/socket.h> 52d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <netinet/in.h> 53d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <arpa/inet.h> 54d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <arpa/nameser.h> 55d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <netdb.h> 56d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <stdio.h> 57d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#include <string.h> 58d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 59d7ce700605e1af0e455e31ec11f19ff21d26b525darylm#define MAXALIASES 35 60d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 61d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic FILE *netf; 62d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic char line[BUFSIZ+1]; 63d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic struct netent net; 64d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic char *net_aliases[MAXALIASES]; 65d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstatic int _net_stayopen; 66d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 67d7ce700605e1af0e455e31ec11f19ff21d26b525darylmvoid 68d7ce700605e1af0e455e31ec11f19ff21d26b525darylm_setnethtent(int f) 69d7ce700605e1af0e455e31ec11f19ff21d26b525darylm{ 70d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 71d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (netf == NULL) 72d7ce700605e1af0e455e31ec11f19ff21d26b525darylm netf = fopen(_PATH_NETWORKS, "r" ); 73d7ce700605e1af0e455e31ec11f19ff21d26b525darylm else 74d7ce700605e1af0e455e31ec11f19ff21d26b525darylm rewind(netf); 75d7ce700605e1af0e455e31ec11f19ff21d26b525darylm _net_stayopen |= f; 76d7ce700605e1af0e455e31ec11f19ff21d26b525darylm} 77d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 78d7ce700605e1af0e455e31ec11f19ff21d26b525darylmvoid 79d7ce700605e1af0e455e31ec11f19ff21d26b525darylm_endnethtent() 80d7ce700605e1af0e455e31ec11f19ff21d26b525darylm{ 81d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 82d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (netf) { 83d7ce700605e1af0e455e31ec11f19ff21d26b525darylm fclose(netf); 84d7ce700605e1af0e455e31ec11f19ff21d26b525darylm netf = NULL; 85d7ce700605e1af0e455e31ec11f19ff21d26b525darylm } 86d7ce700605e1af0e455e31ec11f19ff21d26b525darylm _net_stayopen = 0; 87d7ce700605e1af0e455e31ec11f19ff21d26b525darylm} 88d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 89d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstruct netent * 90d7ce700605e1af0e455e31ec11f19ff21d26b525darylmgetnetent() 91d7ce700605e1af0e455e31ec11f19ff21d26b525darylm{ 92d7ce700605e1af0e455e31ec11f19ff21d26b525darylm char *p; 93d7ce700605e1af0e455e31ec11f19ff21d26b525darylm register char *cp, **q; 94d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 95d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (netf == NULL && (netf = fopen(_PATH_NETWORKS, "r" )) == NULL) 96d7ce700605e1af0e455e31ec11f19ff21d26b525darylm return (NULL); 97d7ce700605e1af0e455e31ec11f19ff21d26b525darylmagain: 98d7ce700605e1af0e455e31ec11f19ff21d26b525darylm p = fgets(line, sizeof line, netf); 99d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (p == NULL) 100d7ce700605e1af0e455e31ec11f19ff21d26b525darylm return (NULL); 101d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (*p == '#') 102d7ce700605e1af0e455e31ec11f19ff21d26b525darylm goto again; 103d7ce700605e1af0e455e31ec11f19ff21d26b525darylm cp = strpbrk(p, "#\n"); 104d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (cp == NULL) 105d7ce700605e1af0e455e31ec11f19ff21d26b525darylm goto again; 106d7ce700605e1af0e455e31ec11f19ff21d26b525darylm *cp = '\0'; 107d7ce700605e1af0e455e31ec11f19ff21d26b525darylm net.n_name = p; 108d7ce700605e1af0e455e31ec11f19ff21d26b525darylm cp = strpbrk(p, " \t"); 109d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (cp == NULL) 110d7ce700605e1af0e455e31ec11f19ff21d26b525darylm goto again; 111d7ce700605e1af0e455e31ec11f19ff21d26b525darylm *cp++ = '\0'; 112d7ce700605e1af0e455e31ec11f19ff21d26b525darylm while (*cp == ' ' || *cp == '\t') 113d7ce700605e1af0e455e31ec11f19ff21d26b525darylm cp++; 114d7ce700605e1af0e455e31ec11f19ff21d26b525darylm p = strpbrk(cp, " \t"); 115d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (p != NULL) 116d7ce700605e1af0e455e31ec11f19ff21d26b525darylm *p++ = '\0'; 117d7ce700605e1af0e455e31ec11f19ff21d26b525darylm net.n_net = inet_network(cp); 118d7ce700605e1af0e455e31ec11f19ff21d26b525darylm net.n_addrtype = AF_INET; 119d7ce700605e1af0e455e31ec11f19ff21d26b525darylm q = net.n_aliases = net_aliases; 120d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (p != NULL) 121d7ce700605e1af0e455e31ec11f19ff21d26b525darylm cp = p; 122d7ce700605e1af0e455e31ec11f19ff21d26b525darylm while (cp && *cp) { 123d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (*cp == ' ' || *cp == '\t') { 124d7ce700605e1af0e455e31ec11f19ff21d26b525darylm cp++; 125d7ce700605e1af0e455e31ec11f19ff21d26b525darylm continue; 126d7ce700605e1af0e455e31ec11f19ff21d26b525darylm } 127d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (q < &net_aliases[MAXALIASES - 1]) 128d7ce700605e1af0e455e31ec11f19ff21d26b525darylm *q++ = cp; 129d7ce700605e1af0e455e31ec11f19ff21d26b525darylm cp = strpbrk(cp, " \t"); 130d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (cp != NULL) 131d7ce700605e1af0e455e31ec11f19ff21d26b525darylm *cp++ = '\0'; 132d7ce700605e1af0e455e31ec11f19ff21d26b525darylm } 133d7ce700605e1af0e455e31ec11f19ff21d26b525darylm *q = NULL; 134d7ce700605e1af0e455e31ec11f19ff21d26b525darylm return (&net); 135d7ce700605e1af0e455e31ec11f19ff21d26b525darylm} 136d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 137d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstruct netent * 138d7ce700605e1af0e455e31ec11f19ff21d26b525darylm_getnetbyhtname(register const char *name) 139d7ce700605e1af0e455e31ec11f19ff21d26b525darylm{ 140d7ce700605e1af0e455e31ec11f19ff21d26b525darylm register struct netent *p; 141d7ce700605e1af0e455e31ec11f19ff21d26b525darylm register char **cp; 142d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 143d7ce700605e1af0e455e31ec11f19ff21d26b525darylm setnetent(_net_stayopen); 144d7ce700605e1af0e455e31ec11f19ff21d26b525darylm while ( NULL != (p = getnetent()) ) { 145d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (strcasecmp(p->n_name, name) == 0) 146d7ce700605e1af0e455e31ec11f19ff21d26b525darylm break; 147d7ce700605e1af0e455e31ec11f19ff21d26b525darylm for (cp = p->n_aliases; *cp != 0; cp++) 148d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (strcasecmp(*cp, name) == 0) 149d7ce700605e1af0e455e31ec11f19ff21d26b525darylm goto found; 150d7ce700605e1af0e455e31ec11f19ff21d26b525darylm } 151d7ce700605e1af0e455e31ec11f19ff21d26b525darylmfound: 152d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (!_net_stayopen) 153d7ce700605e1af0e455e31ec11f19ff21d26b525darylm endnetent(); 154d7ce700605e1af0e455e31ec11f19ff21d26b525darylm return (p); 155d7ce700605e1af0e455e31ec11f19ff21d26b525darylm} 156d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 157d7ce700605e1af0e455e31ec11f19ff21d26b525darylmstruct netent * 158d7ce700605e1af0e455e31ec11f19ff21d26b525darylm_getnetbyhtaddr(register unsigned long net, register int type) 159d7ce700605e1af0e455e31ec11f19ff21d26b525darylm{ 160d7ce700605e1af0e455e31ec11f19ff21d26b525darylm register struct netent *p; 161d7ce700605e1af0e455e31ec11f19ff21d26b525darylm 162d7ce700605e1af0e455e31ec11f19ff21d26b525darylm setnetent(_net_stayopen); 163d7ce700605e1af0e455e31ec11f19ff21d26b525darylm while ( NULL != (p = getnetent()) ) 164d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (p->n_addrtype == type && p->n_net == net) 165d7ce700605e1af0e455e31ec11f19ff21d26b525darylm break; 166d7ce700605e1af0e455e31ec11f19ff21d26b525darylm if (!_net_stayopen) 167d7ce700605e1af0e455e31ec11f19ff21d26b525darylm endnetent(); 168d7ce700605e1af0e455e31ec11f19ff21d26b525darylm return (p); 169d7ce700605e1af0e455e31ec11f19ff21d26b525darylm} 170