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

Side by Side Diff: net/base/net_util.cc

Issue 1177933002: Resolve RFC 6761 localhost names to loopback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mmenke comments 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/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 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 } 723 }
724 } 724 }
725 725
726 int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) { 726 int GetPortFromSockaddr(const struct sockaddr* address, socklen_t address_len) {
727 const uint16_t* port_field = GetPortFieldFromSockaddr(address, address_len); 727 const uint16_t* port_field = GetPortFieldFromSockaddr(address, address_len);
728 if (!port_field) 728 if (!port_field)
729 return -1; 729 return -1;
730 return base::NetToHost16(*port_field); 730 return base::NetToHost16(*port_field);
731 } 731 }
732 732
733 bool IsLocalhostHostname(const std::string& host, bool* isLocalhost6) {
734 std::string lowercased_host = base::StringToLowerASCII(host);
735 if (lowercased_host == "localhost6" ||
736 lowercased_host == "localhost6.localdomain6" ||
737 lowercased_host == "localhost6." ||
738 lowercased_host == "localhost6.localdomain6.") {
739 *isLocalhost6 = true;
740 return true;
741 }
742
743 if (lowercased_host == "localhost" ||
744 lowercased_host == "localhost.localdomain" ||
745 lowercased_host == "localhost." ||
746 lowercased_host == "localhost.localdomain." ||
747 IsLocalhostTLD(lowercased_host)) {
748 *isLocalhost6 = false;
749 return true;
750 }
751
752 return false;
753 }
754
733 bool IsLocalhost(const std::string& host) { 755 bool IsLocalhost(const std::string& host) {
734 if (host == "localhost" || host == "localhost.localdomain" || 756 bool isIPv6;
735 host == "localhost6" || host == "localhost6.localdomain6" || 757 if (IsLocalhostHostname(host, &isIPv6))
736 IsLocalhostTLD(host))
737 return true; 758 return true;
738 759
739 IPAddressNumber ip_number; 760 IPAddressNumber ip_number;
740 if (ParseIPLiteralToNumber(host, &ip_number)) { 761 if (ParseIPLiteralToNumber(host, &ip_number)) {
741 size_t size = ip_number.size(); 762 size_t size = ip_number.size();
742 switch (size) { 763 switch (size) {
743 case kIPv4AddressSize: { 764 case kIPv4AddressSize: {
744 IPAddressNumber localhost_prefix; 765 IPAddressNumber localhost_prefix;
745 localhost_prefix.push_back(127); 766 localhost_prefix.push_back(127);
746 for (int i = 0; i < 3; ++i) { 767 for (int i = 0; i < 3; ++i) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 }; 819 };
799 const std::string& host = url.host(); 820 const std::string& host = url.host();
800 for (const char* suffix : kGoogleHostSuffixes) { 821 for (const char* suffix : kGoogleHostSuffixes) {
801 if (EndsWith(host, suffix, false)) 822 if (EndsWith(host, suffix, false))
802 return true; 823 return true;
803 } 824 }
804 return false; 825 return false;
805 } 826 }
806 827
807 } // namespace net 828 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698