#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
-
+#include "dnsrecords.hh"
#include "mplexer.hh"
using namespace boost;
nif.origID = mdp.d_header.id;
+ if(mdp.d_header.opcode == Opcode::Query && !mdp.d_header.qr && mdp.d_answers.empty() && mdp.d_qname == "pdns.nproxy." && mdp.d_qtype == QType::TXT) {
+ vector<uint8_t> packet;
+ DNSPacketWriter pw(packet, mdp.d_qname, mdp.d_qtype);
+ pw.getHeader()->id = mdp.d_header.id;
+ pw.getHeader()->rd = mdp.d_header.rd;
+ pw.getHeader()->qr = 1;
+
+ pw.startRecord(mdp.d_qname, QType::TXT);
+ TXTRecordContent trc("\"OK\"");
+ trc.toPacket(pw);
+ pw.commit();
+ sendto(fd, &packet[0], packet.size(), 0, (struct sockaddr*)&nif.source, sizeof(nif.source));
+ return;
+ }
if(mdp.d_header.opcode != Opcode::Notify || mdp.d_qtype != QType::SOA) {
syslogFmt(boost::format("Received non-notification packet for domain '%s' from external nameserver %s") % nif.domain % nif.source.toStringWithPort());
int main(int argc, char** argv)
try
{
+ reportAllTypes();
openlog("nproxy", LOG_NDELAY | LOG_PID, LOG_DAEMON);
po::options_description desc("Allowed options");