You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by "William A. Rowe, Jr." <wr...@rowe-clan.net> on 2007/12/08 01:44:08 UTC

Re: svn commit: r602176 - /apr/apr/trunk/network_io/unix/sockaddr.c

Folks, looking for feedback.

The connection rec in httpd has our apparently-ipv4 addresses stored
as the local and remote host, but we tag these as APR_INET6 addresses.
This makes it very difficult to look things up later on.

I don't think there's a problem if we look up an unspecified or IPV4
form for that address, but in the case of calling up the very same
family we recorded, INET6, shouldn't apr_sockaddr_info_get still
work with that combination???

Otherwise, our truncation of the leading ::ffff: was a pretty foolish
thing to do :(

Let me know if anyone sees issues with the patch below, otherwise I'll
backport Monday.

Bill

wrowe@apache.org wrote:
> Author: wrowe
> Date: Fri Dec  7 10:47:29 2007
> New Revision: 602176
> 
> URL: http://svn.apache.org/viewvc?rev=602176&view=rev
> Log:
> Where hostname is provided in ipv4 numeric form, as we've 
> foolishly cooerced all of our IPV4_MAPPED_IPV6 addresses,
> we'll need to accept this as a socket lookup call!
> 
> Unfortunately, we failed to resolve, for example, 127.0.0.1
> for INET6 addressing, where we would resolve ::ffff:127.0.0.1
> But the AI_V4MAPPED flag will let us resolve this address after
> attempting to resolve the IPV6 notation.
> 
> Feedback and careful review is desired before this is applied
> to branches 1.2 and 0.9.  Thanks.
> 
> 
> 
> Modified:
>     apr/apr/trunk/network_io/unix/sockaddr.c
> 
> Modified: apr/apr/trunk/network_io/unix/sockaddr.c
> URL: http://svn.apache.org/viewvc/apr/apr/trunk/network_io/unix/sockaddr.c?rev=602176&r1=602175&r2=602176&view=diff
> ==============================================================================
> --- apr/apr/trunk/network_io/unix/sockaddr.c (original)
> +++ apr/apr/trunk/network_io/unix/sockaddr.c Fri Dec  7 10:47:29 2007
> @@ -344,6 +344,11 @@
>          servname = apr_itoa(p, port);
>  #endif /* OSF1 */
>      }
> +#if APR_HAVE_IPV6 && defined(AI_V4MAPPED)
> +    else if (family == APR_INET6) {
> +        hints.ai_flags |= AI_V4MAPPED;
> +    }
> +#endif
>      error = getaddrinfo(hostname, servname, &hints, &ai_list);
>  #ifdef HAVE_GAI_ADDRCONFIG
>      if (error == EAI_BADFLAGS && family == APR_UNSPEC) {
> 
> 
> 
>