{
setArgPrefix("random"+suffix);
d_ourname=DNSName(getArg("hostname"));
- d_want_A=false;
- d_want_SOA=false;
+ d_ourdomain = d_ourname;
+ d_ourdomain.chopOff();
}
bool list(const DNSName &target, int id, bool include_disabled) {
void lookup(const QType &type, const DNSName &qdomain, DNSPacket *p, int zoneId)
{
- if(qdomain == d_ourname){
- switch (type.getCode()) {
- case QType::A:
- d_want_A = true;
- break;
- case QType::SOA:
- d_want_SOA = true;
- break;
- case QType::ANY:
- d_want_A = true;
- d_want_SOA = true;
- break;
- }
- } else { // We know nothing
- d_want_A = false;
- d_want_SOA = false;
+ if(qdomain == d_ourdomain){
+ if(type.getCode() == QType::SOA || type.getCode() == QType::ANY) {
+ d_answer="ns1." + d_ourdomain.toString() + " hostmaster." + d_ourdomain.toString() + " 1234567890 86400 7200 604800 300";
+ } else {
+ d_answer="";
+ }
+ } else if (qdomain == d_ourname) {
+ if(type.getCode() == QType::A || type.getCode() == QType::ANY) {
+ ostringstream os;
+ os<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256;
+ d_answer=os.str(); // our random ip address
+ } else {
+ d_answer="";
+ }
+ } else {
+ d_answer="";
}
}
bool get(DNSResourceRecord &rr)
{
- // fill in details
- rr.qname=d_ourname;
- rr.ttl=5; // 5 seconds
- rr.auth=1; // it may be random.. but it is auth!
-
- if(d_want_A) {
- rr.qtype=QType::A;
- ostringstream os;
- os<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256;
- rr.content=os.str();
- d_want_A=false;
+ if(!d_answer.empty()) {
+ if(d_answer.find("ns1.") == 0){
+ rr.qname=d_ourdomain;
+ rr.qtype=QType::SOA;
+ } else {
+ rr.qname=d_ourname;
+ rr.qtype=QType::A;
+ }
+ rr.ttl=5; // 5 seconds
+ rr.auth = 1; // it may be random.. but it is auth!
+ rr.content=d_answer;
+
+ d_answer=""; // this was the last answer
return true;
}
-
- if(d_want_SOA) {
- rr.qtype=QType::SOA;
- rr.content="ns1." + d_ourname.toString() + " hostmaster." + d_ourname.toString() + " 1234567890 86400 7200 604800 300";
- d_want_SOA=false;
- return true;
- }
-
return false;
}
private:
+ string d_answer;
DNSName d_ourname;
- bool d_want_A;
- bool d_want_SOA;
+ DNSName d_ourdomain;
};
/* SECOND PART */