summaryrefslogtreecommitdiff
path: root/apt-pkg/contrib/fileutl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/contrib/fileutl.cc')
-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 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;