]> granicus.if.org Git - pdns/commitdiff
don't relay passwords over JSON, plus hook up hosted domains to JSON in pdns_recursor
authorBert Hubert <bert.hubert@netherlabs.nl>
Thu, 15 Nov 2012 21:24:36 +0000 (21:24 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Thu, 15 Nov 2012 21:24:36 +0000 (21:24 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2900 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/json_ws.cc
pdns/ws.cc

index ff98460d48bd1e65667c2abce40cf5203bbf2af9..772b9e22e58195ac235da54408e120e411a6e2b0 100644 (file)
@@ -25,6 +25,7 @@
 #include "rec_channel.hh"
 #include "arguments.hh"
 #include "misc.hh"
+#include "syncres.hh"
 
 JWebserver::JWebserver(FDMultiplexer* fdm) : d_fdm(fdm)
 {
@@ -75,15 +76,31 @@ void JWebserver::readRequest(int fd)
     content=callback+"(";
 
   map<string, string> stats; 
-  if(sbuffer.find("stats") != string::npos) 
+  if(sbuffer.find("stats") != string::npos) {
     stats = getAllStatsMap();
+    content += returnJSONObject(stats);  
+  } else if(sbuffer.find("domains") != string::npos) {
+    content += "[";
+    bool first=1;
+    BOOST_FOREACH(const SyncRes::domainmap_t::value_type& val, *t_sstorage->domainmap) {
+      if(!first) content+= ", ";
+      first=false;
+      stats.clear();
+      stats["name"] = val.first;
+      stats["type"] = val.second.d_servers.empty() ? "Native" : "Forwarded";
+      // fill out forwarders too one day, and rdrequired
+      content += returnJSONObject(stats);
+    }
+    content += "]";
+  }
   else {
     vector<string> items = ::arg().list();
     BOOST_FOREACH(const string& var, items) {
       stats[var] = ::arg()[var];
     }
+    content += returnJSONObject(stats);  
   }
-  content += returnJSONObject(stats);  
+
 
   if(!callback.empty())
     content += ");";
index 14223231060bbc249871a9d97b2356f1065c0386..22768c733caffffadea2f2e884cd1c251e9e3daa 100644 (file)
@@ -296,11 +296,15 @@ string StatWebServer::jsonstat(const map<string,string> &varmap, void *ptr, bool
     ret += "[";
     bool first=1;
     BOOST_FOREACH(const string& var, items) {
+      
       if(!first) ret+=",";
       first=false;
       ret += "[";
       ret += "\""+var+"\", \"";
-      ret += ::arg()[var] + "\"";
+      if(var.find("password") != string::npos)
+        ret += "*****\"";
+      else 
+        ret += ::arg()[var] + "\"";
       ret += "]";
     }
     ret += "]";