]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 3732: Fix ConnOpener IPv6 awareness
authorAmos Jeffries <squid3@treenet.co.nz>
Tue, 22 Jan 2013 11:08:52 +0000 (04:08 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 22 Jan 2013 11:08:52 +0000 (04:08 -0700)
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().

src/comm/ConnOpener.cc

index d0272af30555a114aff2b0e578837024157c71a8..c519242f8932dcebb830407ff54e9766c683a759 100644 (file)
@@ -13,6 +13,7 @@
 #include "globals.h"
 #include "icmp/net_db.h"
 #include "ipcache.h"
+#include "ip/tools.h"
 #include "SquidConfig.h"
 #include "SquidTime.h"
 
@@ -165,12 +166,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);