From: Kees Monshouwer Date: Tue, 5 Jul 2022 14:53:47 +0000 (+0200) Subject: auth: implement group in the producer X-Git-Tag: auth-4.7.0-beta1~9^2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aa6ee2f13c90b0940f27b4fe148f7faa703a634f;p=thirdparty%2Fpdns.git auth: implement group in the producer --- diff --git a/pdns/auth-catalogzone.cc b/pdns/auth-catalogzone.cc index 03c25b75d2..389acc1c71 100644 --- a/pdns/auth-catalogzone.cc +++ b/pdns/auth-catalogzone.cc @@ -60,6 +60,16 @@ void CatalogInfo::fromJson(const std::string& json, CatalogType type) throw std::out_of_range("Key 'unique' is not a string"); } } + if (!items["group"].is_null()) { + if (items["group"].is_array()) { + for (const auto& value : items["group"].array_items()) { + d_group.insert(value.string_value()); + } + } + else { + throw std::out_of_range("Key 'group' is not an array"); + } + } } } else { @@ -79,6 +89,13 @@ std::string CatalogInfo::toJson() const if (!d_unique.empty()) { object["unique"] = d_unique.toString(); } + if (!d_group.empty()) { + json11::Json::array entries; + for (const string& group : d_group) { + entries.push_back(group); + } + object["group"] = entries; + } auto tmp = d_doc.object_items(); tmp[getTypeString(d_type)] = object; const json11::Json ret = tmp; @@ -125,4 +142,12 @@ void CatalogInfo::toDNSZoneRecords(const DNSName& zone, vector& d dzr.dr.d_content = std::make_shared(d_coo); dzrs.emplace_back(dzr); } + + for (const auto& group : d_group) { + dzr.dr.d_name = DNSName("group") + prefix; + dzr.dr.d_ttl = 0; + dzr.dr.d_type = QType::TXT; + dzr.dr.d_content = std::make_shared("\"" + group + "\""); + dzrs.emplace_back(dzr); + } } diff --git a/pdns/auth-catalogzone.hh b/pdns/auth-catalogzone.hh index e4862f282a..adfb9fc3b1 100644 --- a/pdns/auth-catalogzone.hh +++ b/pdns/auth-catalogzone.hh @@ -71,6 +71,7 @@ public: uint32_t d_id; DNSName d_zone, d_coo, d_unique; + std::set d_group; private: CatalogType d_type; diff --git a/regression-tests/backends/gmysql-master b/regression-tests/backends/gmysql-master index d7b0455656..030fea859a 100644 --- a/regression-tests/backends/gmysql-master +++ b/regression-tests/backends/gmysql-master @@ -41,7 +41,8 @@ __EOF__ $PDNSUTIL --config-dir=. --config-name=gmysql load-zone catalog.invalid zones/catalog.invalid $PDNSUTIL --config-dir=. --config-name=gmysql set-kind catalog.invalid producer - $PDNSUTIL --config-dir=. --config-name=gmysql set-options test.com '{"producer": {"coo": "other-catalog.invalid","unique": "123"}}' + $PDNSUTIL --config-dir=. --config-name=gmysql set-options test.com '{"producer":{"coo":"other-catalog.invalid","unique":"123"}}' + $PDNSUTIL --config-dir=. --config-name=gmysql set-options tsig.com '{"producer":{"group":["pdns-group-x","pdns-group-y"]}}' fi gsql_master gmysql dyndns diff --git a/regression-tests/backends/lmdb-master b/regression-tests/backends/lmdb-master index b4d4306fc0..54b889960e 100644 --- a/regression-tests/backends/lmdb-master +++ b/regression-tests/backends/lmdb-master @@ -64,7 +64,8 @@ __EOF__ $PDNSUTIL --config-dir=. --config-name=lmdb load-zone catalog.invalid zones/catalog.invalid $PDNSUTIL --config-dir=. --config-name=lmdb set-kind catalog.invalid producer - $PDNSUTIL --config-dir=. --config-name=lmdb set-options test.com '{"producer": {"coo": "other-catalog.invalid","unique": "123"}}' + $PDNSUTIL --config-dir=. --config-name=lmdb set-options test.com '{"producer":{"coo":"other-catalog.invalid","unique":"123"}}' + $PDNSUTIL --config-dir=. --config-name=lmdb set-options tsig.com '{"producer":{"group":["pdns-group-x","pdns-group-y"]}}' fi $RUNWRAPPER $PDNS --daemon=no --local-address=$address --local-port=$port --config-dir=. \