From e2c8c825a5470e33c25d00e07de188d0e03922c8 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 11 Nov 2016 09:18:49 +0100 Subject: add TMP/TEMP/TEMPDIR to the TMPDIR DropPrivileges dance apt tools do not really support these other variables, but tools apt calls might, so lets play save and clean those up as needed. Reported-By: Paul Wise (pabs) on IRC --- apt-pkg/contrib/fileutl.cc | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'apt-pkg/contrib/fileutl.cc') diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index d52e9b360..affab956c 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -2778,9 +2778,9 @@ std::vector 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) @@ -2796,6 +2796,11 @@ std::string GetTempDir() /*{{{*/ tmpdir = "/tmp"; return string(tmpdir); +} + /*}}}*/ +std::string GetTempDir() /*{{{*/ +{ + return GetTempDirEnv("TMPDIR"); } std::string GetTempDir(std::string const &User) { @@ -3062,13 +3067,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; -- cgit v1.2.3