]> granicus.if.org Git - pdns/commitdiff
add error checking in exp. recursor webserver
authorChristian Hofstaedtler <christian@hofstaedtler.name>
Sat, 24 Aug 2013 09:37:05 +0000 (11:37 +0200)
committerChristian Hofstaedtler <christian@hofstaedtler.name>
Sat, 24 Aug 2013 12:02:27 +0000 (14:02 +0200)
pdns_recursor will now fail to start when it can't bind to the webserver
socket.

Fix for Coverity CID 10299921029999

pdns/json_ws.cc
pdns/pdns_recursor.cc

index 6055878c94ed07ebf7bdf1b27ecacf046e183fb4..d200bf4df8b047234a1356c08136bb99c165b9a1 100644 (file)
@@ -32,9 +32,14 @@ JWebserver::JWebserver(FDMultiplexer* fdm) : d_fdm(fdm)
 {
   RecursorControlParser rcp; // inits
   d_socket = socket(AF_INET6, SOCK_STREAM, 0);
+  if(d_socket<0) {
+    throw PDNSException("Making webserver socket: "+stringerror());
+  }
   setSocketReusable(d_socket);
   ComboAddress local("::", 8082);
-  bind(d_socket, (struct sockaddr*)&local, local.getSocklen());
+  if(bind(d_socket, (struct sockaddr*)&local, local.getSocklen())<0) {
+    throw PDNSException("Binding webserver socket: "+stringerror());
+  }
   listen(d_socket, 5);
   
   d_fdm->addReadFD(d_socket, boost::bind(&JWebserver::newConnection, this));
index f48900486680691018fe0b8dbaf801a2c5fcbf11..2d3e40a11d3970b60e907706653c7929da19d1d1 100644 (file)
@@ -1892,7 +1892,13 @@ try
   if(!t_id) {
     if(::arg().mustDo("experimental-json-interface")) {
       L<<Logger::Warning << "Enabling JSON interface" << endl;
-      new JWebserver(t_fdm);
+      try {
+        new JWebserver(t_fdm);
+      }
+      catch(PDNSException &e) {
+        L<<Logger::Error<<"Exception: "<<e.reason<<endl;
+        exit(99);
+      }
     }
     L<<Logger::Error<<"Enabled '"<< t_fdm->getName() << "' multiplexer"<<endl;
   }