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