]> granicus.if.org Git - pdns/commitdiff
auth: feedRecord() ordename is now a DNSName
authorKees Monshouwer <mind04@monshouwer.org>
Mon, 5 Jun 2017 18:38:08 +0000 (20:38 +0200)
committermind04 <mind04@monshouwer.org>
Mon, 5 Jun 2017 18:38:08 +0000 (20:38 +0200)
18 files changed:
modules/bindbackend/bindbackend2.cc
modules/bindbackend/bindbackend2.hh
modules/luabackend/luabackend.hh
modules/luabackend/slave.cc
modules/opendbxbackend/odbxbackend.cc
modules/opendbxbackend/odbxbackend.hh
modules/oraclebackend/oraclebackend.cc
modules/oraclebackend/oraclebackend.hh
modules/remotebackend/remotebackend.cc
modules/remotebackend/remotebackend.hh
modules/remotebackend/test-remotebackend.cc
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh
pdns/dnsbackend.hh
pdns/pdnsutil.cc
pdns/rfc2136handler.cc
pdns/slavecommunicator.cc
pdns/ws-auth.cc

index 9e7645adc3862df3f3f5e8587fd8d0b1589bd774..b8de3f3cb36d368a596f606667e644f93040e82c 100644 (file)
@@ -253,7 +253,7 @@ bool Bind2Backend::abortTransaction()
   return true;
 }
 
-bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, string *ordername)
+bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, const DNSName &ordername)
 {
   BB2DomainInfo bbd;
   safeGetBBDomainInfo(d_transaction_id, &bbd);
index b5269e60a2805c6a1b042aa78d3d23d1004d29f0..d8c6f50c22f149d78306faad1059142860fab5bf 100644 (file)
@@ -206,7 +206,7 @@ public:
   void setFresh(uint32_t domain_id);
   void setNotified(uint32_t id, uint32_t serial);
   bool startTransaction(const DNSName &qname, int id);
-  bool feedRecord(const DNSResourceRecord &rr, string *ordername=0);
+  bool feedRecord(const DNSResourceRecord &rr, const DNSName &ordername);
   bool commitTransaction();
   bool abortTransaction();
   void alsoNotifies(const DNSName &domain, set<string> *ips);
index d4979605bafa13a881d092cc0c056e0e47c2e8a0..7b4722bfb673b6e7050e7e0a2eb61ffd9faa7a11 100644 (file)
@@ -77,7 +77,7 @@ public:
     bool startTransaction(const DNSName &qname, int id) override;
     bool commitTransaction() override;
     bool abortTransaction() override;
-    bool feedRecord(const DNSResourceRecord &rr, string *ordername=0) override;
+    bool feedRecord(const DNSResourceRecord &rr, const DNSName &ordername) override;
 
 
 //  SUPERMASTER BACKEND
index fc0b0ae4a223e73d4dd3205bc0212c40769216f9..2660b7b7f2135cb24e3e5882c4236a7ef1db921d 100644 (file)
@@ -33,7 +33,7 @@
    virtual bool startTransaction(const string &qname, int id);
    virtual bool commitTransaction();
    virtual bool abortTransaction();
-   virtual bool feedRecord(const DNSResourceRecord &rr, string* ordername=0);
+   virtual bool feedRecord(const DNSResourceRecord &rr, DNSName &ordername);
 
    virtual bool getDomainInfo(const string &domain, DomainInfo &di);
    virtual bool isMaster(const string &name, const string &ip);
@@ -136,7 +136,7 @@ bool LUABackend::abortTransaction() {
     return ok;
 }
 
-bool LUABackend::feedRecord(const DNSResourceRecord &rr, string *ordername) {
+bool LUABackend::feedRecord(const DNSResourceRecord &rr, const DNSName &ordername) {
 
     if (f_lua_feedrecord == 0)
         return false;
index c868a8010d943a630bd194b892d6aae51d535763..d6e9fb963a11b6dbafd9f97d0b681942cd186a57 100644 (file)
@@ -674,7 +674,7 @@ bool OdbxBackend::createSlaveDomain( const string& ip, const string& domain, con
 
 
 
-bool OdbxBackend::feedRecord( const DNSResourceRecord& rr, string *ordername )
+bool OdbxBackend::feedRecord( const DNSResourceRecord& rr, const DNSName ordername )
 {
         try
         {
index 42a4cd638a503a1e73081e1f7e56946b2583187e..efe3b6b4cdd9c674ba0a5f6768508c6c5bb0aea6 100644 (file)
@@ -87,7 +87,7 @@ public:
 
         bool isMaster( const string& domain, const string& ip );
         bool getDomainInfo( const string& domain, DomainInfo& di );
-        bool feedRecord( const DNSResourceRecord& rr, string *ordername=0 );
+        bool feedRecord( const DNSResourceRecord& rr, const DNSName ordername );
         bool createSlaveDomain( const string& ip, const string& domain, const string &nameserver, const string& account );
         bool superMasterBackend( const string& ip, const string& domain, const vector<DNSResourceRecord>& nsset, string *nameserver, string* account, DNSBackend** ddb );
 
index 2f923a5af39cfec0b5ec0ea9960b9e4a3ea3ab4b..efcbad8fae512aab619eeee17c1e696761891e4f 100644 (file)
@@ -1080,7 +1080,7 @@ OracleBackend::startTransaction (const DNSName& domain, int zoneId)
 }
 
 bool
-OracleBackend::feedRecord (const DNSResourceRecord &rr, string *ordername)
+OracleBackend::feedRecord (const DNSResourceRecord &rr, const DNSName ordername)
 {
   sword rc;
   OCIStmt *stmt;
index face7af56c928c0a5f287174a99ebbc7c7ea7eee..2013fb53b6b93ad7bdad93adecbbf0ede75d4b66 100644 (file)
@@ -85,7 +85,7 @@ public:
   void setNotified(uint32_t zoneId, uint32_t serial);
   bool list(const DNSName& domain, int zoneId, bool include_disabled=false);
   bool startTransaction(const DNSName& domain, int zoneId);
-  bool feedRecord(const DNSResourceRecord &rr, string* ordername);
+  bool feedRecord(const DNSResourceRecord &rr, const DNSName ordername);
   bool commitTransaction();
   bool abortTransaction();
   bool superMasterBackend(const string &ip, const DNSName& domain,
index d1ff07af0494cc3729bf53944bfe64863a6ef2dc..fe26ad3f7b8272f058eb04981b23ea0fc2268cd7 100644 (file)
@@ -716,7 +716,7 @@ bool RemoteBackend::replaceRRSet(uint32_t domain_id, const DNSName& qname, const
    return true;
 }
 
-bool RemoteBackend::feedRecord(const DNSResourceRecord &rr, string *ordername) {
+bool RemoteBackend::feedRecord(const DNSResourceRecord &rr, const DNSName ordername) {
    Json query = Json::object{
      { "method", "feedRecord" },
      { "parameters", Json::object{
@@ -727,7 +727,7 @@ bool RemoteBackend::feedRecord(const DNSResourceRecord &rr, string *ordername) {
           { "content", rr.content },
           { "ttl", static_cast<int>(rr.ttl) },
           { "auth", rr.auth },
-          { "ordername", (ordername==nullptr?Json():*ordername) }
+          { "ordername", (ordername.empty()?Json():ordername.toString()) }
         }},
         { "trxid", static_cast<double>(d_trxid) },
      }}
index 52813c113330710f2788de68d0ca5ebf7f7be7b4..ba2a9407a6afbdddbf983df7af773e5e8e6a0fd4 100644 (file)
@@ -174,7 +174,7 @@ class RemoteBackend : public DNSBackend
   virtual bool superMasterBackend(const string &ip, const DNSName& domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **ddb);
   virtual bool createSlaveDomain(const string &ip, const DNSName& domain, const string& nameserver, const string &account);
   virtual bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<DNSResourceRecord>& rrset);
-  virtual bool feedRecord(const DNSResourceRecord &r, string *ordername);
+  virtual bool feedRecord(const DNSResourceRecord &r, const DNSName ordername);
   virtual bool feedEnts(int domain_id, map<DNSName,bool>& nonterm);
   virtual bool feedEnts3(int domain_id, const DNSName& domain, map<DNSName,bool>& nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow);
   virtual bool startTransaction(const DNSName& domain, int domain_id);
index 42e50ff30327a8e305f01ac4aa761469e54db912..48a240ace10e86ed2252c3276add03ed3cddd5c8 100644 (file)
@@ -274,13 +274,13 @@ BOOST_AUTO_TEST_CASE(test_method_feedRecord) {
    rr.qclass = QClass::IN;
    rr.ttl = 300;
    rr.content = "ns1.example.com. hostmaster.example.com. 2013013441 7200 3600 1209600 300";
-   BOOST_CHECK(be->feedRecord(rr, NULL));
+   BOOST_CHECK(be->feedRecord(rr, DNSName()));
    rr.qname = DNSName("replace.example.com.");
    rr.qtype = QType::A;
    rr.qclass = QClass::IN;
    rr.ttl = 300;
    rr.content = "127.0.0.1";
-   BOOST_CHECK(be->feedRecord(rr, NULL));
+   BOOST_CHECK(be->feedRecord(rr, DNSName()));
    be->commitTransaction();
 }
 
index 54ac9dbe8e9af06892b18bbc341a47b1e59276fd..89e89a4983f1068adfe128ccb6556a73be58bcc3 100644 (file)
@@ -1266,13 +1266,13 @@ bool GSQLBackend::replaceRRSet(uint32_t domain_id, const DNSName& qname, const Q
     }
   }
   for(const auto& rr: rrset) {
-    feedRecord(rr);
+    feedRecord(rr, DNSName());
   }
   
   return true;
 }
 
-bool GSQLBackend::feedRecord(const DNSResourceRecord &r, string *ordername)
+bool GSQLBackend::feedRecord(const DNSResourceRecord &r, const DNSName &ordername)
 {
   int prio=0;
   string content(r.content);
@@ -1295,10 +1295,10 @@ bool GSQLBackend::feedRecord(const DNSResourceRecord &r, string *ordername)
       bind("disabled",r.disabled)->
       bind("qname",r.qname);
 
-    if (ordername == NULL)
-      d_InsertRecordQuery_stmt->bindNull("ordername");
+    if (!ordername.empty())
+      d_InsertRecordQuery_stmt->bind("ordername", ordername.labelReverse().makeLowerCase().toString(" ", false));
     else
-      d_InsertRecordQuery_stmt->bind("ordername",*ordername);
+      d_InsertRecordQuery_stmt->bindNull("ordername");
 
     if (d_dnssecQueries)
       d_InsertRecordQuery_stmt->bind("auth", r.auth);
index 97118221ca3bbab2b76d1e19c415a9bdbc317a23..5335bdc38120a9733c5844480f6596ca68bcbcfa 100644 (file)
@@ -188,7 +188,7 @@ public:
   bool startTransaction(const DNSName &domain, int domain_id=-1);
   bool commitTransaction();
   bool abortTransaction();
-  bool feedRecord(const DNSResourceRecord &r, string *ordername=0);
+  bool feedRecord(const DNSResourceRecord &r, const DNSName &ordername);
   bool feedEnts(int domain_id, map<DNSName,bool>& nonterm);
   bool feedEnts3(int domain_id, const DNSName &domain, map<DNSName,bool> &nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow);
   bool createDomain(const DNSName &domain, const string &type, const string &masters, const string &account);
index 3cf483549e037d8dac17b97b3935bac7d003a4b4..e3d6242a755c35ed320ce7c08cf5fa5ba435574b 100644 (file)
@@ -268,7 +268,7 @@ public:
   }
 
   //! feeds a record to a zone, needs a call to startTransaction first
-  virtual bool feedRecord(const DNSResourceRecord &rr, string *ordername=0)
+  virtual bool feedRecord(const DNSResourceRecord &rr, const DNSName &ordername)
   {
     return false; // no problem!
   }
index 36214400605d5a25dcf58a4cf42a7849bbf884fa..fef883b316fd09a1f90e434d79570deb4d99b82a 100644 (file)
@@ -1153,7 +1153,7 @@ int loadZone(DNSName zone, const string& fname) {
       else
         haveSOA = true;
     }
-    db->feedRecord(rr);
+    db->feedRecord(rr, DNSName());
   }
   db->commitTransaction();
   return EXIT_SUCCESS;
@@ -1188,12 +1188,12 @@ int createZone(const DNSName &zone, const DNSName& nsname) {
   rr.content = DNSRecordContent::mastermake(rr.qtype.getCode(), 1, serializeSOAData(sd))->getZoneRepresentation(true);
   rr.domain_id = di.id;
   di.backend->startTransaction(zone, di.id);
-  di.backend->feedRecord(rr);
+  di.backend->feedRecord(rr, DNSName());
   if(!nsname.empty()) {
     cout<<"Also adding one NS record"<<endl;
     rr.qtype=QType::NS;
     rr.content=nsname.toStringNoDot();
-    di.backend->feedRecord(rr);
+    di.backend->feedRecord(rr, DNSName());
   }
   
   di.backend->commitTransaction();
@@ -1901,12 +1901,12 @@ void testSchema(DNSSECKeeper& dk, const DNSName& zone)
   rr.auth=1;
   rr.content="ns1.example.com. ahu.example.com. 2012081039 7200 3600 1209600 3600";
   cout<<"Feeding SOA"<<endl;
-  db->feedRecord(rr);
+  db->feedRecord(rr, DNSName());
   rr.qtype=QType::TXT;
   // 300 As
   rr.content="\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"";
   cout<<"Feeding overlong TXT"<<endl;
-  db->feedRecord(rr);
+  db->feedRecord(rr, DNSName());
   cout<<"Committing"<<endl;
   db->commitTransaction();
   cout<<"Querying TXT"<<endl;
@@ -1938,12 +1938,12 @@ void testSchema(DNSSECKeeper& dk, const DNSName& zone)
   rr.auth=1;
   rr.content="ns1.example.com. ahu.example.com. 2012081039 7200 3600 1209600 3600";
   cout<<"Feeding SOA"<<endl;
-  db->feedRecord(rr);
+  db->feedRecord(rr, DNSName());
 
   rr.qtype=QType::A;
   rr.qname=DNSName("_underscore")+zone;
   rr.content="127.0.0.1";
-  db->feedRecord(rr);
+  db->feedRecord(rr, DNSName());
 
   rr.qname=DNSName("bla")+zone;
   cout<<"Committing"<<endl;
@@ -3250,7 +3250,7 @@ try
       if (!src->list(di.zone, di.id, true)) throw PDNSException("Failed to list records");
       nr=0;
       while(src->get(rr)) {
-        if (!tgt->feedRecord(rr)) throw PDNSException("Failed to feed record");
+        if (!tgt->feedRecord(rr, DNSName())) throw PDNSException("Failed to feed record");
         nr++;
       }
       // move comments
index dfe16b90f28c155a9f249b257abb58438b317f22..b4d0ab963c1a25b19763f82ae4456e1dfa6b5dc4 100644 (file)
@@ -273,7 +273,7 @@ uint PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord *rr,
       auto newRec = DNSResourceRecord::fromWire(*rr);
       newRec.domain_id = di->id;
       newRec.auth = (rr->d_name == di->zone || rrType.getCode() != QType::NS);
-      di->backend->feedRecord(newRec);
+      di->backend->feedRecord(newRec, DNSName());
       changedRecords++;
 
 
index 6731862fd410cdb8334039702fcd474bbd29d745..ac676686cddaa1b67f1505a77f0a650149986442 100644 (file)
@@ -487,8 +487,7 @@ void CommunicatorClass::suck(const DNSName &domain, const string &remote)
 
     bool doent=true;
     uint32_t maxent = ::arg().asNum("max-ent-entries");
-    string ordername;
-    DNSName shorter;
+    DNSName shorter, ordername;
     set<DNSName> rrterm;
     map<DNSName,bool> nonterm;
 
@@ -522,8 +521,8 @@ void CommunicatorClass::suck(const DNSName &domain, const string &remote)
         bool auth;
         if (!rr.auth && rr.qtype.getCode() == QType::NS) {
           if (zs.isNSEC3)
-            ordername=toBase32Hex(hashQNameWithSalt(zs.ns3pr, rr.qname));
-          auth=(!zs.isNSEC3 || !zs.optOutFlag || zs.secured.count(DNSName(ordername)));
+            ordername=DNSName(toBase32Hex(hashQNameWithSalt(zs.ns3pr, rr.qname)));
+          auth=(!zs.isNSEC3 || !zs.optOutFlag || zs.secured.count(ordername));
         } else
           auth=rr.auth;
 
@@ -549,21 +548,21 @@ void CommunicatorClass::suck(const DNSName &domain, const string &remote)
       if (zs.isDnssecZone && rr.qtype.getCode() != QType::RRSIG) {
         if (zs.isNSEC3) {
           // NSEC3
-          ordername=toBase32Hex(hashQNameWithSalt(zs.ns3pr, rr.qname));
-          if(!zs.isNarrow && (rr.auth || (rr.qtype.getCode() == QType::NS && (!zs.optOutFlag || zs.secured.count(DNSName(ordername)))))) {
-            di.backend->feedRecord(rr, &ordername);
+          ordername=DNSName(toBase32Hex(hashQNameWithSalt(zs.ns3pr, rr.qname)));
+          if(!zs.isNarrow && (rr.auth || (rr.qtype.getCode() == QType::NS && (!zs.optOutFlag || zs.secured.count(ordername))))) {
+            di.backend->feedRecord(rr, ordername);
           } else
-            di.backend->feedRecord(rr);
+            di.backend->feedRecord(rr, DNSName());
         } else {
           // NSEC
           if (rr.auth || rr.qtype.getCode() == QType::NS) {
-            ordername=rr.qname.makeRelative(domain).makeLowerCase().labelReverse().toString(" ", false); 
-            di.backend->feedRecord(rr, &ordername);
+            ordername=rr.qname.makeRelative(domain);
+            di.backend->feedRecord(rr, ordername);
           } else
-            di.backend->feedRecord(rr);
+            di.backend->feedRecord(rr, DNSName());
         }
       } else
-        di.backend->feedRecord(rr);
+        di.backend->feedRecord(rr, DNSName());
     }
 
     // Insert empty non-terminals
index 2129964dc5919575f85445c094075391f396a984..922ec6943e93cce4748a06212a9c754aecc787bf 100644 (file)
@@ -1130,7 +1130,7 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
 
     for(auto rr : new_records) {
       rr.domain_id = di.id;
-      di.backend->feedRecord(rr);
+      di.backend->feedRecord(rr, DNSName());
     }
     for(Comment& c : new_comments) {
       c.domain_id = di.id;