From dea872f21ff77cd58bafe0966d89d6331c8d2e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Wed, 27 Apr 2022 17:21:04 +0200 Subject: [PATCH] cpp: Support new keylist modes * lang/cpp/src/global.h (ForceExtern, LocateExternal, KeyListModeMask): New. * lang/cpp/src/context.cpp (operator<<): Add check. * lang/cpp/src/util.h (gpgme_keylist_mode_t, convert_from_gpgme_keylist_mode_t): Handle ForceExtern. * lang/cpp/tests/run-getkey.cpp (show_usage, main): Add arguments --force-extern and --locate-external. * lang/cpp/tests/run-keylist.cpp (show_usage, main): Ditto. -- GnuPG-bug-id: 5951 --- NEWS | 3 +++ lang/cpp/src/context.cpp | 1 + lang/cpp/src/global.h | 8 ++++++-- lang/cpp/src/util.h | 22 +++++++++++----------- lang/cpp/tests/run-getkey.cpp | 8 ++++++++ lang/cpp/tests/run-keylist.cpp | 8 ++++++++ 6 files changed, 37 insertions(+), 13 deletions(-) diff --git a/NEWS b/NEWS index b7ccf0b1..0807fe4e 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,9 @@ Noteworthy changes in version 1.17.2 (unreleased) cpp: RevocationReason NEW. cpp: GpgRevokeKeyEditInteractor NEW. cpp: Result::setError NEW. + cpp: KeyListMode::ForceExtern NEW. + cpp: KeyListMode::LocateExternal NEW. + cpp: KeyListMode::KeyListModeMask NEW. qt: RevokeKeyJob NEW. qt: Protocol::revokeKeyJob NEW. diff --git a/lang/cpp/src/context.cpp b/lang/cpp/src/context.cpp index 6d840f06..89bc3fd7 100644 --- a/lang/cpp/src/context.cpp +++ b/lang/cpp/src/context.cpp @@ -1849,6 +1849,7 @@ std::ostream &operator<<(std::ostream &os, KeyListMode mode) CHECK(WithTofu); CHECK(WithKeygrip); CHECK(WithSecret); + CHECK(ForceExtern); #undef CHECK return os << ')'; } diff --git a/lang/cpp/src/global.h b/lang/cpp/src/global.h index 9aafea87..1336142a 100644 --- a/lang/cpp/src/global.h +++ b/lang/cpp/src/global.h @@ -60,14 +60,18 @@ enum Engine { GpgEngine, GpgSMEngine, GpgConfEngine, UnknownEngine, AssuanEngine enum KeyListMode { Local = 0x1, Extern = 0x2, - Locate = 0x3, + Locate = Local|Extern, Signatures = 0x4, SignatureNotations = 0x8, Validate = 0x10, Ephemeral = 0x20, WithTofu = 0x40, WithKeygrip = 0x80, - WithSecret = 0x100 + WithSecret = 0x100, + ForceExtern = 0x200, + LocateExternal = Locate|ForceExtern, + + KeyListModeMask = 0x3ff }; enum SignatureMode { NormalSignatureMode, Detached, Clearsigned }; diff --git a/lang/cpp/src/util.h b/lang/cpp/src/util.h index 423973a8..cb6df0d0 100644 --- a/lang/cpp/src/util.h +++ b/lang/cpp/src/util.h @@ -89,19 +89,15 @@ static inline gpgme_keylist_mode_t add_to_gpgme_keylist_mode_t(unsigned int oldm if (newmodes & GpgME::WithSecret) { oldmode |= GPGME_KEYLIST_MODE_WITH_SECRET; } + if (newmodes & GpgME::ForceExtern) { + oldmode |= GPGME_KEYLIST_MODE_FORCE_EXTERN; + } #ifndef NDEBUG - if (newmodes & ~(GpgME::Local | - GpgME::Extern | - GpgME::Signatures | - GpgME::SignatureNotations | - GpgME::Validate | - GpgME::Ephemeral | - GpgME::WithTofu | - GpgME::WithKeygrip | - GpgME::WithSecret)) { + if (newmodes & ~(GpgME::KeyListModeMask)) { //std::cerr << "GpgME::Context: keylist mode must be one of Local, " //"Extern, Signatures, SignatureNotations, Validate, Ephemeral, WithTofu, " - //"WithKeygrip, WithSecret, or a combination thereof!" << std::endl; + //"WithKeygrip, WithSecret, ForceExtern, or a combination thereof!" + //<< std::endl; } #endif return static_cast(oldmode); @@ -137,6 +133,9 @@ static inline unsigned int convert_from_gpgme_keylist_mode_t(unsigned int mode) if (mode & GPGME_KEYLIST_MODE_VALIDATE) { result |= GpgME::Validate; } + if (mode & GPGME_KEYLIST_MODE_FORCE_EXTERN) { + result |= GpgME::ForceExtern; + } #ifndef NDEBUG if (mode & ~(GPGME_KEYLIST_MODE_LOCAL | GPGME_KEYLIST_MODE_EXTERN | @@ -146,7 +145,8 @@ static inline unsigned int convert_from_gpgme_keylist_mode_t(unsigned int mode) GPGME_KEYLIST_MODE_WITH_TOFU | GPGME_KEYLIST_MODE_WITH_KEYGRIP | GPGME_KEYLIST_MODE_EPHEMERAL | - GPGME_KEYLIST_MODE_VALIDATE)) { + GPGME_KEYLIST_MODE_VALIDATE | + GPGME_KEYLIST_MODE_FORCE_EXTERN)) { //std::cerr << "GpgME: WARNING: gpgme_get_keylist_mode() returned an unknown flag!" << std::endl; } #endif // NDEBUG diff --git a/lang/cpp/tests/run-getkey.cpp b/lang/cpp/tests/run-getkey.cpp index 35b15eb2..67ca281c 100644 --- a/lang/cpp/tests/run-getkey.cpp +++ b/lang/cpp/tests/run-getkey.cpp @@ -60,6 +60,8 @@ show_usage (int ex) " --ephemeral use GPGME_KEYLIST_MODE_EPHEMERAL\n" " --validate use GPGME_KEYLIST_MODE_VALIDATE\n" " --locate use GPGME_KEYLIST_MODE_LOCATE\n" + " --force-extern use GPGME_KEYLIST_MODE_FORCE_EXTERN\n" + " --locate-external use GPGME_KEYLIST_MODE_LOCATE_EXTERNAL\n" , stderr); exit (ex); } @@ -116,6 +118,12 @@ main (int argc, char **argv) } else if (!strcmp (*argv, "--locate")) { argc--; argv++; mode |= KeyListMode::Locate; + } else if (!strcmp (*argv, "--force-extern")) { + argc--; argv++; + mode |= KeyListMode::ForceExtern; + } else if (!strcmp (*argv, "--locate-external")) { + argc--; argv++; + mode |= KeyListMode::LocateExternal; } else if (!strncmp (*argv, "--", 2)) { show_usage (1); } diff --git a/lang/cpp/tests/run-keylist.cpp b/lang/cpp/tests/run-keylist.cpp index 54577396..9446257f 100644 --- a/lang/cpp/tests/run-keylist.cpp +++ b/lang/cpp/tests/run-keylist.cpp @@ -61,6 +61,8 @@ show_usage (int ex) " --ephemeral use GPGME_KEYLIST_MODE_EPHEMERAL\n" " --validate use GPGME_KEYLIST_MODE_VALIDATE\n" " --locate use GPGME_KEYLIST_MODE_LOCATE\n" + " --force-extern use GPGME_KEYLIST_MODE_FORCE_EXTERN\n" + " --locate-external use GPGME_KEYLIST_MODE_LOCATE_EXTERNAL\n" , stderr); exit (ex); } @@ -117,6 +119,12 @@ main (int argc, char **argv) } else if (!strcmp (*argv, "--locate")) { argc--; argv++; mode |= KeyListMode::Locate; + } else if (!strcmp (*argv, "--force-extern")) { + argc--; argv++; + mode |= KeyListMode::ForceExtern; + } else if (!strcmp (*argv, "--locate-external")) { + argc--; argv++; + mode |= KeyListMode::LocateExternal; } else if (!strncmp (*argv, "--", 2)) { show_usage (1); }