1/* $FreeBSD$ */ 2 3/* 4 * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC") 5 * Copyright (C) 2000, 2001 Internet Software Consortium. 6 * 7 * Permission to use, copy, modify, and/or distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 13 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 16 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20/* $Id: netdb.h.in,v 1.41 2009/01/18 23:48:14 tbox Exp $ */ 21 22/*! \file */ 23 24#ifndef LWRES_NETDB_H 25#define LWRES_NETDB_H 1 26 27#include <stddef.h> /* Required on FreeBSD (and others?) for size_t. */ 28#include <netdb.h> /* Contractual provision. */ 29 30#include <lwres/lang.h> 31 32/* 33 * Define if <netdb.h> does not declare struct addrinfo. 34 */ 35#undef ISC_LWRES_NEEDADDRINFO 36 37#ifdef ISC_LWRES_NEEDADDRINFO 38struct addrinfo { 39 int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ 40 int ai_family; /* PF_xxx */ 41 int ai_socktype; /* SOCK_xxx */ 42 int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 43 size_t ai_addrlen; /* Length of ai_addr */ 44 char *ai_canonname; /* Canonical name for hostname */ 45 struct sockaddr *ai_addr; /* Binary address */ 46 struct addrinfo *ai_next; /* Next structure in linked list */ 47}; 48#endif 49 50/* 51 * Undefine all #defines we are interested in as <netdb.h> may or may not have 52 * defined them. 53 */ 54 55/* 56 * Error return codes from gethostbyname() and gethostbyaddr() 57 * (left in extern int h_errno). 58 */ 59 60#undef NETDB_INTERNAL 61#undef NETDB_SUCCESS 62#undef HOST_NOT_FOUND 63#undef TRY_AGAIN 64#undef NO_RECOVERY 65#undef NO_DATA 66#undef NO_ADDRESS 67 68#define NETDB_INTERNAL -1 /* see errno */ 69#define NETDB_SUCCESS 0 /* no problem */ 70#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 71#define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */ 72#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 73#define NO_DATA 4 /* Valid name, no data record of requested type */ 74#define NO_ADDRESS NO_DATA /* no address, look for MX record */ 75 76/* 77 * Error return codes from getaddrinfo() 78 */ 79 80#undef EAI_ADDRFAMILY 81#undef EAI_AGAIN 82#undef EAI_BADFLAGS 83#undef EAI_FAIL 84#undef EAI_FAMILY 85#undef EAI_MEMORY 86#undef EAI_NODATA 87#undef EAI_NONAME 88#undef EAI_SERVICE 89#undef EAI_SOCKTYPE 90#undef EAI_SYSTEM 91#undef EAI_BADHINTS 92#undef EAI_PROTOCOL 93#undef EAI_MAX 94 95#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 96#define EAI_AGAIN 2 /* temporary failure in name resolution */ 97#define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 98#define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 99#define EAI_FAMILY 5 /* ai_family not supported */ 100#define EAI_MEMORY 6 /* memory allocation failure */ 101#define EAI_NODATA 7 /* no address associated with hostname */ 102#define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 103#define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 104#define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 105#define EAI_SYSTEM 11 /* system error returned in errno */ 106#define EAI_BADHINTS 12 107#define EAI_PROTOCOL 13 108#define EAI_MAX 14 109 110/* 111 * Flag values for getaddrinfo() 112 */ 113#undef AI_PASSIVE 114#undef AI_CANONNAME 115#undef AI_NUMERICHOST 116 117#define AI_PASSIVE 0x00000001 118#define AI_CANONNAME 0x00000002 119#define AI_NUMERICHOST 0x00000004 120 121/* 122 * Flag values for getipnodebyname() 123 */ 124#undef AI_V4MAPPED 125#undef AI_ALL 126#undef AI_ADDRCONFIG 127#undef AI_DEFAULT 128 129#define AI_V4MAPPED 0x00000008 130#define AI_ALL 0x00000010 131#define AI_ADDRCONFIG 0x00000020 132#define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG) 133 134/* 135 * Constants for lwres_getnameinfo() 136 */ 137#undef NI_MAXHOST 138#undef NI_MAXSERV 139 140#define NI_MAXHOST 1025 141#define NI_MAXSERV 32 142 143/* 144 * Flag values for lwres_getnameinfo() 145 */ 146#undef NI_NOFQDN 147#undef NI_NUMERICHOST 148#undef NI_NAMEREQD 149#undef NI_NUMERICSERV 150#undef NI_DGRAM 151#undef NI_NUMERICSCOPE 152 153#define NI_NOFQDN 0x00000001 154#define NI_NUMERICHOST 0x00000002 155#define NI_NAMEREQD 0x00000004 156#define NI_NUMERICSERV 0x00000008 157#define NI_DGRAM 0x00000010 158#define NI_NUMERICSCOPE 0x00000020 /*2553bis-00*/ 159 160/* 161 * Define if <netdb.h> does not declare struct rrsetinfo. 162 */ 163#define ISC_LWRES_NEEDRRSETINFO 1 164 165#ifdef ISC_LWRES_NEEDRRSETINFO 166/* 167 * Structures for getrrsetbyname() 168 */ 169struct rdatainfo { 170 unsigned int rdi_length; 171 unsigned char *rdi_data; 172}; 173 174struct rrsetinfo { 175 unsigned int rri_flags; 176 int rri_rdclass; 177 int rri_rdtype; 178 unsigned int rri_ttl; 179 unsigned int rri_nrdatas; 180 unsigned int rri_nsigs; 181 char *rri_name; 182 struct rdatainfo *rri_rdatas; 183 struct rdatainfo *rri_sigs; 184}; 185 186/* 187 * Flags for getrrsetbyname() 188 */ 189#define RRSET_VALIDATED 0x00000001 190 /* Set was dnssec validated */ 191 192/* 193 * Return codes for getrrsetbyname() 194 */ 195#define ERRSET_SUCCESS 0 196#define ERRSET_NOMEMORY 1 197#define ERRSET_FAIL 2 198#define ERRSET_INVAL 3 199#define ERRSET_NONAME 4 200#define ERRSET_NODATA 5 201#endif 202 203/* 204 * Define to map into lwres_ namespace. 205 */ 206 207#define LWRES_NAMESPACE 208 209#ifdef LWRES_NAMESPACE 210 211/* 212 * Use our versions not the ones from the C library. 213 */ 214 215#ifdef getnameinfo 216#undef getnameinfo 217#endif 218#define getnameinfo lwres_getnameinfo 219 220#ifdef getaddrinfo 221#undef getaddrinfo 222#endif 223#define getaddrinfo lwres_getaddrinfo 224 225#ifdef freeaddrinfo 226#undef freeaddrinfo 227#endif 228#define freeaddrinfo lwres_freeaddrinfo 229 230#ifdef gai_strerror 231#undef gai_strerror 232#endif 233#define gai_strerror lwres_gai_strerror 234 235#ifdef herror 236#undef herror 237#endif 238#define herror lwres_herror 239 240#ifdef hstrerror 241#undef hstrerror 242#endif 243#define hstrerror lwres_hstrerror 244 245#ifdef getipnodebyname 246#undef getipnodebyname 247#endif 248#define getipnodebyname lwres_getipnodebyname 249 250#ifdef getipnodebyaddr 251#undef getipnodebyaddr 252#endif 253#define getipnodebyaddr lwres_getipnodebyaddr 254 255#ifdef freehostent 256#undef freehostent 257#endif 258#define freehostent lwres_freehostent 259 260#ifdef gethostbyname 261#undef gethostbyname 262#endif 263#define gethostbyname lwres_gethostbyname 264 265#ifdef gethostbyname2 266#undef gethostbyname2 267#endif 268#define gethostbyname2 lwres_gethostbyname2 269 270#ifdef gethostbyaddr 271#undef gethostbyaddr 272#endif 273#define gethostbyaddr lwres_gethostbyaddr 274 275#ifdef gethostent 276#undef gethostent 277#endif 278#define gethostent lwres_gethostent 279 280#ifdef sethostent 281#undef sethostent 282#endif 283#define sethostent lwres_sethostent 284 285#ifdef endhostent 286#undef endhostent 287#endif 288#define endhostent lwres_endhostent 289 290/* #define sethostfile lwres_sethostfile */ 291 292#ifdef gethostbyname_r 293#undef gethostbyname_r 294#endif 295#define gethostbyname_r lwres_gethostbyname_r 296 297#ifdef gethostbyaddr_r 298#undef gethostbyaddr_r 299#endif 300#define gethostbyaddr_r lwres_gethostbyaddr_r 301 302#ifdef gethostent_r 303#undef gethostent_r 304#endif 305#define gethostent_r lwres_gethostent_r 306 307#ifdef sethostent_r 308#undef sethostent_r 309#endif 310#define sethostent_r lwres_sethostent_r 311 312#ifdef endhostent_r 313#undef endhostent_r 314#endif 315#define endhostent_r lwres_endhostent_r 316 317#ifdef getrrsetbyname 318#undef getrrsetbyname 319#endif 320#define getrrsetbyname lwres_getrrsetbyname 321 322#ifdef freerrset 323#undef freerrset 324#endif 325#define freerrset lwres_freerrset 326 327#ifdef notyet 328#define getservbyname lwres_getservbyname 329#define getservbyport lwres_getservbyport 330#define getservent lwres_getservent 331#define setservent lwres_setservent 332#define endservent lwres_endservent 333 334#define getservbyname_r lwres_getservbyname_r 335#define getservbyport_r lwres_getservbyport_r 336#define getservent_r lwres_getservent_r 337#define setservent_r lwres_setservent_r 338#define endservent_r lwres_endservent_r 339 340#define getprotobyname lwres_getprotobyname 341#define getprotobynumber lwres_getprotobynumber 342#define getprotoent lwres_getprotoent 343#define setprotoent lwres_setprotoent 344#define endprotoent lwres_endprotoent 345 346#define getprotobyname_r lwres_getprotobyname_r 347#define getprotobynumber_r lwres_getprotobynumber_r 348#define getprotoent_r lwres_getprotoent_r 349#define setprotoent_r lwres_setprotoent_r 350#define endprotoent_r lwres_endprotoent_r 351 352#ifdef getnetbyname 353#undef getnetbyname 354#endif 355#define getnetbyname lwres_getnetbyname 356 357#ifdef getnetbyaddr 358#undef getnetbyaddr 359#endif 360#define getnetbyaddr lwres_getnetbyaddr 361 362#ifdef getnetent 363#undef getnetent 364#endif 365#define getnetent lwres_getnetent 366 367#ifdef setnetent 368#undef setnetent 369#endif 370#define setnetent lwres_setnetent 371 372#ifdef endnetent 373#undef endnetent 374#endif 375#define endnetent lwres_endnetent 376 377 378#ifdef getnetbyname_r 379#undef getnetbyname_r 380#endif 381#define getnetbyname_r lwres_getnetbyname_r 382 383#ifdef getnetbyaddr_r 384#undef getnetbyaddr_r 385#endif 386#define getnetbyaddr_r lwres_getnetbyaddr_r 387 388#ifdef getnetent_r 389#undef getnetent_r 390#endif 391#define getnetent_r lwres_getnetent_r 392 393#ifdef setnetent_r 394#undef setnetent_r 395#endif 396#define setnetent_r lwres_setnetent_r 397 398#ifdef endnetent_r 399#undef endnetent_r 400#endif 401#define endnetent_r lwres_endnetent_r 402#endif /* notyet */ 403 404#ifdef h_errno 405#undef h_errno 406#endif 407#define h_errno lwres_h_errno 408 409#endif /* LWRES_NAMESPACE */ 410 411LWRES_LANG_BEGINDECLS 412 413extern int lwres_h_errno; 414 415int lwres_getaddrinfo(const char *, const char *, 416 const struct addrinfo *, struct addrinfo **); 417int lwres_getnameinfo(const struct sockaddr *, size_t, char *, 418 size_t, char *, size_t, int); 419void lwres_freeaddrinfo(struct addrinfo *); 420char *lwres_gai_strerror(int); 421 422struct hostent *lwres_gethostbyaddr(const char *, int, int); 423struct hostent *lwres_gethostbyname(const char *); 424struct hostent *lwres_gethostbyname2(const char *, int); 425struct hostent *lwres_gethostent(void); 426struct hostent *lwres_getipnodebyname(const char *, int, int, int *); 427struct hostent *lwres_getipnodebyaddr(const void *, size_t, int, int *); 428void lwres_endhostent(void); 429void lwres_sethostent(int); 430/* void lwres_sethostfile(const char *); */ 431void lwres_freehostent(struct hostent *); 432 433int lwres_getrrsetbyname(const char *, unsigned int, unsigned int, 434 unsigned int, struct rrsetinfo **); 435void lwres_freerrset(struct rrsetinfo *); 436 437#ifdef notyet 438struct netent *lwres_getnetbyaddr(unsigned long, int); 439struct netent *lwres_getnetbyname(const char *); 440struct netent *lwres_getnetent(void); 441void lwres_endnetent(void); 442void lwres_setnetent(int); 443 444struct protoent *lwres_getprotobyname(const char *); 445struct protoent *lwres_getprotobynumber(int); 446struct protoent *lwres_getprotoent(void); 447void lwres_endprotoent(void); 448void lwres_setprotoent(int); 449 450struct servent *lwres_getservbyname(const char *, const char *); 451struct servent *lwres_getservbyport(int, const char *); 452struct servent *lwres_getservent(void); 453void lwres_endservent(void); 454void lwres_setservent(int); 455#endif /* notyet */ 456 457void lwres_herror(const char *); 458const char *lwres_hstrerror(int); 459 460 461struct hostent *lwres_gethostbyaddr_r(const char *, int, int, struct hostent *, 462 char *, int, int *); 463struct hostent *lwres_gethostbyname_r(const char *, struct hostent *, 464 char *, int, int *); 465struct hostent *lwres_gethostent_r(struct hostent *, char *, int, int *); 466void lwres_sethostent_r(int); 467void lwres_endhostent_r(void); 468 469#ifdef notyet 470struct netent *lwres_getnetbyname_r(const char *, struct netent *, 471 char *, int); 472struct netent *lwres_getnetbyaddr_r(long, int, struct netent *, 473 char *, int); 474struct netent *lwres_getnetent_r(struct netent *, char *, int); 475void lwres_setnetent_r(int); 476void lwres_endnetent_r(void); 477 478struct protoent *lwres_getprotobyname_r(const char *, 479 struct protoent *, char *, int); 480struct protoent *lwres_getprotobynumber_r(int, 481 struct protoent *, char *, int); 482struct protoent *lwres_getprotoent_r(struct protoent *, char *, int); 483void lwres_setprotoent_r(int); 484void lwres_endprotoent_r(void); 485 486struct servent *lwres_getservbyname_r(const char *name, const char *, 487 struct servent *, char *, int); 488struct servent *lwres_getservbyport_r(int port, const char *, 489 struct servent *, char *, int); 490struct servent *lwres_getservent_r(struct servent *, char *, int); 491void lwres_setservent_r(int); 492void lwres_endservent_r(void); 493#endif /* notyet */ 494 495LWRES_LANG_ENDDECLS 496 497#ifdef notyet 498/* This is nec'y to make this include file properly replace the sun version. */ 499#ifdef sun 500#ifdef __GNU_LIBRARY__ 501#include <rpc/netdb.h> /* Required. */ 502#else /* !__GNU_LIBRARY__ */ 503struct rpcent { 504 char *r_name; /* name of server for this rpc program */ 505 char **r_aliases; /* alias list */ 506 int r_number; /* rpc program number */ 507}; 508struct rpcent *lwres_getrpcbyname(); 509struct rpcent *lwres_getrpcbynumber(), 510struct rpcent *lwres_getrpcent(); 511#endif /* __GNU_LIBRARY__ */ 512#endif /* sun */ 513#endif /* notyet */ 514 515/* 516 * Tell Emacs to use C mode on this file. 517 * Local variables: 518 * mode: c 519 * End: 520 */ 521 522#endif /* LWRES_NETDB_H */ 523