diff options
author | Remi Collet <fedora@famillecollet.com> | 2012-11-17 07:34:35 +0100 |
---|---|---|
committer | Remi Collet <fedora@famillecollet.com> | 2012-11-17 07:34:35 +0100 |
commit | d9958b91a37d7085be2ddc1b6cd07a8b74890063 (patch) | |
tree | 4942ffad4eac13a08cd3b7155d21885d4ff5228a /mod_revocator-waitpid.patch | |
parent | 2b82c78080e74f3f249dd9e7bd47822de8dfd2ff (diff) |
Diffstat (limited to 'mod_revocator-waitpid.patch')
-rw-r--r-- | mod_revocator-waitpid.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/mod_revocator-waitpid.patch b/mod_revocator-waitpid.patch new file mode 100644 index 0000000..a2676a8 --- /dev/null +++ b/mod_revocator-waitpid.patch @@ -0,0 +1,61 @@ +diff -rupN mod_revocator-1.0.3.orig/exec-client.cpp mod_revocator-1.0.3/exec-client.cpp +--- mod_revocator-1.0.3.orig/exec-client.cpp 2006-10-16 11:16:35.000000000 -0700 ++++ mod_revocator-1.0.3/exec-client.cpp 2012-10-08 13:36:11.093881000 -0700 +@@ -36,6 +36,8 @@ + #ifdef XP_UNIX + #include <sys/types.h> + #include <unistd.h> ++#include <sys/wait.h> ++#include <syslog.h> + #endif + + #include "client.h" +@@ -50,6 +52,7 @@ PR_IMPLEMENT(void *)exec_client(const ch + char * separator; + int pfildes[2]; + int pid; ++ int status; + char * tmpurl = NULL; + int ldap = 0; + char * arg; +@@ -105,12 +108,10 @@ PR_IMPLEMENT(void *)exec_client(const ch + int done = 0; + + close(pfildes[1]); +- dup2(pfildes[0],0); +- close(pfildes[0]); + + totalread = 0; + do { +- numbytes = read(0, buffer, (BIG_LINE * 4) - 1); ++ numbytes = read(pfildes[0], buffer, (BIG_LINE * 4) - 1); + if (numbytes > 0) { + buffer[numbytes] = '\0'; + totalread += numbytes; +@@ -125,6 +126,8 @@ PR_IMPLEMENT(void *)exec_client(const ch + } + *errnum = CL_OUT_OF_MEMORY; + free(tmpurl); ++ close(pfildes[0]); ++ waitpid(pid, &status, WNOHANG); + return NULL; + } + sz += (BIG_LINE * 4); +@@ -135,6 +138,8 @@ PR_IMPLEMENT(void *)exec_client(const ch + if (data) free(data); + data = 0; + free(tmpurl); ++ close(pfildes[0]); ++ waitpid(pid, &status, WNOHANG); + return NULL; + } else if (numbytes == 0) { + done = 1; +@@ -148,6 +153,8 @@ PR_IMPLEMENT(void *)exec_client(const ch + } + free(tmpurl); + *len = totalread; ++ close(pfildes[0]); ++ waitpid(pid, &status, 0); + return data; + } + } |