Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: net/dns/host_resolver_impl.cc

Issue 1177933002: Resolve RFC 6761 localhost names to loopback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/dns/host_resolver_impl.h" 5 #include "net/dns/host_resolver_impl.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <Winsock2.h> 8 #include <Winsock2.h>
9 #elif defined(OS_POSIX) 9 #elif defined(OS_POSIX)
10 #include <netdb.h> 10 #include <netdb.h>
(...skipping 1979 matching lines...) Expand 10 before | Expand all | Expand 10 after
1990 if (ServeFromCache(key, info, &net_error, addresses)) { 1990 if (ServeFromCache(key, info, &net_error, addresses)) {
1991 source_net_log.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_CACHE_HIT); 1991 source_net_log.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_CACHE_HIT);
1992 return net_error; 1992 return net_error;
1993 } 1993 }
1994 // TODO(szym): Do not do this if nsswitch.conf instructs not to. 1994 // TODO(szym): Do not do this if nsswitch.conf instructs not to.
1995 // http://crbug.com/117655 1995 // http://crbug.com/117655
1996 if (ServeFromHosts(key, info, addresses)) { 1996 if (ServeFromHosts(key, info, addresses)) {
1997 source_net_log.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_HOSTS_HIT); 1997 source_net_log.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_HOSTS_HIT);
1998 return OK; 1998 return OK;
1999 } 1999 }
2000
2001 // Per RFC 6761 section 6.3, resolve localhost to loopback without
2002 // sending it out on the network.
2003 if (IsLocalhost(base::StringToLowerASCII(key.hostname))) {
Ryan Sleevi 2015/06/11 00:34:03 BUG: Should IsLocalhost be doing the case conversi
estark 2015/06/11 02:35:32 Done.
2004 addresses->clear();
2005 IPAddressNumber ip_address;
2006 ParseIPLiteralToNumber("127.0.0.1", &ip_address);
Ryan Sleevi 2015/06/11 00:34:03 BUG 1: This isn't correct for localhost6 (which sh
estark 2015/06/11 02:35:32 Done by factoring out the hostname check of IsLoca
2007 addresses->push_back(IPEndPoint(ip_address, info.port()));
2008 return OK;
2009 }
2010
2000 return ERR_DNS_CACHE_MISS; 2011 return ERR_DNS_CACHE_MISS;
2001 } 2012 }
2002 2013
2003 int HostResolverImpl::ResolveFromCache(const RequestInfo& info, 2014 int HostResolverImpl::ResolveFromCache(const RequestInfo& info,
2004 AddressList* addresses, 2015 AddressList* addresses,
2005 const BoundNetLog& source_net_log) { 2016 const BoundNetLog& source_net_log) {
2006 DCHECK(CalledOnValidThread()); 2017 DCHECK(CalledOnValidThread());
2007 DCHECK(addresses); 2018 DCHECK(addresses);
2008 2019
2009 // Update the net log and notify registered observers. 2020 // Update the net log and notify registered observers.
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
2202 effective_address_family = ADDRESS_FAMILY_IPV4; 2213 effective_address_family = ADDRESS_FAMILY_IPV4;
2203 effective_flags |= HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6; 2214 effective_flags |= HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
2204 } 2215 }
2205 } 2216 }
2206 } 2217 }
2207 2218
2208 std::string hostname = info.hostname(); 2219 std::string hostname = info.hostname();
2209 // Redirect .localhost queries to "localhost." to make sure that they 2220 // Redirect .localhost queries to "localhost." to make sure that they
2210 // are never sent out on the network, per RFC 6761. 2221 // are never sent out on the network, per RFC 6761.
2211 if (IsLocalhostTLD(info.hostname())) 2222 if (IsLocalhostTLD(info.hostname()))
2212 hostname = kLocalhost; 2223 hostname = kLocalhost;
mmenke 2015/06/11 00:36:51 Peppering this file with multiple localhost checks
estark 2015/06/11 02:35:32 Ah, that's nice, we don't need both. Removed.
2213 2224
2214 return Key(hostname, effective_address_family, effective_flags); 2225 return Key(hostname, effective_address_family, effective_flags);
2215 } 2226 }
2216 2227
2217 bool HostResolverImpl::IsIPv6Reachable(const BoundNetLog& net_log) { 2228 bool HostResolverImpl::IsIPv6Reachable(const BoundNetLog& net_log) {
2218 base::TimeTicks now = base::TimeTicks::Now(); 2229 base::TimeTicks now = base::TimeTicks::Now();
2219 bool cached = true; 2230 bool cached = true;
2220 if ((now - last_ipv6_probe_time_).InMilliseconds() > kIPv6ProbePeriodMs) { 2231 if ((now - last_ipv6_probe_time_).InMilliseconds() > kIPv6ProbePeriodMs) {
2221 IPAddressNumber address(kIPv6ProbeAddress, 2232 IPAddressNumber address(kIPv6ProbeAddress,
2222 kIPv6ProbeAddress + arraysize(kIPv6ProbeAddress)); 2233 kIPv6ProbeAddress + arraysize(kIPv6ProbeAddress));
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
2412 dns_client_->SetConfig(dns_config); 2423 dns_client_->SetConfig(dns_config);
2413 num_dns_failures_ = 0; 2424 num_dns_failures_ = 0;
2414 if (dns_client_->GetConfig()) 2425 if (dns_client_->GetConfig())
2415 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); 2426 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true);
2416 } 2427 }
2417 2428
2418 AbortDnsTasks(); 2429 AbortDnsTasks();
2419 } 2430 }
2420 2431
2421 } // namespace net 2432 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698