httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From c...@hyperreal.org
Subject cvs commit: apache-1.3/src/main alloc.c
Date Fri, 02 Oct 1998 02:02:43 GMT
coar        98/10/01 19:02:42

  Modified:    src/main alloc.c
  Log:
  	When the pipe handles are created, the security descriptor
  	indicates that the handle can be inherited.  However, we do not
  	want the server side handles to the pipe to be inherited by the
  	child CGI process. If the child CGI does inherit the server
  	side handles, then the child may be left around if the server
  	closes its handles (e.g. if the http connection is aborted),
  	because the child will have a valid copy of handles to both
  	sides of the pipes, and no I/O error will occur.  Microsoft
  	recommends using DuplicateHandle to turn off the inherit bit
  	under NT and Win95.
  
  PR:		2884, 2910
  Submitted by:	Ken Parzygnat <kparz@raleigh.ibm.com>
  Reviewed by:	Ken Coar
  
  Revision  Changes    Path
  1.101     +55 -0     apache-1.3/src/main/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/alloc.c,v
  retrieving revision 1.100
  retrieving revision 1.101
  diff -u -r1.100 -r1.101
  --- alloc.c	1998/09/25 23:01:49	1.100
  +++ alloc.c	1998/10/02 02:02:41	1.101
  @@ -2222,6 +2222,10 @@
       HANDLE hPipeInputWrite  = NULL;
       HANDLE hPipeErrorRead   = NULL;
       HANDLE hPipeErrorWrite  = NULL;
  +    HANDLE hPipeInputWriteDup = NULL;
  +    HANDLE hPipeOutputReadDup = NULL;
  +    HANDLE hPipeErrorReadDup  = NULL;
  +    HANDLE hCurrentProcess;
       int pid = 0;
       child_info info;
   
  @@ -2259,6 +2263,57 @@
   	    CloseHandle(hPipeOutputWrite);
   	}
   	return 0;
  +    }
  +    /*
  +     * When the pipe handles are created, the security descriptor
  +     * indicates that the handle can be inherited.  However, we do not
  +     * want the server side handles to the pipe to be inherited by the
  +     * child CGI process. If the child CGI does inherit the server
  +     * side handles, then the child may be left around if the server
  +     * closes its handles (e.g. if the http connection is aborted),
  +     * because the child will have a valid copy of handles to both
  +     * sides of the pipes, and no I/O error will occur.  Microsoft
  +     * recommends using DuplicateHandle to turn off the inherit bit
  +     * under NT and Win95.
  +     */
  +    hCurrentProcess = GetCurrentProcess();
  +    if ((pipe_in && !DuplicateHandle(hCurrentProcess, hPipeInputWrite,
  +				     hCurrentProcess,
  +				     &hPipeInputWriteDup, 0, FALSE,
  +				     DUPLICATE_SAME_ACCESS))
  +	|| (pipe_out && !DuplicateHandle(hCurrentProcess, hPipeOutputRead,
  +					 hCurrentProcess, &hPipeOutputReadDup,
  +					 0, FALSE, DUPLICATE_SAME_ACCESS))
  +	|| (pipe_err && !DuplicateHandle(hCurrentProcess, hPipeErrorRead,
  +					 hCurrentProcess, &hPipeErrorReadDup,
  +					 0, FALSE, DUPLICATE_SAME_ACCESS))) {
  +	if (pipe_in) {
  +	    CloseHandle(hPipeInputRead);
  +	    CloseHandle(hPipeInputWrite);
  +	}
  +	if (pipe_out) {
  +	    CloseHandle(hPipeOutputRead);
  +	    CloseHandle(hPipeOutputWrite);
  +	}
  +	if (pipe_err) {
  +	    CloseHandle(hPipeErrorRead);
  +	    CloseHandle(hPipeErrorWrite);
  +	}
  +	return 0;
  +    }
  +    else {
  +	if (pipe_in) {
  +	    CloseHandle(hPipeInputWrite);
  +	    hPipeInputWrite = hPipeInputWriteDup;
  +	}
  +	if (pipe_out) {
  +	    CloseHandle(hPipeOutputRead);
  +	    hPipeOutputRead = hPipeOutputReadDup;
  +	}
  +	if (pipe_err) {
  +	    CloseHandle(hPipeErrorRead);
  +	    hPipeErrorRead = hPipeErrorReadDup;
  +	}
       }
   
       /* The script writes stdout to this pipe handle */
  
  
  

Mime
View raw message