Extend DnsTlsServer to return IP string
No functionality change.
Bug: 79727473
Test: cd packages/modules/DnsResolver && atest
Change-Id: I7adca3f240197fe59f683abefaa0005af0fbc141
diff --git a/DnsTlsServer.cpp b/DnsTlsServer.cpp
index 1bdb1aa..89ea841 100644
--- a/DnsTlsServer.cpp
+++ b/DnsTlsServer.cpp
@@ -18,6 +18,8 @@
#include <algorithm>
+#include <netdutils/InternetAddresses.h>
+
namespace {
// Returns a tuple of references to the elements of a.
@@ -124,5 +126,9 @@
return !name.empty();
}
+std::string DnsTlsServer::toIpString() const {
+ return netdutils::IPSockAddr::toIPSockAddr(ss).ip().toString();
+}
+
} // namespace net
} // namespace android
diff --git a/DnsTlsServer.h b/DnsTlsServer.h
index 0dd136a..6a72d88 100644
--- a/DnsTlsServer.h
+++ b/DnsTlsServer.h
@@ -69,6 +69,7 @@
bool operator==(const DnsTlsServer& other) const;
bool wasExplicitlyConfigured() const;
+ std::string toIpString() const;
Validation validationState() const { return mValidation; }
void setValidationState(Validation val) { mValidation = val; }
diff --git a/PrivateDnsConfiguration.cpp b/PrivateDnsConfiguration.cpp
index 43596bb..47969b3 100644
--- a/PrivateDnsConfiguration.cpp
+++ b/PrivateDnsConfiguration.cpp
@@ -20,7 +20,6 @@
#include <android-base/logging.h>
#include <android-base/stringprintf.h>
-#include <netdb.h>
#include <netdutils/ThreadUtil.h>
#include <sys/socket.h>
@@ -37,13 +36,6 @@
namespace android {
namespace net {
-std::string addrToString(const sockaddr_storage* addr) {
- char out[INET6_ADDRSTRLEN] = {0};
- getnameinfo((const sockaddr*) addr, sizeof(sockaddr_storage), out, INET6_ADDRSTRLEN, nullptr, 0,
- NI_NUMERICHOST);
- return std::string(out);
-}
-
bool parseServer(const char* server, sockaddr_storage* parsed) {
addrinfo hints = {
.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV,
@@ -178,7 +170,7 @@
LOG(WARNING) << "Validating DnsTlsServer on netId " << netId;
const bool success = DnsTlsTransport::validate(server, netId, mark);
LOG(DEBUG) << "validateDnsTlsServer returned " << success << " for "
- << addrToString(&server.ss);
+ << server.toIpString();
const bool needs_reeval = this->recordPrivateDnsValidation(server, netId, success);
if (!needs_reeval) {
@@ -225,20 +217,19 @@
auto& tracker = netPair->second;
auto serverPair = tracker.find(identity);
if (serverPair == tracker.end()) {
- LOG(WARNING) << "Server " << addrToString(&server.ss)
+ LOG(WARNING) << "Server " << server.toIpString()
<< " was removed during private DNS validation";
success = false;
reevaluationStatus = DONT_REEVALUATE;
} else if (!(serverPair->second == server)) {
// TODO: It doesn't seem correct to overwrite the tracker entry for
// |server| down below in this circumstance... Fix this.
- LOG(WARNING) << "Server " << addrToString(&server.ss)
+ LOG(WARNING) << "Server " << server.toIpString()
<< " was changed during private DNS validation";
success = false;
reevaluationStatus = DONT_REEVALUATE;
} else if (!serverPair->second.active()) {
- LOG(WARNING) << "Server " << addrToString(&server.ss)
- << " was removed from the configuration";
+ LOG(WARNING) << "Server " << server.toIpString() << " was removed from the configuration";
success = false;
reevaluationStatus = DONT_REEVALUATE;
}
@@ -247,11 +238,11 @@
const auto& listeners = ResolverEventReporter::getInstance().getListeners();
if (listeners.size() != 0) {
for (const auto& it : listeners) {
- it->onPrivateDnsValidationEvent(netId, addrToString(&server.ss), server.name, success);
+ it->onPrivateDnsValidationEvent(netId, server.toIpString(), server.name, success);
}
LOG(DEBUG) << "Sent validation " << (success ? "success" : "failure") << " event on netId "
- << netId << " for " << addrToString(&server.ss) << " with hostname {"
- << server.name << "}";
+ << netId << " for " << server.toIpString() << " with hostname {" << server.name
+ << "}";
} else {
LOG(ERROR)
<< "Validation event not sent since no INetdEventListener receiver is available.";
diff --git a/ResolverController.cpp b/ResolverController.cpp
index b7ac8eb..3a7f914 100644
--- a/ResolverController.cpp
+++ b/ResolverController.cpp
@@ -22,8 +22,6 @@
#include <string>
#include <vector>
-#include <netdb.h>
-
#include <aidl/android/net/IDnsResolver.h>
#include <android-base/logging.h>
#include <android-base/strings.h>
@@ -46,13 +44,6 @@
namespace {
-std::string addrToString(const sockaddr_storage* addr) {
- char out[INET6_ADDRSTRLEN] = {0};
- getnameinfo((const sockaddr*)addr, sizeof(sockaddr_storage), out, INET6_ADDRSTRLEN, nullptr, 0,
- NI_NUMERICHOST);
- return std::string(out);
-}
-
const char* getPrivateDnsModeString(PrivateDnsMode mode) {
switch (mode) {
case PrivateDnsMode::OFF:
@@ -265,8 +256,8 @@
ResolverStats::encodeAll(res_stats, stats);
const auto privateDnsStatus = PrivateDnsConfiguration::getInstance().getStatus(netId);
- for (const auto& pair : privateDnsStatus.serversMap) {
- tlsServers->push_back(addrToString(&pair.first.ss));
+ for (const auto& [server, _] : privateDnsStatus.serversMap) {
+ tlsServers->push_back(server.toIpString());
}
params->resize(IDnsResolver::RESOLVER_PARAMS_COUNT);
@@ -365,9 +356,9 @@
dw.println("Private DNS configuration (%u entries)",
static_cast<uint32_t>(privateDnsStatus.serversMap.size()));
dw.incIndent();
- for (const auto& pair : privateDnsStatus.serversMap) {
- dw.println("%s name{%s} status{%s}", addrToString(&pair.first.ss).c_str(),
- pair.first.name.c_str(), validationStatusToString(pair.second));
+ for (const auto& [server, validation] : privateDnsStatus.serversMap) {
+ dw.println("%s name{%s} status{%s}", server.toIpString().c_str(),
+ server.name.c_str(), validationStatusToString(validation));
}
dw.decIndent();
}
diff --git a/resolv_cache_unit_test.cpp b/resolv_cache_unit_test.cpp
index d604b2d..e6dd111 100644
--- a/resolv_cache_unit_test.cpp
+++ b/resolv_cache_unit_test.cpp
@@ -32,15 +32,14 @@
#include "res_init.h"
#include "resolv_cache.h"
-#include "resolv_private.h"
#include "stats.h"
#include "tests/dns_responder/dns_responder.h"
+#include "tests/resolv_test_utils.h"
using namespace std::chrono_literals;
using android::netdutils::IPSockAddr;
-constexpr int TEST_NETID = 30;
constexpr int TEST_NETID_2 = 31;
constexpr int DNS_PORT = 53;
@@ -227,7 +226,7 @@
// Server checking.
EXPECT_EQ(nscount, static_cast<int>(expected.setup.servers.size())) << msg;
for (int i = 0; i < nscount; i++) {
- EXPECT_EQ(addrToString(&servers[i]), expected.setup.servers[i]) << msg;
+ EXPECT_EQ(ToString(&servers[i]), expected.setup.servers[i]) << msg;
}
// Domain checking
diff --git a/resolv_private.h b/resolv_private.h
index 8bc5035..4a3293d 100644
--- a/resolv_private.h
+++ b/resolv_private.h
@@ -183,10 +183,3 @@
PLOG(WARNING) << "Failed to chown socket";
}
}
-
-inline std::string addrToString(const sockaddr_storage* addr) {
- char out[INET6_ADDRSTRLEN] = {0};
- getnameinfo((const sockaddr*)addr, sizeof(sockaddr_storage), out, INET6_ADDRSTRLEN, nullptr, 0,
- NI_NUMERICHOST);
- return std::string(out);
-}
diff --git a/resolv_tls_unit_test.cpp b/resolv_tls_unit_test.cpp
index f384ead..29171db 100644
--- a/resolv_tls_unit_test.cpp
+++ b/resolv_tls_unit_test.cpp
@@ -862,12 +862,16 @@
parseServer("192.0.2.1", 854, &s2.ss);
checkUnequal(s1, s2);
EXPECT_TRUE(isAddressEqual(s1, s2));
+ EXPECT_EQ(s1.toIpString(), "192.0.2.1");
+ EXPECT_EQ(s2.toIpString(), "192.0.2.1");
DnsTlsServer s3, s4;
parseServer("2001:db8::1", 853, &s3.ss);
parseServer("2001:db8::1", 852, &s4.ss);
checkUnequal(s3, s4);
EXPECT_TRUE(isAddressEqual(s3, s4));
+ EXPECT_EQ(s3.toIpString(), "2001:db8::1");
+ EXPECT_EQ(s4.toIpString(), "2001:db8::1");
EXPECT_FALSE(s1.wasExplicitlyConfigured());
EXPECT_FALSE(s2.wasExplicitlyConfigured());