From: Kees Monshouwer Date: Wed, 15 May 2019 13:18:12 +0000 (+0200) Subject: auth: cleanup soaedit and fix #7361 X-Git-Tag: rec-4.2.0-rc1~13^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5fff7d51f9f07873c33efd4dc1bf986e3e1c69a1;p=thirdparty%2Fpdns.git auth: cleanup soaedit and fix #7361 --- diff --git a/pdns/dnsseckeeper.hh b/pdns/dnsseckeeper.hh index 69dde0430e..c0d5526f4f 100644 --- a/pdns/dnsseckeeper.hh +++ b/pdns/dnsseckeeper.hh @@ -303,3 +303,4 @@ uint32_t calculateEditSOA(uint32_t old_serial, const string& kind, const DNSName // for SOA-EDIT-DNSUPDATE/API bool increaseSOARecord(DNSResourceRecord& dr, const string& increaseKind, const string& editKind); bool makeIncreasedSOARecord(SOAData& sd, const string& increaseKind, const string& editKind, DNSResourceRecord& rrout); +DNSZoneRecord makeEditedDNSZRFromSOAData(DNSSECKeeper& dk, const SOAData& sd, DNSResourceRecord::Place place=DNSResourceRecord::ANSWER); diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index 267b1344fd..9a5ff22971 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -963,17 +963,11 @@ DNSPacket *PacketHandler::question(DNSPacket *p) } -void PacketHandler::makeNXDomain(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, SOAData& sd) +void PacketHandler::makeNXDomain(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, const SOAData& sd) { DNSZoneRecord rr; - rr.dr.d_name=sd.qname; - rr.dr.d_type=QType::SOA; - rr.dr.d_content=makeSOAContent(sd); + rr=makeEditedDNSZRFromSOAData(d_dk, sd, DNSResourceRecord::AUTHORITY); rr.dr.d_ttl=min(sd.ttl, sd.default_ttl); - rr.signttl=sd.ttl; - rr.domain_id=sd.domain_id; - rr.dr.d_place=DNSResourceRecord::AUTHORITY; - rr.auth = 1; r->addRecord(rr); if(d_dnssec) { @@ -983,17 +977,11 @@ void PacketHandler::makeNXDomain(DNSPacket* p, DNSPacket* r, const DNSName& targ r->setRcode(RCode::NXDomain); } -void PacketHandler::makeNOError(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, SOAData& sd, int mode) +void PacketHandler::makeNOError(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, const SOAData& sd, int mode) { DNSZoneRecord rr; - rr.dr.d_name=sd.qname; - rr.dr.d_type=QType::SOA; - rr.dr.d_content=makeSOAContent(sd); + rr=makeEditedDNSZRFromSOAData(d_dk, sd, DNSResourceRecord::AUTHORITY); rr.dr.d_ttl=min(sd.ttl, sd.default_ttl); - rr.signttl=sd.ttl; - rr.domain_id=sd.domain_id; - rr.dr.d_place=DNSResourceRecord::AUTHORITY; - rr.auth = 1; r->addRecord(rr); if(d_dnssec) { @@ -1304,14 +1292,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) } if(p->qtype.getCode() == QType::SOA && sd.qname==p->qdomain) { - rr.dr.d_name=sd.qname; - rr.dr.d_type=QType::SOA; - sd.serial = calculateEditSOA(sd.serial, d_dk, sd.qname); - rr.dr.d_content=makeSOAContent(sd); - rr.dr.d_ttl=sd.ttl; - rr.domain_id=sd.domain_id; - rr.dr.d_place=DNSResourceRecord::ANSWER; - rr.auth = true; + rr=makeEditedDNSZRFromSOAData(d_dk, sd); r->addRecord(rr); goto sendit; } @@ -1420,13 +1401,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) /* Add in SOA if required */ if(target==sd.qname) { - rr.dr.d_name = sd.qname; - rr.dr.d_type = QType::SOA; - sd.serial = calculateEditSOA(sd.serial, d_dk, sd.qname); - rr.dr.d_content = makeSOAContent(sd); - rr.dr.d_ttl = sd.ttl; - rr.domain_id = sd.domain_id; - rr.auth = true; + rr=makeEditedDNSZRFromSOAData(d_dk, sd); rrset.push_back(rr); } diff --git a/pdns/packethandler.hh b/pdns/packethandler.hh index fba95ff50c..b5bdfc762c 100644 --- a/pdns/packethandler.hh +++ b/pdns/packethandler.hh @@ -89,8 +89,8 @@ private: int checkUpdatePrerequisites(const DNSRecord *rr, DomainInfo *di); void increaseSerial(const string &msgPrefix, const DomainInfo *di, bool haveNSEC3, bool narrow, const NSEC3PARAMRecordContent *ns3pr); - void makeNXDomain(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, SOAData& sd); - void makeNOError(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, SOAData& sd, int mode); + void makeNXDomain(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, const SOAData& sd); + void makeNOError(DNSPacket* p, DNSPacket* r, const DNSName& target, const DNSName& wildcard, const SOAData& sd, int mode); vector getBestReferralNS(DNSPacket *p, SOAData& sd, const DNSName &target); vector getBestDNAMESynth(DNSPacket *p, SOAData& sd, DNSName &target); bool tryDNAME(DNSPacket *p, DNSPacket*r, SOAData& sd, DNSName &target); diff --git a/pdns/serialtweaker.cc b/pdns/serialtweaker.cc index 094e8a8a31..05300ee534 100644 --- a/pdns/serialtweaker.cc +++ b/pdns/serialtweaker.cc @@ -156,3 +156,23 @@ bool makeIncreasedSOARecord(SOAData& sd, const string& increaseKind, const strin return true; } + +DNSZoneRecord makeEditedDNSZRFromSOAData(DNSSECKeeper& dk, const SOAData& sd, DNSResourceRecord::Place place) { + SOAData edited = sd; + edited.serial = calculateEditSOA(sd.serial, dk, sd.qname); + + DNSRecord soa; + soa.d_name = sd.qname; + soa.d_type = QType::SOA; + soa.d_ttl = sd.ttl; + soa.d_place = place; + soa.d_content = makeSOAContent(edited); + + DNSZoneRecord dzr; + dzr.domain_id = sd.domain_id; + dzr.signttl = sd.ttl; + dzr.auth = true; + dzr.dr = soa; + + return dzr; +} diff --git a/pdns/tcpreceiver.cc b/pdns/tcpreceiver.cc index b9160c072d..f782291965 100644 --- a/pdns/tcpreceiver.cc +++ b/pdns/tcpreceiver.cc @@ -537,25 +537,6 @@ namespace { bool d_auth; }; - DNSZoneRecord makeEditedDNSZRFromSOAData(DNSSECKeeper& dk, const SOAData& sd) - { - SOAData edited = sd; - edited.serial = calculateEditSOA(sd.serial, dk, sd.qname); - - DNSRecord soa; - soa.d_name = sd.qname; - soa.d_type = QType::SOA; - soa.d_ttl = sd.ttl; - soa.d_place = DNSResourceRecord::ANSWER; - soa.d_content = makeSOAContent(edited); - - DNSZoneRecord dzr; - dzr.auth = true; - dzr.dr = soa; - - return dzr; - } - shared_ptr getFreshAXFRPacket(shared_ptr q) { shared_ptr ret = shared_ptr(q->replyPacket());