From: Kees Monshouwer Date: Mon, 5 Jun 2017 18:38:08 +0000 (+0200) Subject: auth: feedRecord() ordename is now a DNSName X-Git-Tag: rec-4.1.0-alpha1~93^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c9b434465ffd6a26b4d939c851a9dc8c92ee4486;p=thirdparty%2Fpdns.git auth: feedRecord() ordename is now a DNSName --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index 9e7645adc3..b8de3f3cb3 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -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); diff --git a/modules/bindbackend/bindbackend2.hh b/modules/bindbackend/bindbackend2.hh index b5269e60a2..d8c6f50c22 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -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 *ips); diff --git a/modules/luabackend/luabackend.hh b/modules/luabackend/luabackend.hh index d4979605ba..7b4722bfb6 100644 --- a/modules/luabackend/luabackend.hh +++ b/modules/luabackend/luabackend.hh @@ -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 diff --git a/modules/luabackend/slave.cc b/modules/luabackend/slave.cc index fc0b0ae4a2..2660b7b7f2 100644 --- a/modules/luabackend/slave.cc +++ b/modules/luabackend/slave.cc @@ -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; diff --git a/modules/opendbxbackend/odbxbackend.cc b/modules/opendbxbackend/odbxbackend.cc index c868a8010d..d6e9fb963a 100644 --- a/modules/opendbxbackend/odbxbackend.cc +++ b/modules/opendbxbackend/odbxbackend.cc @@ -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 { diff --git a/modules/opendbxbackend/odbxbackend.hh b/modules/opendbxbackend/odbxbackend.hh index 42a4cd638a..efe3b6b4cd 100644 --- a/modules/opendbxbackend/odbxbackend.hh +++ b/modules/opendbxbackend/odbxbackend.hh @@ -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& nsset, string *nameserver, string* account, DNSBackend** ddb ); diff --git a/modules/oraclebackend/oraclebackend.cc b/modules/oraclebackend/oraclebackend.cc index 2f923a5af3..efcbad8fae 100644 --- a/modules/oraclebackend/oraclebackend.cc +++ b/modules/oraclebackend/oraclebackend.cc @@ -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; diff --git a/modules/oraclebackend/oraclebackend.hh b/modules/oraclebackend/oraclebackend.hh index face7af56c..2013fb53b6 100644 --- a/modules/oraclebackend/oraclebackend.hh +++ b/modules/oraclebackend/oraclebackend.hh @@ -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, diff --git a/modules/remotebackend/remotebackend.cc b/modules/remotebackend/remotebackend.cc index d1ff07af04..fe26ad3f7b 100644 --- a/modules/remotebackend/remotebackend.cc +++ b/modules/remotebackend/remotebackend.cc @@ -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(rr.ttl) }, { "auth", rr.auth }, - { "ordername", (ordername==nullptr?Json():*ordername) } + { "ordername", (ordername.empty()?Json():ordername.toString()) } }}, { "trxid", static_cast(d_trxid) }, }} diff --git a/modules/remotebackend/remotebackend.hh b/modules/remotebackend/remotebackend.hh index 52813c1133..ba2a9407a6 100644 --- a/modules/remotebackend/remotebackend.hh +++ b/modules/remotebackend/remotebackend.hh @@ -174,7 +174,7 @@ class RemoteBackend : public DNSBackend virtual bool superMasterBackend(const string &ip, const DNSName& domain, const vector&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& 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& nonterm); virtual bool feedEnts3(int domain_id, const DNSName& domain, map& nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow); virtual bool startTransaction(const DNSName& domain, int domain_id); diff --git a/modules/remotebackend/test-remotebackend.cc b/modules/remotebackend/test-remotebackend.cc index 42e50ff303..48a240ace1 100644 --- a/modules/remotebackend/test-remotebackend.cc +++ b/modules/remotebackend/test-remotebackend.cc @@ -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(); } diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 54ac9dbe8e..89e89a4983 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -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); diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 97118221ca..5335bdc381 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -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& nonterm); bool feedEnts3(int domain_id, const DNSName &domain, map &nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow); bool createDomain(const DNSName &domain, const string &type, const string &masters, const string &account); diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index 3cf483549e..e3d6242a75 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -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! } diff --git a/pdns/pdnsutil.cc b/pdns/pdnsutil.cc index 3621440060..fef883b316 100644 --- a/pdns/pdnsutil.cc +++ b/pdns/pdnsutil.cc @@ -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"<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"<feedRecord(rr); + db->feedRecord(rr, DNSName()); rr.qtype=QType::TXT; // 300 As rr.content="\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\""; cout<<"Feeding overlong TXT"<feedRecord(rr); + db->feedRecord(rr, DNSName()); cout<<"Committing"<commitTransaction(); cout<<"Querying TXT"<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"<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 diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index dfe16b90f2..b4d0ab963c 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -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++; diff --git a/pdns/slavecommunicator.cc b/pdns/slavecommunicator.cc index 6731862fd4..ac676686cd 100644 --- a/pdns/slavecommunicator.cc +++ b/pdns/slavecommunicator.cc @@ -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 rrterm; map 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 diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index 2129964dc5..922ec6943e 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -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;