Loading DnsTlsServer.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ #include <algorithm> #include <netdutils/InternetAddresses.h> namespace { // Returns a tuple of references to the elements of a. Loading Loading @@ -124,5 +126,9 @@ bool DnsTlsServer::wasExplicitlyConfigured() const { return !name.empty(); } std::string DnsTlsServer::toIpString() const { return netdutils::IPSockAddr::toIPSockAddr(ss).ip().toString(); } } // namespace net } // namespace android DnsTlsServer.h +1 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ struct DnsTlsServer { bool operator==(const DnsTlsServer& other) const; bool wasExplicitlyConfigured() const; std::string toIpString() const; Validation validationState() const { return mValidation; } void setValidationState(Validation val) { mValidation = val; } Loading PrivateDnsConfiguration.cpp +7 −16 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -37,13 +36,6 @@ using std::chrono::milliseconds; 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, Loading Loading @@ -178,7 +170,7 @@ void PrivateDnsConfiguration::startValidation(const DnsTlsServer& server, unsign 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) { Loading Loading @@ -225,20 +217,19 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser 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; } Loading @@ -247,11 +238,11 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser 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."; Loading ResolverController.cpp +5 −14 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -46,13 +44,6 @@ namespace net { 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: Loading Loading @@ -265,8 +256,8 @@ int ResolverController::getResolverInfo(int32_t netId, std::vector<std::string>* 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); Loading Loading @@ -365,9 +356,9 @@ void ResolverController::dump(DumpWriter& dw, unsigned netId) { 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(); } Loading resolv_cache_unit_test.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -227,7 +226,7 @@ class ResolvCacheTest : public ::testing::Test { // 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 Loading Loading
DnsTlsServer.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ #include <algorithm> #include <netdutils/InternetAddresses.h> namespace { // Returns a tuple of references to the elements of a. Loading Loading @@ -124,5 +126,9 @@ bool DnsTlsServer::wasExplicitlyConfigured() const { return !name.empty(); } std::string DnsTlsServer::toIpString() const { return netdutils::IPSockAddr::toIPSockAddr(ss).ip().toString(); } } // namespace net } // namespace android
DnsTlsServer.h +1 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ struct DnsTlsServer { bool operator==(const DnsTlsServer& other) const; bool wasExplicitlyConfigured() const; std::string toIpString() const; Validation validationState() const { return mValidation; } void setValidationState(Validation val) { mValidation = val; } Loading
PrivateDnsConfiguration.cpp +7 −16 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -37,13 +36,6 @@ using std::chrono::milliseconds; 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, Loading Loading @@ -178,7 +170,7 @@ void PrivateDnsConfiguration::startValidation(const DnsTlsServer& server, unsign 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) { Loading Loading @@ -225,20 +217,19 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser 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; } Loading @@ -247,11 +238,11 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser 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."; Loading
ResolverController.cpp +5 −14 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -46,13 +44,6 @@ namespace net { 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: Loading Loading @@ -265,8 +256,8 @@ int ResolverController::getResolverInfo(int32_t netId, std::vector<std::string>* 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); Loading Loading @@ -365,9 +356,9 @@ void ResolverController::dump(DumpWriter& dw, unsigned netId) { 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(); } Loading
resolv_cache_unit_test.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -227,7 +226,7 @@ class ResolvCacheTest : public ::testing::Test { // 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 Loading