diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libc/net/getaddrinfo.c | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/src/lib/libc/net/getaddrinfo.c b/src/lib/libc/net/getaddrinfo.c index 4b02f8f106..364bffedeb 100644 --- a/src/lib/libc/net/getaddrinfo.c +++ b/src/lib/libc/net/getaddrinfo.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: getaddrinfo.c,v 1.39 2002/07/01 21:57:35 itojun Exp $ */ | 1 | /* $OpenBSD: getaddrinfo.c,v 1.40 2002/07/24 01:38:34 itojun Exp $ */ | 
| 2 | /* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */ | 2 | /* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */ | 
| 3 | 3 | ||
| 4 | /* | 4 | /* | 
| @@ -108,6 +108,8 @@ | |||
| 108 | #include "ypinternal.h" | 108 | #include "ypinternal.h" | 
| 109 | #endif | 109 | #endif | 
| 110 | 110 | ||
| 111 | #include "thread_private.h" | ||
| 112 | |||
| 111 | #define SUCCESS 0 | 113 | #define SUCCESS 0 | 
| 112 | #define ANY 0 | 114 | #define ANY 0 | 
| 113 | #define YES 1 | 115 | #define YES 1 | 
| @@ -500,6 +502,9 @@ getaddrinfo(hostname, servname, hints, res) | |||
| 500 | /* | 502 | /* | 
| 501 | * FQDN hostname, DNS lookup | 503 | * FQDN hostname, DNS lookup | 
| 502 | */ | 504 | */ | 
| 505 | |||
| 506 | _THREAD_PRIVATE_MUTEX(getaddrinfo_explore_fqdn); | ||
| 507 | |||
| 503 | static int | 508 | static int | 
| 504 | explore_fqdn(pai, hostname, servname, res) | 509 | explore_fqdn(pai, hostname, servname, res) | 
| 505 | const struct addrinfo *pai; | 510 | const struct addrinfo *pai; | 
| @@ -513,6 +518,8 @@ explore_fqdn(pai, hostname, servname, res) | |||
| 513 | char lookups[MAXDNSLUS]; | 518 | char lookups[MAXDNSLUS]; | 
| 514 | int i; | 519 | int i; | 
| 515 | 520 | ||
| 521 | _THREAD_PRIVATE_MUTEX_LOCK(getaddrinfo_explore_fqdn); | ||
| 522 | |||
| 516 | result = NULL; | 523 | result = NULL; | 
| 517 | 524 | ||
| 518 | #if 0 | 525 | #if 0 | 
| @@ -521,15 +528,19 @@ explore_fqdn(pai, hostname, servname, res) | |||
| 521 | * return the address family or not. | 528 | * return the address family or not. | 
| 522 | * XXX does not handle PF_UNSPEC case, should filter final result | 529 | * XXX does not handle PF_UNSPEC case, should filter final result | 
| 523 | */ | 530 | */ | 
| 524 | if ((pai->ai_flags & AI_ADDRCONFIG) != 0 && !addrconfig(pai)) | 531 | if ((pai->ai_flags & AI_ADDRCONFIG) != 0 && !addrconfig(pai)) { | 
| 532 | _THREAD_PRIVATE_MUTEX_UNLOCK(getaddrinfo_explore_fqdn); | ||
| 525 | return 0; | 533 | return 0; | 
| 534 | } | ||
| 526 | #endif | 535 | #endif | 
| 527 | 536 | ||
| 528 | /* | 537 | /* | 
| 529 | * if the servname does not match socktype/protocol, ignore it. | 538 | * if the servname does not match socktype/protocol, ignore it. | 
| 530 | */ | 539 | */ | 
| 531 | if (get_portmatch(pai, servname) != 0) | 540 | if (get_portmatch(pai, servname) != 0) { | 
| 541 | _THREAD_PRIVATE_MUTEX_UNLOCK(getaddrinfo_explore_fqdn); | ||
| 532 | return 0; | 542 | return 0; | 
| 543 | } | ||
| 533 | 544 | ||
| 534 | if ((_res.options & RES_INIT) == 0 && res_init() == -1) | 545 | if ((_res.options & RES_INIT) == 0 && res_init() == -1) | 
| 535 | strncpy(lookups, "f", sizeof lookups); | 546 | strncpy(lookups, "f", sizeof lookups); | 
| @@ -560,6 +571,7 @@ explore_fqdn(pai, hostname, servname, res) | |||
| 560 | /* canonname should be filled already */ | 571 | /* canonname should be filled already */ | 
| 561 | } | 572 | } | 
| 562 | *res = result; | 573 | *res = result; | 
| 574 | _THREAD_PRIVATE_MUTEX_UNLOCK(getaddrinfo_explore_fqdn); | ||
| 563 | return 0; | 575 | return 0; | 
| 564 | } else { | 576 | } else { | 
| 565 | /* translate error code */ | 577 | /* translate error code */ | 
| @@ -591,6 +603,7 @@ explore_fqdn(pai, hostname, servname, res) | |||
| 591 | free: | 603 | free: | 
| 592 | if (result) | 604 | if (result) | 
| 593 | freeaddrinfo(result); | 605 | freeaddrinfo(result); | 
| 606 | _THREAD_PRIVATE_MUTEX_UNLOCK(getaddrinfo_explore_fqdn); | ||
| 594 | return error; | 607 | return error; | 
| 595 | } | 608 | } | 
| 596 | 609 | ||
