From: Miod Vallat Date: Fri, 27 Jun 2025 06:33:58 +0000 (+0200) Subject: Let ZoneName::toString*() output the variant, if any. X-Git-Tag: rec-5.3.0-alpha2~43^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68adb796b8b6f9052968d93693f04aef6a99d247;p=thirdparty%2Fpdns.git Let ZoneName::toString*() output the variant, if any. Signed-off-by: Miod Vallat --- 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()); } }