Changeset 1629

Show
Ignore:
Timestamp:
06/10/10 08:53:09 (3 years ago)
Author:
ahu
Message:

make sure webserver is bound *before* privileges are dropped. Noticed by Thomas Mieslinger.

Location:
trunk/pdns/pdns
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/common_startup.cc

    r1606 r1629  
    305305   }   
    306306#endif 
    307  
    308    Utility::dropPrivs(newuid, newgid); 
     307  StatWebServer sws; 
     308  Utility::dropPrivs(newuid, newgid); 
    309309 
    310310  if(::arg().mustDo("recursor")){ 
     
    317317 
    318318  pthread_t qtid; 
    319   StatWebServer sws; 
     319 
    320320 
    321321  if(::arg().mustDo("webserver")) 
  • trunk/pdns/pdns/webserver.cc

    r1472 r1629  
    11/* 
    22    PowerDNS Versatile Database Driven Nameserver 
    3     Copyright (C) 2002-2007  PowerDNS.COM BV 
     3    Copyright (C) 2002-2010  PowerDNS.COM BV 
    44 
    55    This program is free software; you can redistribute it and/or modify 
     
    191191  d_port=port; 
    192192  d_password=password; 
     193  d_server = 0; // on exception, this class becomes a NOOP later on 
     194  try { 
     195    d_server = new Server(d_port, d_listenaddress); 
     196  } 
     197  catch(SessionException &e) { 
     198    L<<Logger::Error<<"Fatal error in webserver: "<<e.reason<<endl; 
     199  } 
    193200} 
    194201 
    195202void WebServer::go() 
    196203{ 
     204  if(!d_server) 
     205    return; 
    197206  try { 
    198     Server *s=new Server(d_port, d_listenaddress); 
    199      
    200207    Session *client; 
    201208    pthread_t tid; 
     
    203210    L<<Logger::Error<<"Launched webserver on "<<d_listenaddress<<":"<<d_port<<endl; 
    204211 
    205     while((client=s->accept())) { 
     212    while((client=d_server->accept())) { 
    206213      pthread_create(&tid, 0 , &serveConnection, (void *)client); 
    207214    } 
  • trunk/pdns/pdns/webserver.hh

    r681 r1629  
    2424 
    2525using namespace std; 
     26class Server; 
    2627 
    2728class WebServer 
     
    4243  static void *d_that; 
    4344  static string d_password; 
     45  Server* d_server; 
    4446}; 
    4547#endif /* WEBSERVER_HH */ 
  • trunk/pdns/pdns/ws.cc

    r1472 r1629  
    3030{ 
    3131  d_start=time(0); 
    32         d_min10=d_min5=d_min1=0; 
     32  d_min10=d_min5=d_min1=0; 
     33  d_ws = new WebServer(arg()["webserver-address"], arg().asNum("webserver-port"),arg()["webserver-password"]); 
    3334} 
    3435 
     
    224225{ 
    225226  try { 
    226     WebServer ws(arg()["webserver-address"], arg().asNum("webserver-port"),arg()["webserver-password"]); 
    227     ws.setCaller(this); 
    228     ws.registerHandler("",&indexfunction); 
    229     ws.go(); 
     227     
     228    d_ws->setCaller(this); 
     229    d_ws->registerHandler("",&indexfunction); 
     230    d_ws->go(); 
    230231  } 
    231232  catch(...) { 
  • trunk/pdns/pdns/ws.hh

    r1343 r1629  
    7676}; 
    7777 
     78class WebServer; 
    7879 
    7980class StatWebServer 
     
    9899  Ewma d_queries, d_cachehits, d_cachemisses; 
    99100  Ewma d_qcachehits, d_qcachemisses; 
     101  WebServer *d_ws; 
    100102}; 
    101103