From 68adb796b8b6f9052968d93693f04aef6a99d247 Mon Sep 17 00:00:00 2001 From: Miod Vallat Date: Fri, 27 Jun 2025 08:33:58 +0200 Subject: [PATCH] Let ZoneName::toString*() output the variant, if any. Signed-off-by: Miod Vallat --- pdns/dnsname.cc | 25 ++++++++++++++++++++++++- pdns/dnsname.hh | 11 +++++------ pdns/ws-auth.cc | 8 +------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/pdns/dnsname.cc b/pdns/dnsname.cc index cdbc101380..5edcf7d0dd 100644 --- a/pdns/dnsname.cc +++ b/pdns/dnsname.cc @@ -828,7 +828,7 @@ std::string ZoneName::toLogString() const return ret; } -std::string ZoneName::toStringFull(const std::string& separator, const bool trailing) const +std::string ZoneName::toString(const std::string& separator, const bool trailing) const { std::string ret = d_name.toString(separator, trailing); if (!d_variant.empty()) { @@ -841,6 +841,29 @@ std::string ZoneName::toStringFull(const std::string& separator, const bool trai return ret; } +std::string ZoneName::toStringNoDot() const +{ + std::string ret = d_name.toStringNoDot(); + if (!d_variant.empty()) { + ret += ".."; + ret += d_variant; + } + return ret; +} + +std::string ZoneName::toStringRootDot() const +{ + std::string ret = d_name.toStringRootDot(); + if (!d_variant.empty()) { + if (!d_name.isRoot()) { + ret.push_back('.'); + } + ret.push_back('.'); + ret += d_variant; + } + return ret; +} + size_t ZoneName::hash(size_t init) const { if (!d_variant.empty()) { diff --git a/pdns/dnsname.hh b/pdns/dnsname.hh index 6880fdfd45..601904aac9 100644 --- a/pdns/dnsname.hh +++ b/pdns/dnsname.hh @@ -361,13 +361,12 @@ public: bool operator==(const ZoneName& rhs) const { return d_name == rhs.d_name && d_variant == rhs.d_variant; } bool operator!=(const ZoneName& rhs) const { return !operator==(rhs); } - // IMPORTANT! None of the "toString" routines will output the variant, but toLogString() and toStringFull(). - std::string toString(const std::string& separator=".", const bool trailing=true) const { return d_name.toString(separator, trailing); } - void toString(std::string& output, const std::string& separator=".", const bool trailing=true) const { d_name.toString(output, separator, trailing); } + std::string toString(const std::string& separator=".", const bool trailing=true) const; + void toString(std::string& output, const std::string& separator=".", const bool trailing=true) const { output = toString(separator, trailing); } std::string toLogString() const; - std::string toStringNoDot() const { return d_name.toStringNoDot(); } - std::string toStringRootDot() const { return d_name.toStringRootDot(); } - std::string toStringFull(const std::string& separator=".", const bool trailing=true) const; + std::string toStringNoDot() const; + std::string toStringRootDot() const; + std::string toStringFull(const std::string& separator=".", const bool trailing=true) const { return toString(separator, trailing); } bool chopOff() { return d_name.chopOff(); } ZoneName makeLowerCase() const diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index b49df078c6..8c7e321931 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -2694,13 +2694,7 @@ static void prometheusMetrics(HttpRequest* /* req */, HttpResponse* resp) static void jsonFillZoneNameArray(Json::array& array, std::vector& zones) { for (const auto& zone : zones) { - // Remember ZoneName::toString() intentionally omits the variant - std::string name(zone.toString()); - if (zone.hasVariant()) { - name.push_back('.'); - name += zone.getVariant(); - } - array.emplace_back(name); + array.emplace_back(zone.toString()); } } -- 2.47.2