@@ -155,6 +155,7 @@ void CommunicatorClass::suck(const string &domain,const string &remote)
155
155
bool gotOptOutFlag = false ;
156
156
unsigned int soa_serial = 0 ;
157
157
vector<DNSResourceRecord> rrs;
158
+ set<string> secured;
158
159
while (retriever.getChunk (recs)) {
159
160
if (first) {
160
161
L<<Logger::Error<<" AXFR started for '" <<domain<<" '" <<endl;
@@ -177,7 +178,10 @@ void CommunicatorClass::suck(const string &domain,const string &remote)
177
178
continue ;
178
179
} else if (i->qtype .getCode () == QType::NSEC3) {
179
180
dnssecZone = gotPresigned = true ;
180
- gotOptOutFlag = NSEC3RecordContent(i->content ).d_flags & 1 ;
181
+ NSEC3RecordContent ns3rc (i->content );
182
+ gotOptOutFlag = ns3rc.d_flags & 1 ;
183
+ if (ns3rc.d_set .count (QType::NS) && !pdns_iequals (i->qname , domain))
184
+ secured.insert (toLower (makeRelative (i->qname , domain)));
181
185
continue ;
182
186
} else if (i->qtype .getCode () == QType::NSEC) {
183
187
dnssecZone = gotPresigned = true ;
@@ -210,6 +214,7 @@ void CommunicatorClass::suck(const string &domain,const string &remote)
210
214
}
211
215
}
212
216
217
+
213
218
BOOST_FOREACH (const DNSResourceRecord& rr, rrs) {
214
219
if (rr.qtype .getCode () == QType::NS && !pdns_iequals (rr.qname , domain))
215
220
nsset.insert (rr.qname );
@@ -276,8 +281,8 @@ void CommunicatorClass::suck(const string &domain,const string &remote)
276
281
if (dnssecZone && rr.qtype .getCode () != QType::RRSIG) {
277
282
if (haveNSEC3) {
278
283
// NSEC3
279
- if (!narrow && (rr. auth || ( rr.qtype . getCode () == QType::NS && !gotOptOutFlag))) {
280
- ordername= toLower ( toBase32Hex ( hashQNameWithSalt (ns3pr. d_iterations , ns3pr. d_salt , rr.qname )));
284
+ ordername= toLower ( toBase32Hex ( hashQNameWithSalt (ns3pr. d_iterations , ns3pr. d_salt , rr.qname )));
285
+ if (!narrow && (rr. auth || ( rr.qtype . getCode () == QType::NS && (!gotOptOutFlag || secured. count (ordername))))) {
281
286
di.backend ->feedRecord (rr, &ordername);
282
287
} else
283
288
di.backend ->feedRecord (rr);
0 commit comments