]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/gpgv.cc
Merge commit 'e2073b0276226b625897ef475f225bf8f508719e' as 'triehash'
[apt.git] / apt-pkg / contrib / gpgv.cc
index 4247a1562073e983901cb997ba28d641810b3c51..941f901e8ffedd832bf4cff2a47b73a2bca283d5 100644 (file)
@@ -18,6 +18,7 @@
 #include <stddef.h>
 
 #include <algorithm>
+#include <fstream>
 #include <iostream>
 #include <string>
 #include <vector>
@@ -47,7 +48,7 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG,
              int const &statusfd, int fd[2], std::string const &key)
 {
    #define EINTERNAL 111
-   std::string const aptkey = _config->Find("Dir::Bin::apt-key", "/usr/bin/apt-key");
+   std::string const aptkey = _config->Find("Dir::Bin::apt-key", CMAKE_INSTALL_FULL_BINDIR "/apt-key");
 
    bool const Debug = _config->FindB("Debug::Acquire::gpgv", false);
    struct exiter {
@@ -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)
    {