From 3dd7377e120f10576b3b4334b6149f027ceec126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Tue, 8 Sep 2020 14:55:20 +0200 Subject: [PATCH] cpp: Update key with --with-secret instead of updating it twice * lang/cpp/src/key.cpp (Key::update): Call Context::key() only once with KeyListMode::WithSecret. -- With gpg >= 2.1, get the key with --with-secret instead of first trying to get the secret key and, if that fails, getting the public key. GnuPG-bug-id: 4794 --- lang/cpp/src/key.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lang/cpp/src/key.cpp b/lang/cpp/src/key.cpp index cb0c186e..4ebd3fe0 100644 --- a/lang/cpp/src/key.cpp +++ b/lang/cpp/src/key.cpp @@ -29,6 +29,7 @@ #include "util.h" #include "tofuinfo.h" #include "context.h" +#include "engineinfo.h" #include @@ -363,11 +364,17 @@ void Key::update() KeyListMode::SignatureNotations | KeyListMode::Validate | KeyListMode::WithTofu | - KeyListMode::WithKeygrip); + KeyListMode::WithKeygrip | + KeyListMode::WithSecret); Error err; - auto newKey = ctx->key(primaryFingerprint(), err, true); - // Not secret so we get the information from the pubring. - if (newKey.isNull()) { + Key newKey; + if (GpgME::engineInfo(GpgME::GpgEngine).engineVersion() < "2.1.0") { + newKey = ctx->key(primaryFingerprint(), err, true); + // Not secret so we get the information from the pubring. + if (newKey.isNull()) { + newKey = ctx->key(primaryFingerprint(), err, false); + } + } else { newKey = ctx->key(primaryFingerprint(), err, false); } delete ctx; @@ -375,7 +382,6 @@ void Key::update() return; } swap(newKey); - return; } // static