Commit e059758f authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

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
Backports: r663699


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x@663701 13f79535-47bb-0310-9956-ffa450edef68
parent 94dc1877
Loading
Loading
Loading
Loading
+4 −9
Changes for server/mpm/winnt/mpm_winnt.c: 4 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -617,7 +617,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;
@@ -629,6 +628,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_sub_make(&ptemp, p, NULL);

@@ -713,21 +714,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;
    /* Build the env array */
    for (envc = 0; _environ[envc]; ++envc) {
        ;
    }
        env = malloc((envc + 2) * sizeof (char*));
    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) {