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;
}
|