From: Zoran V. <vas...@us...> - 2005-10-08 09:26:26
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8840/nsd Modified Files: dns.c Log Message: Added critical sections in GetHost/GetAddr when using getnameinfo/getaddrinfo on Darwin platforms. Also, in GetHost(), explicitly initialize the struct sockaddr_in sin_len element because this is needed for the Darwin getnameinfo implementation. Index: dns.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/dns.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** dns.c 5 Oct 2005 20:28:28 -0000 1.7 --- dns.c 8 Oct 2005 09:26:19 -0000 1.8 *************** *** 256,261 **** int result; int status = NS_FALSE; ! sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr(addr); result = getnameinfo((const struct sockaddr *) &sa, --- 256,266 ---- int result; int status = NS_FALSE; ! #ifdef __APPLE__ ! static Ns_Cs cs; ! Ns_CsEnter(&cs); ! #endif ! memset(&sa, 0, sizeof(struct sockaddr_in)); sa.sin_family = AF_INET; + sa.sin_len = sizeof(struct sockaddr_in); sa.sin_addr.s_addr = inet_addr(addr); result = getnameinfo((const struct sockaddr *) &sa, *************** *** 266,271 **** status = NS_TRUE; } else if (result != EAI_NONAME) { ! Ns_Log(Error, "dns: getnameinfo failed: %s", gai_strerror(result)); } return status; } --- 271,279 ---- status = NS_TRUE; } else if (result != EAI_NONAME) { ! Ns_Log(Error, "dns: getnameinfo failed: %s", gai_strerror(result)); } + #ifdef __APPLE__ + Ns_CsLeave(&cs); + #endif return status; } *************** *** 339,343 **** int result; int status = NS_FALSE; ! memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_INET; --- 347,354 ---- int result; int status = NS_FALSE; ! #ifdef __APPLE__ ! static Ns_Cs cs; ! Ns_CsEnter(&cs); ! #endif memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_INET; *************** *** 356,359 **** --- 367,373 ---- gai_strerror(result)); } + #ifdef __APPLE__ + Ns_CsLeave(&cs); + #endif return status; } |