if (A.IsAnyAddr()) {
debugs(78, 0, "WARNING: Squid does not accept " << A << " in DNS server specifications.");
- A = "127.0.0.1";
+ A.SetLocalhost();
debugs(78, 0, "Will be using " << A << " instead, assuming you meant that DNS is running on the same machine");
}
+ if (!Ip::EnableIpv6 && !A.SetIPv4()) {
+ debugs(78, DBG_IMPORTANT, "WARNING: IPv6 is disabled. Discarding " << A << " in DNS server specifications.");
+ return;
+ }
+
if (nns == nns_alloc) {
int oldalloc = nns_alloc;
ns *oldptr = nameservers;
else
addr = Config.Addrs.udp_incoming;
+ if (nameservers[ns].S.IsIPv4() && !addr.SetIPv4()) {
+ debugs(31, DBG_CRITICAL, "ERROR: Cannot contact DNS nameserver " << nameservers[ns].S << " from " << addr);
+ addr.SetAnyAddr();
+ addr.SetIPv4();
+ }
+
vc->queue = new MemBuf;
vc->msg = new MemBuf;
// if IPv6 is disabled try to force IPv4-only outgoing.
if (!Ip::EnableIpv6 && !outgoing.SetIPv4()) {
- debugs(50, 4, "fwdConnectStart: " << xstrerror());
+ debugs(50, 4, "fwdConnectStart: IPv6 is Disabled. Cannot connect from " << outgoing);
ErrorState *anErr = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, request);
- anErr->xerrno = errno;
+ anErr->xerrno = EAFNOSUPPORT;
fail(anErr);
self = NULL; // refcounted
return;
Ip::Address temp(getOutgoingAddr(NULL,p));
+ // if IPv6 is disabled try to force IPv4-only outgoing.
+ if (!Ip::EnableIpv6 && !temp.SetIPv4()) {
+ debugs(50, DBG_IMPORTANT, "WARNING: IPv6 is disabled. Failed to use " << temp << " to probe " << p->host);
+ return ret;
+ }
+
+ // if IPv6 is split-stack, prefer IPv4
+ if (Ip::EnableIpv6&IPV6_SPECIAL_SPLITSTACK) {
+ // NP: This is not a great choice of default,
+ // but with the current Internet being IPv4-majority has a higher success rate.
+ // if setting to IPv4 fails we dont care, that just means to use IPv6 outgoing.
+ temp.SetIPv4();
+ }
+
fd = comm_open(SOCK_STREAM, IPPROTO_TCP, temp, COMM_NONBLOCKING, p->host);
if (fd < 0)
statCounter.server.other.requests++;
/* Create socket. */
Ip::Address temp = getOutgoingAddr(request,NULL);
+
+ // if IPv6 is disabled try to force IPv4-only outgoing.
+ if (!Ip::EnableIpv6 && !temp.SetIPv4()) {
+ debugs(50, 4, "tunnelStart: IPv6 is Disabled. Tunnel failed from " << temp);
+ ErrorState *anErr = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, request);
+ anErr->xerrno = EAFNOSUPPORT;
+ fail(anErr);
+ self = NULL; // refcounted
+ return;
+ }
+
+ // if IPv6 is split-stack, prefer IPv4
+ if (Ip::EnableIpv6&IPV6_SPECIAL_SPLITSTACK) {
+ // NP: This is not a great choice of default,
+ // but with the current Internet being IPv4-majority has a higher success rate.
+ // if setting to IPv4 fails we dont care, that just means to use IPv6 outgoing.
+ temp.SetIPv4();
+ }
+
int flags = COMM_NONBLOCKING;
if (request->flags.spoof_client_ip) {
flags |= COMM_TRANSPARENT;