]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
webserver: Refactor ACL into a class var
authorPieter Lexis <pieter.lexis@powerdns.com>
Mon, 12 Nov 2018 14:40:46 +0000 (15:40 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 12 Nov 2018 14:40:46 +0000 (15:40 +0100)
pdns/webserver.cc
pdns/webserver.hh
pdns/ws-auth.cc
pdns/ws-recursor.cc

index d375dd2a28ef22035a535b85a0a8139cea3c48a6..64b423e1b20674d60b83e8d46f0a8c8f72b8c5cd 100644 (file)
@@ -33,7 +33,6 @@
 #include "dns.hh"
 #include "base64.hh"
 #include "json.hh"
-#include "arguments.hh"
 #include <yahttp/router.hpp>
 
 json11::Json HttpRequest::json()
@@ -343,22 +342,19 @@ void WebServer::go()
   if(!d_server)
     return;
   try {
-    NetmaskGroup acl;
-    acl.toMasks(::arg()["webserver-allow-from"]);
-
     while(true) {
       try {
         auto client = d_server->accept();
         if (!client) {
           continue;
         }
-        if (client->acl(acl)) {
+        if (client->acl(d_acl)) {
           std::thread webHandler(WebServerConnectionThreadStart, this, client);
           webHandler.detach();
         } else {
           ComboAddress remote;
           if (client->getRemote(remote))
-            g_log<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match 'webserver-allow-from'"<<endl;
+            g_log<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match the set ACL("<<d_acl.toString()<<")"<<endl;
         }
       }
       catch(PDNSException &e) {
index 196d1bb33e60421a5315f31a0076a96b64a35d65..a147b254c0c954a5afd2cb9abede403d787f4364 100644 (file)
@@ -159,6 +159,10 @@ public:
     d_webserverPassword = password;
   }
 
+  void setACL(const NetmaskGroup &nmg) {
+    d_acl = nmg;
+  }
+
   void bind();
   void go();
 
@@ -186,6 +190,8 @@ protected:
 
   std::string d_webserverPassword;
   bool d_registerWebHandlerCalled{false};
+
+  NetmaskGroup d_acl;
 };
 
 #endif /* WEBSERVER_HH */
index 96f3ac52f16bf82864abceba727232969afe652f..55ff66ccc3493a63a2e5c8d354cbd6c22af98b50 100644 (file)
@@ -64,6 +64,11 @@ AuthWebServer::AuthWebServer()
     d_ws = new WebServer(arg()["webserver-address"], arg().asNum("webserver-port"));
     d_ws->setApiKey(arg()["api-key"]);
     d_ws->setPassword(arg()["webserver-password"]);
+
+    NetmaskGroup acl;
+    acl.toMasks(::arg()["webserver-allow-from"]);
+    d_ws->setACL(acl);
+
     d_ws->bind();
   }
 }
index 012ce3c9b240784829f6e49247f78141a3502d97..6d262656b5e04857920a6269454aac733be6538a 100644 (file)
@@ -452,6 +452,11 @@ RecursorWebServer::RecursorWebServer(FDMultiplexer* fdm)
   d_ws = new AsyncWebServer(fdm, arg()["webserver-address"], arg().asNum("webserver-port"));
   d_ws->setApiKey(arg()["api-key"]);
   d_ws->setPassword(arg()["webserver-password"]);
+
+  NetmaskGroup acl;
+  acl.toMasks(::arg()["webserver-allow-from"]);
+  d_ws->setACL(acl);
+
   d_ws->bind();
 
   // legacy dispatch