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) {
>
>
>
>