Index: net/base/net_util.cc |
diff --git a/net/base/net_util.cc b/net/base/net_util.cc |
index 028b56b74a8bb526b4e486bb1c328efda71005d4..dc03a91817efff39282f517310074706a182eaf6 100644 |
--- a/net/base/net_util.cc |
+++ b/net/base/net_util.cc |
@@ -45,6 +45,7 @@ |
#include "base/strings/utf_string_conversions.h" |
#include "base/sys_byteorder.h" |
#include "base/values.h" |
+#include "net/base/address_list.h" |
#include "net/base/dns_util.h" |
#include "net/base/ip_address_number.h" |
#include "net/base/net_module.h" |
@@ -146,6 +147,23 @@ static const int kAllowedFtpPorts[] = { |
22, // ssh |
}; |
+bool IsLocalHostname(const std::string& host) { |
+ std::string lowercased_host = base::StringToLowerASCII(host); |
Ryan Sleevi
2015/06/12 01:00:04
Suggestion: To reduce comparisons for the forms, a
estark
2015/06/12 05:59:46
Done.
|
+ return (lowercased_host == "localhost" || |
+ lowercased_host == "localhost.localdomain" || |
+ lowercased_host == "localhost." || |
+ lowercased_host == "localhost.localdomain." || |
+ IsLocalhostTLD(lowercased_host)); |
+} |
+ |
+bool IsLocal6Hostname(const std::string& host) { |
+ std::string lowercased_host = base::StringToLowerASCII(host); |
+ return (lowercased_host == "localhost6" || |
+ lowercased_host == "localhost6.localdomain6" || |
+ lowercased_host == "localhost6." || |
+ lowercased_host == "localhost6.localdomain6."); |
+} |
+ |
} // namespace |
static base::LazyInstance<std::multiset<int> >::Leaky |
@@ -730,10 +748,35 @@ int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { |
return base::NetToHost16(*port_field); |
} |
+bool ResolveLocalHostname(const std::string& host, |
+ uint16_t port, |
+ AddressList* address_list) { |
+ const unsigned char kLocalhostIPv4[] = {127, 0, 0, 1}; |
+ const unsigned char kLocalhostIPv6[] = { |
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; |
Ryan Sleevi
2015/06/12 01:00:04
nit: Can make these static (so that they're in the
estark
2015/06/12 05:59:46
Done.
|
+ |
+ address_list->clear(); |
+ |
+ bool isLocal6 = IsLocal6Hostname(host); |
Ryan Sleevi
2015/06/12 01:00:04
naming: is_local6
estark
2015/06/12 05:59:46
Done.
|
+ if (!isLocal6 && !IsLocalHostname(host)) |
+ return false; |
+ |
+ address_list->push_back( |
+ IPEndPoint(IPAddressNumber(kLocalhostIPv6, |
+ kLocalhostIPv6 + arraysize(kLocalhostIPv6)), |
+ port)); |
+ if (!isLocal6) { |
+ address_list->push_back( |
+ IPEndPoint(IPAddressNumber(kLocalhostIPv4, |
+ kLocalhostIPv4 + arraysize(kLocalhostIPv4)), |
+ port)); |
+ } |
+ |
+ return true; |
+} |
+ |
bool IsLocalhost(const std::string& host) { |
- if (host == "localhost" || host == "localhost.localdomain" || |
- host == "localhost6" || host == "localhost6.localdomain6" || |
- IsLocalhostTLD(host)) |
+ if (IsLocalHostname(host) || IsLocal6Hostname(host)) |
return true; |
IPAddressNumber ip_number; |