Skip to content

Commit

Permalink
kde-frameworks/kwallet: backport patch from upstream to avoid unwante…
Browse files Browse the repository at this point in the history
…d migration dialogues.

Package-Manager: portage-2.2.20.1
  • Loading branch information
kensington committed Aug 24, 2015
1 parent 1f15d3d commit 00bed7e
Show file tree
Hide file tree
Showing 2 changed files with 195 additions and 0 deletions.
152 changes: 152 additions & 0 deletions kde-frameworks/kwallet/files/kwallet-5.13.0-migration.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
From 127efedd1668b546d0ac8c83655a2056d0439f29 Mon Sep 17 00:00:00 2001
From: Valentin Rusu <[email protected]>
Date: Fri, 7 Aug 2015 18:59:04 +0200
Subject: [PATCH] Stop showing the migration wizard by default

BUG:351056

If the migration wizard is needed, then add this to kwalletrc
[Migration]
showMigrationWizard=true

On systems having kwallet-pam the migration agent would also merge all the old
wallets into the default LocalWallet, as a side effect. This would avoid
wallet creation prompts, though.
---
src/runtime/kwalletd/main.cpp | 2 +-
src/runtime/kwalletd/migrationagent.cpp | 42 ++++++++++++++++++++++++++------
src/runtime/kwalletd/migrationagent.h | 5 ++--
src/runtime/kwalletd/migrationwizard.cpp | 2 +-
4 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/src/runtime/kwalletd/main.cpp b/src/runtime/kwalletd/main.cpp
index c0fecaa..62fcd3a 100644
--- a/src/runtime/kwalletd/main.cpp
+++ b/src/runtime/kwalletd/main.cpp
@@ -186,7 +186,7 @@ int main(int argc, char **argv)
aboutdata.addAuthor(i18n("Thiago Maceira"), i18n("D-Bus Interface"), "[email protected]");

KWalletD walletd;
- MigrationAgent migrationAgent(&walletd);
+ MigrationAgent migrationAgent(&walletd, hash);
KDBusService dbusUniqueInstance(KDBusService::Unique | KDBusService::NoExitOnFailure);

// NOTE: the command should be parsed only after KDBusService instantiation
diff --git a/src/runtime/kwalletd/migrationagent.cpp b/src/runtime/kwalletd/migrationagent.cpp
index 6eaeb12..192a871 100644
--- a/src/runtime/kwalletd/migrationagent.cpp
+++ b/src/runtime/kwalletd/migrationagent.cpp
@@ -34,10 +34,12 @@

#define SERVICE_KWALLETD4 "org.kde.kwalletd"
#define ENTRY_ALREADY_MIGRATED "alreadyMigrated"
+#define ENTRY_SHOW_MIGRATION_WIZARD "showMigrationWizard"

-MigrationAgent::MigrationAgent(KWalletD* kd) :
+MigrationAgent::MigrationAgent(KWalletD* kd, const char *hash) :
_kf5_daemon(kd)
, _kde4_daemon(0)
+ , _pam_hash(hash)
{
QTimer::singleShot(100, this, SLOT(migrateWallets()));
}
@@ -118,11 +120,27 @@ bool MigrationAgent::isMigrationWizardOk()
{
bool ok = false;

- MigrationWizard *wizard = new MigrationWizard(this);
- int result = wizard->exec();
- if (QDialog::Accepted == result) {
- // the user either migrated the wallets, or choose not to be prompted again
- ok = true;
+ // The migration wizard would no longer been shown by default.
+ // see BUG 351056
+ // NOTE if user wants to show the migration wizard, then he should add the
+ // following setting to the kwalletrc:
+ // [Migration]
+ // showMigrationWizard=true
+ KConfig kwalletrc("kwalletrc");
+ KConfigGroup cfg(&kwalletrc, "Migration");
+ bool showMigrationWizard = cfg.readEntry<bool>(ENTRY_SHOW_MIGRATION_WIZARD, false);
+
+ if (showMigrationWizard) {
+ MigrationWizard *wizard = new MigrationWizard(this);
+ int result = wizard->exec();
+ if (QDialog::Accepted == result) {
+ // the user either migrated the wallets, or choose not to be prompted again
+ ok = true;
+ }
+ } else {
+ if (performMigration(0, true)) {
+ qDebug() << "Migration failed.";
+ }
}

return ok;
@@ -162,7 +180,7 @@ bool MigrationAgent::isEmptyOldWallet() const {
return wallets.length() == 0;
}

-bool MigrationAgent::performMigration(WId wid)
+bool MigrationAgent::performMigration(WId wid, bool withoutWizard)
{
auto appId = i18n("KDE Wallet Migration Agent");
try {
@@ -174,7 +192,15 @@ bool MigrationAgent::performMigration(WId wid)
emit progressMessage(i18n("Migrating wallet: %1", wallet));
emit progressMessage(i18n("* Creating KF5 wallet: %1", wallet));

- int handle5 = _kf5_daemon->internalOpen(appId, wallet, false, 0, true, QString());
+ int handle5 = -1;
+ if (withoutWizard && (_pam_hash != nullptr)) {
+ // see BUG 351056 for why this hacky code
+ // If the user has several wallets, all the values will be
+ // merged into the single LocalWallet
+ handle5 = _kf5_daemon->pamOpen(KWallet::Wallet::LocalWallet(), _pam_hash, 0);
+ } else {
+ handle5 = _kf5_daemon->internalOpen(appId, wallet, false, 0, true, QString());
+ }
if (handle5 <0) {
emit progressMessage(i18n("ERROR when attempting new wallet creation. Aborting."));
return false;
diff --git a/src/runtime/kwalletd/migrationagent.h b/src/runtime/kwalletd/migrationagent.h
index 55a251d..c52509e 100644
--- a/src/runtime/kwalletd/migrationagent.h
+++ b/src/runtime/kwalletd/migrationagent.h
@@ -32,10 +32,10 @@ class KWalletD;
class MigrationAgent : public QObject {
Q_OBJECT
public:
- MigrationAgent(KWalletD* kd);
+ MigrationAgent(KWalletD* kd, const char* hash);

bool isEmptyOldWallet() const;
- bool performMigration(WId wid);
+ bool performMigration(WId wid, bool withoutWizard);

private Q_SLOTS:
void migrateWallets();
@@ -52,6 +52,7 @@ Q_SIGNALS:
private:
KWalletD *_kf5_daemon;
org::kde::KWallet *_kde4_daemon;
+ const char *_pam_hash;
};

#endif // _MIGRATIONAGENT_H_
diff --git a/src/runtime/kwalletd/migrationwizard.cpp b/src/runtime/kwalletd/migrationwizard.cpp
index b7d3f70..cdd2a92 100644
--- a/src/runtime/kwalletd/migrationwizard.cpp
+++ b/src/runtime/kwalletd/migrationwizard.cpp
@@ -58,7 +58,7 @@ public:

virtual void initializePage() {
connect(_agent, SIGNAL(progressMessage(QString)), _ui._report, SLOT(append(QString)));
- _migrationCompleted = _agent->performMigration(winId());
+ _migrationCompleted = _agent->performMigration(winId(), false);
emit completeChanged();
}

--
2.4.6

43 changes: 43 additions & 0 deletions kde-frameworks/kwallet/kwallet-5.13.0-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5

inherit kde5

DESCRIPTION="Framework providing desktop-wide storage for passwords"
LICENSE="LGPL-2+"
KEYWORDS="~amd64 ~x86"
IUSE="gpg"

RDEPEND="
$(add_frameworks_dep kconfig)
$(add_frameworks_dep kcoreaddons)
$(add_frameworks_dep kdbusaddons)
$(add_frameworks_dep ki18n)
$(add_frameworks_dep kiconthemes)
$(add_frameworks_dep knotifications)
$(add_frameworks_dep kservice)
$(add_frameworks_dep kwidgetsaddons)
$(add_frameworks_dep kwindowsystem)
dev-libs/libgcrypt:0=
dev-qt/qtdbus:5
dev-qt/qtgui:5
dev-qt/qtwidgets:5
gpg? (
$(add_kdeapps_dep gpgmepp)
app-crypt/gpgme
)
"
DEPEND="${RDEPEND}"

PATCHES=( "${FILESDIR}/${P}-migration.patch" )

src_configure() {
local mycmakeargs=(
$(cmake-utils_use_find_package gpg Gpgme)
$(cmake-utils_use_find_package gpg KF5Gpgmepp)
)
kde5_src_configure
}

0 comments on commit 00bed7e

Please sign in to comment.