summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-11-11 09:18:49 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2016-11-11 23:38:47 +0100
commite2c8c825a5470e33c25d00e07de188d0e03922c8 (patch)
tree4ab99ecfddfb84b792f71acc6db36d6dc6c8f29c
parent58608941e6b58a46109b7cd875716b3d8054c4bf (diff)
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
-rw-r--r--apt-pkg/contrib/fileutl.cc29
1 files changed, 20 insertions, 9 deletions
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<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)
@@ -2797,6 +2797,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
@@ -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;