diff options
author | nelson%bolyard.com <devnull@localhost> | 2007-05-09 18:45:42 +0000 |
---|---|---|
committer | nelson%bolyard.com <devnull@localhost> | 2007-05-09 18:45:42 +0000 |
commit | fa161cd28f6dc6cefe47249472aefd44f2388bfd (patch) | |
tree | d7d9f0b61cc5222f9781e5fd4054a03c318d7a4e | |
parent | b197b2c7a0c7548d010c7eb692f293556c349245 (diff) | |
parent | 84836b54c44612b2c9839d19cd205748eab4bf9b (diff) | |
download | nss-hg-fa161cd28f6dc6cefe47249472aefd44f2388bfd.tar.gz |
Bug 324305 ? tstclnt unable to resolve hostnames to IP addresses on HPUX 11i
Patch by wtc@google.com, r=nelson,alexei
-rw-r--r-- | security/nss/cmd/tstclnt/tstclnt.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/security/nss/cmd/tstclnt/tstclnt.c b/security/nss/cmd/tstclnt/tstclnt.c index 5fabe7da7..02a789abc 100644 --- a/security/nss/cmd/tstclnt/tstclnt.c +++ b/security/nss/cmd/tstclnt/tstclnt.c @@ -436,12 +436,12 @@ int main(int argc, char **argv) int useExportPolicy = 0; PRSocketOptionData opt; PRNetAddr addr; - PRHostEnt hp; PRPollDesc pollset[2]; PRBool useCommandLinePassword = PR_FALSE; PRBool pingServerFirst = PR_FALSE; PRBool clientSpeaksFirst = PR_FALSE; int error = 0; + PRUint16 portno; PLOptState *optstate; PLOptStatus optstatus; PRStatus prStatus; @@ -514,6 +514,7 @@ int main(int argc, char **argv) Usage(progName); if (!host || !port) Usage(progName); + portno = (PRUint16)atoi(port); if (!certDir) { certDir = SECU_DefaultSSLDir(); /* Look in $SSL_DIR */ @@ -556,37 +557,37 @@ int main(int argc, char **argv) status = PR_StringToNetAddr(host, &addr); if (status == PR_SUCCESS) { - int portno = atoi(port); - addr.inet.port = PR_htons((PRUint16)portno); + addr.inet.port = PR_htons(portno); } else { /* Lookup host */ - char buf[PR_NETDB_BUF_SIZE]; - status = PR_GetIPNodeByName(host, PR_AF_INET6, PR_AI_DEFAULT, - buf, sizeof buf, &hp); - if (status != PR_SUCCESS) { + PRAddrInfo *addrInfo; + void *enumPtr = NULL; + + addrInfo = PR_GetAddrInfoByName(host, PR_AF_UNSPEC, + PR_AI_ADDRCONFIG | PR_AI_NOCANONNAME); + if (!addrInfo) { SECU_PrintError(progName, "error looking up host"); return 1; } - if (PR_EnumerateHostEnt(0, &hp, (PRUint16)atoi(port), &addr) == -1) { + do { + enumPtr = PR_EnumerateAddrInfo(enumPtr, addrInfo, portno, &addr); + } while (enumPtr != NULL && + addr.raw.family != PR_AF_INET && + addr.raw.family != PR_AF_INET6); + PR_FreeAddrInfo(addrInfo); + if (enumPtr == NULL) { SECU_PrintError(progName, "error looking up host address"); return 1; } } - if (PR_IsNetAddrType(&addr, PR_IpAddrV4Mapped)) { - /* convert to IPv4. */ - addr.inet.family = PR_AF_INET; - memcpy(&addr.inet.ip, &addr.ipv6.ip.pr_s6_addr[12], 4); - memset(&addr.inet.pad[0], 0, sizeof addr.inet.pad); - } - printHostNameAndAddr(host, &addr); if (pingServerFirst) { int iter = 0; PRErrorCode err; do { - s = PR_NewTCPSocket(); + s = PR_OpenTCPSocket(addr.raw.family); if (s == NULL) { SECU_PrintError(progName, "Failed to create a TCP socket"); } @@ -624,7 +625,7 @@ int main(int argc, char **argv) } /* Create socket */ - s = PR_NewTCPSocket(); + s = PR_OpenTCPSocket(addr.raw.family); if (s == NULL) { SECU_PrintError(progName, "error creating socket"); return 1; |