Skip to content

Commit

Permalink
Merge branch 'jb27876' into 'master'
Browse files Browse the repository at this point in the history
[libsignon] Don't emit QObject::destroyed() within Identity::destroy()

See merge request mer-core/libsignon!6
  • Loading branch information
chriadam committed Jun 10, 2020
2 parents e8b58a5 + 565d9b6 commit 7f1ae3d
Show file tree
Hide file tree
Showing 12 changed files with 226 additions and 26 deletions.
4 changes: 2 additions & 2 deletions rpm/0001-disable-multilib.patch
@@ -1,7 +1,7 @@
From fdb64a1a51275531a09c1abab5d23f9f1f5cb6c3 Mon Sep 17 00:00:00 2001
From 951a9f2732bd071a0a37c458a16c580a0fff576c Mon Sep 17 00:00:00 2001
From: Robin Burchell <robin+git@viroteck.net>
Date: Thu, 11 Jul 2013 08:51:54 +0000
Subject: [PATCH 1/9] disable multilib
Subject: [PATCH 01/10] disable multilib

Mer doesn't use it.
---
Expand Down
4 changes: 2 additions & 2 deletions rpm/0002-fix-documentation-path.patch
@@ -1,7 +1,7 @@
From 00a7860b4c16c1f63f62dfba874ecf57ed407e13 Mon Sep 17 00:00:00 2001
From 3ec1fc862a2568a38e30045db0c182eb7ebcf81f Mon Sep 17 00:00:00 2001
From: Robin Burchell <robin+git@viroteck.net>
Date: Thu, 11 Jul 2013 08:53:06 +0000
Subject: [PATCH 2/9] fix documentation path
Subject: [PATCH 02/10] fix documentation path

---
lib/SignOn/doc/doc.pri | 2 +-
Expand Down
6 changes: 3 additions & 3 deletions rpm/0003-Install-tests-add-tests-definition.patch
@@ -1,7 +1,7 @@
From e713ef83d6db2222b11d0786d9e9de4b0293428b Mon Sep 17 00:00:00 2001
From b9eff71cd799f388cc1755f9e5da41a828b3fa92 Mon Sep 17 00:00:00 2001
From: Martin Kampas <martin.kampas@tieto.com>
Date: Mon, 18 Mar 2013 16:50:19 +0100
Subject: [PATCH 3/9] Install tests, add tests definition
Subject: [PATCH 03/10] Install tests, add tests definition

Signed-off-by: Martin Kampas <martin.kampas@tieto.com>
---
Expand Down Expand Up @@ -43,7 +43,7 @@ index 0000000..fbaef6e
+INSTALLS += tests_definition
diff --git a/tests/create-tests-definition.sh b/tests/create-tests-definition.sh
new file mode 100755
index 0000000..1e35b92
index 0000000..bd5550e
--- /dev/null
+++ b/tests/create-tests-definition.sh
@@ -0,0 +1,145 @@
Expand Down
4 changes: 2 additions & 2 deletions rpm/0004-Set-permissions-on-config-dir-correctly.patch
@@ -1,7 +1,7 @@
From 4b94fac952a1cbd8fa7f2f068e220f09f948ae3d Mon Sep 17 00:00:00 2001
From 829a8e057673fb7da1c125ed4e145eb46b2559a4 Mon Sep 17 00:00:00 2001
From: Chris Adams <chris.adams@jollamobile.com>
Date: Thu, 20 Mar 2014 21:44:25 +1000
Subject: [PATCH 4/9] Set permissions on config dir correctly
Subject: [PATCH 04/10] Set permissions on config dir correctly

Also ensure that signond is launched with privileged permissions
---
Expand Down
@@ -1,7 +1,7 @@
From f0bed51ad5d4e1b1642dbdc5b62c7b835bb2a315 Mon Sep 17 00:00:00 2001
From 4cb23e5f68c2ed7d13ce525ca763db7039605c9d Mon Sep 17 00:00:00 2001
From: Chris Adams <chris.adams@jollamobile.com>
Date: Fri, 6 Feb 2015 15:39:16 +1000
Subject: [PATCH 5/9] Guard PendingCall against deletion by connected slots
Subject: [PATCH 05/10] Guard PendingCall against deletion by connected slots

This commit uses QPointer to guard the PendingCall object (and the
QDBusPendingCallWatcher associated with it).
Expand Down
@@ -1,7 +1,7 @@
From 79a4af5f18febbd448ffe66fb27b105d44172a77 Mon Sep 17 00:00:00 2001
From 11448b40f19f3b5e0b0a981ea16335d3ec7b3a38 Mon Sep 17 00:00:00 2001
From: Chris Adams <chris.adams@jollamobile.com>
Date: Tue, 19 Jun 2018 15:06:11 +1000
Subject: [PATCH 6/9] Always use P2P DBus if enabled. Contributes to JB#42126
Subject: [PATCH 06/10] Always use P2P DBus if enabled. Contributes to JB#42126

This commit ensures that if the enable-p2p config is set, we don't
ever allow falling back to the session bus to service signon requests,
Expand Down
@@ -1,7 +1,8 @@
From 2082fcd65a3021faf3a29de66b9c8ce3dd58b192 Mon Sep 17 00:00:00 2001
From a41bfe510beb175c88908b807a3aacfa694e928b Mon Sep 17 00:00:00 2001
From: Chris Adams <chris.adams@jollamobile.com>
Date: Tue, 19 Jun 2018 13:15:36 +1000
Subject: [PATCH 7/9] Use p2p dbus for signon-ui flows. Contributes to JB#42126
Subject: [PATCH 07/10] Use p2p dbus for signon-ui flows. Contributes to
JB#42126

---
src/signond/signonidentity.cpp | 26 ++++++++++++++++++++--
Expand All @@ -11,7 +12,7 @@ Subject: [PATCH 7/9] Use p2p dbus for signon-ui flows. Contributes to JB#42126
4 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/src/signond/signonidentity.cpp b/src/signond/signonidentity.cpp
index ce1ecfb..259b70a 100644
index a143c22..f0b9b56 100644
--- a/src/signond/signonidentity.cpp
+++ b/src/signond/signonidentity.cpp
@@ -25,6 +25,9 @@
Expand All @@ -24,21 +25,22 @@ index ce1ecfb..259b70a 100644

#include "signond-common.h"
#include "signonidentity.h"
@@ -84,10 +87,11 @@ private:
@@ -84,11 +87,12 @@ private:
SignonIdentity::SignonIdentity(quint32 id, int timeout,
SignonDaemon *parent):
SignonDisposable(timeout, parent),
+ m_id(id),
+ m_p2pc(QStringLiteral("identity.dbus.connection")),
+ m_signonui(NULL),
m_pInfo(NULL)
m_pInfo(NULL),
m_destroyed(false)
{
- m_id = id;
-
(void)new SignonIdentityAdaptor(this);

/*
@@ -98,10 +102,28 @@ SignonIdentity::SignonIdentity(quint32 id, int timeout,
@@ -99,10 +103,28 @@ SignonIdentity::SignonIdentity(quint32 id, int timeout,
+ QString::number(incr++, 16);
setObjectName(objectName);

Expand Down Expand Up @@ -68,7 +70,7 @@ index ce1ecfb..259b70a 100644
/* Watch for credential updates happening outside of this object (this can
* happen on request of authentication plugins) */
diff --git a/src/signond/signonidentity.h b/src/signond/signonidentity.h
index 9ec9be4..ba28a07 100644
index f6321f3..885cebd 100644
--- a/src/signond/signonidentity.h
+++ b/src/signond/signonidentity.h
@@ -94,6 +94,7 @@ private:
Expand All @@ -78,7 +80,7 @@ index 9ec9be4..ba28a07 100644
+ QDBusConnection m_p2pc;
SignonUiAdaptor *m_signonui;
SignonIdentityInfo *m_pInfo;
}; //class SignonDaemon
bool m_destroyed;
diff --git a/src/signond/signonsessioncore.cpp b/src/signond/signonsessioncore.cpp
index b0510db..dca7880 100644
--- a/src/signond/signonsessioncore.cpp
Expand Down
4 changes: 2 additions & 2 deletions rpm/0008-Initialize-secrets-db-on-start.-Fixes-JB-34557.patch
@@ -1,7 +1,7 @@
From ca6f639ff36bf35f56dc8466852196c9bbc09340 Mon Sep 17 00:00:00 2001
From 664c973ec9a7882aa5f0468e029c6bb16910958b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marko=20Kentt=C3=A4l=C3=A4?= <marko.kenttala@jolla.com>
Date: Fri, 26 Oct 2018 11:47:24 +0300
Subject: [PATCH 8/9] Initialize secrets db on start. Fixes JB#34557
Subject: [PATCH 08/10] Initialize secrets db on start. Fixes JB#34557

---
libexec/libexec.pro | 12 ++++++++++
Expand Down
@@ -1,7 +1,7 @@
From 909140c002bcfec081b3b3447ef51303bd11997b Mon Sep 17 00:00:00 2001
From 967093ee60da4b046e7b5b9645ff54d330eaa441 Mon Sep 17 00:00:00 2001
From: Chris Adams <chris.adams@jollamobile.com>
Date: Mon, 22 Jul 2019 14:00:51 +1000
Subject: [PATCH 9/9] Treat empty ACL as synonym for "*". Contributes to
Subject: [PATCH 09/10] Treat empty ACL as synonym for "*". Contributes to
JB#27876

Prior to 03dd20ef043bd5c1035387998c59312ccc704a59 the ACL was
Expand Down
196 changes: 196 additions & 0 deletions rpm/0010-Use-P2P-DBus-server-for-tests-if-built-in-ENABLE_P2P.patch
@@ -0,0 +1,196 @@
From 3e61cde4207e67405833c64c0b3ad205752f7896 Mon Sep 17 00:00:00 2001
From: Chris Adams <chris.adams@jollamobile.com>
Date: Wed, 20 May 2020 16:05:15 +1000
Subject: [PATCH 10/10] Use P2P DBus server for tests if built in ENABLE_P2P
mode

Also increase timeout of timeouts test, to allow dbus timeout
to trigger first (required for successful notification of identity
removal from daemon).
---
.../libsignon-qt-tests/libsignon-qt-tests.pro | 5 +++
tests/libsignon-qt-tests/signon-ui.cpp | 40 ++++++++++++++-----
tests/libsignon-qt-tests/signon-ui.h | 10 ++---
tests/libsignon-qt-tests/ssotestclient.cpp | 7 ++++
tests/signond-tests/timeouts.cpp | 7 +++-
5 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/tests/libsignon-qt-tests/libsignon-qt-tests.pro b/tests/libsignon-qt-tests/libsignon-qt-tests.pro
index 43f2d59..7d8afed 100644
--- a/tests/libsignon-qt-tests/libsignon-qt-tests.pro
+++ b/tests/libsignon-qt-tests/libsignon-qt-tests.pro
@@ -15,6 +15,11 @@ LIBS *= -lsignon-qt5
QMAKE_LIBDIR += $${TOP_BUILD_DIR}/lib/SignOn
QMAKE_RPATHDIR = $${QMAKE_LIBDIR}

+CONFIG(enable-p2p) {
+ DEFINES += ENABLE_P2P
+ PKGCONFIG += dbus-1
+}
+
SOURCES += \
testauthsession.cpp \
testthread.cpp \
diff --git a/tests/libsignon-qt-tests/signon-ui.cpp b/tests/libsignon-qt-tests/signon-ui.cpp
index 6b665d2..73e3117 100644
--- a/tests/libsignon-qt-tests/signon-ui.cpp
+++ b/tests/libsignon-qt-tests/signon-ui.cpp
@@ -31,22 +31,43 @@
static const char serviceName[] = "com.nokia.singlesignonui";
static const char objectPath[] = "/SignonUi";

+#ifdef ENABLE_P2P
+SignOnUI::SignOnUI(QDBusServer *p2pBus, QObject *parent):
+ QObject(parent),
+ QDBusContext(),
+ m_replyPassword("SSOUI default password"),
+ m_delay(0)
+{
+ QObject::connect(p2pBus, &QDBusServer::newConnection,
+ this, [this] (const QDBusConnection &connection) {
+ QDBusConnection clientConnection(connection);
+ clientConnection.registerObject(
+ QLatin1String(objectPath),
+ QLatin1String(serviceName),
+ this,
+ QDBusConnection::ExportAllContents);
+ clientConnection.registerService(QLatin1String(serviceName));
+ });
+}
+#else
SignOnUI::SignOnUI(QDBusConnection connection, QObject *parent):
QObject(parent),
QDBusContext(),
- m_connection(connection),
m_replyPassword("SSOUI default password"),
m_delay(0)
{
connection.registerObject(QLatin1String(objectPath), this,
QDBusConnection::ExportAllContents);
connection.registerService(QLatin1String(serviceName));
+ connect(this, &QObject::destroyed, [&connection] {
+ connection.unregisterService(QLatin1String(serviceName));
+ connection.unregisterObject(QLatin1String(objectPath));
+ });
}
+#endif

SignOnUI::~SignOnUI()
{
- m_connection.unregisterService(QLatin1String(serviceName));
- m_connection.unregisterObject(QLatin1String(objectPath));
}

QVariantMap SignOnUI::clientData() const
@@ -89,11 +110,15 @@ QVariantMap SignOnUI::queryDialog(const QVariantMap &parameters)
}
result.insert(SSOUI_KEY_ERROR, SignOn::QUERY_ERROR_NONE);

- m_reply = message().createReply(result);
+ QDBusMessage reply = message().createReply(result);

setDelayedReply(true);

- QTimer::singleShot(m_delay, this, SLOT(processQueryDialog()));
+ QDBusConnection conn(connection());
+ QTimer::singleShot(m_delay, this, [conn, reply] {
+ conn.send(reply);
+ });
+
return QVariantMap();
}

@@ -102,8 +127,3 @@ QVariantMap SignOnUI::refreshDialog(const QVariantMap &parameters)
qDebug() << Q_FUNC_INFO << parameters;
return parameters;
}
-
-void SignOnUI::processQueryDialog()
-{
- m_connection.send(m_reply);
-}
diff --git a/tests/libsignon-qt-tests/signon-ui.h b/tests/libsignon-qt-tests/signon-ui.h
index b242189..8d0b95b 100644
--- a/tests/libsignon-qt-tests/signon-ui.h
+++ b/tests/libsignon-qt-tests/signon-ui.h
@@ -25,6 +25,7 @@

#include "SignOn/signonerror.h"

+#include <QDBusServer>
#include <QDBusConnection>
#include <QDBusContext>
#include <QDBusMessage>
@@ -37,7 +38,11 @@ class SignOnUI: public QObject, protected QDBusContext
Q_CLASSINFO("D-Bus Interface", "com.nokia.singlesignonui")

public:
+#ifdef ENABLE_P2P
+ SignOnUI(QDBusServer *p2pBus, QObject *parent = 0);
+#else
SignOnUI(QDBusConnection connection, QObject *parent = 0);
+#endif
~SignOnUI();

/*!
@@ -80,12 +85,7 @@ public Q_SLOTS:
QVariantMap queryDialog(const QVariantMap &parameters);
QVariantMap refreshDialog(const QVariantMap &newParameters);

-private Q_SLOTS:
- void processQueryDialog();
-
private:
- QDBusMessage m_reply;
- QDBusConnection m_connection;
QVariantMap m_parameters;
QString m_replyPassword;
int m_delay;
diff --git a/tests/libsignon-qt-tests/ssotestclient.cpp b/tests/libsignon-qt-tests/ssotestclient.cpp
index 3ad9de3..a89d9ab 100644
--- a/tests/libsignon-qt-tests/ssotestclient.cpp
+++ b/tests/libsignon-qt-tests/ssotestclient.cpp
@@ -31,6 +31,7 @@
#include <QTest>
#include <QThread>
#include <QDir>
+#include <QStandardPaths>

using namespace SignOn;

@@ -1660,7 +1661,13 @@ int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);

+#ifdef ENABLE_P2P
+ QDBusServer p2pBus(QStringLiteral("unix:path=%1/signonui-socket").arg(QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation)));
+ SignOnUI signOnUI(&p2pBus);
+#else
SignOnUI signOnUI(QDBusConnection::sessionBus());
+#endif // ENABLE_P2P
+
int ret;

SsoTestClient ssoTestClient(&signOnUI);
diff --git a/tests/signond-tests/timeouts.cpp b/tests/signond-tests/timeouts.cpp
index dae8e4b..fb00acd 100644
--- a/tests/signond-tests/timeouts.cpp
+++ b/tests/signond-tests/timeouts.cpp
@@ -33,9 +33,12 @@
using namespace SignOn;

/*
- * test timeout 20 seconds
+ * test timeout 70 seconds (greater than dbus timeout)
+ * as SignonIdentity will attempt to perform a call
+ * to SignOnUI service within ::remove(), which will
+ * timeout as no SignOnUI service exists for this test.
* */
-#define test_timeout 20000
+#define test_timeout 70000


void TimeoutsTest::initTestCase()
--
2.17.1

2 changes: 2 additions & 0 deletions rpm/signon-qt5.spec
Expand Up @@ -16,6 +16,7 @@ Patch6: 0006-Always-use-P2P-DBus-if-enabled.-Contributes-to-JB-42.patch
Patch7: 0007-Use-p2p-dbus-for-signon-ui-flows.-Contributes-to-JB-.patch
Patch8: 0008-Initialize-secrets-db-on-start.-Fixes-JB-34557.patch
Patch9: 0009-Treat-empty-ACL-as-synonym-for-.-Contributes-to-JB-2.patch
Patch10: 0010-Use-P2P-DBus-server-for-tests-if-built-in-ENABLE_P2P.patch

BuildRequires: doxygen
BuildRequires: pkgconfig(Qt5Core)
Expand Down Expand Up @@ -184,6 +185,7 @@ This package contains tests for signon
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1

chmod +x tests/create-tests-definition.sh

Expand Down
2 changes: 1 addition & 1 deletion upstream
Submodule upstream updated from 4d195e to ab9fab

0 comments on commit 7f1ae3d

Please sign in to comment.