diff options
Diffstat (limited to 'lang')
-rw-r--r-- | lang/qt/src/decryptverifyarchivejob.cpp | 12 | ||||
-rw-r--r-- | lang/qt/src/decryptverifyarchivejob.h | 14 | ||||
-rw-r--r-- | lang/qt/src/decryptverifyarchivejob_p.h | 1 | ||||
-rw-r--r-- | lang/qt/src/decryptverifyjob.cpp | 12 | ||||
-rw-r--r-- | lang/qt/src/decryptverifyjob.h | 14 | ||||
-rw-r--r-- | lang/qt/src/decryptverifyjob_p.h | 1 | ||||
-rw-r--r-- | lang/qt/src/qgpgmedecryptverifyarchivejob.cpp | 11 | ||||
-rw-r--r-- | lang/qt/src/qgpgmedecryptverifyjob.cpp | 17 | ||||
-rw-r--r-- | lang/qt/src/qgpgmeverifydetachedjob.cpp | 17 | ||||
-rw-r--r-- | lang/qt/src/qgpgmeverifyopaquejob.cpp | 17 | ||||
-rw-r--r-- | lang/qt/src/verifydetachedjob.cpp | 12 | ||||
-rw-r--r-- | lang/qt/src/verifydetachedjob.h | 14 | ||||
-rw-r--r-- | lang/qt/src/verifydetachedjob_p.h | 1 | ||||
-rw-r--r-- | lang/qt/src/verifyopaquejob.cpp | 12 | ||||
-rw-r--r-- | lang/qt/src/verifyopaquejob.h | 14 | ||||
-rw-r--r-- | lang/qt/src/verifyopaquejob_p.h | 1 | ||||
-rw-r--r-- | lang/qt/tests/run-decryptverifyarchivejob.cpp | 4 | ||||
-rw-r--r-- | lang/qt/tests/run-decryptverifyjob.cpp | 4 | ||||
-rw-r--r-- | lang/qt/tests/run-verifydetachedjob.cpp | 6 | ||||
-rw-r--r-- | lang/qt/tests/run-verifyopaquejob.cpp | 4 |
20 files changed, 180 insertions, 8 deletions
diff --git a/lang/qt/src/decryptverifyarchivejob.cpp b/lang/qt/src/decryptverifyarchivejob.cpp index b1699c3d..d427e1fd 100644 --- a/lang/qt/src/decryptverifyarchivejob.cpp +++ b/lang/qt/src/decryptverifyarchivejob.cpp @@ -56,6 +56,18 @@ bool DecryptVerifyArchiveJob::isSupported() return (gpgVersion >= "2.4.1") || (gpgVersion >= "2.2.42" && gpgVersion < "2.3.0"); } +void DecryptVerifyArchiveJob::setProcessAllSignatures (bool processAll) +{ + auto d = jobPrivate<DecryptVerifyArchiveJobPrivate>(this); + d->m_processAllSignatures = processAll; +} + +bool DecryptVerifyArchiveJob::processAllSignatures() const +{ + auto d = jobPrivate<DecryptVerifyArchiveJobPrivate>(this); + return d->m_processAllSignatures; +} + void DecryptVerifyArchiveJob::setInputFile(const QString &path) { auto d = jobPrivate<DecryptVerifyArchiveJobPrivate>(this); diff --git a/lang/qt/src/decryptverifyarchivejob.h b/lang/qt/src/decryptverifyarchivejob.h index f80170c5..3139ae66 100644 --- a/lang/qt/src/decryptverifyarchivejob.h +++ b/lang/qt/src/decryptverifyarchivejob.h @@ -60,6 +60,20 @@ public: static bool isSupported(); /** + * Enables processing of all signatures if \a processAll is true. + * + * By default, gpg (in batch mode used by GpgME) stops the verification of + * data signatures when a bad signature is encountered. This can be changed + * by setting this flag. It's equivalent to setting the context flag + * "proc-all-sigs". + * + * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or + * 2.5.1. + */ + void setProcessAllSignatures(bool processAll); + bool processAllSignatures() const; + + /** * Sets the path of the file to read the archive from. * * Used if the job is started with startIt(). diff --git a/lang/qt/src/decryptverifyarchivejob_p.h b/lang/qt/src/decryptverifyarchivejob_p.h index e0823d23..bce093db 100644 --- a/lang/qt/src/decryptverifyarchivejob_p.h +++ b/lang/qt/src/decryptverifyarchivejob_p.h @@ -43,6 +43,7 @@ struct DecryptVerifyArchiveJobPrivate : public JobPrivate { QString m_inputFilePath; QString m_outputDirectory; + bool m_processAllSignatures = false; }; } diff --git a/lang/qt/src/decryptverifyjob.cpp b/lang/qt/src/decryptverifyjob.cpp index f369f1d5..f96305b9 100644 --- a/lang/qt/src/decryptverifyjob.cpp +++ b/lang/qt/src/decryptverifyjob.cpp @@ -47,6 +47,18 @@ DecryptVerifyJob::DecryptVerifyJob(QObject *parent) DecryptVerifyJob::~DecryptVerifyJob() = default; +void DecryptVerifyJob::setProcessAllSignatures (bool processAll) +{ + auto d = jobPrivate<DecryptVerifyJobPrivate>(this); + d->m_processAllSignatures = processAll; +} + +bool DecryptVerifyJob::processAllSignatures() const +{ + auto d = jobPrivate<DecryptVerifyJobPrivate>(this); + return d->m_processAllSignatures; +} + void DecryptVerifyJob::setInputFile(const QString &path) { auto d = jobPrivate<DecryptVerifyJobPrivate>(this); diff --git a/lang/qt/src/decryptverifyjob.h b/lang/qt/src/decryptverifyjob.h index 710fc80e..73dbea15 100644 --- a/lang/qt/src/decryptverifyjob.h +++ b/lang/qt/src/decryptverifyjob.h @@ -82,6 +82,20 @@ public: ~DecryptVerifyJob() override; /** + * Enables processing of all signatures if \a processAll is true. + * + * By default, gpg (in batch mode used by GpgME) stops the verification of + * data signatures when a bad signature is encountered. This can be changed + * by setting this flag. It's equivalent to setting the context flag + * "proc-all-sigs". + * + * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or + * 2.5.1. + */ + void setProcessAllSignatures(bool processAll); + bool processAllSignatures() const; + + /** * Sets the path of the file to decrypt (and verify). * * Used if the job is started with startIt(). diff --git a/lang/qt/src/decryptverifyjob_p.h b/lang/qt/src/decryptverifyjob_p.h index bbd30b59..10701da1 100644 --- a/lang/qt/src/decryptverifyjob_p.h +++ b/lang/qt/src/decryptverifyjob_p.h @@ -43,6 +43,7 @@ struct DecryptVerifyJobPrivate : public JobPrivate { QString m_inputFilePath; QString m_outputFilePath; + bool m_processAllSignatures = false; }; } diff --git a/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp b/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp index eda4bfd8..10f07e53 100644 --- a/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp +++ b/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp @@ -119,7 +119,8 @@ static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify_from_io_device( static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify_from_file_name(Context *ctx, const QString &inputFile, - const QString &outputDirectory) + const QString &outputDirectory, + bool processAllSignatures) { Data indata; #ifdef Q_OS_WIN @@ -128,6 +129,9 @@ static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify_from_file_name( indata.setFileName(QFile::encodeName(inputFile).constData()); #endif + if (processAllSignatures) { + ctx->setFlag("proc-all-sigs", "1"); + } return decrypt_verify(ctx, indata, outputDirectory); } @@ -137,6 +141,9 @@ GpgME::Error QGpgMEDecryptVerifyArchiveJob::start(const std::shared_ptr<QIODevic return Error::fromCode(GPG_ERR_INV_VALUE); } + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&decrypt_verify_from_io_device, std::placeholders::_1, std::placeholders::_2, @@ -153,7 +160,7 @@ GpgME::Error QGpgMEDecryptVerifyArchiveJobPrivate::startIt() } q->run([=](Context *ctx) { - return decrypt_verify_from_file_name(ctx, m_inputFilePath, m_outputDirectory); + return decrypt_verify_from_file_name(ctx, m_inputFilePath, m_outputDirectory, m_processAllSignatures); }); return {}; diff --git a/lang/qt/src/qgpgmedecryptverifyjob.cpp b/lang/qt/src/qgpgmedecryptverifyjob.cpp index 24930693..e8d2ad4e 100644 --- a/lang/qt/src/qgpgmedecryptverifyjob.cpp +++ b/lang/qt/src/qgpgmedecryptverifyjob.cpp @@ -145,7 +145,8 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_qba(Context *ctx, cons static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context *ctx, const QString &inputFilePath, - const QString &outputFilePath) + const QString &outputFilePath, + bool processAllSignatures) { Data indata; #ifdef Q_OS_WIN @@ -166,6 +167,9 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context outdata.setFileName(QFile::encodeName(partFileGuard.tempFileName()).constData()); #endif + if (processAllSignatures) { + ctx->setFlag("proc-all-sigs", "1"); + } const auto results = ctx->decryptAndVerify(indata, outdata); const auto &decryptionResult = results.first; const auto &verificationResult = results.second; @@ -182,18 +186,27 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context Error QGpgMEDecryptVerifyJob::start(const QByteArray &cipherText) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&decrypt_verify_qba, std::placeholders::_1, cipherText)); return Error(); } void QGpgMEDecryptVerifyJob::start(const std::shared_ptr<QIODevice> &cipherText, const std::shared_ptr<QIODevice> &plainText) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&decrypt_verify, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), cipherText, plainText); } std::pair<GpgME::DecryptionResult, GpgME::VerificationResult> QGpgME::QGpgMEDecryptVerifyJob::exec(const QByteArray &cipherText, QByteArray &plainText) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } const result_type r = decrypt_verify_qba(context(), cipherText); plainText = std::get<2>(r); return std::make_pair(std::get<0>(r), std::get<1>(r)); @@ -206,7 +219,7 @@ GpgME::Error QGpgMEDecryptVerifyJobPrivate::startIt() } q->run([=](Context *ctx) { - return decrypt_verify_from_filename(ctx, m_inputFilePath, m_outputFilePath); + return decrypt_verify_from_filename(ctx, m_inputFilePath, m_outputFilePath, m_processAllSignatures); }); return {}; diff --git a/lang/qt/src/qgpgmeverifydetachedjob.cpp b/lang/qt/src/qgpgmeverifydetachedjob.cpp index 1f6e47cd..91d89f96 100644 --- a/lang/qt/src/qgpgmeverifydetachedjob.cpp +++ b/lang/qt/src/qgpgmeverifydetachedjob.cpp @@ -131,7 +131,8 @@ static QGpgMEVerifyDetachedJob::result_type verify_detached_qba(Context *ctx, co static QGpgMEVerifyDetachedJob::result_type verify_from_filename(Context *ctx, const QString &signatureFilePath, - const QString &signedFilePath) + const QString &signedFilePath, + bool processAllSignatures) { Data signatureData; #ifdef Q_OS_WIN @@ -147,6 +148,9 @@ static QGpgMEVerifyDetachedJob::result_type verify_from_filename(Context *ctx, signedData.setFileName(QFile::encodeName(signedFilePath).constData()); #endif + if (processAllSignatures) { + ctx->setFlag("proc-all-sigs", "1"); + } const auto verificationResult = ctx->verifyDetachedSignature(signatureData, signedData); Error ae; @@ -156,18 +160,27 @@ static QGpgMEVerifyDetachedJob::result_type verify_from_filename(Context *ctx, Error QGpgMEVerifyDetachedJob::start(const QByteArray &signature, const QByteArray &signedData) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&verify_detached_qba, std::placeholders::_1, signature, signedData)); return Error(); } void QGpgMEVerifyDetachedJob::start(const std::shared_ptr<QIODevice> &signature, const std::shared_ptr<QIODevice> &signedData) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&verify_detached, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), signature, signedData); } GpgME::VerificationResult QGpgME::QGpgMEVerifyDetachedJob::exec(const QByteArray &signature, const QByteArray &signedData) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } const result_type r = verify_detached_qba(context(), signature, signedData); return std::get<0>(r); } @@ -179,7 +192,7 @@ GpgME::Error QGpgMEVerifyDetachedJobPrivate::startIt() } q->run([=](Context *ctx) { - return verify_from_filename(ctx, m_signatureFilePath, m_signedFilePath); + return verify_from_filename(ctx, m_signatureFilePath, m_signedFilePath, m_processAllSignatures); }); return {}; diff --git a/lang/qt/src/qgpgmeverifyopaquejob.cpp b/lang/qt/src/qgpgmeverifyopaquejob.cpp index 19e61e37..0cca9f72 100644 --- a/lang/qt/src/qgpgmeverifyopaquejob.cpp +++ b/lang/qt/src/qgpgmeverifyopaquejob.cpp @@ -136,7 +136,8 @@ static QGpgMEVerifyOpaqueJob::result_type verify_opaque_qba(Context *ctx, const static QGpgMEVerifyOpaqueJob::result_type verify_from_filename(Context *ctx, const QString &inputFilePath, - const QString &outputFilePath) + const QString &outputFilePath, + bool processAllSignatures) { Data indata; #ifdef Q_OS_WIN @@ -157,6 +158,9 @@ static QGpgMEVerifyOpaqueJob::result_type verify_from_filename(Context *ctx, outdata.setFileName(QFile::encodeName(partFileGuard.tempFileName()).constData()); #endif + if (processAllSignatures) { + ctx->setFlag("proc-all-sigs", "1"); + } const auto verificationResult = ctx->verifyOpaqueSignature(indata, outdata); if (!verificationResult.error().code()) { @@ -171,17 +175,26 @@ static QGpgMEVerifyOpaqueJob::result_type verify_from_filename(Context *ctx, Error QGpgMEVerifyOpaqueJob::start(const QByteArray &signedData) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&verify_opaque_qba, std::placeholders::_1, signedData)); return Error(); } void QGpgMEVerifyOpaqueJob::start(const std::shared_ptr<QIODevice> &signedData, const std::shared_ptr<QIODevice> &plainText) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } run(std::bind(&verify_opaque, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), signedData, plainText); } GpgME::VerificationResult QGpgME::QGpgMEVerifyOpaqueJob::exec(const QByteArray &signedData, QByteArray &plainText) { + if (processAllSignatures()) { + context()->setFlag("proc-all-sigs", "1"); + } const result_type r = verify_opaque_qba(context(), signedData); plainText = std::get<1>(r); return std::get<0>(r); @@ -194,7 +207,7 @@ GpgME::Error QGpgMEVerifyOpaqueJobPrivate::startIt() } q->run([=](Context *ctx) { - return verify_from_filename(ctx, m_inputFilePath, m_outputFilePath); + return verify_from_filename(ctx, m_inputFilePath, m_outputFilePath, m_processAllSignatures); }); return {}; diff --git a/lang/qt/src/verifydetachedjob.cpp b/lang/qt/src/verifydetachedjob.cpp index 11e630c1..68fe7f21 100644 --- a/lang/qt/src/verifydetachedjob.cpp +++ b/lang/qt/src/verifydetachedjob.cpp @@ -47,6 +47,18 @@ VerifyDetachedJob::VerifyDetachedJob(QObject *parent) VerifyDetachedJob::~VerifyDetachedJob() = default; +void VerifyDetachedJob::setProcessAllSignatures (bool processAll) +{ + auto d = jobPrivate<VerifyDetachedJobPrivate>(this); + d->m_processAllSignatures = processAll; +} + +bool VerifyDetachedJob::processAllSignatures() const +{ + auto d = jobPrivate<VerifyDetachedJobPrivate>(this); + return d->m_processAllSignatures; +} + void VerifyDetachedJob::setSignatureFile(const QString &path) { auto d = jobPrivate<VerifyDetachedJobPrivate>(this); diff --git a/lang/qt/src/verifydetachedjob.h b/lang/qt/src/verifydetachedjob.h index c8c516bf..b5b668e3 100644 --- a/lang/qt/src/verifydetachedjob.h +++ b/lang/qt/src/verifydetachedjob.h @@ -79,6 +79,20 @@ public: ~VerifyDetachedJob() override; /** + * Enables processing of all signatures if \a processAll is true. + * + * By default, gpg (in batch mode used by GpgME) stops the verification of + * data signatures when a bad signature is encountered. This can be changed + * by setting this flag. It's equivalent to setting the context flag + * "proc-all-sigs". + * + * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or + * 2.5.1. + */ + void setProcessAllSignatures(bool processAll); + bool processAllSignatures() const; + + /** * Sets the path of the file containing the signature to verify. * * Used if the job is started with startIt(). diff --git a/lang/qt/src/verifydetachedjob_p.h b/lang/qt/src/verifydetachedjob_p.h index 1fedc8fb..cc594210 100644 --- a/lang/qt/src/verifydetachedjob_p.h +++ b/lang/qt/src/verifydetachedjob_p.h @@ -43,6 +43,7 @@ struct VerifyDetachedJobPrivate : public JobPrivate { QString m_signatureFilePath; QString m_signedFilePath; + bool m_processAllSignatures = false; }; } diff --git a/lang/qt/src/verifyopaquejob.cpp b/lang/qt/src/verifyopaquejob.cpp index 1ae8e75b..dced4595 100644 --- a/lang/qt/src/verifyopaquejob.cpp +++ b/lang/qt/src/verifyopaquejob.cpp @@ -47,6 +47,18 @@ VerifyOpaqueJob::VerifyOpaqueJob(QObject *parent) VerifyOpaqueJob::~VerifyOpaqueJob() = default; +void VerifyOpaqueJob::setProcessAllSignatures (bool processAll) +{ + auto d = jobPrivate<VerifyOpaqueJobPrivate>(this); + d->m_processAllSignatures = processAll; +} + +bool VerifyOpaqueJob::processAllSignatures() const +{ + auto d = jobPrivate<VerifyOpaqueJobPrivate>(this); + return d->m_processAllSignatures; +} + void VerifyOpaqueJob::setInputFile(const QString &path) { auto d = jobPrivate<VerifyOpaqueJobPrivate>(this); diff --git a/lang/qt/src/verifyopaquejob.h b/lang/qt/src/verifyopaquejob.h index 8dd73141..e006886b 100644 --- a/lang/qt/src/verifyopaquejob.h +++ b/lang/qt/src/verifyopaquejob.h @@ -81,6 +81,20 @@ public: ~VerifyOpaqueJob() override; /** + * Enables processing of all signatures if \a processAll is true. + * + * By default, gpg (in batch mode used by GpgME) stops the verification of + * data signatures when a bad signature is encountered. This can be changed + * by setting this flag. It's equivalent to setting the context flag + * "proc-all-sigs". + * + * This is only supported for OpenPGP and requires GnuPG 2.2.45, 2.4.6, or + * 2.5.1. + */ + void setProcessAllSignatures(bool processAll); + bool processAllSignatures() const; + + /** * Sets the path of the file to verify. * * Used if the job is started with startIt(). diff --git a/lang/qt/src/verifyopaquejob_p.h b/lang/qt/src/verifyopaquejob_p.h index 3dce6dec..9686f01c 100644 --- a/lang/qt/src/verifyopaquejob_p.h +++ b/lang/qt/src/verifyopaquejob_p.h @@ -43,6 +43,7 @@ struct VerifyOpaqueJobPrivate : public JobPrivate { QString m_inputFilePath; QString m_outputFilePath; + bool m_processAllSignatures = false; }; } diff --git a/lang/qt/tests/run-decryptverifyarchivejob.cpp b/lang/qt/tests/run-decryptverifyarchivejob.cpp index 36d023ec..6d5615c0 100644 --- a/lang/qt/tests/run-decryptverifyarchivejob.cpp +++ b/lang/qt/tests/run-decryptverifyarchivejob.cpp @@ -56,6 +56,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s) } struct CommandLineOptions { + bool processAllSignatures = false; QString outputDirectory; QString archiveName; }; @@ -69,6 +70,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.addHelpOption(); parser.addOptions({ {{"C", "directory"}, "Extract the files into the directory DIRECTORY.", "DIRECTORY"}, + {"process-all-signatures", "Don't stop signature checking after bad signature."}, }); parser.addPositionalArgument("archive", "The archive to decrypt and extract"); @@ -79,6 +81,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.showHelp(1); } + options.processAllSignatures = parser.isSet("process-all-signatures"); options.outputDirectory = parser.value("directory"); options.archiveName = args.first(); @@ -104,6 +107,7 @@ int main(int argc, char **argv) std::cerr << "Error: Could not create job" << std::endl; return 1; } + job->setProcessAllSignatures(options.processAllSignatures); job->setInputFile(options.archiveName); job->setOutputDirectory(options.outputDirectory); QObject::connect(job, &QGpgME::DecryptVerifyArchiveJob::result, &app, [](const GpgME::DecryptionResult &decryptionResult, const GpgME::VerificationResult &verificationResult, const QString &auditLog, const GpgME::Error &) { diff --git a/lang/qt/tests/run-decryptverifyjob.cpp b/lang/qt/tests/run-decryptverifyjob.cpp index da8ec9fe..805bad68 100644 --- a/lang/qt/tests/run-decryptverifyjob.cpp +++ b/lang/qt/tests/run-decryptverifyjob.cpp @@ -58,6 +58,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s) } struct CommandLineOptions { + bool processAllSignatures = false; QString inputFile; QString outputFile; std::chrono::seconds cancelTimeout{0}; @@ -73,6 +74,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.addOptions({ {{"o", "output"}, "Write output to FILE.", "FILE"}, {"cancel-after", "Cancel the running job after SECONDS seconds.", "SECONDS"}, + {"process-all-signatures", "Don't stop signature checking after bad signature."}, }); parser.addPositionalArgument("file", "File to decrypt", "FILE"); @@ -83,6 +85,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.showHelp(1); } + options.processAllSignatures = parser.isSet("process-all-signatures"); options.inputFile = args.front(); options.outputFile = parser.value("output"); if (parser.isSet("cancel-after")) { @@ -146,6 +149,7 @@ int main(int argc, char **argv) std::shared_ptr<QFile> input; GpgME::Error err; + job->setProcessAllSignatures(options.processAllSignatures); if (output) { input.reset(new QFile{options.inputFile}); input->open(QIODevice::ReadOnly); diff --git a/lang/qt/tests/run-verifydetachedjob.cpp b/lang/qt/tests/run-verifydetachedjob.cpp index 60ba5470..17a719e9 100644 --- a/lang/qt/tests/run-verifydetachedjob.cpp +++ b/lang/qt/tests/run-verifydetachedjob.cpp @@ -56,6 +56,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s) } struct CommandLineOptions { + bool processAllSignatures = false; QString signatureFile; QString signedFile; }; @@ -67,6 +68,9 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) QCommandLineParser parser; parser.setApplicationDescription("Test program for VerifyDetachedJob"); parser.addHelpOption(); + parser.addOptions({ + {"process-all-signatures", "Don't stop signature checking after bad signature."}, + }); parser.addPositionalArgument("signature", "Detached SIGNATURE to verify", "SIGNATURE"); parser.addPositionalArgument("signed file", "FILE containing the signed data", "FILE"); @@ -77,6 +81,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.showHelp(1); } + options.processAllSignatures = parser.isSet("process-all-signatures"); options.signatureFile = args[0]; options.signedFile = args[1]; @@ -110,6 +115,7 @@ int main(int argc, char **argv) std::shared_ptr<QFile> input; GpgME::Error err; + job->setProcessAllSignatures(options.processAllSignatures); job->setSignatureFile(options.signatureFile); job->setSignedFile(options.signedFile); err = job->startIt(); diff --git a/lang/qt/tests/run-verifyopaquejob.cpp b/lang/qt/tests/run-verifyopaquejob.cpp index 09578430..a3245b4f 100644 --- a/lang/qt/tests/run-verifyopaquejob.cpp +++ b/lang/qt/tests/run-verifyopaquejob.cpp @@ -57,6 +57,7 @@ std::ostream &operator<<(std::ostream &os, const QString &s) } struct CommandLineOptions { + bool processAllSignatures = false; QString inputFile; QString outputFile; std::chrono::seconds cancelTimeout{0}; @@ -72,6 +73,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.addOptions({ {{"o", "output"}, "Write output to FILE.", "FILE"}, {"cancel-after", "Cancel the running job after SECONDS seconds.", "SECONDS"}, + {"process-all-signatures", "Don't stop signature checking after bad signature."}, }); parser.addPositionalArgument("file", "File to verify", "FILE"); @@ -82,6 +84,7 @@ CommandLineOptions parseCommandLine(const QStringList &arguments) parser.showHelp(1); } + options.processAllSignatures = parser.isSet("process-all-signatures"); options.inputFile = args.front(); options.outputFile = parser.value("output"); if (parser.isSet("cancel-after")) { @@ -143,6 +146,7 @@ int main(int argc, char **argv) std::shared_ptr<QFile> input; GpgME::Error err; + job->setProcessAllSignatures(options.processAllSignatures); if (output) { input.reset(new QFile{options.inputFile}); input->open(QIODevice::ReadOnly); |