From: Zoran V. <vas...@us...> - 2005-10-15 13:58:19
|
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; } } |