]> git.saurik.com Git - apt.git/commitdiff
add TMP/TEMP/TEMPDIR to the TMPDIR DropPrivileges dance
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 11 Nov 2016 08:18:49 +0000 (09:18 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Fri, 11 Nov 2016 22:38:47 +0000 (23:38 +0100)
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

index d52e9b3602c66fd79805c820cc09ac2f12d511b6..affab956c9a2ba29f20a49bb9bdbf7c5eb44c01a 100644 (file)
@@ -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)
@@ -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;