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