return lzrp < rzrp;
}
+ // this orders in canonical order and keeps the SOA record on top
+ static bool prettyCompare(const DNSRecord& a, const DNSRecord& b)
+ {
+ auto aType = (a.d_type == QType::SOA) ? 0 : a.d_type;
+ auto bType = (b.d_type == QType::SOA) ? 0 : b.d_type;
+
+ if(a.d_name.canonCompare(b.d_name))
+ return true;
+ if(b.d_name.canonCompare(a.d_name))
+ return false;
+
+ if(tie(aType, a.d_class, a.d_ttl) < tie(bType, b.d_class, b.d_ttl))
+ return true;
+
+ if(tie(aType, a.d_class, a.d_ttl) != tie(bType, b.d_class, b.d_ttl))
+ return false;
+
+ string lzrp, rzrp;
+ if(a.d_content)
+ lzrp=toLower(a.d_content->getZoneRepresentation());
+ if(b.d_content)
+ rzrp=toLower(b.d_content->getZoneRepresentation());
+
+ return lzrp < rzrp;
+ }
+
+
bool operator==(const DNSRecord& rhs) const
{
string lzrp, rzrp;
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;
DNSRecord dr(rr);
pre.push_back(dr);
}
- sort(pre.begin(), pre.end(), prettyDROrder);
+ sort(pre.begin(), pre.end(), DNSRecord::prettyCompare);
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;
goto reAsk;
}
}
- sort(post.begin(), post.end(), prettyDROrder);
+ sort(post.begin(), post.end(), DNSRecord::prettyCompare);
checkrr.clear();
for(const DNSRecord& rr : post) {
vector<DNSRecord> diff;
map<pair<DNSName,uint16_t>, string> changed;
- set_difference(pre.cbegin(), pre.cend(), post.cbegin(), post.cend(), back_inserter(diff), prettyDROrder);
+ set_difference(pre.cbegin(), pre.cend(), post.cbegin(), post.cend(), back_inserter(diff), DNSRecord::prettyCompare);
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), prettyDROrder);
+ set_difference(post.cbegin(), post.cend(), pre.cbegin(), pre.cend(), back_inserter(diff), DNSRecord::prettyCompare);
for(const auto& d : diff) {
ostringstream str;