diff options
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index e18fa7cf3..1691c8ad4 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -2719,9 +2719,9 @@ std::vector<std::string> Glob(std::string const &pattern, int flags) return result; } /*}}}*/ -std::string GetTempDir() /*{{{*/ +static std::string APT_NONNULL(1) GetTempDirEnv(char const * const env) /*{{{*/ { - const char *tmpdir = getenv("TMPDIR"); + const char *tmpdir = getenv(env); #ifdef P_tmpdir if (!tmpdir) @@ -2738,6 +2738,11 @@ std::string GetTempDir() /*{{{*/ return string(tmpdir); } + /*}}}*/ +std::string GetTempDir() /*{{{*/ +{ + return GetTempDirEnv("TMPDIR"); +} std::string GetTempDir(std::string const &User) { // no need/possibility to drop privs @@ -3003,13 +3008,19 @@ bool DropPrivileges() /*{{{*/ setenv("SHELL", "/bin/sh", 1); else setenv("SHELL", pw->pw_shell, 1); - auto const tmpdir = getenv("TMPDIR"); - if (tmpdir != nullptr) - { - auto const ourtmpdir = GetTempDir(); - if (ourtmpdir != tmpdir) - setenv("TMPDIR", ourtmpdir.c_str(), 1); - } + auto const apt_setenv_tmp = [](char const * const env) { + auto const tmpdir = getenv(env); + if (tmpdir != nullptr) + { + auto const ourtmpdir = GetTempDirEnv(env); + if (ourtmpdir != tmpdir) + setenv(env, ourtmpdir.c_str(), 1); + } + }; + apt_setenv_tmp("TMPDIR"); + apt_setenv_tmp("TEMPDIR"); + apt_setenv_tmp("TMP"); + apt_setenv_tmp("TEMP"); } return true; |