xref: /freebsd/contrib/ldns/compat/fake-rfc2553.h (revision cfe30d02adda7c3b5c76156ac52d50d8cab325d9)
1*7b5038d7SDag-Erling Smørgrav /* From openssh 4.3p2 filename openbsd-compat/fake-rfc2553.h */
2*7b5038d7SDag-Erling Smørgrav /*
3*7b5038d7SDag-Erling Smørgrav  * Copyright (C) 2000-2003 Damien Miller.  All rights reserved.
4*7b5038d7SDag-Erling Smørgrav  * Copyright (C) 1999 WIDE Project.  All rights reserved.
5*7b5038d7SDag-Erling Smørgrav  *
6*7b5038d7SDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
7*7b5038d7SDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
8*7b5038d7SDag-Erling Smørgrav  * are met:
9*7b5038d7SDag-Erling Smørgrav  * 1. Redistributions of source code must retain the above copyright
10*7b5038d7SDag-Erling Smørgrav  *    notice, this list of conditions and the following disclaimer.
11*7b5038d7SDag-Erling Smørgrav  * 2. Redistributions in binary form must reproduce the above copyright
12*7b5038d7SDag-Erling Smørgrav  *    notice, this list of conditions and the following disclaimer in the
13*7b5038d7SDag-Erling Smørgrav  *    documentation and/or other materials provided with the distribution.
14*7b5038d7SDag-Erling Smørgrav  * 3. Neither the name of the project nor the names of its contributors
15*7b5038d7SDag-Erling Smørgrav  *    may be used to endorse or promote products derived from this software
16*7b5038d7SDag-Erling Smørgrav  *    without specific prior written permission.
17*7b5038d7SDag-Erling Smørgrav  *
18*7b5038d7SDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
19*7b5038d7SDag-Erling Smørgrav  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*7b5038d7SDag-Erling Smørgrav  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*7b5038d7SDag-Erling Smørgrav  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
22*7b5038d7SDag-Erling Smørgrav  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*7b5038d7SDag-Erling Smørgrav  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*7b5038d7SDag-Erling Smørgrav  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*7b5038d7SDag-Erling Smørgrav  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*7b5038d7SDag-Erling Smørgrav  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*7b5038d7SDag-Erling Smørgrav  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*7b5038d7SDag-Erling Smørgrav  * SUCH DAMAGE.
29*7b5038d7SDag-Erling Smørgrav  */
30*7b5038d7SDag-Erling Smørgrav 
31*7b5038d7SDag-Erling Smørgrav /*
32*7b5038d7SDag-Erling Smørgrav  * Pseudo-implementation of RFC2553 name / address resolution functions
33*7b5038d7SDag-Erling Smørgrav  *
34*7b5038d7SDag-Erling Smørgrav  * But these functions are not implemented correctly. The minimum subset
35*7b5038d7SDag-Erling Smørgrav  * is implemented for ssh use only. For example, this routine assumes
36*7b5038d7SDag-Erling Smørgrav  * that ai_family is AF_INET. Don't use it for another purpose.
37*7b5038d7SDag-Erling Smørgrav  */
38*7b5038d7SDag-Erling Smørgrav 
39*7b5038d7SDag-Erling Smørgrav #ifndef _FAKE_RFC2553_H
40*7b5038d7SDag-Erling Smørgrav #define _FAKE_RFC2553_H
41*7b5038d7SDag-Erling Smørgrav 
42*7b5038d7SDag-Erling Smørgrav #include <sys/types.h>
43*7b5038d7SDag-Erling Smørgrav #include <sys/socket.h>
44*7b5038d7SDag-Erling Smørgrav #include <netdb.h>
45*7b5038d7SDag-Erling Smørgrav #include <limits.h>
46*7b5038d7SDag-Erling Smørgrav 
47*7b5038d7SDag-Erling Smørgrav #ifdef __cplusplus
48*7b5038d7SDag-Erling Smørgrav extern "C" {
49*7b5038d7SDag-Erling Smørgrav #endif
50*7b5038d7SDag-Erling Smørgrav 
51*7b5038d7SDag-Erling Smørgrav /*
52*7b5038d7SDag-Erling Smørgrav  * First, socket and INET6 related definitions
53*7b5038d7SDag-Erling Smørgrav  */
54*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
55*7b5038d7SDag-Erling Smørgrav #ifndef _SS_MAXSIZE
56*7b5038d7SDag-Erling Smørgrav # define	_SS_MAXSIZE	128	/* Implementation specific max size */
57*7b5038d7SDag-Erling Smørgrav # define       _SS_PADSIZE     (_SS_MAXSIZE - sizeof (struct sockaddr))
58*7b5038d7SDag-Erling Smørgrav struct sockaddr_storage {
59*7b5038d7SDag-Erling Smørgrav 	struct sockaddr	ss_sa;
60*7b5038d7SDag-Erling Smørgrav 	char		__ss_pad2[_SS_PADSIZE];
61*7b5038d7SDag-Erling Smørgrav };
62*7b5038d7SDag-Erling Smørgrav # define ss_family ss_sa.sa_family
63*7b5038d7SDag-Erling Smørgrav #endif /* _SS_MAXSIZE */
64*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
65*7b5038d7SDag-Erling Smørgrav 
66*7b5038d7SDag-Erling Smørgrav #ifndef IN6_IS_ADDR_LOOPBACK
67*7b5038d7SDag-Erling Smørgrav # define IN6_IS_ADDR_LOOPBACK(a) \
68*7b5038d7SDag-Erling Smørgrav 	(((uint32_t *)(a))[0] == 0 && ((uint32_t *)(a))[1] == 0 && \
69*7b5038d7SDag-Erling Smørgrav 	 ((uint32_t *)(a))[2] == 0 && ((uint32_t *)(a))[3] == htonl(1))
70*7b5038d7SDag-Erling Smørgrav #endif /* !IN6_IS_ADDR_LOOPBACK */
71*7b5038d7SDag-Erling Smørgrav 
72*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_STRUCT_IN6_ADDR
73*7b5038d7SDag-Erling Smørgrav struct in6_addr {
74*7b5038d7SDag-Erling Smørgrav 	uint8_t	s6_addr[16];
75*7b5038d7SDag-Erling Smørgrav };
76*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_STRUCT_IN6_ADDR */
77*7b5038d7SDag-Erling Smørgrav 
78*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_STRUCT_SOCKADDR_IN6
79*7b5038d7SDag-Erling Smørgrav struct sockaddr_in6 {
80*7b5038d7SDag-Erling Smørgrav 	unsigned short	sin6_family;
81*7b5038d7SDag-Erling Smørgrav 	uint16_t	sin6_port;
82*7b5038d7SDag-Erling Smørgrav 	uint32_t	sin6_flowinfo;
83*7b5038d7SDag-Erling Smørgrav 	struct in6_addr	sin6_addr;
84*7b5038d7SDag-Erling Smørgrav };
85*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_STRUCT_SOCKADDR_IN6 */
86*7b5038d7SDag-Erling Smørgrav 
87*7b5038d7SDag-Erling Smørgrav #ifndef AF_INET6
88*7b5038d7SDag-Erling Smørgrav /* Define it to something that should never appear */
89*7b5038d7SDag-Erling Smørgrav #define AF_INET6 AF_MAX
90*7b5038d7SDag-Erling Smørgrav #endif
91*7b5038d7SDag-Erling Smørgrav 
92*7b5038d7SDag-Erling Smørgrav /*
93*7b5038d7SDag-Erling Smørgrav  * Next, RFC2553 name / address resolution API
94*7b5038d7SDag-Erling Smørgrav  */
95*7b5038d7SDag-Erling Smørgrav 
96*7b5038d7SDag-Erling Smørgrav #ifndef NI_NUMERICHOST
97*7b5038d7SDag-Erling Smørgrav # define NI_NUMERICHOST    (1)
98*7b5038d7SDag-Erling Smørgrav #endif
99*7b5038d7SDag-Erling Smørgrav #ifndef NI_NAMEREQD
100*7b5038d7SDag-Erling Smørgrav # define NI_NAMEREQD       (1<<1)
101*7b5038d7SDag-Erling Smørgrav #endif
102*7b5038d7SDag-Erling Smørgrav #ifndef NI_NUMERICSERV
103*7b5038d7SDag-Erling Smørgrav # define NI_NUMERICSERV    (1<<2)
104*7b5038d7SDag-Erling Smørgrav #endif
105*7b5038d7SDag-Erling Smørgrav 
106*7b5038d7SDag-Erling Smørgrav #ifndef AI_PASSIVE
107*7b5038d7SDag-Erling Smørgrav # define AI_PASSIVE		(1)
108*7b5038d7SDag-Erling Smørgrav #endif
109*7b5038d7SDag-Erling Smørgrav #ifndef AI_CANONNAME
110*7b5038d7SDag-Erling Smørgrav # define AI_CANONNAME		(1<<1)
111*7b5038d7SDag-Erling Smørgrav #endif
112*7b5038d7SDag-Erling Smørgrav #ifndef AI_NUMERICHOST
113*7b5038d7SDag-Erling Smørgrav # define AI_NUMERICHOST		(1<<2)
114*7b5038d7SDag-Erling Smørgrav #endif
115*7b5038d7SDag-Erling Smørgrav 
116*7b5038d7SDag-Erling Smørgrav #ifndef NI_MAXSERV
117*7b5038d7SDag-Erling Smørgrav # define NI_MAXSERV 32
118*7b5038d7SDag-Erling Smørgrav #endif /* !NI_MAXSERV */
119*7b5038d7SDag-Erling Smørgrav #ifndef NI_MAXHOST
120*7b5038d7SDag-Erling Smørgrav # define NI_MAXHOST 1025
121*7b5038d7SDag-Erling Smørgrav #endif /* !NI_MAXHOST */
122*7b5038d7SDag-Erling Smørgrav 
123*7b5038d7SDag-Erling Smørgrav #ifndef INT_MAX
124*7b5038d7SDag-Erling Smørgrav #define INT_MAX		0xffffffff
125*7b5038d7SDag-Erling Smørgrav #endif
126*7b5038d7SDag-Erling Smørgrav 
127*7b5038d7SDag-Erling Smørgrav #ifndef EAI_NODATA
128*7b5038d7SDag-Erling Smørgrav # define EAI_NODATA	(INT_MAX - 1)
129*7b5038d7SDag-Erling Smørgrav #endif
130*7b5038d7SDag-Erling Smørgrav #ifndef EAI_MEMORY
131*7b5038d7SDag-Erling Smørgrav # define EAI_MEMORY	(INT_MAX - 2)
132*7b5038d7SDag-Erling Smørgrav #endif
133*7b5038d7SDag-Erling Smørgrav #ifndef EAI_NONAME
134*7b5038d7SDag-Erling Smørgrav # define EAI_NONAME	(INT_MAX - 3)
135*7b5038d7SDag-Erling Smørgrav #endif
136*7b5038d7SDag-Erling Smørgrav #ifndef EAI_SYSTEM
137*7b5038d7SDag-Erling Smørgrav # define EAI_SYSTEM	(INT_MAX - 4)
138*7b5038d7SDag-Erling Smørgrav #endif
139*7b5038d7SDag-Erling Smørgrav 
140*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_STRUCT_ADDRINFO
141*7b5038d7SDag-Erling Smørgrav struct addrinfo {
142*7b5038d7SDag-Erling Smørgrav 	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
143*7b5038d7SDag-Erling Smørgrav 	int	ai_family;	/* PF_xxx */
144*7b5038d7SDag-Erling Smørgrav 	int	ai_socktype;	/* SOCK_xxx */
145*7b5038d7SDag-Erling Smørgrav 	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
146*7b5038d7SDag-Erling Smørgrav 	size_t	ai_addrlen;	/* length of ai_addr */
147*7b5038d7SDag-Erling Smørgrav 	char	*ai_canonname;	/* canonical name for hostname */
148*7b5038d7SDag-Erling Smørgrav 	struct sockaddr *ai_addr;	/* binary address */
149*7b5038d7SDag-Erling Smørgrav 	struct addrinfo *ai_next;	/* next structure in linked list */
150*7b5038d7SDag-Erling Smørgrav };
151*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_STRUCT_ADDRINFO */
152*7b5038d7SDag-Erling Smørgrav 
153*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_GETADDRINFO
154*7b5038d7SDag-Erling Smørgrav #ifdef getaddrinfo
155*7b5038d7SDag-Erling Smørgrav # undef getaddrinfo
156*7b5038d7SDag-Erling Smørgrav #endif
157*7b5038d7SDag-Erling Smørgrav #define getaddrinfo(a,b,c,d)	(ssh_getaddrinfo(a,b,c,d))
158*7b5038d7SDag-Erling Smørgrav int getaddrinfo(const char *, const char *,
159*7b5038d7SDag-Erling Smørgrav     const struct addrinfo *, struct addrinfo **);
160*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_GETADDRINFO */
161*7b5038d7SDag-Erling Smørgrav 
162*7b5038d7SDag-Erling Smørgrav #if !defined(HAVE_GAI_STRERROR) && !defined(HAVE_CONST_GAI_STRERROR_PROTO)
163*7b5038d7SDag-Erling Smørgrav #define gai_strerror(a)		(ssh_gai_strerror(a))
164*7b5038d7SDag-Erling Smørgrav char *gai_strerror(int);
165*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_GAI_STRERROR */
166*7b5038d7SDag-Erling Smørgrav 
167*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_FREEADDRINFO
168*7b5038d7SDag-Erling Smørgrav #define freeaddrinfo(a)		(ssh_freeaddrinfo(a))
169*7b5038d7SDag-Erling Smørgrav void freeaddrinfo(struct addrinfo *);
170*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_FREEADDRINFO */
171*7b5038d7SDag-Erling Smørgrav 
172*7b5038d7SDag-Erling Smørgrav #ifndef HAVE_GETNAMEINFO
173*7b5038d7SDag-Erling Smørgrav #define getnameinfo(a,b,c,d,e,f,g) (ssh_getnameinfo(a,b,c,d,e,f,g))
174*7b5038d7SDag-Erling Smørgrav int getnameinfo(const struct sockaddr *, size_t, char *, size_t,
175*7b5038d7SDag-Erling Smørgrav     char *, size_t, int);
176*7b5038d7SDag-Erling Smørgrav #endif /* !HAVE_GETNAMEINFO */
177*7b5038d7SDag-Erling Smørgrav 
178*7b5038d7SDag-Erling Smørgrav #ifdef __cplusplus
179*7b5038d7SDag-Erling Smørgrav }
180*7b5038d7SDag-Erling Smørgrav #endif
181*7b5038d7SDag-Erling Smørgrav 
182*7b5038d7SDag-Erling Smørgrav #endif /* !_FAKE_RFC2553_H */
183*7b5038d7SDag-Erling Smørgrav 
184