]> git.saurik.com Git - apt.git/blobdiff - methods/gpgv.cc
apt-pkg/deb/debsystem.cc: add missing i18n string
[apt.git] / methods / gpgv.cc
index ba7389cbaef5a6188cfff4f48bc32ceee12ec50a..f3277b300e1dab03659c7c0c242d9b1a9c18879e 100644 (file)
@@ -17,6 +17,7 @@
 #define GNUPGBADSIG "[GNUPG:] BADSIG"
 #define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY"
 #define GNUPGVALIDSIG "[GNUPG:] VALIDSIG"
 #define GNUPGBADSIG "[GNUPG:] BADSIG"
 #define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY"
 #define GNUPGVALIDSIG "[GNUPG:] VALIDSIG"
+#define GNUPGNODATA "[GNUPG:] NODATA"
 
 class GPGVMethod : public pkgAcqMethod
 {
 
 class GPGVMethod : public pkgAcqMethod
 {
@@ -82,6 +83,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
       Args[i++] = gpgvpath.c_str();
       Args[i++] = "--status-fd";
       Args[i++] = "3";
       Args[i++] = gpgvpath.c_str();
       Args[i++] = "--status-fd";
       Args[i++] = "3";
+      Args[i++] = "--ignore-time-conflict";
       Args[i++] = "--keyring";
       Args[i++] = pubringpath.c_str();
 
       Args[i++] = "--keyring";
       Args[i++] = pubringpath.c_str();
 
@@ -120,9 +122,9 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
       // Redirect the pipe to the status fd (3)
       dup2(fd[1], 3);
 
       // Redirect the pipe to the status fd (3)
       dup2(fd[1], 3);
 
-      putenv("LANG=");
-      putenv("LC_ALL=");
-      putenv("LC_MESSAGES=");
+      putenv((char *)"LANG=");
+      putenv((char *)"LC_ALL=");
+      putenv((char *)"LC_MESSAGES=");
       execvp(gpgvpath.c_str(), (char **)Args);
              
       exit(111);
       execvp(gpgvpath.c_str(), (char **)Args);
              
       exit(111);
@@ -171,7 +173,12 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
             std::cerr << "Got NO_PUBKEY " << std::endl;
          NoPubKeySigners.push_back(string(buffer+sizeof(GNUPGPREFIX)));
       }
             std::cerr << "Got NO_PUBKEY " << std::endl;
          NoPubKeySigners.push_back(string(buffer+sizeof(GNUPGPREFIX)));
       }
-
+      if (strncmp(buffer, GNUPGNODATA, sizeof(GNUPGBADSIG)-1) == 0)
+      {
+         if (_config->FindB("Debug::Acquire::gpgv", false))
+            std::cerr << "Got NODATA! " << std::endl;
+         BadSigners.push_back(string(buffer+sizeof(GNUPGPREFIX)));
+      }
       if (strncmp(buffer, GNUPGVALIDSIG, sizeof(GNUPGVALIDSIG)-1) == 0)
       {
          char *sig = buffer + sizeof(GNUPGPREFIX);
       if (strncmp(buffer, GNUPGVALIDSIG, sizeof(GNUPGVALIDSIG)-1) == 0)
       {
          char *sig = buffer + sizeof(GNUPGPREFIX);
@@ -204,7 +211,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
    }
    else if (WEXITSTATUS(status) == 111)
    {
    }
    else if (WEXITSTATUS(status) == 111)
    {
-      ioprintf(ret, _("Could not execute '%s' to verify signature (is gnupg installed?)"), gpgvpath.c_str());
+      ioprintf(ret, _("Could not execute '%s' to verify signature (is gpgv installed?)"), gpgvpath.c_str());
       return ret.str();
    }
    else
       return ret.str();
    }
    else
@@ -257,26 +264,9 @@ bool GPGVMethod::Fetch(FetchItem *Itm)
       // least one bad signature. good signatures and NoPubKey signatures
       // happen easily when a file is signed with multiple signatures
       if(GoodSigners.empty() or !BadSigners.empty())
       // least one bad signature. good signatures and NoPubKey signatures
       // happen easily when a file is signed with multiple signatures
       if(GoodSigners.empty() or !BadSigners.empty())
-        return _error->Error(errmsg.c_str());
+        return _error->Error("%s", errmsg.c_str());
    }
       
    }
       
-   // Transfer the modification times
-   struct stat Buf;
-   if (stat(Path.c_str(),&Buf) != 0)
-      return _error->Errno("stat",_("Failed to stat %s"), Path.c_str());
-
-   struct utimbuf TimeBuf;
-   TimeBuf.actime = Buf.st_atime;
-   TimeBuf.modtime = Buf.st_mtime;
-   if (utime(Itm->DestFile.c_str(),&TimeBuf) != 0)
-      return _error->Errno("utime",_("Failed to set modification time"));
-
-   if (stat(Itm->DestFile.c_str(),&Buf) != 0)
-      return _error->Errno("stat",_("Failed to stat"));
-   
-   // Return a Done response
-   Res.LastModified = Buf.st_mtime;
-   Res.Size = Buf.st_size;
    // Just pass the raw output up, because passing it as a real data
    // structure is too difficult with the method stuff.  We keep it
    // as three separate vectors for future extensibility.
    // Just pass the raw output up, because passing it as a real data
    // structure is too difficult with the method stuff.  We keep it
    // as three separate vectors for future extensibility.