]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: simplify createDomain() 10461/head
authorKees Monshouwer <mind04@monshouwer.org>
Mon, 31 May 2021 21:25:13 +0000 (23:25 +0200)
committermind04 <mind04@monshouwer.org>
Wed, 2 Jun 2021 15:40:00 +0000 (17:40 +0200)
13 files changed:
modules/bindbackend/bindbackend2.cc
modules/bindbackend/bindbackend2.hh
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/lmdbbackend/lmdbbackend.cc
modules/lmdbbackend/lmdbbackend.hh
modules/remotebackend/remotebackend.cc
modules/remotebackend/remotebackend.hh
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh
pdns/dnsbackend.hh
pdns/packethandler.cc
pdns/ueberbackend.cc
pdns/ws-auth.cc

index a5b48a1af3b62eb564031e7770cac510ae97a564..f0f48ff48ae92c13c3f1ba253587beee3df97308 100644 (file)
@@ -1388,7 +1388,7 @@ BB2DomainInfo Bind2Backend::createDomainEntry(const DNSName& domain, const strin
   return bbd;
 }
 
-bool Bind2Backend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId)
+bool Bind2Backend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account)
 {
   string filename = getArg("supermaster-destdir") + '/' + domain.toStringNoDot();
 
@@ -1421,12 +1421,6 @@ bool Bind2Backend::createSlaveDomain(const string& ip, const DNSName& domain, co
   bbd.setCtime();
   safePutBBDomainInfo(bbd);
 
-  if (zoneId) {
-    if (!safeGetBBDomainInfo(domain, &bbd))
-      return false;
-    *zoneId = bbd.d_id;
-  }
-
   return true;
 }
 
index 840fc2feffa87c5397e284631349326468976824..e5bd7cf9c7e43bcb7eeab2cbcc921fca72dca9c3 100644 (file)
@@ -240,7 +240,7 @@ public:
   // for supermaster support
   bool superMasterBackend(const string& ip, const DNSName& domain, const vector<DNSResourceRecord>& nsset, string* nameserver, string* account, DNSBackend** db) override;
   static std::mutex s_supermaster_config_lock;
-  bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr) override;
+  bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account) override;
 
 private:
   void setupDNSSEC();
index 2d1f9924656ade27f2faea26a66c375f919fa01d..500bab200aabf83354b1969291efc049848098fa 100644 (file)
@@ -115,7 +115,7 @@ public:
     declare(suffix, "supermaster-name-to-ips", "", "select ip,account from supermasters where nameserver=$1 and account=$2");
     declare(suffix, "supermaster-add", "", "insert into supermasters (ip, nameserver, account) values ($1,$2,$3)");
 
-    declare(suffix, "insert-zone-query", "", "insert into domains (type,name,master,account,last_check, notified_serial) values($1,$2,$3,$4,null,null) returning id");
+    declare(suffix, "insert-zone-query", "", "insert into domains (type,name,master,account,last_check, notified_serial) values($1,$2,$3,$4,null,null)");
 
     declare(suffix, "insert-record-query", "", "insert into records (content,ttl,prio,type,domain_id,disabled,name,ordername,auth) values ($1,$2,$3,$4,$5,$6,$7,$8,$9)");
     declare(suffix, "insert-empty-non-terminal-order-query", "insert empty non-terminal in zone", "insert into records (type,domain_id,disabled,name,ordername,auth,ttl,prio,content) values (null,$1,false,$2,$3,$4,null,null,null)");
index 4733012462bef30497c4aa29220ce9cae3c3db2a..37458daf19c95a2c6ace254e023e9f9a6562f9fc 100644 (file)
@@ -960,7 +960,7 @@ bool LMDBBackend::setMasters(const DNSName& domain, const vector<ComboAddress>&
   });
 }
 
-bool LMDBBackend::createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account, int* zoneId)
+bool LMDBBackend::createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account)
 {
   DomainInfo di;
 
@@ -976,11 +976,6 @@ bool LMDBBackend::createDomain(const DNSName& domain, const DomainInfo::DomainKi
     di.account = account;
 
     txn.put(di);
-
-    if (zoneId != nullptr) {
-      *zoneId = txn.get<0>(domain, di);
-    }
-
     txn.commit();
   }
 
index 9dad244bcda7d10a22f48b74cd7948f2c0ebcc50..a489770b6c5d81849eef01fa80f855ae89792080 100644 (file)
@@ -59,7 +59,7 @@ public:
   bool list(const DNSName& target, int id, bool include_disabled) override;
 
   bool getDomainInfo(const DNSName& domain, DomainInfo& di, bool getserial = true) override;
-  bool createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account, int* zoneId) override;
+  bool createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account) override;
 
   bool startTransaction(const DNSName& domain, int domain_id = -1) override;
   bool commitTransaction() override;
index 8c94c89029d9d325050ebc176982a895631fd23d..fef3d0f6da21eb729806e61a3b5c58696e8a33be 100644 (file)
@@ -664,7 +664,7 @@ bool RemoteBackend::superMasterBackend(const string& ip, const DNSName& domain,
   return true;
 }
 
-bool RemoteBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId)
+bool RemoteBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account)
 {
   Json query = Json::object{
     {"method", "createSlaveDomain"},
index 68e81c91a2df4364335eed485ad6d49e889fff1f..7832682a1c6cb0cff4259eece7b135cca09f98af 100644 (file)
@@ -184,7 +184,7 @@ public:
   void setNotified(uint32_t id, uint32_t serial) override;
   bool doesDNSSEC() override;
   bool superMasterBackend(const string& ip, const DNSName& domain, const vector<DNSResourceRecord>& nsset, string* nameserver, string* account, DNSBackend** ddb) override;
-  bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr) override;
+  bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account) override;
   bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<DNSResourceRecord>& rrset) override;
   bool feedRecord(const DNSResourceRecord& r, const DNSName& ordername, bool ordernameIsNSEC3 = false) override;
   bool feedEnts(int domain_id, map<DNSName, bool>& nonterm) override;
index 6edd0d73734f4610870cf9d43eb46cb2e3c6f6b8..51cece2f4717052e1e9a7c4777d657bd4a3d968d 100644 (file)
@@ -1295,7 +1295,7 @@ bool GSQLBackend::superMasterBackend(const string &ip, const DNSName &domain, co
   return false;
 }
 
-bool GSQLBackend::createDomain(const DNSName &domain, const DomainInfo::DomainKind kind, const vector<ComboAddress> &masters, const string &account, int* zoneId)
+bool GSQLBackend::createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account)
 {
   vector<string> masters_s;
   masters_s.reserve(masters.size());
@@ -1306,40 +1306,15 @@ bool GSQLBackend::createDomain(const DNSName &domain, const DomainInfo::DomainKi
   try {
     reconnectIfNeeded();
 
+    // clang-format off
     d_InsertZoneQuery_stmt->
       bind("type", toUpper(DomainInfo::getKindString(kind)))->
       bind("domain", domain)->
       bind("masters", boost::join(masters_s, ", "))->
       bind("account", account)->
-      execute();
-
-    if (zoneId != nullptr) {
-      if (d_InsertZoneQuery_stmt->hasNextRow()) {
-        SSqlStatement::row_t row;
-        d_InsertZoneQuery_stmt->nextRow(row);
-        *zoneId = std::stoi(row[0]);
-        d_InsertZoneQuery_stmt->reset();
-        return true;
-      } else {
-        d_InsertZoneQuery_stmt->reset();
-      }
-
-      d_InfoOfDomainsZoneQuery_stmt->
-        bind("domain", domain)->
-        execute();
-      if (!d_InfoOfDomainsZoneQuery_stmt->hasNextRow()) {
-        d_InfoOfDomainsZoneQuery_stmt->reset();
-        return false;
-      }
-      SSqlStatement::row_t row;
-      d_InfoOfDomainsZoneQuery_stmt->nextRow(row);
-      ASSERT_ROW_COLUMNS("info-zone-query", row, 7);
-      *zoneId = std::stoi(row[0]);
-      d_InfoOfDomainsZoneQuery_stmt->reset();
-    } else {
-      d_InsertZoneQuery_stmt->reset();
-    }
-    return true;
+      execute()->
+      reset();
+    // clang-format on
   }
   catch(SSqlException &e) {
     throw PDNSException("Database error trying to insert new domain '"+domain.toLogString()+"': "+ e.txtReason());
@@ -1347,7 +1322,7 @@ bool GSQLBackend::createDomain(const DNSName &domain, const DomainInfo::DomainKi
   return true;
 }
 
-bool GSQLBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId)
+bool GSQLBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account)
 {
   string name;
   vector<ComboAddress> masters({ComboAddress(ip, 53)});
@@ -1373,7 +1348,7 @@ bool GSQLBackend::createSlaveDomain(const string& ip, const DNSName& domain, con
         masters = tmp;
       }
     }
-    createDomain(domain, DomainInfo::Slave, masters, account, zoneId);
+    createDomain(domain, DomainInfo::Slave, masters, account);
   }
   catch(SSqlException &e) {
     throw PDNSException("Database error trying to insert new slave domain '"+domain.toLogString()+"': "+ e.txtReason());
index 85147b42cda532c23486d2f0bd1ced006f9ac59c..49dde605088898c4ac2f24374af683263981d8c3 100644 (file)
@@ -193,8 +193,8 @@ public:
   bool feedRecord(const DNSResourceRecord &r, const DNSName &ordername, bool ordernameIsNSEC3=false) override;
   bool feedEnts(int domain_id, map<DNSName,bool>& nonterm) override;
   bool feedEnts3(int domain_id, const DNSName &domain, map<DNSName,bool> &nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow) override;
-  bool createDomain(const DNSName &domain, const DomainInfo::DomainKind kind, const vector<ComboAddress> &masters, const string &account, int* zoneId=nullptr) override;
-  bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr) override;
+  bool createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account) override;
+  bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account) override;
   bool deleteDomain(const DNSName &domain) override;
   bool superMasterAdd(const string &ip, const string &nameserver, const string &account) override; 
   bool superMasterBackend(const string &ip, const DNSName &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db) override;
index ffe8da1fc751315db366538ffa6ea805a2caea6b..ccc4239f1eb838d2d531e5ed725ae402e8b5e129 100644 (file)
@@ -361,13 +361,13 @@ public:
   }
 
   //! called by PowerDNS to create a new domain
-  virtual bool createDomain(const DNSName &domain, const DomainInfo::DomainKind kind, const vector<ComboAddress> &masters, const string &account, int* zoneId = nullptr)
+  virtual bool createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account)
   {
     return false;
   }
 
   //! called by PowerDNS to create a slave record for a superMaster
-  virtual bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr)
+  virtual bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account)
   {
     return false;
   }
index bb9b16320f3aebc2bbb2ad6cd7126c018945a2e3..6c568b583f4af8f95e6041a70530b58daa06ea80 100644 (file)
@@ -964,9 +964,13 @@ int PacketHandler::trySuperMasterSynchronous(const DNSPacket& p, const DNSName&
     return RCode::Refused;
   }
   try {
-    int zoneId{-1};
-    db->createSlaveDomain(remote.toString(), p.qdomain, nameserver, account, &zoneId);
-    g_zoneCache.add(p.qdomain, zoneId);
+    db->createSlaveDomain(remote.toString(), p.qdomain, nameserver, account);
+    DomainInfo di;
+    if (!db->getDomainInfo(p.qdomain, di, false)) {
+      g_log << Logger::Error << "Failed to create " << p.qdomain << " for potential supermaster " << remote << endl;
+      return RCode::ServFail;
+    }
+    g_zoneCache.add(p.qdomain, di.id);
     if (tsigkeyname.empty() == false) {
       vector<string> meta;
       meta.push_back(tsigkeyname.toStringNoDot());
index e4c28d044643f52462034088c6b995c30a1a13ac..e2fe993f92a685d2d140b3e02c43ef2e7634574e 100644 (file)
@@ -121,18 +121,12 @@ bool UeberBackend::getDomainInfo(const DNSName &domain, DomainInfo &di, bool get
 
 bool UeberBackend::createDomain(const DNSName &domain, const DomainInfo::DomainKind kind, const vector<ComboAddress> &masters, const string &account)
 {
-  bool success = false;
-  int zoneId;
   for(DNSBackend* mydb :  backends) {
-    if(mydb->createDomain(domain, kind, masters, account, &zoneId)) {
-      success = true;
-      break;
+    if (mydb->createDomain(domain, kind, masters, account)) {
+      return true;
     }
   }
-  if (success) {
-    g_zoneCache.add(domain, zoneId);  // make new zone visible
-  }
-  return success;
+  return false;
 }
 
 bool UeberBackend::doesDNSSEC()
index e26479b745172b3382eeb289400d5866f5367f10..b1a39a86ded64a1a34f15302d61ab4a1bb7db424 100644 (file)
@@ -44,6 +44,7 @@
 #include "zoneparser-tng.hh"
 #include "common_startup.hh"
 #include "auth-caches.hh"
+#include "auth-zonecache.hh"
 #include "threadname.hh"
 #include "tsigutils.hh"
 
@@ -1749,6 +1750,8 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
 
     di.backend->commitTransaction();
 
+    g_zoneCache.add(zonename, di.id); // make new zone visible
+
     fillZone(B, zonename, resp, shouldDoRRSets(req));
     resp->status = 201;
     return;