Index: network_io/unix/sockaddr.c =================================================================== --- network_io/unix/sockaddr.c (revision 1541061) +++ network_io/unix/sockaddr.c (working copy) @@ -672,6 +672,10 @@ APR_DECLARE(apr_status_t) apr_getnameinfo(char **h char tmphostname[256]; #endif
+ if (apr_sockaddr_is_wildcard(sockaddr)) { + return APR_EINVAL; + } + /* don't know if it is portable for getnameinfo() to set h_errno; * clear it then see if it was set */ SET_H_ERRNO(0); @@ -747,6 +751,10 @@ APR_DECLARE(apr_status_t) apr_getnameinfo(char **h int hosterror; struct hostent hs, *hptr; + if (apr_sockaddr_is_wildcard(sockaddr)) { + return APR_EINVAL; + } + #if defined(GETHOSTBYNAME_R_HOSTENT_DATA) /* AIX, HP/UX, D/UX et alia */ gethostbyaddr_r((char *)&sockaddr->sa.sin.sin_addr, It seems sort of silly until you debug an app that shows different representations of a sockaddr on different platforms, because Linux: getnameinfo(INADDR_ANY) does DNS lookup then fails with not-found* FreeBSD: getnameinfo(INADDR_ANY) fails immediately with not-found-or-no-arg* Windows: getnameinfo(INADDR_ANY) succeeds, then returns the hostname of the system *didn't capture resolver error codes :( Of course an app that is discovered to be getting bit is easy to fix with a call to apr_sockaddr_is_wildcard() or local equivalent, and maybe some app depends on the current behavior anyway. Does anyone care either way? -- Born in Roswell... married an alien... http://emptyhammock.com/