Merge bitcoin/bitcoin#17160: refactor: net: subnet lookup: use single-result LookupHost()

a989f98d240a84b5c798252acaa4a316ac711189 refactor: net: subnet lookup: use single-result LookupHost() (Sebastian Falbesoner)

Pull request description:

  plus describe single IP subnet case for more clarity

ACKs for top commit:
  jonatack:
    utACK a989f98d240a84b5c798252acaa4a316ac711189 the patch rebases cleanly to master, the debug build is green, and it is essentially the same patch as c8991f0251dd2a modulo local variable naming, braced initialization, and a comment
  vasild:
    ACK a989f98d240a84b5c798252acaa4a316ac711189

Tree-SHA512: 082d3481b1fa5e5f3267b7c4a812954b67b36d1f94c5296fe20110699f053e5042dfa13f728ae20249e9b8d71e930c3b119410125d0faeccdfbdc259223ee3a6
This commit is contained in:
W. J. van der Laan 2021-12-06 19:49:56 +01:00 committed by PastaPastaPasta
parent 076e0528ef
commit b34db33a69

View File

@ -674,14 +674,11 @@ bool LookupSubNet(const std::string& strSubnet, CSubNet& ret, DNSLookupFn dns_lo
return false; return false;
} }
size_t slash = strSubnet.find_last_of('/'); size_t slash = strSubnet.find_last_of('/');
std::vector<CNetAddr> vIP; CNetAddr network;
std::string strAddress = strSubnet.substr(0, slash); std::string strAddress = strSubnet.substr(0, slash);
// TODO: Use LookupHost(const std::string&, CNetAddr&, bool) instead to just get if (LookupHost(strAddress, network, false, dns_lookup_function))
// one CNetAddr.
if (LookupHost(strAddress, vIP, 1, false, dns_lookup_function))
{ {
CNetAddr network = vIP[0];
if (slash != strSubnet.npos) if (slash != strSubnet.npos)
{ {
std::string strNetmask = strSubnet.substr(slash + 1); std::string strNetmask = strSubnet.substr(slash + 1);
@ -693,14 +690,15 @@ bool LookupSubNet(const std::string& strSubnet, CSubNet& ret, DNSLookupFn dns_lo
} }
else // If not a valid number, try full netmask syntax else // If not a valid number, try full netmask syntax
{ {
CNetAddr netmask;
// Never allow lookup for netmask // Never allow lookup for netmask
if (LookupHost(strNetmask, vIP, 1, false, dns_lookup_function)) { if (LookupHost(strNetmask, netmask, false, dns_lookup_function)) {
ret = CSubNet(network, vIP[0]); ret = CSubNet(network, netmask);
return ret.IsValid(); return ret.IsValid();
} }
} }
} }
else else // Single IP subnet (<ipv4>/32 or <ipv6>/128)
{ {
ret = CSubNet(network); ret = CSubNet(network);
return ret.IsValid(); return ret.IsValid();