]> granicus.if.org Git - pdns/commitdiff
Add support for id.server requests following RFC 4892
authorDevdas Bhagat <devdas.bhagat@booking.com>
Fri, 6 Dec 2013 11:18:17 +0000 (12:18 +0100)
committermind04 <mind04@monshouwer.org>
Tue, 17 Dec 2013 20:00:49 +0000 (21:00 +0100)
pdns/common_startup.cc
pdns/dnspacket.cc
pdns/packethandler.cc
pdns/pdns.conf-dist

index 1a2227d8782b3790fe927317a419050fe2d127ff..a66a5fb0e7db93f363ea0bb971b0108658d8b7f2 100644 (file)
@@ -122,7 +122,7 @@ void declareArguments()
   ::arg().set("negquery-cache-ttl","Seconds to store negative query results in the QueryCache")="60";
   ::arg().set("query-cache-ttl","Seconds to store query results in the QueryCache")="20";
   ::arg().set("soa-minimum-ttl","Default SOA minimum ttl")="3600";
-  ::arg().set("server-id", "Returned when queried for 'server.id' TXT or NSID, defaults to hostname")="";
+  ::arg().set("server-id", "Returned when queried for 'server.id' TXT or NSID, defaults to hostname  - valid options: anonymous, disabled or custom")="");
   ::arg().set("soa-refresh-default","Default SOA refresh")="10800";
   ::arg().set("soa-retry-default","Default SOA retry")="3600";
   ::arg().set("soa-expire-default","Default SOA expire")="604800";
index 0d2e0008b311eadbd68eca996f1bda1d6a342848..242eab94ca32aaa7b96483c722c564a570e1fd8a 100644 (file)
@@ -286,7 +286,10 @@ void DNSPacket::wrapup()
   
   DNSPacketWriter::optvect_t opts;
   if(d_wantsnsid) {
-    opts.push_back(make_pair(3, ::arg()["server-id"]));
+    const static string mode_server_id=::arg()["server-id"];
+    if(mode_server_id != "anonymous" && mode_server_id != "disabled") {
+      opts.push_back(make_pair(3, mode_server_id));
+    }
   }
 
   if(!d_ednsping.empty()) {
index 1d54bcbf3266c6d573f2fe1fa03b923062153611..471e2e0a410ea43a213726eaff373df3b13a4a48 100644 (file)
@@ -261,20 +261,39 @@ int PacketHandler::doVersionRequest(DNSPacket *p, DNSPacket *r, string &target)
 {
   DNSResourceRecord rr;
   
-  if(p->qclass == QClass::CHAOS && p->qtype.getCode()==QType::TXT && target=="version.bind") {// TXT
+  if(p->qclass == QClass::CHAOS && p->qtype.getCode()==QType::TXT && 
+    (target == "version.bind") || (target == "id.server") || (target == "version.pdns") ) {// TXT
     // modes: anonymous, powerdns only, full, spoofed
-    const static string mode=::arg()["version-string"];
-  
-    if(mode.empty() || mode=="full") 
-      rr.content=fullVersionString();
-    else if(mode=="anonymous") {
-      r->setRcode(RCode::ServFail);
-      return 1;
+
+    static string mode;
+    if (target == "id.server") {
+      mode=::arg()["server-id"];
+
+      if (mode == "anonymous") {
+        r->setRcode(RCode::ServFail);
+        return 1;
+      }
+      else if (mode == "disabled") {
+        return 0;
+      }
+      else
+        rr.content=mode;
+    } // We were asked for a version, not RFC 4892 id.server
+    else {
+      mode=::arg()["version-string"];
+    
+      if(mode.empty() || mode=="full") 
+        rr.content=fullVersionString();
+      else if(mode=="anonymous") {
+        r->setRcode(RCode::ServFail);
+        return 1;
+      }
+      else if(mode=="powerdns") {
+        rr.content="Served by PowerDNS - http://www.powerdns.com";
+      }
+      else 
+        rr.content=mode;
     }
-    else if(mode=="powerdns")
-      rr.content="Served by PowerDNS - http://www.powerdns.com";
-    else 
-      rr.content=mode;
 
     rr.ttl=5;
     rr.qname=target;
index 4490949d4cad8705d58119f7bf54c799d9b35d49..355d3a0580de6c7d2d5e44e49aa23ff2cdac65eb 100644 (file)
 # send-root-referral=no
 
 #################################
-# server-id    Returned when queried for 'server.id' TXT or NSID, defaults to hostname
+# server-id    Returned when queried for 'server.id' TXT or NSID, defaults to hostname - valid options: anonymous, disabled or custom
 #
 # server-id=