diff options
author | Thomas Winget <tewinget@gmail.com> | 2014-09-25 00:14:22 -0400 |
---|---|---|
committer | Thomas Winget <tewinget@gmail.com> | 2014-09-30 16:21:37 -0400 |
commit | 0e1449135d9de9fd05c393c4c85364a7241d98c1 (patch) | |
tree | bf863c75693c127b7ecccce1097c70df6d84195e | |
parent | Adding an identical existing checkpoint should not error (diff) | |
download | monero-0e1449135d9de9fd05c393c4c85364a7241d98c1.tar.xz |
updated DNSResolver/things that use it for DNSSEC
Note: DNSResolver does not yet *use* DNSSEC, but rather this commit is
preparation for including DNSSEC validation. The function in
src/wallet/wallet2.cpp that uses DNSResolver still needs its parameters
updated accordingly.
-rw-r--r-- | src/common/dns_utils.cpp | 12 | ||||
-rw-r--r-- | src/common/dns_utils.h | 8 | ||||
-rw-r--r-- | src/wallet/wallet2.cpp | 13 | ||||
-rw-r--r-- | tests/unit_tests/dns_resolver.cpp | 26 |
4 files changed, 40 insertions, 19 deletions
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp index 346761e74..0376ab9a9 100644 --- a/src/common/dns_utils.cpp +++ b/src/common/dns_utils.cpp @@ -118,9 +118,11 @@ DNSResolver::~DNSResolver() } } -std::vector<std::string> DNSResolver::get_ipv4(const std::string& url) +std::vector<std::string> DNSResolver::get_ipv4(const std::string& url, bool& dnssec_available, bool& dnssec_valid) { std::vector<std::string> addresses; + dnssec_available = false; + dnssec_valid = false; char urlC[1000]; // waaaay too big, but just in case... strncpy(urlC, url.c_str(), 999); @@ -148,9 +150,11 @@ std::vector<std::string> DNSResolver::get_ipv4(const std::string& url) return addresses; } -std::vector<std::string> DNSResolver::get_ipv6(const std::string& url) +std::vector<std::string> DNSResolver::get_ipv6(const std::string& url, bool& dnssec_available, bool& dnssec_valid) { std::vector<std::string> addresses; + dnssec_available = false; + dnssec_valid = false; char urlC[1000]; // waaaay too big, but just in case... strncpy(urlC, url.c_str(), 999); @@ -178,9 +182,11 @@ std::vector<std::string> DNSResolver::get_ipv6(const std::string& url) return addresses; } -std::vector<std::string> DNSResolver::get_txt_record(const std::string& url) +std::vector<std::string> DNSResolver::get_txt_record(const std::string& url, bool& dnssec_available, bool& dnssec_valid) { std::vector<std::string> records; + dnssec_available = false; + dnssec_valid = false; char urlC[1000]; // waaaay too big, but just in case... strncpy(urlC, url.c_str(), 999); diff --git a/src/common/dns_utils.h b/src/common/dns_utils.h index dd6946dc4..9958e4ca2 100644 --- a/src/common/dns_utils.h +++ b/src/common/dns_utils.h @@ -71,9 +71,11 @@ public: * * @param url A string containing a URL to query for * + * @param dnssec_available + * * @return vector of strings containing ipv4 addresses */ - std::vector<std::string> get_ipv4(const std::string& url); + std::vector<std::string> get_ipv4(const std::string& url, bool& dnssec_available, bool& dnssec_valid); /** * @brief gets ipv6 addresses from DNS query @@ -85,7 +87,7 @@ public: * * @return vector of strings containing ipv6 addresses */ - std::vector<std::string> get_ipv6(const std::string& url); + std::vector<std::string> get_ipv6(const std::string& url, bool& dnssec_available, bool& dnssec_valid); /** * @brief gets all TXT records from a DNS query for the supplied URL; @@ -96,7 +98,7 @@ public: * @return A vector of strings containing a TXT record; or an empty vector */ // TODO: modify this to accomodate DNSSEC - std::vector<std::string> get_txt_record(const std::string& url); + std::vector<std::string> get_txt_record(const std::string& url, bool& dnssec_available, bool& dnssec_valid); /** * @brief Gets the singleton instance of DNSResolver diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 3161f3b16..6fb672798 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -833,12 +833,17 @@ std::vector<std::vector<cryptonote::tx_destination_entry>> split_amounts( */ std::vector<std::string> wallet2::addresses_from_url(const std::string& url, bool& dnssec_valid) { - // TODO: update this correctly once DNSResolver::get_txt_record() supports it. - dnssec_valid = false; - std::vector<std::string> addresses; // get txt records - auto records = tools::DNSResolver::instance().get_txt_record(url); + bool dnssec_available, dnssec_isvalid; + auto records = tools::DNSResolver::instance().get_txt_record(url, dnssec_available, dnssec_isvalid); + + // TODO: update this to allow for conveying that dnssec was not available + if (dnssec_available && dnssec_isvalid) + { + dnssec_valid = true; + } + else dnssec_valid = false; // for each txt record, try to find a monero address in it. for (auto& rec : records) diff --git a/tests/unit_tests/dns_resolver.cpp b/tests/unit_tests/dns_resolver.cpp index 27e981ef1..defce2c11 100644 --- a/tests/unit_tests/dns_resolver.cpp +++ b/tests/unit_tests/dns_resolver.cpp @@ -37,13 +37,15 @@ TEST(DNSResolver, IPv4Success) { tools::DNSResolver resolver; - auto ips = resolver.get_ipv4("example.com"); + bool avail, valid; + + auto ips = resolver.get_ipv4("example.com", avail, valid); ASSERT_EQ(1, ips.size()); ASSERT_STREQ("93.184.216.119", ips[0].c_str()); - ips = tools::DNSResolver::instance().get_ipv4("example.com"); + ips = tools::DNSResolver::instance().get_ipv4("example.com", avail, valid); ASSERT_EQ(1, ips.size()); @@ -55,11 +57,13 @@ TEST(DNSResolver, IPv4Failure) // guaranteed by IANA/ICANN/RFC to be invalid tools::DNSResolver resolver; - auto ips = resolver.get_ipv4("example.invalid"); + bool avail, valid; + + auto ips = resolver.get_ipv4("example.invalid", avail, valid); ASSERT_EQ(0, ips.size()); - ips = tools::DNSResolver::instance().get_ipv4("example.invalid"); + ips = tools::DNSResolver::instance().get_ipv4("example.invalid", avail, valid); ASSERT_EQ(0, ips.size()); } @@ -68,13 +72,15 @@ TEST(DNSResolver, IPv6Success) { tools::DNSResolver resolver; - auto ips = resolver.get_ipv6("example.com"); + bool avail, valid; + + auto ips = resolver.get_ipv6("example.com", avail, valid); ASSERT_EQ(1, ips.size()); ASSERT_STREQ("2606:2800:220:6d:26bf:1447:1097:aa7", ips[0].c_str()); - ips = tools::DNSResolver::instance().get_ipv6("example.com"); + ips = tools::DNSResolver::instance().get_ipv6("example.com", avail, valid); ASSERT_EQ(1, ips.size()); @@ -86,11 +92,13 @@ TEST(DNSResolver, IPv6Failure) // guaranteed by IANA/ICANN/RFC to be invalid tools::DNSResolver resolver; - auto ips = resolver.get_ipv6("example.invalid"); + bool avail, valid; + + auto ips = resolver.get_ipv6("example.invalid", avail, valid); ASSERT_EQ(0, ips.size()); - ips = tools::DNSResolver::instance().get_ipv6("example.invalid"); + ips = tools::DNSResolver::instance().get_ipv6("example.invalid", avail, valid); ASSERT_EQ(0, ips.size()); } @@ -98,7 +106,7 @@ TEST(DNSResolver, IPv6Failure) TEST(DNSResolver, GetTXTRecord) { - std::vector<std::string> records = tools::DNSResolver::instance().get_txt_record("donate.monero.cc"); + std::vector<std::string> records = tools::DNSResolver::instance().get_txt_record("donate.monero.cc", avail, valid); EXPECT_NE(0, records.size()); |