1/* 2 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ 7/* All Rights Reserved */ 8 9/* 10 * BIND 4.9.3: 11 * 12 * Copyright (c) 1980, 1983, 1988, 1993 13 * The Regents of the University of California. All rights reserved. 14 * 15 * Redistribution and use in source and binary forms, with or without 16 * modification, are permitted provided that the following conditions 17 * are met: 18 * 1. Redistributions of source code must retain the above copyright 19 * notice, this list of conditions and the following disclaimer. 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in the 22 * documentation and/or other materials provided with the distribution. 23 * 3. All advertising materials mentioning features or use of this software 24 * must display the following acknowledgement: 25 * This product includes software developed by the University of 26 * California, Berkeley and its contributors. 27 * 4. Neither the name of the University nor the names of its contributors 28 * may be used to endorse or promote products derived from this software 29 * without specific prior written permission. 30 * 31 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 32 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 33 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 34 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 35 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 39 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 40 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 41 * SUCH DAMAGE. 42 * - 43 * Portions Copyright (c) 1993 by Digital Equipment Corporation. 44 * 45 * Permission to use, copy, modify, and distribute this software for any 46 * purpose with or without fee is hereby granted, provided that the above 47 * copyright notice and this permission notice appear in all copies, and that 48 * the name of Digital Equipment Corporation not be used in advertising or 49 * publicity pertaining to distribution of the document or software without 50 * specific, written prior permission. 51 * 52 * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL 53 * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES 54 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT 55 * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 56 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 57 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 58 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 59 * SOFTWARE. 60 * --Copyright-- 61 * 62 * End BIND 4.9.3 63 */ 64 65/* 66 * Structures returned by network data base library. 67 * All addresses are supplied in host order, and 68 * returned in network order (suitable for use in system calls). 69 */ 70 71#ifndef _NETDB_H 72#define _NETDB_H 73 74#include <sys/types.h> 75#include <netinet/in.h> 76#if !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) 77#include <sys/socket.h> 78#endif /* !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) */ 79#include <sys/feature_tests.h> 80 81#ifdef __cplusplus 82extern "C" { 83#endif 84 85#define _PATH_HEQUIV "/etc/hosts.equiv" 86#define _PATH_HOSTS "/etc/hosts" 87#define _PATH_IPNODES "/etc/inet/ipnodes" 88#define _PATH_IPSECALGS "/etc/inet/ipsecalgs" 89#define _PATH_NETMASKS "/etc/netmasks" 90#define _PATH_NETWORKS "/etc/networks" 91#define _PATH_PROTOCOLS "/etc/protocols" 92#define _PATH_SERVICES "/etc/services" 93 94struct hostent { 95 char *h_name; /* official name of host */ 96 char **h_aliases; /* alias list */ 97 int h_addrtype; /* host address type */ 98 int h_length; /* length of address */ 99 char **h_addr_list; /* list of addresses from name server */ 100#define h_addr h_addr_list[0] /* address, for backward compatiblity */ 101}; 102 103 104/* 105 * addrinfo introduced with IPv6 for Protocol-Independent Hostname 106 * and Service Name Translation. 107 */ 108 109#if !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) 110struct addrinfo { 111 int ai_flags; /* AI_PASSIVE, AI_CANONNAME, ... */ 112 int ai_family; /* PF_xxx */ 113 int ai_socktype; /* SOCK_xxx */ 114 int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 115#ifdef __sparcv9 116 int _ai_pad; /* for backwards compat with old size_t */ 117#endif /* __sparcv9 */ 118 socklen_t ai_addrlen; 119 char *ai_canonname; /* canonical name for hostname */ 120 struct sockaddr *ai_addr; /* binary address */ 121 struct addrinfo *ai_next; /* next structure in linked list */ 122}; 123 124 125/* addrinfo flags */ 126#define AI_PASSIVE 0x0008 /* intended for bind() + listen() */ 127#define AI_CANONNAME 0x0010 /* return canonical version of host */ 128#define AI_NUMERICHOST 0x0020 /* use numeric node address string */ 129#define AI_NUMERICSERV 0x0040 /* servname is assumed numeric */ 130 131/* getipnodebyname() flags */ 132#define AI_V4MAPPED 0x0001 /* IPv4 mapped addresses if no IPv6 */ 133#define AI_ALL 0x0002 /* IPv6 and IPv4 mapped addresses */ 134#define AI_ADDRCONFIG 0x0004 /* AAAA or A records only if IPv6/IPv4 cnfg'd */ 135 136 137/* 138 * These were defined in RFC 2553 but not SUSv3 139 * or RFC 3493 which obsoleted 2553. 140 */ 141#if !defined(_XPG6) || defined(__EXTENSIONS__) 142#define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG) 143 144/* addrinfo errors */ 145#define EAI_ADDRFAMILY 1 /* address family not supported */ 146#define EAI_NODATA 7 /* no address */ 147#endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */ 148#define EAI_AGAIN 2 /* DNS temporary failure */ 149#define EAI_BADFLAGS 3 /* invalid ai_flags */ 150#define EAI_FAIL 4 /* DNS non-recoverable failure */ 151#define EAI_FAMILY 5 /* ai_family not supported */ 152#define EAI_MEMORY 6 /* memory allocation failure */ 153#define EAI_NONAME 8 /* host/servname not known */ 154#define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 155#define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 156#define EAI_SYSTEM 11 /* system error in errno */ 157#define EAI_OVERFLOW 12 /* argument buffer overflow */ 158#define EAI_PROTOCOL 13 159#define EAI_MAX 14 160 161/* getnameinfo flags */ 162#define NI_NOFQDN 0x0001 163#define NI_NUMERICHOST 0x0002 /* return numeric form of address */ 164#define NI_NAMEREQD 0x0004 /* request DNS name */ 165#define NI_NUMERICSERV 0x0008 166#define NI_DGRAM 0x0010 167 168#if !defined(_XPG6) || defined(__EXTENSIONS__) 169/* Not listed in any standards document */ 170#define NI_WITHSCOPEID 0x0020 171#define NI_NUMERICSCOPE 0x0040 172 173/* getnameinfo max sizes as defined in RFC 2553 obsoleted in RFC 3493 */ 174#define NI_MAXHOST 1025 175#define NI_MAXSERV 32 176#endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */ 177#endif /* !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) */ 178 179/* 180 * Scope delimit character 181 */ 182#define SCOPE_DELIMITER '%' 183 184 185/* 186 * Algorithm entry for /etc/inet/ipsecalgs which defines IPsec protocols 187 * and algorithms. 188 */ 189#if !defined(_XPG4_2) || defined(__EXTENSIONS__) 190typedef struct ipsecalgent { 191 char **a_names; /* algorithm names */ 192 int a_proto_num; /* protocol number */ 193 int a_alg_num; /* algorithm number */ 194 char *a_mech_name; /* encryption framework mechanism name */ 195 int *a_block_sizes; /* supported block sizes */ 196 int *a_key_sizes; /* supported key sizes */ 197 int a_key_increment; /* key size increment */ 198 int *a_mech_params; /* mechanism specific parameters */ 199 int a_alg_flags; /* algorithm flags */ 200} ipsecalgent_t; 201 202/* well-known IPsec protocol numbers */ 203 204#define IPSEC_PROTO_AH 2 205#define IPSEC_PROTO_ESP 3 206#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 207 208/* 209 * Assumption here is that a network number 210 * fits in 32 bits -- probably a poor one. 211 */ 212struct netent { 213 char *n_name; /* official name of net */ 214 char **n_aliases; /* alias list */ 215 int n_addrtype; /* net address type */ 216 in_addr_t n_net; /* network # */ 217}; 218 219struct protoent { 220 char *p_name; /* official protocol name */ 221 char **p_aliases; /* alias list */ 222 int p_proto; /* protocol # */ 223}; 224 225struct servent { 226 char *s_name; /* official service name */ 227 char **s_aliases; /* alias list */ 228 int s_port; /* port # */ 229 char *s_proto; /* protocol to use */ 230}; 231 232#ifdef __STDC__ 233#if !defined(_XPG4_2) || defined(__EXTENSIONS__) 234struct hostent *gethostbyname_r 235 (const char *, struct hostent *, char *, int, int *h_errnop); 236struct hostent *gethostbyaddr_r 237 (const char *, int, int, struct hostent *, char *, int, int *h_errnop); 238struct hostent *getipnodebyname(const char *, int, int, int *); 239struct hostent *getipnodebyaddr(const void *, size_t, int, int *); 240void freehostent(struct hostent *); 241struct hostent *gethostent_r(struct hostent *, char *, int, int *h_errnop); 242 243struct servent *getservbyname_r 244 (const char *name, const char *, struct servent *, char *, int); 245struct servent *getservbyport_r 246 (int port, const char *, struct servent *, char *, int); 247struct servent *getservent_r(struct servent *, char *, int); 248 249struct netent *getnetbyname_r 250 (const char *, struct netent *, char *, int); 251struct netent *getnetbyaddr_r(long, int, struct netent *, char *, int); 252struct netent *getnetent_r(struct netent *, char *, int); 253 254struct protoent *getprotobyname_r 255 (const char *, struct protoent *, char *, int); 256struct protoent *getprotobynumber_r 257 (int, struct protoent *, char *, int); 258struct protoent *getprotoent_r(struct protoent *, char *, int); 259 260int getnetgrent_r(char **, char **, char **, char *, int); 261int innetgr(const char *, const char *, const char *, const char *); 262#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 263 264/* Old interfaces that return a pointer to a static area; MT-unsafe */ 265struct hostent *gethostbyname(const char *); 266struct hostent *gethostent(void); 267struct netent *getnetbyaddr(in_addr_t, int); 268struct netent *getnetbyname(const char *); 269struct netent *getnetent(void); 270struct protoent *getprotobyname(const char *); 271struct protoent *getprotobynumber(int); 272struct protoent *getprotoent(void); 273struct servent *getservbyname(const char *, const char *); 274struct servent *getservbyport(int, const char *); 275struct servent *getservent(void); 276 277/* gethostbyaddr() second argument is a size_t only in unix95/unix98 */ 278#if !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) 279struct hostent *gethostbyaddr(const void *, socklen_t, int); 280#else 281struct hostent *gethostbyaddr(const void *, size_t, int); 282#endif /* !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) */ 283 284#if !defined(_XPG4_2) || defined(__EXTENSIONS__) 285int endhostent(void); 286int endnetent(void); 287int endprotoent(void); 288int endservent(void); 289int sethostent(int); 290int setnetent(int); 291int setprotoent(int); 292int setservent(int); 293#else 294void endhostent(void); 295void endnetent(void); 296void endprotoent(void); 297void endservent(void); 298void sethostent(int); 299void setnetent(int); 300void setprotoent(int); 301void setservent(int); 302#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 303 304#if !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) 305 306#ifdef _XPG6 307#ifdef __PRAGMA_REDEFINE_EXTNAME 308#pragma redefine_extname getaddrinfo __xnet_getaddrinfo 309#else /* __PRAGMA_REDEFINE_EXTNAME */ 310#define getaddrinfo __xnet_getaddrinfo 311#endif /* __PRAGMA_REDEFINE_EXTNAME */ 312#endif /* _XPG6 */ 313 314int getaddrinfo(const char *_RESTRICT_KYWD, 315 const char *_RESTRICT_KYWD, 316 const struct addrinfo *_RESTRICT_KYWD, 317 struct addrinfo **_RESTRICT_KYWD); 318void freeaddrinfo(struct addrinfo *); 319const char *gai_strerror(int); 320int getnameinfo(const struct sockaddr *_RESTRICT_KYWD, 321 socklen_t, char *_RESTRICT_KYWD, socklen_t, 322 char *_RESTRICT_KYWD, socklen_t, int); 323#endif /* !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) */ 324 325#if !defined(_XPG4_2) || defined(__EXTENSIONS__) 326int getnetgrent(char **, char **, char **); 327int setnetgrent(const char *); 328int endnetgrent(void); 329int rcmd(char **, unsigned short, 330 const char *, const char *, const char *, int *); 331int rcmd_af(char **, unsigned short, 332 const char *, const char *, const char *, int *, int); 333int rresvport_af(int *, int); 334int rresvport_addr(int *, struct sockaddr_storage *); 335int rexec(char **, unsigned short, 336 const char *, const char *, const char *, int *); 337int rexec_af(char **, unsigned short, 338 const char *, const char *, const char *, int *, int); 339int rresvport(int *); 340int ruserok(const char *, int, const char *, const char *); 341/* BIND */ 342struct hostent *gethostbyname2(const char *, int); 343void herror(const char *); 344const char *hstrerror(int); 345/* End BIND */ 346 347/* IPsec algorithm prototype definitions */ 348struct ipsecalgent *getipsecalgbyname(const char *, int, int *); 349struct ipsecalgent *getipsecalgbynum(int, int, int *); 350int getipsecprotobyname(const char *doi_name); 351char *getipsecprotobynum(int doi_domain); 352void freeipsecalgent(struct ipsecalgent *ptr); 353/* END IPsec algorithm prototype definitions */ 354 355#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 356#else /* __STDC__ */ 357struct hostent *gethostbyname_r(); 358struct hostent *gethostbyaddr_r(); 359struct hostent *getipnodebyname(); 360struct hostent *getipnodebyaddr(); 361void freehostent(); 362struct hostent *gethostent_r(); 363struct servent *getservbyname_r(); 364struct servent *getservbyport_r(); 365struct servent *getservent_r(); 366struct netent *getnetbyname_r(); 367struct netent *getnetbyaddr_r(); 368struct netent *getnetent_r(); 369struct protoent *getprotobyname_r(); 370struct protoent *getprotobynumber_r(); 371struct protoent *getprotoent_r(); 372int getnetgrent_r(); 373int innetgr(); 374 375/* Old interfaces that return a pointer to a static area; MT-unsafe */ 376struct hostent *gethostbyname(); 377struct hostent *gethostbyaddr(); 378struct hostent *gethostent(); 379struct netent *getnetbyname(); 380struct netent *getnetbyaddr(); 381struct netent *getnetent(); 382struct servent *getservbyname(); 383struct servent *getservbyport(); 384struct servent *getservent(); 385struct protoent *getprotobyname(); 386struct protoent *getprotobynumber(); 387struct protoent *getprotoent(); 388int getnetgrent(); 389 390int sethostent(); 391int endhostent(); 392int setnetent(); 393int endnetent(); 394int setservent(); 395int endservent(); 396int setprotoent(); 397int endprotoent(); 398int setnetgrent(); 399int endnetgrent(); 400int rcmd(); 401int rcmd_af(); 402int rexec(); 403int rexec_af(); 404int rresvport(); 405int rresvport_af(); 406int rresvport_addr(); 407int ruserok(); 408/* BIND */ 409struct hostent *gethostbyname2(); 410void herror(); 411char *hstrerror(); 412/* IPv6 prototype definitons */ 413int getaddrinfo(); 414void freeaddrinfo(); 415const char *gai_strerror(); 416int getnameinfo(); 417/* END IPv6 prototype definitions */ 418/* End BIND */ 419 420#if !defined(_XPG4_2) || defined(__EXTENSIONS__) 421/* IPsec algorithm prototype definitions */ 422struct ipsecalgent *getalgbyname(); 423struct ipsecalgent *getalgbydoi(); 424int getdoidomainbyname(); 425const char *getdoidomainbynum(); 426void freealgent(); 427/* END IPsec algorithm prototype definitions */ 428#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 429 430#endif /* __STDC__ */ 431 432/* 433 * Error return codes from gethostbyname() and gethostbyaddr() 434 * (when using the resolver) 435 */ 436 437extern int h_errno; 438 439#ifdef _REENTRANT 440#ifdef __STDC__ 441extern int *__h_errno(void); 442#else 443extern int *__h_errno(); 444#endif /* __STDC__ */ 445 446/* Only #define h_errno if there is no conflict with other use */ 447#ifdef H_ERRNO_IS_FUNCTION 448#define h_errno (*__h_errno()) 449#endif /* NO_H_ERRNO_DEFINE */ 450#endif /* _REENTRANT */ 451 452/* 453 * Error return codes from gethostbyname() and gethostbyaddr() 454 * (left in extern int h_errno). 455 */ 456#define HOST_NOT_FOUND 1 /* Authoritive Answer Host not found */ 457#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ 458#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 459#define NO_DATA 4 /* Valid name, no data record of requested type */ 460 461#if !defined(_XPG4_2) || defined(__EXTENSIONS__) 462#define NO_ADDRESS NO_DATA /* no address, look for MX record */ 463 464/* BIND */ 465#define NETDB_INTERNAL -1 /* see errno */ 466#define NETDB_SUCCESS 0 /* no problem */ 467/* End BIND */ 468 469#define MAXHOSTNAMELEN 256 470 471#define MAXALIASES 35 472#define MAXADDRS 35 473#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 474 475#ifdef __cplusplus 476} 477#endif 478 479#endif /* _NETDB_H */ 480