Update of /cvsroot/naviserver/naviserver/nsd
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30846/nsd
Modified Files:
dns.c
Log Message:
Added checking for HAVE_MTSAFE_DNS and add
protective locks if not (Darwin).
Added checking for HAVE_SOCKADDRIN_SIN_LEN because Darwin
version of getnameinfo fails if sin_len has unsane values.
Fixed bug while processing results of gethostbyname.
Index: dns.c
===================================================================
RCS file: /cvsroot/naviserver/naviserver/nsd/dns.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** dns.c 8 Oct 2005 22:03:55 -0000 1.9
--- dns.c 15 Oct 2005 13:58:11 -0000 1.10
***************
*** 256,266 ****
int result;
int status = NS_FALSE;
! #ifdef __APPLE__
static Ns_Cs cs;
Ns_CsEnter(&cs);
memset(&sa, 0, sizeof(struct sockaddr_in));
sa.sin_len = sizeof(struct sockaddr_in);
- #else
- memset(&sa, 0, sizeof(struct sockaddr_in));
#endif
sa.sin_family = AF_INET;
--- 256,266 ----
int result;
int status = NS_FALSE;
! #ifndef HAVE_MTSAFE_DNS
static Ns_Cs cs;
Ns_CsEnter(&cs);
+ #endif
memset(&sa, 0, sizeof(struct sockaddr_in));
+ #ifdef HAVE_SOCKADDRIN_SIN_LEN
sa.sin_len = sizeof(struct sockaddr_in);
#endif
sa.sin_family = AF_INET;
***************
*** 275,279 ****
Ns_Log(Error, "dns: getnameinfo failed: %s", gai_strerror(result));
}
! #ifdef __APPLE__
Ns_CsLeave(&cs);
#endif
--- 275,279 ----
Ns_Log(Error, "dns: getnameinfo failed: %s", gai_strerror(result));
}
! #ifndef HAVE_MTSAFE_DNS
Ns_CsLeave(&cs);
#endif
***************
*** 349,353 ****
int result;
int status = NS_FALSE;
! #ifdef __APPLE__
static Ns_Cs cs;
Ns_CsEnter(&cs);
--- 349,353 ----
int result;
int status = NS_FALSE;
! #ifndef HAVE_MTSAFE_DNS
static Ns_Cs cs;
Ns_CsEnter(&cs);
***************
*** 369,373 ****
gai_strerror(result));
}
! #ifdef __APPLE__
Ns_CsLeave(&cs);
#endif
--- 369,373 ----
gai_strerror(result));
}
! #ifndef HAVE_MTSAFE_DNS
Ns_CsLeave(&cs);
#endif
***************
*** 409,418 ****
LogError("gethostbyname_r", h_errnop);
} else {
! ptr = (struct in_addr *) he.h_addr_list[i];
! while (ptr != NULL) {
ia.s_addr = ptr->s_addr;
Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa(ia));
status = NS_TRUE;
- ptr = (struct in_addr *) he.h_addr_list[++i];
}
}
--- 409,416 ----
LogError("gethostbyname_r", h_errnop);
} else {
! while ((ptr = (struct in_addr *) he.h_addr_list[i++]) != NULL) {
ia.s_addr = ptr->s_addr;
Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa(ia));
status = NS_TRUE;
}
}
***************
*** 444,453 ****
LogError("gethostbyname", h_errno);
} else {
! ptr = (struct in_addr *) he->h_addr_list[i];
! while (ptr != NULL) {
ia.s_addr = ptr->s_addr;
Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa(ia));
status = NS_TRUE;
- ptr = (struct in_addr *) he->h_addr_list[++i];
}
}
--- 442,449 ----
LogError("gethostbyname", h_errno);
} else {
! while ((ptr = (struct in_addr *) he->h_addr_list[i++]) != NULL) {
ia.s_addr = ptr->s_addr;
Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa(ia));
status = NS_TRUE;
}
}
|