From: Amos Jeffries Date: Mon, 28 Jan 2013 11:45:07 +0000 (-0700) Subject: Bug 3732: Fix ConnOpener IPv6 awareness X-Git-Tag: SQUID_3_2_7~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93315f5d86a0105a14a6aee4f7f9a987f9849f2d;p=thirdparty%2Fsquid.git Bug 3732: Fix ConnOpener IPv6 awareness When updating IPv6 support for split-stack one USE_IPV6 wrapper was omitted conversion to the EnabledIpv6 stack auto-detect mechanism. This resulted in IPv6 addresses being mis-converted on split-stack systems or with IPv6 disabled in the kernel and --enable-ipv6 built. The visible symptom is "assert(FALSE)" in Ip::Address::GetAddrInfo(). --- diff --git a/src/comm/ConnOpener.cc b/src/comm/ConnOpener.cc index cb53b19f68..0b763c981d 100644 --- a/src/comm/ConnOpener.cc +++ b/src/comm/ConnOpener.cc @@ -10,6 +10,7 @@ #include "fde.h" #include "icmp/net_db.h" #include "ipcache.h" +#include "ip/tools.h" #include "SquidTime.h" CBDATA_NAMESPACED_CLASS_INIT(Comm, ConnOpener); @@ -155,12 +156,10 @@ Comm::ConnOpener::start() /* get a socket open ready for connecting with */ if (temporaryFd_ < 0) { -#if USE_IPV6 /* outbound sockets have no need to be protocol agnostic. */ - if (conn_->remote.IsIPv4()) { + if (!(Ip::EnableIpv6&IPV6_SPECIAL_V4MAPPING) && conn_->remote.IsIPv4()) { conn_->local.SetIPv4(); } -#endif temporaryFd_ = comm_openex(SOCK_STREAM, IPPROTO_TCP, conn_->local, conn_->flags, conn_->tos, conn_->nfmark, host_); if (temporaryFd_ < 0) { doneConnecting(COMM_ERR_CONNECT, 0);