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 82 extern "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 94 struct 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__) 110 struct 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__) 190 typedef 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 */ 212 struct 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 219 struct protoent { 220 char *p_name; /* official protocol name */ 221 char **p_aliases; /* alias list */ 222 int p_proto; /* protocol # */ 223 }; 224 225 struct 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__) 234 struct hostent *gethostbyname_r 235 (const char *, struct hostent *, char *, int, int *h_errnop); 236 struct hostent *gethostbyaddr_r 237 (const char *, int, int, struct hostent *, char *, int, int *h_errnop); 238 struct hostent *getipnodebyname(const char *, int, int, int *); 239 struct hostent *getipnodebyaddr(const void *, size_t, int, int *); 240 void freehostent(struct hostent *); 241 struct hostent *gethostent_r(struct hostent *, char *, int, int *h_errnop); 242 243 struct servent *getservbyname_r 244 (const char *name, const char *, struct servent *, char *, int); 245 struct servent *getservbyport_r 246 (int port, const char *, struct servent *, char *, int); 247 struct servent *getservent_r(struct servent *, char *, int); 248 249 struct netent *getnetbyname_r 250 (const char *, struct netent *, char *, int); 251 struct netent *getnetbyaddr_r(long, int, struct netent *, char *, int); 252 struct netent *getnetent_r(struct netent *, char *, int); 253 254 struct protoent *getprotobyname_r 255 (const char *, struct protoent *, char *, int); 256 struct protoent *getprotobynumber_r 257 (int, struct protoent *, char *, int); 258 struct protoent *getprotoent_r(struct protoent *, char *, int); 259 260 int getnetgrent_r(char **, char **, char **, char *, int); 261 int 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 */ 265 struct hostent *gethostbyname(const char *); 266 struct hostent *gethostent(void); 267 struct netent *getnetbyaddr(in_addr_t, int); 268 struct netent *getnetbyname(const char *); 269 struct netent *getnetent(void); 270 struct protoent *getprotobyname(const char *); 271 struct protoent *getprotobynumber(int); 272 struct protoent *getprotoent(void); 273 struct servent *getservbyname(const char *, const char *); 274 struct servent *getservbyport(int, const char *); 275 struct 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__) 279 struct hostent *gethostbyaddr(const void *, socklen_t, int); 280 #else 281 struct hostent *gethostbyaddr(const void *, size_t, int); 282 #endif /* !defined(_XPG4_2) || defined(_XPG6) || defined(__EXTENSIONS__) */ 283 284 #if !defined(_XPG4_2) || defined(__EXTENSIONS__) 285 int endhostent(void); 286 int endnetent(void); 287 int endprotoent(void); 288 int endservent(void); 289 int sethostent(int); 290 int setnetent(int); 291 int setprotoent(int); 292 int setservent(int); 293 #else 294 void endhostent(void); 295 void endnetent(void); 296 void endprotoent(void); 297 void endservent(void); 298 void sethostent(int); 299 void setnetent(int); 300 void setprotoent(int); 301 void 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 314 int getaddrinfo(const char *_RESTRICT_KYWD, 315 const char *_RESTRICT_KYWD, 316 const struct addrinfo *_RESTRICT_KYWD, 317 struct addrinfo **_RESTRICT_KYWD); 318 void freeaddrinfo(struct addrinfo *); 319 const char *gai_strerror(int); 320 int 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__) 326 int getnetgrent(char **, char **, char **); 327 int setnetgrent(const char *); 328 int endnetgrent(void); 329 int rcmd(char **, unsigned short, 330 const char *, const char *, const char *, int *); 331 int rcmd_af(char **, unsigned short, 332 const char *, const char *, const char *, int *, int); 333 int rresvport_af(int *, int); 334 int rresvport_addr(int *, struct sockaddr_storage *); 335 int rexec(char **, unsigned short, 336 const char *, const char *, const char *, int *); 337 int rexec_af(char **, unsigned short, 338 const char *, const char *, const char *, int *, int); 339 int rresvport(int *); 340 int ruserok(const char *, int, const char *, const char *); 341 /* BIND */ 342 struct hostent *gethostbyname2(const char *, int); 343 void herror(const char *); 344 const char *hstrerror(int); 345 /* End BIND */ 346 347 /* IPsec algorithm prototype definitions */ 348 struct ipsecalgent *getipsecalgbyname(const char *, int, int *); 349 struct ipsecalgent *getipsecalgbynum(int, int, int *); 350 int getipsecprotobyname(const char *doi_name); 351 char *getipsecprotobynum(int doi_domain); 352 void freeipsecalgent(struct ipsecalgent *ptr); 353 /* END IPsec algorithm prototype definitions */ 354 355 #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */ 356 #else /* __STDC__ */ 357 struct hostent *gethostbyname_r(); 358 struct hostent *gethostbyaddr_r(); 359 struct hostent *getipnodebyname(); 360 struct hostent *getipnodebyaddr(); 361 void freehostent(); 362 struct hostent *gethostent_r(); 363 struct servent *getservbyname_r(); 364 struct servent *getservbyport_r(); 365 struct servent *getservent_r(); 366 struct netent *getnetbyname_r(); 367 struct netent *getnetbyaddr_r(); 368 struct netent *getnetent_r(); 369 struct protoent *getprotobyname_r(); 370 struct protoent *getprotobynumber_r(); 371 struct protoent *getprotoent_r(); 372 int getnetgrent_r(); 373 int innetgr(); 374 375 /* Old interfaces that return a pointer to a static area; MT-unsafe */ 376 struct hostent *gethostbyname(); 377 struct hostent *gethostbyaddr(); 378 struct hostent *gethostent(); 379 struct netent *getnetbyname(); 380 struct netent *getnetbyaddr(); 381 struct netent *getnetent(); 382 struct servent *getservbyname(); 383 struct servent *getservbyport(); 384 struct servent *getservent(); 385 struct protoent *getprotobyname(); 386 struct protoent *getprotobynumber(); 387 struct protoent *getprotoent(); 388 int getnetgrent(); 389 390 int sethostent(); 391 int endhostent(); 392 int setnetent(); 393 int endnetent(); 394 int setservent(); 395 int endservent(); 396 int setprotoent(); 397 int endprotoent(); 398 int setnetgrent(); 399 int endnetgrent(); 400 int rcmd(); 401 int rcmd_af(); 402 int rexec(); 403 int rexec_af(); 404 int rresvport(); 405 int rresvport_af(); 406 int rresvport_addr(); 407 int ruserok(); 408 /* BIND */ 409 struct hostent *gethostbyname2(); 410 void herror(); 411 char *hstrerror(); 412 /* IPv6 prototype definitons */ 413 int getaddrinfo(); 414 void freeaddrinfo(); 415 const char *gai_strerror(); 416 int getnameinfo(); 417 /* END IPv6 prototype definitions */ 418 /* End BIND */ 419 420 #if !defined(_XPG4_2) || defined(__EXTENSIONS__) 421 /* IPsec algorithm prototype definitions */ 422 struct ipsecalgent *getalgbyname(); 423 struct ipsecalgent *getalgbydoi(); 424 int getdoidomainbyname(); 425 const char *getdoidomainbynum(); 426 void 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 437 extern int h_errno; 438 439 #ifdef _REENTRANT 440 #ifdef __STDC__ 441 extern int *__h_errno(void); 442 #else 443 extern 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