Commit 4d9c5147 authored by Joe Orton's avatar Joe Orton
Browse files

* server/util_script.c (ap_add_common_vars): Allow mod_env to override

  all system path environment variables, not just PATH.  (The
  behaviour for PATH alone was changed in r965679 for PR 43906.)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1811831 13f79535-47bb-0310-9956-ffa450edef68
parent 66ec801e
Loading
Loading
Loading
Loading
+29 −25
Original line number Diff line number Diff line
@@ -92,9 +92,21 @@ static void add_unless_null(apr_table_t *table, const char *name, const char *va
    }
}

static void env2env(apr_table_t *table, const char *name)
/* Sets variable @name in table @dest from r->subprocess_env if
 * available, else from the environment, else from @fallback if
 * non-NULL. */
static void env2env(apr_table_t *dest, request_rec *r,
                    const char *name, const char *fallback)
{
    add_unless_null(table, name, getenv(name));
    const char *val;

    val = apr_table_get(r->subprocess_env, name);
    if (!val)
        val = apr_pstrdup(r->pool, getenv(name));
    if (!val)
        val = apr_pstrdup(r->pool, fallback);
    if (val)
        apr_table_addn(dest, name, val);
}

AP_DECLARE(char **) ap_create_environment(apr_pool_t *p, apr_table_t *t)
@@ -211,37 +223,29 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r)
            add_unless_null(e, http2env(r, hdrs[i].key), hdrs[i].val);
    }

    env_temp = apr_table_get(r->subprocess_env, "PATH");
    if (env_temp == NULL) {
        env_temp = getenv("PATH");
    }
    if (env_temp == NULL) {
        env_temp = DEFAULT_PATH;
    }
    apr_table_addn(e, "PATH", apr_pstrdup(r->pool, env_temp));

    env2env(e, r, "PATH", DEFAULT_PATH);
#if defined(WIN32)
    env2env(e, "SystemRoot");
    env2env(e, "COMSPEC");
    env2env(e, "PATHEXT");
    env2env(e, "WINDIR");
    env2env(e, r, "SystemRoot", NULL);
    env2env(e, r, "COMSPEC", NULL);
    env2env(e, r, "PATHEXT", NULL);
    env2env(e, r, "WINDIR", NULL);
#elif defined(OS2)
    env2env(e, "COMSPEC");
    env2env(e, "ETC");
    env2env(e, "DPATH");
    env2env(e, "PERLLIB_PREFIX");
    env2env(e, r, "COMSPEC", NULL);
    env2env(e, r, "ETC", NULL);
    env2env(e, r, "DPATH", NULL);
    env2env(e, r, "PERLLIB_PREFIX", NULL);
#elif defined(BEOS)
    env2env(e, "LIBRARY_PATH");
    env2env(e, r, "LIBRARY_PATH", NULL);
#elif defined(DARWIN)
    env2env(e, "DYLD_LIBRARY_PATH");
    env2env(e, r, "DYLD_LIBRARY_PATH", NULL);
#elif defined(_AIX)
    env2env(e, "LIBPATH");
    env2env(e, r, "LIBPATH", NULL);
#elif defined(__HPUX__)
    /* HPUX PARISC 2.0W knows both, otherwise redundancy is harmless */
    env2env(e, "SHLIB_PATH");
    env2env(e, "LD_LIBRARY_PATH");
    env2env(e, r, "SHLIB_PATH", NULL);
    env2env(e, r, "LD_LIBRARY_PATH", NULL);
#else /* Some Unix */
    env2env(e, "LD_LIBRARY_PATH");
    env2env(e, r, "LD_LIBRARY_PATH", NULL);
#endif

    apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r));