]>
git.proxmox.com Git - mirror_edk2.git/blob - StdLib/BsdSocketLib/getnetbynis.c
2 * Copyright (c) 1994, Garrett Wollman
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 #if defined(LIBC_SCCS) && !defined(lint)
27 static char sccsid
[] = "@(#)$Id: getnetbynis.c,v 1.1.1.1 2003/11/19 01:51:28 kyu3 Exp $";
28 static char rcsid
[] = "$Id: getnetbynis.c,v 1.1.1.1 2003/11/19 01:51:28 kyu3 Exp $";
29 #endif /* LIBC_SCCS and not lint */
31 #include <sys/param.h>
32 #include <sys/socket.h>
33 #include <netinet/in.h>
34 #include <arpa/inet.h>
41 #include <arpa/nameser.h>
44 #include <rpcsvc/yp_prot.h>
45 #include <rpcsvc/ypclnt.h>
52 static char *host_aliases
[MAXALIASES
];
55 static struct netent
*
56 _getnetbynis(const char *name
, char *map
, int af
)
59 register char *cp
, **q
;
62 static struct netent h
;
63 static char *domain
= (char *)NULL
;
64 static char ypbuf
[YPMAXRECORD
+ 2];
75 if (domain
== (char *)NULL
)
76 if (yp_get_default_domain (&domain
))
79 if (yp_match(domain
, map
, name
, strlen(name
), &result
, &resultlen
))
82 bcopy((char *)result
, (char *)&ypbuf
, resultlen
);
83 ypbuf
[resultlen
] = '\0';
85 result
= (char *)&ypbuf
;
87 if ((cp
= index(result
, '\n')))
90 cp
= strpbrk(result
, " \t");
94 while (*cp
== ' ' || *cp
== '\t')
97 h
.n_net
= inet_network(cp
);
98 h
.n_addrtype
= AF_INET
;
100 q
= h
.n_aliases
= host_aliases
;
101 cp
= strpbrk(cp
, " \t");
105 if (*cp
== ' ' || *cp
== '\t') {
109 if (q
< &host_aliases
[MAXALIASES
- 1])
111 cp
= strpbrk(cp
, " \t");
123 _getnetbynisname(const char *name
)
125 return _getnetbynis(name
, "networks.byname", AF_INET
);
129 _getnetbynisaddr(unsigned long addr
, int af
)
134 unsigned int netbr
[4];
138 errno
= EAFNOSUPPORT
;
142 for (nn
= 4, net2
= addr
; net2
; net2
>>= 8) {
143 netbr
[--nn
] = net2
& 0xff;
147 case 3: /* Class A */
148 sprintf(buf
, "%u", netbr
[3]);
150 case 2: /* Class B */
151 sprintf(buf
, "%u.%u", netbr
[2], netbr
[3]);
153 case 1: /* Class C */
154 sprintf(buf
, "%u.%u.%u", netbr
[1], netbr
[2], netbr
[3]);
156 case 0: /* Class D - E */
157 sprintf(buf
, "%u.%u.%u.%u", netbr
[0], netbr
[1],
163 cp
= str
+ (strlen(str
) - 2);
165 while(!strcmp(cp
, ".0")) {
167 cp
= str
+ (strlen(str
) - 2);
170 return _getnetbynis(str
, "networks.byaddr", af
);