Skip to content

Commit

Permalink
Merge r1811831 from trunk:
Browse files Browse the repository at this point in the history
* 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.)

Submitted by: jorton
Reviewed by: minfrin, ylavic, jorton


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1915496 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
notroj committed Jan 31, 2024
1 parent 432774c commit b51a836
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 25 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
-*- coding: utf-8 -*-
Changes with Apache 2.4.59

*) core: Allow mod_env to override system environment vars. [Joe Orton]

*) Allow mod_dav_fs to tolerate race conditions between PROPFIND and an
operation which removes a directory/file between apr_dir_read() and
apr_stat(). Current behaviour is to abort the connection which seems
Expand Down
54 changes: 29 additions & 25 deletions server/util_script.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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));
Expand Down

0 comments on commit b51a836

Please sign in to comment.