From: Bert Hubert Date: Thu, 10 Jun 2010 06:53:09 +0000 (+0000) Subject: make sure webserver is bound *before* privileges are dropped. Noticed by Thomas Miesl... X-Git-Tag: rec-3.3~73 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=96d299dbd765b0d269deebc0f4b77626242f01a1;p=pdns make sure webserver is bound *before* privileges are dropped. Noticed by Thomas Mieslinger. git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1629 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/common_startup.cc b/pdns/common_startup.cc index 2408c0a56..123889034 100644 --- a/pdns/common_startup.cc +++ b/pdns/common_startup.cc @@ -304,8 +304,8 @@ void mainthread() L<go(); pthread_t qtid; - StatWebServer sws; + if(::arg().mustDo("webserver")) sws.go(); diff --git a/pdns/webserver.cc b/pdns/webserver.cc index 02fd5b4b5..a2193f2dc 100644 --- a/pdns/webserver.cc +++ b/pdns/webserver.cc @@ -1,6 +1,6 @@ /* PowerDNS Versatile Database Driven Nameserver - Copyright (C) 2002-2007 PowerDNS.COM BV + Copyright (C) 2002-2010 PowerDNS.COM BV This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 @@ -190,19 +190,26 @@ WebServer::WebServer(const string &listenaddress, int port, const string &passwo d_listenaddress=listenaddress; d_port=port; d_password=password; + d_server = 0; // on exception, this class becomes a NOOP later on + try { + d_server = new Server(d_port, d_listenaddress); + } + catch(SessionException &e) { + L<accept())) { + while((client=d_server->accept())) { pthread_create(&tid, 0 , &serveConnection, (void *)client); } } diff --git a/pdns/webserver.hh b/pdns/webserver.hh index e49249e14..ff58d0bbf 100644 --- a/pdns/webserver.hh +++ b/pdns/webserver.hh @@ -23,6 +23,7 @@ using namespace std; +class Server; class WebServer { @@ -41,5 +42,6 @@ private: static mapd_functions; static void *d_that; static string d_password; + Server* d_server; }; #endif /* WEBSERVER_HH */ diff --git a/pdns/ws.cc b/pdns/ws.cc index af640413e..8740d1a88 100644 --- a/pdns/ws.cc +++ b/pdns/ws.cc @@ -29,7 +29,8 @@ extern StatBag S; StatWebServer::StatWebServer() { d_start=time(0); - d_min10=d_min5=d_min1=0; + d_min10=d_min5=d_min1=0; + d_ws = new WebServer(arg()["webserver-address"], arg().asNum("webserver-port"),arg()["webserver-password"]); } void StatWebServer::go() @@ -223,10 +224,10 @@ string StatWebServer::indexfunction(const map &varmap, void *ptr, void StatWebServer::launch() { try { - WebServer ws(arg()["webserver-address"], arg().asNum("webserver-port"),arg()["webserver-password"]); - ws.setCaller(this); - ws.registerHandler("",&indexfunction); - ws.go(); + + d_ws->setCaller(this); + d_ws->registerHandler("",&indexfunction); + d_ws->go(); } catch(...) { L<