netdb.h revision 1.30
1/*	$OpenBSD: netdb.h,v 1.30 2012/01/17 02:36:55 deraadt Exp $	*/
2
3/*
4 * ++Copyright++ 1980, 1983, 1988, 1993
5 * -
6 * Copyright (c) 1980, 1983, 1988, 1993
7 *	The Regents of the University of California.  All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the University nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 * -
33 * Portions Copyright (c) 1993 by Digital Equipment Corporation.
34 *
35 * Permission to use, copy, modify, and distribute this software for any
36 * purpose with or without fee is hereby granted, provided that the above
37 * copyright notice and this permission notice appear in all copies, and that
38 * the name of Digital Equipment Corporation not be used in advertising or
39 * publicity pertaining to distribution of the document or software without
40 * specific, written prior permission.
41 *
42 * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
43 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
44 * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
45 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
46 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
47 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
48 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
49 * SOFTWARE.
50 * -
51 * --Copyright--
52 */
53
54/*
55 * Copyright (c) 1995, 1996, 1997, 1998, 1999 Craig Metz. All rights reserved.
56 *
57 * Redistribution and use in source and binary forms, with or without
58 * modification, are permitted provided that the following conditions
59 * are met:
60 * 1. Redistributions of source code must retain the above copyright
61 *    notice, this list of conditions and the following disclaimer.
62 * 2. Redistributions in binary form must reproduce the above copyright
63 *    notice, this list of conditions and the following disclaimer in the
64 *    documentation and/or other materials provided with the distribution.
65 * 3. Neither the name of the author nor the names of any contributors
66 *    may be used to endorse or promote products derived from this software
67 *    without specific prior written permission.
68 *
69 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
70 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
71 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
72 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
73 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
74 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
75 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
76 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
77 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
78 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
79 * SUCH DAMAGE.
80 */
81
82/*
83 *      @(#)netdb.h	8.1 (Berkeley) 6/2/93
84 *	$From: netdb.h,v 8.7 1996/05/09 05:59:09 vixie Exp $
85 */
86
87#ifndef _NETDB_H_
88#define _NETDB_H_
89
90#include <sys/param.h>
91#include <sys/cdefs.h>
92
93#define	_PATH_HEQUIV	"/etc/hosts.equiv"
94#define	_PATH_HOSTS	"/etc/hosts"
95#define	_PATH_NETWORKS	"/etc/networks"
96#define	_PATH_PROTOCOLS	"/etc/protocols"
97#define	_PATH_SERVICES	"/etc/services"
98
99extern int h_errno;
100
101/*
102 * Structures returned by network data base library.  All addresses are
103 * supplied in host order, and returned in network order (suitable for
104 * use in system calls).
105 */
106struct	hostent {
107	char	*h_name;	/* official name of host */
108	char	**h_aliases;	/* alias list */
109	int	h_addrtype;	/* host address type */
110	int	h_length;	/* length of address */
111	char	**h_addr_list;	/* list of addresses from name server */
112#define	h_addr	h_addr_list[0]	/* address, for backward compatibility */
113};
114
115/*
116 * Assumption here is that a network number
117 * fits in an in_addr_t -- probably a poor one.
118 */
119struct	netent {
120	char		*n_name;	/* official name of net */
121	char		**n_aliases;	/* alias list */
122	int		n_addrtype;	/* net address type */
123	in_addr_t	n_net;		/* network # */
124};
125
126struct	servent {
127	char	*s_name;	/* official service name */
128	char	**s_aliases;	/* alias list */
129	int	s_port;		/* port # */
130	char	*s_proto;	/* protocol to use */
131};
132
133struct	protoent {
134	char	*p_name;	/* official protocol name */
135	char	**p_aliases;	/* alias list */
136	int	p_proto;	/* protocol # */
137};
138
139/*
140 * Error return codes from gethostbyname() and gethostbyaddr()
141 * (left in extern int h_errno).
142 */
143
144#define	NETDB_INTERNAL	-1	/* see errno */
145#define	NETDB_SUCCESS	0	/* no problem */
146#define	HOST_NOT_FOUND	1 /* Authoritative Answer Host not found */
147#define	TRY_AGAIN	2 /* Non-Authoritative Host not found, or SERVERFAIL */
148#define	NO_RECOVERY	3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
149#define	NO_DATA		4 /* Valid name, no data record of requested type */
150#define	NO_ADDRESS	NO_DATA		/* no address */
151
152/* Values for getaddrinfo() and getnameinfo() */
153#define AI_PASSIVE	1	/* socket address is intended for bind() */
154#define AI_CANONNAME	2	/* request for canonical name */
155#define AI_NUMERICHOST	4	/* don't ever try hostname lookup */
156#define AI_EXT		8	/* enable non-portable extensions */
157#define AI_NUMERICSERV	16	/* don't ever try servname lookup */
158#define AI_FQDN		32	/* return the FQDN that was resolved */
159/* valid flags for addrinfo */
160#define AI_MASK \
161    (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_FQDN)
162
163#define NI_NUMERICHOST	1	/* return the host address, not the name */
164#define NI_NUMERICSERV	2	/* return the service address, not the name */
165#define NI_NOFQDN	4	/* return a short name if in the local domain */
166#define NI_NAMEREQD	8	/* fail if either host or service name is unknown */
167#define NI_DGRAM	16	/* look up datagram service instead of stream */
168
169#define NI_MAXHOST	MAXHOSTNAMELEN	/* max host name returned by getnameinfo */
170#define NI_MAXSERV	32	/* max serv. name length returned by getnameinfo */
171
172/*
173 * Scope delimit character (KAME hack)
174 */
175#define SCOPE_DELIMITER '%'
176
177#define EAI_BADFLAGS	-1	/* invalid value for ai_flags */
178#define EAI_NONAME	-2	/* name or service is not known */
179#define EAI_AGAIN	-3	/* temporary failure in name resolution */
180#define EAI_FAIL	-4	/* non-recoverable failure in name resolution */
181#define EAI_NODATA	-5	/* no address associated with name */
182#define EAI_FAMILY	-6	/* ai_family not supported */
183#define EAI_SOCKTYPE	-7	/* ai_socktype not supported */
184#define EAI_SERVICE	-8	/* service not supported for ai_socktype */
185#define EAI_ADDRFAMILY	-9	/* address family for name not supported */
186#define EAI_MEMORY	-10	/* memory allocation failure */
187#define EAI_SYSTEM	-11	/* system error (code indicated in errno) */
188#define EAI_BADHINTS	-12	/* invalid value for hints */
189#define EAI_PROTOCOL	-13	/* resolved protocol is unknown */
190#define EAI_OVERFLOW	-14	/* argument buffer overflow */
191
192struct addrinfo {
193	int ai_flags;		/* input flags */
194	int ai_family;		/* protocol family for socket */
195	int ai_socktype;	/* socket type */
196	int ai_protocol;	/* protocol for socket */
197	socklen_t ai_addrlen;	/* length of socket-address */
198	struct sockaddr *ai_addr; /* socket-address for socket */
199	char *ai_canonname;	/* canonical name for service location (iff req) */
200	struct addrinfo *ai_next; /* pointer to next in list */
201};
202
203/*
204 * Flags for getrrsetbyname()
205 */
206#define RRSET_VALIDATED		1
207
208/*
209 * Return codes for getrrsetbyname()
210 */
211#define ERRSET_SUCCESS		0
212#define ERRSET_NOMEMORY		1
213#define ERRSET_FAIL		2
214#define ERRSET_INVAL		3
215#define ERRSET_NONAME		4
216#define ERRSET_NODATA		5
217
218/*
219 * Structures used by getrrsetbyname() and freerrset()
220 */
221struct rdatainfo {
222	unsigned int		rdi_length;	/* length of data */
223	unsigned char		*rdi_data;	/* record data */
224};
225
226struct rrsetinfo {
227	unsigned int		rri_flags;	/* RRSET_VALIDATED ... */
228	unsigned int		rri_rdclass;	/* class number */
229	unsigned int		rri_rdtype;	/* RR type number */
230	unsigned int		rri_ttl;	/* time to live */
231	unsigned int		rri_nrdatas;	/* size of rdatas array */
232	unsigned int		rri_nsigs;	/* size of sigs array */
233	char			*rri_name;	/* canonical name */
234	struct rdatainfo	*rri_rdatas;	/* individual records */
235	struct rdatainfo	*rri_sigs;	/* individual signatures */
236};
237
238#if __BSD_VISIBLE
239struct servent_data {
240	void *fp;
241	char **aliases;
242	int maxaliases;
243	int stayopen;
244	char *line;
245};
246
247struct protoent_data {
248	void *fp;
249	char **aliases;
250	int maxaliases;
251	int stayopen;
252	char *line;
253};
254#endif
255
256__BEGIN_DECLS
257void		endhostent(void);
258void		endnetent(void);
259void		endprotoent(void);
260#if __BSD_VISIBLE
261void		endprotoent_r(struct protoent_data *);
262#endif
263void		endservent(void);
264#if __BSD_VISIBLE
265void		endservent_r(struct servent_data *);
266#endif
267struct hostent	*gethostbyaddr(const void *, socklen_t, int);
268struct hostent	*gethostbyname(const char *);
269struct hostent	*gethostbyname2(const char *, int);
270struct hostent	*gethostent(void);
271struct netent	*getnetbyaddr(in_addr_t, int);
272struct netent	*getnetbyname(const char *);
273struct netent	*getnetent(void);
274struct protoent	*getprotobyname(const char *);
275struct protoent	*getprotobynumber(int);
276struct protoent	*getprotoent(void);
277#if __BSD_VISIBLE
278int		getprotobyname_r(const char *, struct protoent *,
279		    struct protoent_data *);
280int		getprotobynumber_r(int, struct protoent *,
281		    struct protoent_data *);
282int		getprotoent_r(struct protoent *, struct protoent_data *);
283#endif
284struct servent	*getservbyname(const char *, const char *);
285struct servent	*getservbyport(int, const char *);
286struct servent	*getservent(void);
287#if __BSD_VISIBLE
288int		getservbyname_r(const char *, const char *, struct servent *,
289		    struct servent_data *);
290int		getservbyport_r(int, const char *, struct servent *,
291		    struct servent_data *);
292int		getservent_r(struct servent *, struct servent_data *);
293#endif
294void		herror(const char *);
295const char	*hstrerror(int);
296void		sethostent(int);
297/* void		sethostfile(const char *); */
298void		setnetent(int);
299void		setprotoent(int);
300#if __BSD_VISIBLE
301void		setprotoent_r(int, struct protoent_data *);
302#endif
303void		setservent(int);
304#if __BSD_VISIBLE
305void		setservent_r(int, struct servent_data *);
306#endif
307
308int		getaddrinfo(const char *, const char *,
309		    const struct addrinfo *, struct addrinfo **);
310void		freeaddrinfo(struct addrinfo *);
311int		getnameinfo(const struct sockaddr *, socklen_t,
312		    char *, size_t, char *, size_t, int);
313const char	*gai_strerror(int);
314int		getrrsetbyname(const char *, unsigned int, unsigned int, unsigned int, struct rrsetinfo **);
315void		freerrset(struct rrsetinfo *);
316__END_DECLS
317
318/* This is nec'y to make this include file properly replace the sun version. */
319#ifdef sun
320#ifdef __GNU_LIBRARY__
321#include <rpc/netdb.h>
322#else
323struct rpcent {
324	char	*r_name;	/* name of server for this rpc program */
325	char	**r_aliases;	/* alias list */
326	int	r_number;	/* rpc program number */
327};
328struct rpcent	*getrpcbyname(), *getrpcbynumber(), *getrpcent();
329#endif /* __GNU_LIBRARY__ */
330#endif /* sun */
331
332#endif /* !_NETDB_H_ */
333