Просмотр исходного кода

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
David Kalnischkies лет назад: 9
Родитель
Сommit
e2c8c825a5
1 измененных файлов с 20 добавлено и 9 удалено
  1. 20 9
      apt-pkg/contrib/fileutl.cc

+ 20 - 9
apt-pkg/contrib/fileutl.cc

@@ -2778,9 +2778,9 @@ std::vector<std::string> Glob(std::string const &pattern, int flags)
    return result;
    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
 #ifdef P_tmpdir
    if (!tmpdir)
    if (!tmpdir)
@@ -2796,6 +2796,11 @@ std::string GetTempDir()						/*{{{*/
       tmpdir = "/tmp";
       tmpdir = "/tmp";
 
 
    return string(tmpdir);
    return string(tmpdir);
+}
+									/*}}}*/
+std::string GetTempDir()						/*{{{*/
+{
+   return GetTempDirEnv("TMPDIR");
 }
 }
 std::string GetTempDir(std::string const &User)
 std::string GetTempDir(std::string const &User)
 {
 {
@@ -3062,13 +3067,19 @@ bool DropPrivileges()							/*{{{*/
 	 setenv("SHELL", "/bin/sh", 1);
 	 setenv("SHELL", "/bin/sh", 1);
       else
       else
 	 setenv("SHELL", pw->pw_shell, 1);
 	 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;
    return true;