return EXIT_SUCCESS;
}
+bool prettyDROrder(const DNSRecord& a, const DNSRecord& b)
+{
+ if(a.d_type == QType::SOA && b.d_type != QType::SOA)
+ return true;
+ if(a.d_type != QType::SOA && b.d_type == QType::SOA)
+ return false;
+
+ return a<b;
+}
+
int editZone(DNSSECKeeper& dk, const DNSName &zone) {
UeberBackend B;
DomainInfo di;
continue;
DNSRecord dr(rr);
pre.push_back(dr);
+ }
+ sort(pre.begin(), pre.end(), prettyDROrder);
+ for(const auto& dr : pre) {
ostringstream os;
os<<dr.d_name<<"\t"<<dr.d_ttl<<"\tIN\t"<<DNSRecordContent::NumberToType(dr.d_type)<<"\t"<<dr.d_content->getZoneRepresentation(true)<<endl;
if(write(tmpfd, os.str().c_str(), os.str().length()) < 0)
unixDie("Writing zone to temporary file");
}
- sort(pre.begin(), pre.end());
close(tmpfd);
tmpfd=-1;
}
goto reAsk;
}
}
- sort(post.begin(), post.end());
+ sort(post.begin(), post.end(), prettyDROrder);
checkrr.clear();
for(const DNSRecord& rr : post) {
cout<<"Detected the following changes:\n"<<endl;
vector<DNSRecord> diff;
+
map<pair<DNSName,uint16_t>, string> changed;
- set_difference(pre.cbegin(), pre.cend(), post.cbegin(), post.cend(), back_inserter(diff));
+ set_difference(pre.cbegin(), pre.cend(), post.cbegin(), post.cend(), back_inserter(diff), prettyDROrder);
for(const auto& d : diff) {
ostringstream str;
str<<'-'<< d.d_name <<" "<<d.d_ttl<<" IN "<<DNSRecordContent::NumberToType(d.d_type)<<" "<<d.d_content->getZoneRepresentation(true)<<endl;
}
diff.clear();
- set_difference(post.cbegin(), post.cend(), pre.cbegin(), pre.cend(), back_inserter(diff));
+ set_difference(post.cbegin(), post.cend(), pre.cbegin(), pre.cend(), back_inserter(diff), prettyDROrder);
for(const auto& d : diff) {
ostringstream str;