summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornelson%bolyard.com <devnull@localhost>2007-05-09 18:45:42 +0000
committernelson%bolyard.com <devnull@localhost>2007-05-09 18:45:42 +0000
commitfa161cd28f6dc6cefe47249472aefd44f2388bfd (patch)
treed7d9f0b61cc5222f9781e5fd4054a03c318d7a4e
parentb197b2c7a0c7548d010c7eb692f293556c349245 (diff)
parent84836b54c44612b2c9839d19cd205748eab4bf9b (diff)
downloadnss-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.c35
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;