1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "net/dns/dns_alias_utility.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <set> 8*6777b538SAndroid Build Coastguard Worker #include <string> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/url_util.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/dns/dns_names_util.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/dns_protocol.h" 14*6777b538SAndroid Build Coastguard Worker #include "url/third_party/mozilla/url_parse.h" 15*6777b538SAndroid Build Coastguard Worker #include "url/url_canon.h" 16*6777b538SAndroid Build Coastguard Worker #include "url/url_canon_stdstring.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace net::dns_alias_utility { 19*6777b538SAndroid Build Coastguard Worker FixUpDnsAliases(const std::set<std::string> & aliases)20*6777b538SAndroid Build Coastguard Workerstd::set<std::string> FixUpDnsAliases(const std::set<std::string>& aliases) { 21*6777b538SAndroid Build Coastguard Worker std::set<std::string> fixed_aliases; 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker for (const std::string& alias : aliases) { 24*6777b538SAndroid Build Coastguard Worker if (!dns_names_util::IsValidDnsRecordName(alias)) { 25*6777b538SAndroid Build Coastguard Worker continue; 26*6777b538SAndroid Build Coastguard Worker } 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker std::string canonicalized_alias; 29*6777b538SAndroid Build Coastguard Worker url::StdStringCanonOutput output(&canonicalized_alias); 30*6777b538SAndroid Build Coastguard Worker url::CanonHostInfo host_info; 31*6777b538SAndroid Build Coastguard Worker url::CanonicalizeHostVerbose(alias.data(), url::Component(0, alias.size()), 32*6777b538SAndroid Build Coastguard Worker &output, &host_info); 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker if (host_info.family == url::CanonHostInfo::Family::BROKEN) { 35*6777b538SAndroid Build Coastguard Worker continue; 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // IP addresses should have been rejected by IsValidDnsRecordName(). 39*6777b538SAndroid Build Coastguard Worker DCHECK_NE(host_info.family, url::CanonHostInfo::Family::IPV4); 40*6777b538SAndroid Build Coastguard Worker DCHECK_NE(host_info.family, url::CanonHostInfo::Family::IPV6); 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker output.Complete(); 43*6777b538SAndroid Build Coastguard Worker fixed_aliases.insert(std::move(canonicalized_alias)); 44*6777b538SAndroid Build Coastguard Worker } 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker return fixed_aliases; 47*6777b538SAndroid Build Coastguard Worker } 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker } // namespace net::dns_alias_utility 50