Explorar o código

ExecGPGV: Pass current config state to apt-key via temp file

Create a temporary configuration file with a dump of our
configuration and pass that to apt-key.

LP: #1607283
Julian Andres Klode %!s(int64=10) %!d(string=hai) anos
pai
achega
98f884ebec
Modificáronse 1 ficheiros con 23 adicións e 0 borrados
  1. 23 0
      apt-pkg/contrib/gpgv.cc

+ 23 - 0
apt-pkg/contrib/gpgv.cc

@@ -18,6 +18,7 @@
 #include <stddef.h>
 
 #include <algorithm>
+#include <fstream>
 #include <iostream>
 #include <string>
 #include <vector>
@@ -105,6 +106,28 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
    std::vector<std::string> dataHeader;
    char * sig = NULL;
    char * data = NULL;
+   char * conf = nullptr;
+
+   // Dump the configuration so apt-key picks up the correct Dir values
+   {
+      conf = GenerateTemporaryFileTemplate("apt.conf");
+      if (conf == nullptr) {
+	 ioprintf(std::cerr, "Couldn't create tempfile names for passing config to apt-key");
+	 local_exit(EINTERNAL);
+      }
+      int confFd = mkstemp(conf);
+      if (confFd == -1) {
+	 ioprintf(std::cerr, "Couldn't create temporary file %s for passing config to apt-key", conf);
+	 local_exit(EINTERNAL);
+      }
+      local_exit.files.push_back(conf);
+
+      std::ofstream confStream(conf);
+      close(confFd);
+      _config->Dump(confStream);
+      confStream.close();
+      setenv("APT_CONFIG", conf, 1);
+   }
 
    if (releaseSignature == DETACHED)
    {