From 25724529b462cbf2f5cb0e9df106169d3ce7cfd4 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 18 Apr 2025 22:58:17 +0200 Subject: fix: init database path and name as soon as possible --- src/core/function/gpg/GpgContext.cpp | 48 ++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/core/function/gpg/GpgContext.cpp b/src/core/function/gpg/GpgContext.cpp index b5b8b9e9..5138f71a 100644 --- a/src/core/function/gpg/GpgContext.cpp +++ b/src/core/function/gpg/GpgContext.cpp @@ -59,8 +59,10 @@ class GpgContext::Impl { Impl(GpgContext *parent, const GpgContextInitArgs &args) : parent_(parent), args_(args), + db_name_(args.db_name), gpgconf_path_(Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gpgconf_path", QString{})) { + "core", "gpgme.ctx.gpgconf_path", QString{})), + database_path_(args.db_path) { init(args); } @@ -210,6 +212,7 @@ class GpgContext::Impl { void init(const GpgContextInitArgs &args) { assert(!gpgconf_path_.isEmpty()); + assert(!database_path_.isEmpty()); // init get_gpg_conf_dirs(); @@ -258,16 +261,13 @@ class GpgContext::Impl { const auto app_path = Module::RetrieveRTValueTypedOrDefault<>( "core", QString("gpgme.ctx.app_path"), QString{}); - // set custom gpg key db path - if (!args_.db_path.isEmpty()) { - database_path_ = args_.db_path; - db_name_ = args_.db_name; - } - LOG_D() << "ctx set engine info, channel: " << parent_->GetChannel() - << ", db name: " << args_.db_name << ", db path: " << args_.db_path + << ", db name: " << db_name_ << ", db path: " << database_path_ << ", app path: " << app_path; + assert(!db_name_.isEmpty()); + assert(!database_path_.isEmpty()); + auto app_path_buffer = app_path.toUtf8(); auto database_path_buffer = database_path_.toUtf8(); @@ -392,9 +392,17 @@ class GpgContext::Impl { LOG_D() << "context: " << parent_->GetChannel() << "gpgconf path: " << gpgconf_path; + auto args = QStringList{}; + + if (!HomeDirectory().isEmpty()) { + args.append({"--homedir", QDir::toNativeSeparators(HomeDirectory())}); + } + + args.append("--list-dirs"); + QProcess process; process.setProgram(gpgconf_path); - process.setArguments({"--list-dirs", "--homedir", database_path_}); + process.setArguments(args); process.start(); if (!process.waitForFinished()) { @@ -436,9 +444,13 @@ class GpgContext::Impl { LOG_D() << "get gpgconf path: " << gpgconf_path; - auto args = - QStringList{"--homedir", QDir::toNativeSeparators(HomeDirectory()), - "--kill", "gpg-agent"}; + auto args = QStringList{}; + + if (!HomeDirectory().isEmpty()) { + args.append({"--homedir", QDir::toNativeSeparators(HomeDirectory())}); + } + + args.append({"--kill", "gpg-agent"}); LOG_E() << "gpgconf kill args: " << args << "channel:" << parent_->GetChannel(); @@ -475,12 +487,16 @@ class GpgContext::Impl { return false; } - auto args = - QStringList{"--homedir", QDir::toNativeSeparators(HomeDirectory()), - "--daemon", "--enable-ssh-support"}; + auto args = QStringList{}; + + if (!HomeDirectory().isEmpty()) { + args.append({"--homedir", QDir::toNativeSeparators(HomeDirectory())}); + } + + args.append({"--daemon", "--enable-ssh-support"}); auto pinentry = DecidePinentry(); - if (pinentry != nullptr) { + if (!pinentry.trimmed().isEmpty()) { args.append({"--pinentry-program", pinentry}); } -- cgit v1.2.3