1
0
mirror of https://github.com/apache/httpd.git synced 2026-01-06 09:01:14 +03:00

The environment may be manipulated by modules such as mod_perl, so regenerate

the passed env argument on each CreateProcess call.

PR: 44800 (part 2/3)
Submitted by: tdonovan


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@663699 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
William A. Rowe Jr
2008-06-05 19:00:31 +00:00
parent 0135f15d52
commit 74d535b29d

View File

@@ -561,7 +561,6 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_
/* These NEVER change for the lifetime of this parent
*/
static char **args = NULL;
static char **env = NULL;
static char pidbuf[28];
apr_status_t rv;
@@ -572,6 +571,8 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_
HANDLE waitlist[2]; /* see waitlist_e */
char *cmd;
char *cwd;
char **env;
int envc;
apr_pool_create_ex(&ptemp, p, NULL, NULL);
@@ -640,21 +641,15 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_
return -1;
}
if (!env)
{
/* Build the env array, only once since it won't change
* for the lifetime of this parent process.
*/
int envc;
for (envc = 0; _environ[envc]; ++envc) {
;
}
env = malloc((envc + 2) * sizeof (char*));
memcpy(env, _environ, envc * sizeof (char*));
apr_snprintf(pidbuf, sizeof(pidbuf), "AP_PARENT_PID=%i", parent_pid);
env[envc] = pidbuf;
env[envc + 1] = NULL;
/* Build the env array */
for (envc = 0; _environ[envc]; ++envc) {
;
}
env = apr_palloc(ptemp, (envc + 2) * sizeof (char*));
memcpy(env, _environ, envc * sizeof (char*));
apr_snprintf(pidbuf, sizeof(pidbuf), "AP_PARENT_PID=%i", parent_pid);
env[envc] = pidbuf;
env[envc + 1] = NULL;
rv = apr_proc_create(&new_child, cmd, args, env, attr, ptemp);
if (rv != APR_SUCCESS) {