bool DNSSECKeeper::getPreRRSIGs(UeberBackend& db, const DNSName& signer, const DNSName& qname,
const DNSName& wildcardname, const QType& qtype,
- DNSPacketWriter::Place signPlace, vector<DNSResourceRecord>& rrsigs, uint32_t signTTL)
+ DNSResourceRecord::Place signPlace, vector<DNSResourceRecord>& rrsigs, uint32_t signTTL)
{
vector<DNSResourceRecord> sigs;
if(db.getDirectRRSIGs(signer, wildcardname.countLabels() ? wildcardname : qname, qtype, sigs)) {
BOOST_FOREACH(DNSResourceRecord &rr, sigs) {
- rr.d_place = (DNSResourceRecord::Place)signPlace;
+ rr.d_place = signPlace;
rr.ttl = signTTL;
rrsigs.push_back(rr);
}
// cerr<<"Got it"<<endl;
if (wildcardname.countLabels())
rr.qname = qname;
- rr.d_place = static_cast<DNSResourceRecord::Place>(signPlace);
+ rr.d_place = signPlace;
rr.ttl = signTTL;
rrsigs.push_back(rr);
}
uint8_t scopeMask;
};
-
class RCode
{
public:
~DNSResourceRecord(){};
enum Place : uint8_t {QUESTION=0, ANSWER=1, AUTHORITY=2, ADDITIONAL=3}; //!< Type describing the positioning of a DNSResourceRecord within, say, a DNSPacket
+
void setContent(const string& content);
string getZoneRepresentation() const;
i!=d_rrs.end();
++i)
{
- if(i->d_place!=DNSResourceRecord::ADDITIONAL &&
+ if(i->d_place!=DNSResourceRecord::ADDITIONAL &&
(i->qtype.getCode()==QType::MX ||
i->qtype.getCode()==QType::NS ||
i->qtype.getCode()==QType::SRV))
i!=d_rrs.end();
++i)
{
- if(i->d_place!=DNSResourceRecord::ADDITIONAL)
+ if(i->d_place!=DNSResourceRecord::ADDITIONAL)
arrs.push_back(&*i);
}
return arrs;
if(pos->content.empty()) // empty contents confuse the MOADNS setup
pos->content=".";
- pw.startRecord(pos->qname, pos->qtype.getCode(), pos->ttl, pos->qclass, (DNSPacketWriter::Place)pos->d_place);
+ pw.startRecord(pos->qname, pos->qtype.getCode(), pos->ttl, pos->qclass, pos->d_place);
shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(pos->qtype.getCode(), pos->qclass, pos->content));
drc->toPacket(pw);
if(pw.size() + 20U > (d_tcp ? 65535 : getMaxReplyLen())) { // 20 = room for EDNS0
// For opcode UPDATE and where the DNSRecord is an answer record, we don't care about content, because this is
// not used within the prerequisite section of RFC2136, so - we can simply use unknownrecordcontent.
// For section 3.2.3, we do need content so we need to get it properly. But only for the correct Qclasses.
- if (oc == Opcode::Update && dr.d_place == DNSRecord::Answer && dr.d_class != 1)
+ if (oc == Opcode::Update && dr.d_place == DNSResourceRecord::ANSWER && dr.d_class != 1)
return new UnknownRecordContent(dr, pr);
uint16_t searchclass = (dr.d_type == QType::OPT) ? 1 : dr.d_class; // class is invalid for OPT
DNSRecord dr;
if(n < d_header.ancount)
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
else if(n < d_header.ancount + d_header.nscount)
- dr.d_place=DNSRecord::Nameserver;
+ dr.d_place=DNSResourceRecord::AUTHORITY;
else
- dr.d_place=DNSRecord::Additional;
+ dr.d_place=DNSResourceRecord::ADDITIONAL;
unsigned int recordStartPos=pr.d_pos;
uint16_t d_class;
uint32_t d_ttl;
uint16_t d_clen;
- enum Place : uint8_t {Answer=1, Nameserver=2, Additional=3} d_place;
+ DNSResourceRecord::Place d_place;
bool operator<(const DNSRecord& rhs) const
{
// cerr<<"Got completion, "<<mdp.d_answers.size()<<" answers, rcode: "<<mdp.d_header.rcode<<endl;
for(MOADNSParser::answers_t::const_iterator j=mdp.d_answers.begin(); j!=mdp.d_answers.end(); ++j) {
// cerr<<"comp: "<<(int)j->first.d_place-1<<" "<<j->first.d_label<<" " << DNSRecordContent::NumberToType(j->first.d_type)<<" "<<j->first.d_content->getZoneRepresentation()<<endl;
- if(j->first.d_place == DNSRecord::Answer || (j->first.d_place == DNSRecord::Nameserver && j->first.d_type == QType::SOA)) {
+ if(j->first.d_place == DNSResourceRecord::ANSWER || (j->first.d_place == DNSResourceRecord::AUTHORITY && j->first.d_type == QType::SOA)) {
DNSResourceRecord rr;
rr.qname=i->second.aname;
rr.qtype = j->first.d_type;
rr.ttl=j->first.d_ttl;
- rr.d_place= (DNSResourceRecord::Place)j->first.d_place;
+ rr.d_place= j->first.d_place;
rr.content=j->first.d_content->getZoneRepresentation();
i->second.complete->addRecord(rr);
}
qclass = p.d_class;
disabled=false;
qname = p.d_name;
- d_place = (DNSResourceRecord::Place)p.d_place;
+ d_place = p.d_place;
// if(!qname.empty())
// boost::erase_tail(qname, 1); // strip .
signttl = 0;
domain_id = -1;
qclass = p.d_class;
- d_place = static_cast<DNSResourceRecord::Place>(p.d_place);
+ d_place = p.d_place;
scopeMask = 0;
}
{
if(mdp.d_header.arcount && !mdp.d_answers.empty()) {
BOOST_FOREACH(const MOADNSParser::answers_t::value_type& val, mdp.d_answers) {
- if(val.first.d_place == DNSRecord::Additional && val.first.d_type == QType::OPT) {
+ if(val.first.d_place == DNSResourceRecord::ADDITIONAL && val.first.d_type == QType::OPT) {
eo->d_packetsize=val.first.d_class;
EDNS0Record stuff;
void compactAnswerSet(MOADNSParser::answers_t orig, set<DNSRecord>& compacted)
{
for(MOADNSParser::answers_t::const_iterator i=orig.begin(); i != orig.end(); ++i)
- if(i->first.d_place==DNSRecord::Answer)
+ if(i->first.d_place==DNSResourceRecord::ANSWER)
compacted.insert(i->first);
}
trc->d_mac = calculateHMAC(tsigsecret, toSign, algo);
// d_trc->d_mac[0]++; // sabotage
}
- pw.startRecord(tsigkeyname, QType::TSIG, 0, QClass::ANY, DNSPacketWriter::ADDITIONAL, false);
+ pw.startRecord(tsigkeyname, QType::TSIG, 0, QClass::ANY, DNSResourceRecord::ADDITIONAL, false);
trc->toPacket(pw);
pw.commit();
}
void fillOutRRSIG(DNSSECPrivateKey& dpk, const DNSName& signQName, RRSIGRecordContent& rrc, vector<shared_ptr<DNSRecordContent> >& toSign);
uint32_t getStartOfWeek();
-void addSignature(DNSSECKeeper& dk, UeberBackend& db, const DNSName& signer, const DNSName signQName, const DNSName& wildcardname, uint16_t signQType, uint32_t signTTL, DNSPacketWriter::Place signPlace,
+void addSignature(DNSSECKeeper& dk, UeberBackend& db, const DNSName& signer, const DNSName signQName, const DNSName& wildcardname, uint16_t signQType, uint32_t signTTL, DNSResourceRecord::Place signPlace,
vector<shared_ptr<DNSRecordContent> >& toSign, vector<DNSResourceRecord>& outsigned, uint32_t origTTL);
int getRRSIGsForRRSET(DNSSECKeeper& dk, const DNSName& signer, const DNSName signQName, uint16_t signQType, uint32_t signTTL,
vector<shared_ptr<DNSRecordContent> >& toSign, vector<RRSIGRecordContent> &rrc);
bool unsetNSEC3PARAM(const DNSName& zname);
void clearAllCaches();
void clearCaches(const DNSName& name);
- bool getPreRRSIGs(UeberBackend& db, const DNSName& signer, const DNSName& qname, const DNSName& wildcardname, const QType& qtype, DNSPacketWriter::Place, vector<DNSResourceRecord>& rrsigs, uint32_t signTTL);
+ bool getPreRRSIGs(UeberBackend& db, const DNSName& signer, const DNSName& qname, const DNSName& wildcardname, const QType& qtype, DNSResourceRecord::Place, vector<DNSResourceRecord>& rrsigs, uint32_t signTTL);
bool isPresigned(const DNSName& zname);
bool setPresigned(const DNSName& zname);
bool unsetPresigned(const DNSName& zname);
// this is the entrypoint from DNSPacket
void addSignature(DNSSECKeeper& dk, UeberBackend& db, const DNSName& signer, const DNSName signQName, const DNSName& wildcardname, uint16_t signQType,
- uint32_t signTTL, DNSPacketWriter::Place signPlace,
+ uint32_t signTTL, DNSResourceRecord::Place signPlace,
vector<shared_ptr<DNSRecordContent> >& toSign, vector<DNSResourceRecord>& outsigned, uint32_t origTTL)
{
//cerr<<"Asked to sign '"<<signQName<<"'|"<<DNSRecordContent::NumberToType(signQType)<<", "<<toSign.size()<<" records\n";
else
rr.ttl=signTTL;
rr.auth=false;
- rr.d_place = static_cast<DNSResourceRecord::Place> (signPlace);
+ rr.d_place = signPlace;
BOOST_FOREACH(RRSIGRecordContent& rrc, rrcs) {
rr.content = rrc.getZoneRepresentation();
outsigned.push_back(rr);
uint32_t signTTL=0;
uint32_t origTTL=0;
- DNSPacketWriter::Place signPlace=DNSPacketWriter::ANSWER;
+ DNSResourceRecord::Place signPlace=DNSResourceRecord::ANSWER;
vector<shared_ptr<DNSRecordContent> > toSign;
vector<DNSResourceRecord> signedRecords;
else
signTTL = pos->ttl;
origTTL = pos->ttl;
- signPlace = static_cast<DNSPacketWriter::Place>(pos->d_place);
+ signPlace = pos->d_place;
if(pos->auth || pos->qtype.getCode() == QType::DS) {
string content = pos->content;
if(!pos->content.empty() && pos->qtype.getCode()==QType::TXT && pos->content[0]!='"') {
d_recordttl = 0;
d_recordqtype = 0;
d_recordqclass = QClass::IN;
- d_recordplace = DNSPacketWriter::ANSWER;
+ d_recordplace = DNSResourceRecord::ANSWER;
}
dnsheader* DNSPacketWriter::getHeader()
return (dnsheader*)&*d_content.begin();
}
-void DNSPacketWriter::startRecord(const DNSName& name, uint16_t qtype, uint32_t ttl, uint16_t qclass, Place place, bool compress)
+void DNSPacketWriter::startRecord(const DNSName& name, uint16_t qtype, uint32_t ttl, uint16_t qclass, DNSResourceRecord::Place place, bool compress)
{
if(!d_record.empty())
commit();
ttl=ntohl(ttl); // will be reversed later on
- startRecord(DNSName(), QType::OPT, ttl, udpsize, ADDITIONAL, false);
+ startRecord(DNSName(), QType::OPT, ttl, udpsize, DNSResourceRecord::ADDITIONAL, false);
for(optvect_t::const_iterator iter = options.begin(); iter != options.end(); ++iter) {
xfr16BitInt(iter->first);
xfr16BitInt(iter->second.length());
dnsheader* dh=reinterpret_cast<dnsheader*>( &*d_content.begin());
switch(d_recordplace) {
- case ANSWER:
+ case DNSResourceRecord::QUESTION:
+ dh->qdcount = htons(ntohs(dh->qdcount) + 1);
+ break;
+ case DNSResourceRecord::ANSWER:
dh->ancount = htons(ntohs(dh->ancount) + 1);
break;
- case AUTHORITY:
+ case DNSResourceRecord::AUTHORITY:
dh->nscount = htons(ntohs(dh->nscount) + 1);
break;
- case ADDITIONAL:
+ case DNSResourceRecord::ADDITIONAL:
dh->arcount = htons(ntohs(dh->arcount) + 1);
break;
}
public:
typedef vector<pair<DNSName, uint16_t> > lmap_t;
- enum Place : uint8_t {ANSWER=1, AUTHORITY=2, ADDITIONAL=3};
//! Start a DNS Packet in the vector passed, with question qname, qtype and qclass
DNSPacketWriter(vector<uint8_t>& content, const DNSName& qname, uint16_t qtype, uint16_t qclass=QClass::IN, uint8_t opcode=0);
/** Start a new DNS record within this packet for namq, qtype, ttl, class and in the requested place. Note that packets can only be written in natural order -
ANSWER, AUTHORITY, ADDITIONAL */
- void startRecord(const DNSName& name, uint16_t qtype, uint32_t ttl=3600, uint16_t qclass=QClass::IN, Place place=ANSWER, bool compress=true);
+ void startRecord(const DNSName& name, uint16_t qtype, uint32_t ttl=3600, uint16_t qclass=QClass::IN, DNSResourceRecord::Place place=DNSResourceRecord::ANSWER, bool compress=true);
/** Shorthand way to add an Opt-record, for example for EDNS0 purposes */
typedef vector<pair<uint16_t,std::string> > optvect_t;
uint16_t d_recordqtype, d_recordqclass;
uint16_t d_truncatemarker; // end of header, for truncate
- Place d_recordplace;
+ DNSResourceRecord::Place d_recordplace;
bool d_canonic, d_lowerCase;
};
if(!getFromTable("place", tmpnum))
rr.d_place = DNSResourceRecord::ANSWER;
else
- rr.d_place = (DNSResourceRecord::Place) tmpnum;
+ rr.d_place = static_cast<DNSResourceRecord::Place>(tmpnum);
/* removes 'value'; keeps 'key' for next iteration */
lua_pop(d_lua, 1); // table
/* get the result */
DNSRecord rr;
rr.d_name = query;
- rr.d_place = DNSRecord::Answer;
+ rr.d_place = DNSResourceRecord::ANSWER;
rr.d_ttl = 3600;
int tableLen = getLuaTableLength(lua, 2);
if(!getFromTable(lua, "qclass", tmpnum))
rr.d_class = QClass::IN;
else {
- rr.d_class = tmpnum;
+ rr.d_class = static_cast<DNSResourceRecord::Place>(tmpnum);
}
rr.d_name = query;
if(!getFromTable(lua, "place", tmpnum))
- rr.d_place = DNSRecord::Answer;
+ rr.d_place = DNSResourceRecord::ANSWER;
else {
- rr.d_place = (DNSRecord::Place) tmpnum;
- if(rr.d_place > DNSRecord::Additional)
- rr.d_place = DNSRecord::Additional;
+ rr.d_place = static_cast<DNSResourceRecord::Place>(tmpnum);
+ if(rr.d_place > DNSResourceRecord::ADDITIONAL)
+ rr.d_place = DNSResourceRecord::ADDITIONAL;
}
BOOST_FOREACH(DNSRecord& rr, ret)
{
- if(rr.d_type == QType::A && rr.d_place==DNSRecord::Answer) {
+ if(rr.d_type == QType::A && rr.d_place==DNSResourceRecord::ANSWER) {
ComboAddress ipv4(std::dynamic_pointer_cast<ARecordContent>(rr.d_content)->getCA());
uint32_t tmp;
memcpy((void*)&tmp, &ipv4.sin4.sin_addr.s_addr, 4);
int rcode = directResolve(newquery, QType(QType::PTR), 1, ret);
BOOST_FOREACH(DNSRecord& rr, ret)
{
- if(rr.d_type == QType::PTR && rr.d_place==DNSRecord::Answer) {
+ if(rr.d_type == QType::PTR && rr.d_place==DNSResourceRecord::ANSWER) {
rr.d_name = qname;
}
}
{
vector<DNSRecord>::iterator first, second;
for(first=rrs.begin();first!=rrs.end();++first)
- if(first->d_place==DNSRecord::Answer && first->d_type != QType::CNAME) // CNAME must come first
+ if(first->d_place==DNSResourceRecord::ANSWER && first->d_type != QType::CNAME) // CNAME must come first
break;
for(second=first;second!=rrs.end();++second)
- if(second->d_place!=DNSRecord::Answer)
+ if(second->d_place!=DNSResourceRecord::ANSWER)
break;
if(second-first>1)
// now shuffle the additional records
for(first=second;first!=rrs.end();++first)
- if(first->d_place==DNSRecord::Additional && first->d_type != QType::CNAME) // CNAME must come first
+ if(first->d_place==DNSResourceRecord::ADDITIONAL && first->d_type != QType::CNAME) // CNAME must come first
break;
for(second=first; second!=rrs.end(); ++second)
- if(second->d_place!=DNSRecord::Additional)
+ if(second->d_place!=DNSResourceRecord::ADDITIONAL)
break;
if(second-first>1)
if(res == RCode::NoError) {
auto i=ret.cbegin();
for(; i!= ret.cend(); ++i)
- if(i->d_type == dc->d_mdp.d_qtype && i->d_place == DNSRecord::Answer)
+ if(i->d_type == dc->d_mdp.d_qtype && i->d_place == DNSResourceRecord::ANSWER)
break;
if(i == ret.cend())
(*t_pdl)->nodata(dc->d_remote,local, dc->d_mdp.d_qname, QType(dc->d_mdp.d_qtype), ret, res, &variableAnswer);
if(ret.size()) {
orderAndShuffle(ret);
for(auto i=ret.cbegin(); i!=ret.cend(); ++i) {
- pw.startRecord(i->d_name, i->d_type, i->d_ttl, i->d_class, (DNSPacketWriter::Place)i->d_place);
+ pw.startRecord(i->d_name, i->d_type, i->d_ttl, i->d_class, i->d_place);
minTTL = min(minTTL, i->d_ttl);
i->d_content->toPacket(pw);
if(pw.size() > maxanswersize) {
pw.rollback();
- if(i->d_place==DNSRecord::Answer) // only truncate if we actually omitted parts of the answer
+ if(i->d_place==DNSResourceRecord::ANSWER) // only truncate if we actually omitted parts of the answer
{
pw.getHeader()->tc=1;
pw.truncate();
dr.d_class = 1;
dr.d_content = *k;
dr.d_ttl = i->d_ttd;
- dr.d_place = DNSRecord::Answer;
+ dr.d_place = DNSResourceRecord::ANSWER;
res->push_back(dr);
}
}
DNSRecord dr;
dr.d_name=hostname;
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
dr.d_ttl=86400;
dr.d_type=QType::SOA;
dr.d_class = 1;
dr.d_name.appendRawLabel("in-addr");
dr.d_name.appendRawLabel("arpa");
dr.d_class = 1;
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
dr.d_ttl=86400;
dr.d_type=QType::SOA;
dr.d_content=std::shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(QType::SOA, 1, "localhost. root 1 604800 86400 2419200 604800"));
while(zpt.get(rr)) {
try {
dr=DNSRecord(rr);
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
}
catch(std::exception &e) {
delete newMap;
const DNSRecord *rr = &i->first;
// Skip this check for other field types (like the TSIG - which is in the additional section)
// For a TSIG, the label is the dnskey, so it does not pass the endOn validation.
- if (! (rr->d_place == DNSRecord::Answer || rr->d_place == DNSRecord::Nameserver))
+ if (! (rr->d_place == DNSResourceRecord::ANSWER || rr->d_place == DNSResourceRecord::AUTHORITY))
continue;
if (!rr->d_name.isPartOf(di.zone)) {
// 3.2.1 and 3.2.2 - Prerequisite check
for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i != mdp.d_answers.end(); ++i) {
const DNSRecord *rr = &i->first;
- if (rr->d_place == DNSRecord::Answer) {
+ if (rr->d_place == DNSResourceRecord::ANSWER) {
int res = checkUpdatePrerequisites(rr, &di);
if (res>0) {
L<<Logger::Error<<msgPrefix<<"Failed PreRequisites check, returning "<<res<<endl;
RRsetMap_t preReqRRsets;
for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i != mdp.d_answers.end(); ++i) {
const DNSRecord *rr = &i->first;
- if (rr->d_place == DNSRecord::Answer) {
+ if (rr->d_place == DNSResourceRecord::ANSWER) {
// Last line of 3.2.3
if (rr->d_class != QClass::IN && rr->d_class != QClass::NONE && rr->d_class != QClass::ANY)
return RCode::FormErr;
// 3.4.1 - Prescan section
for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i != mdp.d_answers.end(); ++i) {
const DNSRecord *rr = &i->first;
- if (rr->d_place == DNSRecord::Nameserver) {
+ if (rr->d_place == DNSResourceRecord::AUTHORITY) {
int res = checkUpdatePrescan(rr);
if (res>0) {
L<<Logger::Error<<msgPrefix<<"Failed prescan check, returning "<<res<<endl;
vector<const DNSRecord *> nsRRtoDelete;
for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i != mdp.d_answers.end(); ++i) {
const DNSRecord *rr = &i->first;
- if (rr->d_place == DNSRecord::Nameserver) {
+ if (rr->d_place == DNSResourceRecord::AUTHORITY) {
if (rr->d_class == QClass::NONE && rr->d_type == QType::NS && rr->d_name == di.zone)
nsRRtoDelete.push_back(rr);
else
tkrc.d_key = output;
tkrc.d_othersize = 0;
pwtkey.getHeader()->id = dns_random(0xffff);
- pwtkey.startRecord(gssctx.getLabel(), QType::TKEY, 3600, QClass::ANY, DNSPacketWriter::ADDITIONAL, false);
+ pwtkey.startRecord(gssctx.getLabel(), QType::TKEY, 3600, QClass::ANY, DNSResourceRecord::ADDITIONAL, false);
tkrc.toPacket(pwtkey);
pwtkey.commit();
BOOST_FOREACH(const string& msg, gssctx.getErrorStrings()) {
for(char c='a';c<='m';++c) {
*templ=c;
- pw.startRecord(DNSName(), QType::NS, 3600, 1, DNSPacketWriter::AUTHORITY);
+ pw.startRecord(DNSName(), QType::NS, 3600, 1, DNSResourceRecord::AUTHORITY);
DNSRecordContent* drc = DNSRecordContent::mastermake(QType::NS, 1, templ);
drc->toPacket(pw);
delete drc;
for(char c='a';c<='m';++c) {
*templ=c;
- pw.startRecord(DNSName(), QType::A, 3600, 1, DNSPacketWriter::ADDITIONAL);
+ pw.startRecord(DNSName(), QType::A, 3600, 1, DNSResourceRecord::ADDITIONAL);
DNSRecordContent* drc = DNSRecordContent::mastermake(QType::A, 1, ips[c-'a']);
drc->toPacket(pw);
delete drc;
vector<uint8_t> packet;
DNSPacketWriter pw(packet, DNSName("outpost.ds9a.nl"), QType::A);
- pw.startRecord(DNSName("ds9a.nl"), QType::NS, 3600, 1, DNSPacketWriter::AUTHORITY);
+ pw.startRecord(DNSName("ds9a.nl"), QType::NS, 3600, 1, DNSResourceRecord::AUTHORITY);
DNSRecordContent* drc = DNSRecordContent::mastermake(QType::NS, 1, "ns1.ds9a.nl");
drc->toPacket(pw);
delete drc;
- pw.startRecord(DNSName("ds9a.nl"), QType::NS, 3600, 1, DNSPacketWriter::AUTHORITY);
+ pw.startRecord(DNSName("ds9a.nl"), QType::NS, 3600, 1, DNSResourceRecord::AUTHORITY);
drc = DNSRecordContent::mastermake(QType::NS, 1, "ns2.ds9a.nl");
drc->toPacket(pw);
delete drc;
- pw.startRecord(DNSName("ns1.ds9a.nl"), QType::A, 3600, 1, DNSPacketWriter::ADDITIONAL);
+ pw.startRecord(DNSName("ns1.ds9a.nl"), QType::A, 3600, 1, DNSResourceRecord::ADDITIONAL);
drc = DNSRecordContent::mastermake(QType::A, 1, "1.2.3.4");
drc->toPacket(pw);
delete drc;
- pw.startRecord(DNSName("ns2.ds9a.nl"), QType::A, 3600, 1, DNSPacketWriter::ADDITIONAL);
+ pw.startRecord(DNSName("ns2.ds9a.nl"), QType::A, 3600, 1, DNSResourceRecord::ADDITIONAL);
drc = DNSRecordContent::mastermake(QType::A, 1, "4.3.2.1");
drc->toPacket(pw);
delete drc;
string auth(".");
for(vector<DNSResourceRecord>::const_iterator i=lwr.d_result.begin();i!=lwr.d_result.end();++i) {
- if(i->d_place==DNSResourceRecord::AUTHORITY && dottedEndsOn(qname,i->qname) && i->qtype.getCode()==QType::SOA &&
+ if(i->d_place==DNSResourceRecord::AUTHORITY && dottedEndsOn(qname,i->qname) && i->qtype.getCode()==QType::SOA &&
lwr.d_rcode==RCode::NXDomain) {
// LOG<<prefix<<qname<<": got negative caching indication for RECORD '"<<qname+"'"<<endl;
ret.push_back(*i);
newtarget=i->content;
}
// for ANY answers we *must* have an authoritative answer
- else if(i->d_place==DNSResourceRecord::ANSWER && pdns_iequals(i->qname, qname) &&
+ else if(i->d_place==DNSResourceRecord::ANSWER && pdns_iequals(i->qname, qname) &&
(
i->qtype==qtype || (lwr.d_aabit && (qtype==QType(QType::ANY) || magicAddrMatch(qtype, i->qtype) ) )
)
ret.clear();
DNSRecord dr;
dr.d_name=qname;
- dr.d_place = DNSRecord::Answer;
+ dr.d_place = DNSResourceRecord::ANSWER;
dr.d_type=qtype.getCode();
dr.d_class=QClass::IN;
dr.d_ttl=86400;
dr.d_type=qtype.getCode();
dr.d_class=qclass;
dr.d_ttl=86400;
- dr.d_place = DNSRecord::Answer;
+ dr.d_place = DNSResourceRecord::ANSWER;
if(qname==versionbind || qname==versionpdns)
dr.d_content=shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(QType::TXT, 3, "\""+::arg()["version-string"]+"\""));
else
ziter=iter->second.d_records.find(boost::make_tuple(authdomain, QType::SOA));
if(ziter!=iter->second.d_records.end()) {
DNSRecord dr=*ziter;
- dr.d_place=DNSRecord::Nameserver;
+ dr.d_place=DNSResourceRecord::AUTHORITY;
ret.push_back(dr);
}
else
DNSRecord dr=*ziter;
if(dr.d_type == qtype.getCode() || qtype.getCode() == QType::ANY) {
dr.d_name = qname;
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
ret.push_back(dr);
}
}
for(ziter=range.first; ziter!=range.second; ++ziter) {
DNSRecord dr=*ziter;
- dr.d_place=DNSRecord::Nameserver;
+ dr.d_place=DNSResourceRecord::AUTHORITY;
ret.push_back(dr);
}
}
ziter=iter->second.d_records.find(boost::make_tuple(authdomain, QType::SOA));
if(ziter!=iter->second.d_records.end()) {
DNSRecord dr=*ziter;
- dr.d_place=DNSRecord::Nameserver;
+ dr.d_place=DNSResourceRecord::AUTHORITY;
ret.push_back(dr);
}
else {
// filter out the good stuff from lwr.result()
for(const auto& rec : lwr.d_records) {
- if(rec.d_place == DNSRecord::Answer)
+ if(rec.d_place == DNSResourceRecord::ANSWER)
ret.push_back(rec);
}
return res;
dr.d_name=qname;
dr.d_ttl=j->d_ttl - d_now.tv_sec;
dr.d_content=signature;
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
dr.d_class=1;
ret.push_back(dr);
}
DNSRecord dr=*j;
ttl = (dr.d_ttl-=d_now.tv_sec);
if(giveNegative) {
- dr.d_place=DNSRecord::Nameserver;
+ dr.d_place=DNSResourceRecord::AUTHORITY;
dr.d_ttl=sttl;
}
ret.push_back(dr);
dr.d_name=sqname;
dr.d_ttl=ttl;
dr.d_content=signature;
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
dr.d_class=1;
ret.push_back(dr);
}
if(rec.d_name.isPartOf(auth)) {
- if(lwr.d_aabit && lwr.d_rcode==RCode::NoError && rec.d_place==DNSRecord::Answer && ::arg().contains("delegation-only",auth.toString() /* ugh */)) {
+ if(lwr.d_aabit && lwr.d_rcode==RCode::NoError && rec.d_place==DNSResourceRecord::ANSWER && ::arg().contains("delegation-only",auth.toString() /* ugh */)) {
LOG("NO! Is from delegation-only zone"<<endl);
s_nodelegated++;
return RCode::NXDomain;
rec.d_ttl=min(s_maxcachettl, rec.d_ttl);
DNSRecord dr(rec);
- dr.d_place=DNSRecord::Answer;
+ dr.d_place=DNSResourceRecord::ANSWER;
dr.d_ttl += d_now.tv_sec;
DNSName newtarget;
for(auto& rec : lwr.d_records) {
- if(rec.d_place==DNSRecord::Nameserver && rec.d_type==QType::SOA &&
+ if(rec.d_place==DNSResourceRecord::AUTHORITY && rec.d_type==QType::SOA &&
lwr.d_rcode==RCode::NXDomain && dottedEndsOn(qname,rec.d_name) && dottedEndsOn(rec.d_name, auth)) {
LOG(prefix<<qname.toString()<<": got negative caching indication for name '"<<qname.toString()+"' (accept="<<dottedEndsOn(rec.d_name, auth)<<"), newtarget='"<<newtarget.toString()<<"'"<<endl);
negindic=true;
}
- else if(rec.d_place==DNSRecord::Answer && rec.d_name == qname && rec.d_type==QType::CNAME && (!(qtype==QType(QType::CNAME)))) {
+ else if(rec.d_place==DNSResourceRecord::ANSWER && rec.d_name == qname && rec.d_type==QType::CNAME && (!(qtype==QType(QType::CNAME)))) {
ret.push_back(rec);
newtarget=DNSName(rec.d_content->getZoneRepresentation());
}
- else if(d_doDNSSEC && (rec.d_type==QType::RRSIG || rec.d_type==QType::NSEC || rec.d_type==QType::NSEC3) && rec.d_place==DNSRecord::Answer){
+ else if(d_doDNSSEC && (rec.d_type==QType::RRSIG || rec.d_type==QType::NSEC || rec.d_type==QType::NSEC3) && rec.d_place==DNSResourceRecord::ANSWER){
if(rec.d_type != QType::RRSIG || rec.d_name == qname)
ret.push_back(rec); // enjoy your DNSSEC
}
// for ANY answers we *must* have an authoritative answer, unless we are forwarding recursively
- else if(rec.d_place==DNSRecord::Answer && rec.d_name == qname &&
+ else if(rec.d_place==DNSResourceRecord::ANSWER && rec.d_name == qname &&
(
rec.d_type==qtype.getCode() || (lwr.d_aabit && (qtype==QType(QType::ANY) || magicAddrMatch(qtype, QType(rec.d_type)) ) ) || sendRDQuery
)
done=true;
ret.push_back(rec);
}
- else if(rec.d_place==DNSRecord::Nameserver && qname.isPartOf(rec.d_name) && rec.d_type==QType::NS) {
+ else if(rec.d_place==DNSResourceRecord::AUTHORITY && qname.isPartOf(rec.d_name) && rec.d_type==QType::NS) {
if(moreSpecificThan(rec.d_name,auth)) {
newauth=rec.d_name;
LOG(prefix<<qname.toString()<<": got NS record '"<<rec.d_name.toString()<<"' -> '"<<rec.d_content->getZoneRepresentation()<<"'"<<endl);
}
nsset.insert(DNSName(rec.d_content->getZoneRepresentation()));
}
- else if(rec.d_place==DNSRecord::Nameserver && dottedEndsOn(qname,rec.d_name) && rec.d_type==QType::DS) {
+ else if(rec.d_place==DNSResourceRecord::AUTHORITY && dottedEndsOn(qname,rec.d_name) && rec.d_type==QType::DS) {
LOG(prefix<<qname.toString()<<": got DS record '"<<rec.d_name.toString()<<"' -> '"<<rec.d_content->getZoneRepresentation()<<"'"<<endl);
sawDS=true;
}
- else if(!done && rec.d_place==DNSRecord::Nameserver && dottedEndsOn(qname,rec.d_name) && rec.d_type==QType::SOA &&
+ else if(!done && rec.d_place==DNSResourceRecord::AUTHORITY && dottedEndsOn(qname,rec.d_name) && rec.d_type==QType::SOA &&
lwr.d_rcode==RCode::NoError) {
LOG(prefix<<qname.toString()<<": got negative caching indication for '"<< (qname.toString()+"|"+qtype.getName()+"'") <<endl);
MOADNSParser mdp(q->getString());
for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i != mdp.d_answers.end(); ++i) {
const DNSRecord *rr = &i->first;
- if (rr->d_type == QType::SOA && rr->d_place == DNSRecord::Nameserver) {
+ if (rr->d_type == QType::SOA && rr->d_place == DNSResourceRecord::AUTHORITY) {
vector<string>parts;
stringtok(parts, rr->d_content->getZoneRepresentation());
if (parts.size() >= 3) {
vector<pair<uint16_t,string > > opts;
DNSPacketWriter pw(pak, DNSName("www.powerdns.com"), QType::A);
- pw.startRecord(DNSName("www.powerdns.com"), QType::A, 16, 1, DNSPacketWriter::ANSWER);
+ pw.startRecord(DNSName("www.powerdns.com"), QType::A, 16, 1, DNSResourceRecord::ANSWER);
pw.xfrIP(htonl(0x7f000001));
opts.push_back(pair<uint16_t,string>(3, "powerdns"));
pw.addOpt(1280, 0, 0, opts);
pak.clear();
DNSPacketWriter pw2(pak, DNSName("www.powerdns.com"), QType::A);
- pw2.startRecord(DNSName("www.powerdns.com"), QType::A, 16, 1, DNSPacketWriter::ANSWER);
+ pw2.startRecord(DNSName("www.powerdns.com"), QType::A, 16, 1, DNSResourceRecord::ANSWER);
pw2.xfrIP(htonl(0x7f000001));
pw2.commit();