aboutsummaryrefslogtreecommitdiff
path: root/src/common/dns_utils.cpp
diff options
context:
space:
mode:
authorThomas Winget <tewinget@gmail.com>2015-04-29 21:31:34 -0400
committerThomas Winget <tewinget@gmail.com>2015-04-29 21:31:34 -0400
commitb18368b635ba08aea541ef52ebc74180822644a2 (patch)
tree6182c3a269af8ac820f1306b446c219833a9eef4 /src/common/dns_utils.cpp
parentupdate lmdb64 (diff)
downloadmonero-b18368b635ba08aea541ef52ebc74180822644a2.tar.xz
Allow name@domain.tld for OpenAlias lookups
Diffstat (limited to 'src/common/dns_utils.cpp')
-rw-r--r--src/common/dns_utils.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp
index ea7f1078b..347cf758a 100644
--- a/src/common/dns_utils.cpp
+++ b/src/common/dns_utils.cpp
@@ -205,13 +205,15 @@ std::vector<std::string> DNSResolver::get_ipv4(const std::string& url, bool& dns
dnssec_valid = false;
char urlC[1000]; // waaaay too big, but just in case...
- strncpy(urlC, url.c_str(), 999);
- urlC[999] = '\0';
- if (!check_address_syntax(urlC))
+ std::string url_copy{url};
+ if (!check_address_syntax(url_copy))
{
return addresses;
}
+ strncpy(urlC, url_copy.c_str(), 999);
+ urlC[999] = '\0';
+
// destructor takes care of cleanup
ub_result_ptr result;
@@ -239,14 +241,15 @@ std::vector<std::string> DNSResolver::get_ipv6(const std::string& url, bool& dns
dnssec_valid = false;
char urlC[1000]; // waaaay too big, but just in case...
- strncpy(urlC, url.c_str(), 999);
- urlC[999] = '\0';
-
- if (!check_address_syntax(urlC))
+ std::string url_copy{url};
+ if (!check_address_syntax(url_copy))
{
return addresses;
}
+ strncpy(urlC, url_copy.c_str(), 999);
+ urlC[999] = '\0';
+
ub_result_ptr result;
// call DNS resolver, blocking. if return value not zero, something went wrong
@@ -273,14 +276,15 @@ std::vector<std::string> DNSResolver::get_txt_record(const std::string& url, boo
dnssec_valid = false;
char urlC[1000]; // waaaay too big, but just in case...
- strncpy(urlC, url.c_str(), 999);
- urlC[999] = '\0';
-
- if (!check_address_syntax(urlC))
+ std::string url_copy{url};
+ if (!check_address_syntax(url_copy))
{
return records;
}
+ strncpy(urlC, url_copy.c_str(), 999);
+ urlC[999] = '\0';
+
ub_result_ptr result;
// call DNS resolver, blocking. if return value not zero, something went wrong
@@ -314,13 +318,17 @@ DNSResolver& DNSResolver::instance()
return *staticInstance;
}
-bool DNSResolver::check_address_syntax(const std::string& addr)
+bool DNSResolver::check_address_syntax(std::string& addr)
{
// if string doesn't contain a dot, we won't consider it a url for now.
- if (addr.find(".") == std::string::npos)
+ auto first_dot = addr.find(".");
+ if (first_dot == std::string::npos)
{
return false;
}
+
+ // allow name@domain.tld to work
+ addr.replace(first_dot, 1, "@");
return true;
}