From df62aa1d7ebfba97b5cb82e18c36b3e47603339d Mon Sep 17 00:00:00 2001 From: Bert Hubert Date: Wed, 5 Dec 2007 17:37:28 +0000 Subject: [PATCH] implement 'pdns.nproxy' TXT query for health checks git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1109 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- pdns/nproxy.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pdns/nproxy.cc b/pdns/nproxy.cc index 00a9db3e5..351a88f29 100644 --- a/pdns/nproxy.cc +++ b/pdns/nproxy.cc @@ -13,7 +13,7 @@ #include #include #include - +#include "dnsrecords.hh" #include "mplexer.hh" using namespace boost; @@ -67,6 +67,20 @@ try 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 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()); @@ -158,6 +172,7 @@ void daemonize(); int main(int argc, char** argv) try { + reportAllTypes(); openlog("nproxy", LOG_NDELAY | LOG_PID, LOG_DAEMON); po::options_description desc("Allowed options"); -- 2.49.0