Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/base/net_util.h" | 5 #include "net/base/net_util.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 #include "base/lazy_instance.h" | 38 #include "base/lazy_instance.h" |
| 39 #include "base/logging.h" | 39 #include "base/logging.h" |
| 40 #include "base/strings/string_number_conversions.h" | 40 #include "base/strings/string_number_conversions.h" |
| 41 #include "base/strings/string_piece.h" | 41 #include "base/strings/string_piece.h" |
| 42 #include "base/strings/string_split.h" | 42 #include "base/strings/string_split.h" |
| 43 #include "base/strings/string_util.h" | 43 #include "base/strings/string_util.h" |
| 44 #include "base/strings/stringprintf.h" | 44 #include "base/strings/stringprintf.h" |
| 45 #include "base/strings/utf_string_conversions.h" | 45 #include "base/strings/utf_string_conversions.h" |
| 46 #include "base/sys_byteorder.h" | 46 #include "base/sys_byteorder.h" |
| 47 #include "base/values.h" | 47 #include "base/values.h" |
| 48 #include "net/base/address_list.h" | |
| 48 #include "net/base/dns_util.h" | 49 #include "net/base/dns_util.h" |
| 49 #include "net/base/ip_address_number.h" | 50 #include "net/base/ip_address_number.h" |
| 50 #include "net/base/net_module.h" | 51 #include "net/base/net_module.h" |
| 51 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 52 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
| 52 #include "net/grit/net_resources.h" | 53 #include "net/grit/net_resources.h" |
| 53 #include "net/http/http_content_disposition.h" | 54 #include "net/http/http_content_disposition.h" |
| 54 #include "url/gurl.h" | 55 #include "url/gurl.h" |
| 55 #include "url/third_party/mozilla/url_parse.h" | 56 #include "url/third_party/mozilla/url_parse.h" |
| 56 #include "url/url_canon.h" | 57 #include "url/url_canon.h" |
| 57 #include "url/url_canon_ip.h" | 58 #include "url/url_canon_ip.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 // third_party/WebKit/Source/platform/weborigin/KURL.cpp, | 140 // third_party/WebKit/Source/platform/weborigin/KURL.cpp, |
| 140 // KURL::port()) | 141 // KURL::port()) |
| 141 }; | 142 }; |
| 142 | 143 |
| 143 // FTP overrides the following restricted ports. | 144 // FTP overrides the following restricted ports. |
| 144 static const int kAllowedFtpPorts[] = { | 145 static const int kAllowedFtpPorts[] = { |
| 145 21, // ftp data | 146 21, // ftp data |
| 146 22, // ssh | 147 22, // ssh |
| 147 }; | 148 }; |
| 148 | 149 |
| 150 bool IsLocalHostname(const std::string& host) { | |
| 151 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.
| |
| 152 return (lowercased_host == "localhost" || | |
| 153 lowercased_host == "localhost.localdomain" || | |
| 154 lowercased_host == "localhost." || | |
| 155 lowercased_host == "localhost.localdomain." || | |
| 156 IsLocalhostTLD(lowercased_host)); | |
| 157 } | |
| 158 | |
| 159 bool IsLocal6Hostname(const std::string& host) { | |
| 160 std::string lowercased_host = base::StringToLowerASCII(host); | |
| 161 return (lowercased_host == "localhost6" || | |
| 162 lowercased_host == "localhost6.localdomain6" || | |
| 163 lowercased_host == "localhost6." || | |
| 164 lowercased_host == "localhost6.localdomain6."); | |
| 165 } | |
| 166 | |
| 149 } // namespace | 167 } // namespace |
| 150 | 168 |
| 151 static base::LazyInstance<std::multiset<int> >::Leaky | 169 static base::LazyInstance<std::multiset<int> >::Leaky |
| 152 g_explicitly_allowed_ports = LAZY_INSTANCE_INITIALIZER; | 170 g_explicitly_allowed_ports = LAZY_INSTANCE_INITIALIZER; |
| 153 | 171 |
| 154 size_t GetCountOfExplicitlyAllowedPorts() { | 172 size_t GetCountOfExplicitlyAllowedPorts() { |
| 155 return g_explicitly_allowed_ports.Get().size(); | 173 return g_explicitly_allowed_ports.Get().size(); |
| 156 } | 174 } |
| 157 | 175 |
| 158 std::string GetSpecificHeader(const std::string& headers, | 176 std::string GetSpecificHeader(const std::string& headers, |
| (...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 723 } | 741 } |
| 724 } | 742 } |
| 725 | 743 |
| 726 int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { | 744 int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { |
| 727 const uint16_t* port_field = GetPortFieldFromSockaddr(address, address_len); | 745 const uint16_t* port_field = GetPortFieldFromSockaddr(address, address_len); |
| 728 if (!port_field) | 746 if (!port_field) |
| 729 return -1; | 747 return -1; |
| 730 return base::NetToHost16(*port_field); | 748 return base::NetToHost16(*port_field); |
| 731 } | 749 } |
| 732 | 750 |
| 751 bool ResolveLocalHostname(const std::string& host, | |
| 752 uint16_t port, | |
| 753 AddressList* address_list) { | |
| 754 const unsigned char kLocalhostIPv4[] = {127, 0, 0, 1}; | |
| 755 const unsigned char kLocalhostIPv6[] = { | |
| 756 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.
| |
| 757 | |
| 758 address_list->clear(); | |
| 759 | |
| 760 bool isLocal6 = IsLocal6Hostname(host); | |
|
Ryan Sleevi
2015/06/12 01:00:04
naming: is_local6
estark
2015/06/12 05:59:46
Done.
| |
| 761 if (!isLocal6 && !IsLocalHostname(host)) | |
| 762 return false; | |
| 763 | |
| 764 address_list->push_back( | |
| 765 IPEndPoint(IPAddressNumber(kLocalhostIPv6, | |
| 766 kLocalhostIPv6 + arraysize(kLocalhostIPv6)), | |
| 767 port)); | |
| 768 if (!isLocal6) { | |
| 769 address_list->push_back( | |
| 770 IPEndPoint(IPAddressNumber(kLocalhostIPv4, | |
| 771 kLocalhostIPv4 + arraysize(kLocalhostIPv4)), | |
| 772 port)); | |
| 773 } | |
| 774 | |
| 775 return true; | |
| 776 } | |
| 777 | |
| 733 bool IsLocalhost(const std::string& host) { | 778 bool IsLocalhost(const std::string& host) { |
| 734 if (host == "localhost" || host == "localhost.localdomain" || | 779 if (IsLocalHostname(host) || IsLocal6Hostname(host)) |
| 735 host == "localhost6" || host == "localhost6.localdomain6" || | |
| 736 IsLocalhostTLD(host)) | |
| 737 return true; | 780 return true; |
| 738 | 781 |
| 739 IPAddressNumber ip_number; | 782 IPAddressNumber ip_number; |
| 740 if (ParseIPLiteralToNumber(host, &ip_number)) { | 783 if (ParseIPLiteralToNumber(host, &ip_number)) { |
| 741 size_t size = ip_number.size(); | 784 size_t size = ip_number.size(); |
| 742 switch (size) { | 785 switch (size) { |
| 743 case kIPv4AddressSize: { | 786 case kIPv4AddressSize: { |
| 744 IPAddressNumber localhost_prefix; | 787 IPAddressNumber localhost_prefix; |
| 745 localhost_prefix.push_back(127); | 788 localhost_prefix.push_back(127); |
| 746 for (int i = 0; i < 3; ++i) { | 789 for (int i = 0; i < 3; ++i) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 798 }; | 841 }; |
| 799 const std::string& host = url.host(); | 842 const std::string& host = url.host(); |
| 800 for (const char* suffix : kGoogleHostSuffixes) { | 843 for (const char* suffix : kGoogleHostSuffixes) { |
| 801 if (EndsWith(host, suffix, false)) | 844 if (EndsWith(host, suffix, false)) |
| 802 return true; | 845 return true; |
| 803 } | 846 } |
| 804 return false; | 847 return false; |
| 805 } | 848 } |
| 806 | 849 |
| 807 } // namespace net | 850 } // namespace net |
| OLD | NEW |