Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4499ee36 authored by Mike Yu's avatar Mike Yu
Browse files

Extend DnsTlsServer to return IP string

No functionality change.

Bug: 79727473
Test: cd packages/modules/DnsResolver && atest
Change-Id: I7adca3f240197fe59f683abefaa0005af0fbc141
parent f7717f5a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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 @@ bool DnsTlsServer::wasExplicitlyConfigured() const {
    return !name.empty();
}

std::string DnsTlsServer::toIpString() const {
    return netdutils::IPSockAddr::toIPSockAddr(ss).ip().toString();
}

}  // namespace net
}  // namespace android
+1 −0
Original line number Diff line number Diff line
@@ -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; }
+7 −16
Original line number Diff line number Diff line
@@ -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 @@ 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,
@@ -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) {
@@ -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;
    }
@@ -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.";
+5 −14
Original line number Diff line number Diff line
@@ -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 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:
@@ -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);
@@ -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();
        }
+2 −3
Original line number Diff line number Diff line
@@ -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 @@ 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