libfcgi:add security patch for CVE-2012-6687
CVE-2012-6687 - remote attackers cause a denial of service (crash) via a large number 
of connections (http://www.cvedetails.com/cve/CVE-2012-6687/).
Fix:use poll in os_unix.c instead of select to avoid problem with > 1024 connections.
This patch libfcgi_2.4.0-8.3.debian.tar.xz is pulled from the below link:
(https://launchpad.net/ubuntu/+source/libfcgi/2.4.0-8.3)
The next release of libfcgi is 2.4.1 which may have this fix is yet to be released 
officially.

Signed-off-by: Anton Kortunov <toshic.toshic@gmail.com>
Signed-off-by: Niranjan Reddy <niranjan.reddy@rockwellcollins.com>

Index: b/libfcgi/os_unix.c
===================================================================
--- a/libfcgi/os_unix.c
+++ b/libfcgi/os_unix.c
@@ -42,6 +42,7 @@
 #include <sys/time.h>
 #include <sys/un.h>
 #include <signal.h>
+#include <poll.h>
 
 #ifdef HAVE_NETDB_H
 #include <netdb.h>
@@ -103,6 +104,9 @@
 static int shutdownPending = FALSE;
 static int shutdownNow = FALSE;
 
+static int libfcgiOsClosePollTimeout = 2000;
+static int libfcgiIsAfUnixKeeperPollTimeout = 2000;
+
 void OS_ShutdownPending()
 {
     shutdownPending = TRUE;
@@ -168,6 +172,16 @@
     if(libInitialized)
         return 0;
 
+    char *libfcgiOsClosePollTimeoutStr = getenv( "LIBFCGI_OS_CLOSE_POLL_TIMEOUT" );
+    if(libfcgiOsClosePollTimeoutStr) {
+        libfcgiOsClosePollTimeout = atoi(libfcgiOsClosePollTimeoutStr);
+    }
+
+    char *libfcgiIsAfUnixKeeperPollTimeoutStr = getenv( "LIBFCGI_IS_AF_UNIX_KEEPER_POLL_TIMEOUT" );
+    if(libfcgiIsAfUnixKeeperPollTimeoutStr) {
+        libfcgiIsAfUnixKeeperPollTimeout = atoi(libfcgiIsAfUnixKeeperPollTimeoutStr);
+    }
+
     asyncIoTable = (AioInfo *)malloc(asyncIoTableSize * sizeof(AioInfo));
     if(asyncIoTable == NULL) {
         errno = ENOMEM;
@@ -755,19 +769,16 @@
 
     if (shutdown(fd, 1) == 0)
     {
-        struct timeval tv;
-        fd_set rfds;
+        struct pollfd pfd;
         int rv;
         char trash[1024];
 
-        FD_ZERO(&rfds);
+        pfd.fd = fd;
+        pfd.events = POLLIN;
 
         do 
         {
-            FD_SET(fd, &rfds);
-            tv.tv_sec = 2;
-            tv.tv_usec = 0;
-            rv = select(fd + 1, &rfds, NULL, NULL, &tv);
+            rv = poll(&pfd, 1, libfcgiOsClosePollTimeout);
         }
         while (rv > 0 && read(fd, trash, sizeof(trash)) > 0);
     }
@@ -1116,13 +1127,11 @@
  */
 static int is_af_unix_keeper(const int fd)
 {
-    struct timeval tval = { READABLE_UNIX_FD_DROP_DEAD_TIMEVAL };
-    fd_set read_fds;
-
-    FD_ZERO(&read_fds);
-    FD_SET(fd, &read_fds);
+    struct pollfd pfd;
+    pfd.fd = fd;
+    pfd.events = POLLIN;
 
-    return select(fd + 1, &read_fds, NULL, NULL, &tval) >= 0 && FD_ISSET(fd, &read_fds);
+    return poll(&pfd, 1, libfcgiIsAfUnixKeeperPollTimeout) >= 0 && (pfd.revents & POLLIN);
 }
 
 /*

Index: b/examples/Makefile.am
===================================================================
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -34,5 +34,5 @@ threaded_CFLAGS    = @PTHREAD_CFLAGS@
 threaded_LDFLAGS   = @PTHREAD_CFLAGS@ @PTHREAD_LIBS@
 
 echo_cpp_SOURCES = $(INCLUDE_FILES) $(INCLUDEDIR)/fcgio.h echo-cpp.cpp
-echo_cpp_LDADD   = $(LIBDIR)/libfcgi++.la
+echo_cpp_LDADD   = $(LIBDIR)/libfcgi++.la $(LIBDIR)/libfcgi.la
