]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: implement group in the producer
authorKees Monshouwer <mind04@monshouwer.org>
Tue, 5 Jul 2022 14:53:47 +0000 (16:53 +0200)
committermind04 <mind04@monshouwer.org>
Fri, 8 Jul 2022 10:31:20 +0000 (12:31 +0200)
pdns/auth-catalogzone.cc
pdns/auth-catalogzone.hh
regression-tests/backends/gmysql-master
regression-tests/backends/lmdb-master

index 03c25b75d221ae485d929793ab926ad69397d700..389acc1c7181f6ded055cee068ebbccf470bbb26 100644 (file)
@@ -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<DNSZoneRecord>& d
     dzr.dr.d_content = std::make_shared<PTRRecordContent>(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<TXTRecordContent>("\"" + group + "\"");
+    dzrs.emplace_back(dzr);
+  }
 }
index e4862f282a5b615875ce0d8929d68da86eb904ab..adfb9fc3b199ef1f475f63807b157c3a3d6ddb4d 100644 (file)
@@ -71,6 +71,7 @@ public:
 
   uint32_t d_id;
   DNSName d_zone, d_coo, d_unique;
+  std::set<std::string> d_group;
 
 private:
   CatalogType d_type;
index d7b0455656fd86f5c5f2d954a862e9b13453139b..030fea859a33aa7be7014b67c730ed50082f6d04 100644 (file)
@@ -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
index b4d4306fc0e0c451e3b250256980db544f0b114a..54b889960eece813471947076336883a1e86e290 100644 (file)
@@ -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=. \