You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.7 KiB
81 lines
2.7 KiB
diff --git a/server/util_script.c b/server/util_script.c |
|
index 4121ae0..b7f8674 100644 |
|
--- a/server/util_script.c |
|
+++ b/server/util_script.c |
|
@@ -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));
|
|
|