]> git.saurik.com Git - apt.git/commitdiff
ExecGPGV: Pass current config state to apt-key via temp file
authorJulian Andres Klode <jak@debian.org>
Wed, 3 Aug 2016 16:50:37 +0000 (18:50 +0200)
committerJulian Andres Klode <jak@debian.org>
Wed, 3 Aug 2016 17:00:01 +0000 (19:00 +0200)
Create a temporary configuration file with a dump of our
configuration and pass that to apt-key.

LP: #1607283

apt-pkg/contrib/gpgv.cc

index 4247a1562073e983901cb997ba28d641810b3c51..8796195b8a0cb2a154ed75d21c0a9316161ba162 100644 (file)
@@ -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)
    {