X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/da9ed163ca5ebe6dd33fda2679107bcbd3ffaa71..f814fbf4f2c78e3b9ceeeaba3cb93ed0ebbc7943:/methods/gpgv.cc diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 75335b9b8..f3277b300 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -17,6 +17,7 @@ #define GNUPGBADSIG "[GNUPG:] BADSIG" #define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY" #define GNUPGVALIDSIG "[GNUPG:] VALIDSIG" +#define GNUPGNODATA "[GNUPG:] NODATA" class GPGVMethod : public pkgAcqMethod { @@ -40,7 +41,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, { // setup a (empty) stringstream for formating the return value std::stringstream ret; - res.str(""); + ret.str(""); if (_config->FindB("Debug::Acquire::gpgv", false)) { @@ -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++] = "--ignore-time-conflict"; 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); - 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); @@ -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))); } - + 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); @@ -204,7 +211,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, } 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 @@ -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()) - 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.