11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/* $Id: fake-rfc2553.h,v 1.16 2008/07/14 11:37:37 djm Exp $ */
21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*
41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Copyright (C) 2000-2003 Damien Miller.  All rights reserved.
51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Copyright (C) 1999 WIDE Project.  All rights reserved.
61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *
71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Redistribution and use in source and binary forms, with or without
81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * modification, are permitted provided that the following conditions
91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * are met:
101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 1. Redistributions of source code must retain the above copyright
111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    notice, this list of conditions and the following disclaimer.
121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 2. Redistributions in binary form must reproduce the above copyright
131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    notice, this list of conditions and the following disclaimer in the
141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    documentation and/or other materials provided with the distribution.
151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * 3. Neither the name of the project nor the names of its contributors
161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    may be used to endorse or promote products derived from this software
171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *    without specific prior written permission.
181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *
191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * SUCH DAMAGE.
301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */
311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*
331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Pseudo-implementation of RFC2553 name / address resolution functions
341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *
351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * But these functions are not implemented correctly. The minimum subset
361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * is implemented for ssh use only. For example, this routine assumes
371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * that ai_family is AF_INET. Don't use it for another purpose.
381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */
391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef _FAKE_RFC2553_H
411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define _FAKE_RFC2553_H
421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include "includes.h"
441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#include <sys/types.h>
451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#if defined(HAVE_NETDB_H)
461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# include <netdb.h>
471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*
501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * First, socket and INET6 related definitions
511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */
521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define	_SS_MAXSIZE	128	/* Implementation specific max size */
541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define       _SS_PADSIZE     (_SS_MAXSIZE - sizeof (struct sockaddr))
551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct sockaddr_storage {
561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	struct sockaddr	ss_sa;
571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	char		__ss_pad2[_SS_PADSIZE];
581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood};
591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define ss_family ss_sa.sa_family
601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef IN6_IS_ADDR_LOOPBACK
631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define IN6_IS_ADDR_LOOPBACK(a) \
641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	(((u_int32_t *)(a))[0] == 0 && ((u_int32_t *)(a))[1] == 0 && \
651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	 ((u_int32_t *)(a))[2] == 0 && ((u_int32_t *)(a))[3] == htonl(1))
661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !IN6_IS_ADDR_LOOPBACK */
671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_STRUCT_IN6_ADDR
691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct in6_addr {
701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	u_int8_t	s6_addr[16];
711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood};
721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_STRUCT_IN6_ADDR */
731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_STRUCT_SOCKADDR_IN6
751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct sockaddr_in6 {
761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	unsigned short	sin6_family;
771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	u_int16_t	sin6_port;
781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	u_int32_t	sin6_flowinfo;
791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	struct in6_addr	sin6_addr;
801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	u_int32_t	sin6_scope_id;
811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood};
821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_STRUCT_SOCKADDR_IN6 */
831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef AF_INET6
851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/* Define it to something that should never appear */
861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define AF_INET6 AF_MAX
871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
891305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*
901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood * Next, RFC2553 name / address resolution API
911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood */
921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef NI_NUMERICHOST
941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define NI_NUMERICHOST    (1)
951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef NI_NAMEREQD
971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define NI_NAMEREQD       (1<<1)
981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef NI_NUMERICSERV
1001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define NI_NUMERICSERV    (1<<2)
1011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1031305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef AI_PASSIVE
1041305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define AI_PASSIVE		(1)
1051305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1061305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef AI_CANONNAME
1071305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define AI_CANONNAME		(1<<1)
1081305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1091305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef AI_NUMERICHOST
1101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define AI_NUMERICHOST		(1<<2)
1111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef NI_MAXSERV
1141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define NI_MAXSERV 32
1151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !NI_MAXSERV */
1161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef NI_MAXHOST
1171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define NI_MAXHOST 1025
1181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !NI_MAXHOST */
1191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef EAI_NODATA
1211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define EAI_NODATA	(INT_MAX - 1)
1221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef EAI_MEMORY
1241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define EAI_MEMORY	(INT_MAX - 2)
1251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef EAI_NONAME
1271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define EAI_NONAME	(INT_MAX - 3)
1281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef EAI_SYSTEM
1301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define EAI_SYSTEM	(INT_MAX - 4)
1311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef EAI_FAMILY
1331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# define EAI_FAMILY	(INT_MAX - 5)
1341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_STRUCT_ADDRINFO
1371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstruct addrinfo {
1381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
1391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	int	ai_family;	/* PF_xxx */
1401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	int	ai_socktype;	/* SOCK_xxx */
1411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
1421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	size_t	ai_addrlen;	/* length of ai_addr */
1431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	char	*ai_canonname;	/* canonical name for hostname */
1441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	struct sockaddr *ai_addr;	/* binary address */
1451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood	struct addrinfo *ai_next;	/* next structure in linked list */
1461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood};
1471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_STRUCT_ADDRINFO */
1481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_GETADDRINFO
1501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifdef getaddrinfo
1511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# undef getaddrinfo
1521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif
1531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define getaddrinfo(a,b,c,d)	(ssh_getaddrinfo(a,b,c,d))
1541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint getaddrinfo(const char *, const char *,
1551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    const struct addrinfo *, struct addrinfo **);
1561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_GETADDRINFO */
1571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#if !defined(HAVE_GAI_STRERROR) && !defined(HAVE_CONST_GAI_STRERROR_PROTO)
1591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define gai_strerror(a)		(_ssh_compat_gai_strerror(a))
1601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodchar *gai_strerror(int);
1611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_GAI_STRERROR */
1621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_FREEADDRINFO
1641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define freeaddrinfo(a)		(ssh_freeaddrinfo(a))
1651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodvoid freeaddrinfo(struct addrinfo *);
1661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_FREEADDRINFO */
1671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#ifndef HAVE_GETNAMEINFO
1691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#define getnameinfo(a,b,c,d,e,f,g) (ssh_getnameinfo(a,b,c,d,e,f,g))
1701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodint getnameinfo(const struct sockaddr *, size_t, char *, size_t,
1711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    char *, size_t, int);
1721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !HAVE_GETNAMEINFO */
1731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
1741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#endif /* !_FAKE_RFC2553_H */
1751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
176