From ce424cd4464ce46706046d581e05fbf292a54881 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 6 Jan 2006 00:02:14 +0000 Subject: * support multiple signatures --- methods/gpgv.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'methods/gpgv.cc') diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 5cb154f66..a114ad797 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -247,7 +247,11 @@ bool GPGVMethod::Fetch(FetchItem *Itm) errmsg += (*I + "\n"); } } - return _error->Error(errmsg.c_str()); + // this is only fatal if we have no good sigs or if we have at + // 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()); } // Transfer the modification times -- cgit v1.2.3 From da9ed163ca5ebe6dd33fda2679107bcbd3ffaa71 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sun, 30 Apr 2006 10:58:28 +0200 Subject: * string i18n handling fixes (debian bug #349298) --- methods/gpgv.cc | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'methods/gpgv.cc') diff --git a/methods/gpgv.cc b/methods/gpgv.cc index a114ad797..75335b9b8 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -11,6 +11,7 @@ #include #include #include +#include #define GNUPGPREFIX "[GNUPG:]" #define GNUPGBADSIG "[GNUPG:] BADSIG" @@ -20,7 +21,7 @@ class GPGVMethod : public pkgAcqMethod { private: - const char *VerifyGetSigners(const char *file, const char *outfile, + string VerifyGetSigners(const char *file, const char *outfile, vector &GoodSigners, vector &BadSigners, vector &NoPubKeySigners); @@ -32,11 +33,15 @@ class GPGVMethod : public pkgAcqMethod GPGVMethod() : pkgAcqMethod("1.0",SingleInstance | SendConfig) {}; }; -const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, +string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, vector &GoodSigners, vector &BadSigners, vector &NoPubKeySigners) { + // setup a (empty) stringstream for formating the return value + std::stringstream ret; + res.str(""); + if (_config->FindB("Debug::Acquire::gpgv", false)) { std::cerr << "inside VerifyGetSigners" << std::endl; @@ -54,9 +59,11 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, std::cerr << "Keyring path: " << pubringpath << std::endl; } - if (stat(pubringpath.c_str(), &buff) != 0) - return (string("Couldn't access keyring: ") + strerror(errno)).c_str(); - + if (stat(pubringpath.c_str(), &buff) != 0) + { + ioprintf(ret, _("Couldn't access keyring: '%s'"), strerror(errno)); + return ret.str(); + } if (pipe(fd) < 0) { return "Couldn't create pipe"; @@ -65,7 +72,7 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, pid = fork(); if (pid < 0) { - return (string("Couldn't spawn new process") + strerror(errno)).c_str(); + return string("Couldn't spawn new process") + strerror(errno); } else if (pid == 0) { @@ -189,7 +196,7 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, { if (GoodSigners.empty()) return _("Internal error: Good signature, but could not determine key fingerprint?!"); - return NULL; + return ""; } else if (WEXITSTATUS(status) == 1) { @@ -197,9 +204,8 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, } else if (WEXITSTATUS(status) == 111) { - // FIXME String concatenation considered harmful. - return (string(_("Could not execute ")) + gpgvpath + - string(_(" to verify signature (is gnupg installed?)"))).c_str(); + ioprintf(ret, _("Could not execute '%s' to verify signature (is gnupg installed?)"), gpgvpath.c_str()); + return ret.str(); } else { @@ -221,8 +227,8 @@ bool GPGVMethod::Fetch(FetchItem *Itm) URIStart(Res); // Run gpgv on file, extract contents and get the key ID of the signer - const char *msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(), - GoodSigners, BadSigners, NoPubKeySigners); + string msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(), + GoodSigners, BadSigners, NoPubKeySigners); if (GoodSigners.empty() || !BadSigners.empty() || !NoPubKeySigners.empty()) { string errmsg; -- cgit v1.2.3 From b2c220756c2c571595765ca23da48c611b88d057 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 1 May 2006 16:17:08 +0200 Subject: * methods/gpgv.cc: typo --- methods/gpgv.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'methods/gpgv.cc') diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 75335b9b8..ba7389cba 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -40,7 +40,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)) { -- cgit v1.2.3