1 /* 2 * Copyright (C) 2004, 2005, 2007, 2009, 2014 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 2000, 2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /* Id: netdb.h.in,v 1.41 2009/01/18 23:48:14 tbox Exp */ 19 20 /*! \file */ 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 #include <netdb.h> /* Contractual provision. */ 27 28 #include <lwres/lang.h> 29 30 /* 31 * Define if <netdb.h> does not declare struct addrinfo. 32 */ 33 #undef ISC_LWRES_NEEDADDRINFO 34 35 #ifdef ISC_LWRES_NEEDADDRINFO 36 struct addrinfo { 37 int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ 38 int ai_family; /* PF_xxx */ 39 int ai_socktype; /* SOCK_xxx */ 40 int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 41 size_t ai_addrlen; /* Length of ai_addr */ 42 char *ai_canonname; /* Canonical name for hostname */ 43 struct sockaddr *ai_addr; /* Binary address */ 44 struct addrinfo *ai_next; /* Next structure in linked list */ 45 }; 46 #endif 47 48 /* 49 * Undefine all #defines we are interested in as <netdb.h> may or may not have 50 * defined them. 51 */ 52 53 /* 54 * Error return codes from gethostbyname() and gethostbyaddr() 55 * (left in extern int h_errno). 56 */ 57 58 #undef NETDB_INTERNAL 59 #undef NETDB_SUCCESS 60 #undef HOST_NOT_FOUND 61 #undef TRY_AGAIN 62 #undef NO_RECOVERY 63 #undef NO_DATA 64 #undef NO_ADDRESS 65 66 #define NETDB_INTERNAL -1 /* see errno */ 67 #define NETDB_SUCCESS 0 /* no problem */ 68 #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ 69 #define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */ 70 #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ 71 #define NO_DATA 4 /* Valid name, no data record of requested type */ 72 #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 73 74 /* 75 * Error return codes from getaddrinfo() 76 */ 77 78 #undef EAI_ADDRFAMILY 79 #undef EAI_AGAIN 80 #undef EAI_BADFLAGS 81 #undef EAI_FAIL 82 #undef EAI_FAMILY 83 #undef EAI_MEMORY 84 #undef EAI_NODATA 85 #undef EAI_NONAME 86 #undef EAI_SERVICE 87 #undef EAI_SOCKTYPE 88 #undef EAI_SYSTEM 89 #undef EAI_BADHINTS 90 #undef EAI_PROTOCOL 91 #undef EAI_OVERFLOW 92 #undef EAI_MAX 93 94 #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 95 #define EAI_AGAIN 2 /* temporary failure in name resolution */ 96 #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 97 #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 98 #define EAI_FAMILY 5 /* ai_family not supported */ 99 #define EAI_MEMORY 6 /* memory allocation failure */ 100 #define EAI_NODATA 7 /* no address associated with hostname */ 101 #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 102 #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 103 #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 104 #define EAI_SYSTEM 11 /* system error returned in errno */ 105 #define EAI_BADHINTS 12 106 #define EAI_PROTOCOL 13 107 #define EAI_OVERFLOW 14 108 #define EAI_MAX 15 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 */ 169 struct rdatainfo { 170 unsigned int rdi_length; 171 unsigned char *rdi_data; 172 }; 173 174 struct 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 411 LWRES_LANG_BEGINDECLS 412 413 extern int lwres_h_errno; 414 415 int lwres_getaddrinfo(const char *, const char *, 416 const struct addrinfo *, struct addrinfo **); 417 int lwres_getnameinfo(const struct sockaddr *, size_t, char *, 418 size_t, char *, size_t, int); 419 void lwres_freeaddrinfo(struct addrinfo *); 420 char *lwres_gai_strerror(int); 421 422 struct hostent *lwres_gethostbyaddr(const char *, int, int); 423 struct hostent *lwres_gethostbyname(const char *); 424 struct hostent *lwres_gethostbyname2(const char *, int); 425 struct hostent *lwres_gethostent(void); 426 struct hostent *lwres_getipnodebyname(const char *, int, int, int *); 427 struct hostent *lwres_getipnodebyaddr(const void *, size_t, int, int *); 428 void lwres_endhostent(void); 429 void lwres_sethostent(int); 430 /* void lwres_sethostfile(const char *); */ 431 void lwres_freehostent(struct hostent *); 432 433 int lwres_getrrsetbyname(const char *, unsigned int, unsigned int, 434 unsigned int, struct rrsetinfo **); 435 void lwres_freerrset(struct rrsetinfo *); 436 437 #ifdef notyet 438 struct netent *lwres_getnetbyaddr(unsigned long, int); 439 struct netent *lwres_getnetbyname(const char *); 440 struct netent *lwres_getnetent(void); 441 void lwres_endnetent(void); 442 void lwres_setnetent(int); 443 444 struct protoent *lwres_getprotobyname(const char *); 445 struct protoent *lwres_getprotobynumber(int); 446 struct protoent *lwres_getprotoent(void); 447 void lwres_endprotoent(void); 448 void lwres_setprotoent(int); 449 450 struct servent *lwres_getservbyname(const char *, const char *); 451 struct servent *lwres_getservbyport(int, const char *); 452 struct servent *lwres_getservent(void); 453 void lwres_endservent(void); 454 void lwres_setservent(int); 455 #endif /* notyet */ 456 457 void lwres_herror(const char *); 458 const char *lwres_hstrerror(int); 459 460 461 struct hostent *lwres_gethostbyaddr_r(const char *, int, int, struct hostent *, 462 char *, int, int *); 463 struct hostent *lwres_gethostbyname_r(const char *, struct hostent *, 464 char *, int, int *); 465 struct hostent *lwres_gethostent_r(struct hostent *, char *, int, int *); 466 void lwres_sethostent_r(int); 467 void lwres_endhostent_r(void); 468 469 #ifdef notyet 470 struct netent *lwres_getnetbyname_r(const char *, struct netent *, 471 char *, int); 472 struct netent *lwres_getnetbyaddr_r(long, int, struct netent *, 473 char *, int); 474 struct netent *lwres_getnetent_r(struct netent *, char *, int); 475 void lwres_setnetent_r(int); 476 void lwres_endnetent_r(void); 477 478 struct protoent *lwres_getprotobyname_r(const char *, 479 struct protoent *, char *, int); 480 struct protoent *lwres_getprotobynumber_r(int, 481 struct protoent *, char *, int); 482 struct protoent *lwres_getprotoent_r(struct protoent *, char *, int); 483 void lwres_setprotoent_r(int); 484 void lwres_endprotoent_r(void); 485 486 struct servent *lwres_getservbyname_r(const char *name, const char *, 487 struct servent *, char *, int); 488 struct servent *lwres_getservbyport_r(int port, const char *, 489 struct servent *, char *, int); 490 struct servent *lwres_getservent_r(struct servent *, char *, int); 491 void lwres_setservent_r(int); 492 void lwres_endservent_r(void); 493 #endif /* notyet */ 494 495 LWRES_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__ */ 503 struct 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 }; 508 struct rpcent *lwres_getrpcbyname(); 509 struct rpcent *lwres_getrpcbynumber(), 510 struct 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