[kde-plasma-nm/f20] Fix NEWGROUP handling for OpenConnect too
David Woodhouse
dwmw2 at fedoraproject.org
Mon Jul 14 13:25:55 UTC 2014
commit 7993e6fc03e201ae4e2bf28bdfc57e6f785b3d02
Author: David Woodhouse <David.Woodhouse at intel.com>
Date: Mon Jul 14 14:26:14 2014 +0100
Fix NEWGROUP handling for OpenConnect too
...andling-of-autoconnect-in-OpenConnect-VPN.patch | 41 ++++--
0002-Add-NEWGROUP-support-for-OpenConnect.patch | 143 ++++++++++++++++++++
kde-plasma-nm.spec | 7 +-
3 files changed, 179 insertions(+), 12 deletions(-)
---
diff --git a/0001-Fix-handling-of-autoconnect-in-OpenConnect-VPN.patch b/0001-Fix-handling-of-autoconnect-in-OpenConnect-VPN.patch
index 5b1768d..c2c2c4f 100644
--- a/0001-Fix-handling-of-autoconnect-in-OpenConnect-VPN.patch
+++ b/0001-Fix-handling-of-autoconnect-in-OpenConnect-VPN.patch
@@ -1,27 +1,46 @@
-From 0af2498a68a24e710844f095ac1638c6f1b7c5bc Mon Sep 17 00:00:00 2001
-From: David Woodhouse <David.Woodhouse at intel.com>
-Date: Mon, 14 Jul 2014 11:11:13 +0100
-Subject: [PATCH] Fix handling of 'autoconnect' in OpenConnect VPN
+From 38fb381c47c8bb244a49b0b17d3cfb0c94a3bf49 Mon Sep 17 00:00:00 2001
+From: David Woodhouse <dwmw2 at infradead.org>
+Date: Mon, 14 Jul 2014 14:43:19 +0200
+Subject: [PATCH 1/2] Fix handling of 'autoconnect' in OpenConnect VPN
-We can't call connectHost() directly from the readSecrets() function; we
-need to set it up to be called when the dialog is rendered instead.
+REVIEW:119269
---
- vpn/openconnect/openconnectauth.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ vpn/openconnect/openconnectauth.cpp | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/vpn/openconnect/openconnectauth.cpp b/vpn/openconnect/openconnectauth.cpp
-index be92b56..8ee82cc 100644
+index be92b56..b629c8f 100644
--- a/vpn/openconnect/openconnectauth.cpp
+++ b/vpn/openconnect/openconnectauth.cpp
-@@ -230,7 +230,7 @@ void OpenconnectAuthWidget::readSecrets()
+@@ -97,7 +97,6 @@ OpenconnectAuthWidget::OpenconnectAuthWidget(const NetworkManager::VpnSetting::P
+ connect(d->ui.cmbLogLevel, SIGNAL(currentIndexChanged(int)), this, SLOT(logLevelChanged(int)));
+ connect(d->ui.viewServerLog, SIGNAL(toggled(bool)), this, SLOT(viewServerLogToggled(bool)));
+ connect(d->ui.btnConnect, SIGNAL(clicked()), this, SLOT(connectHost()));
+- connect(d->ui.cmbHosts, SIGNAL(currentIndexChanged(int)), this, SLOT(connectHost()));
+
+ d->ui.cmbLogLevel->setCurrentIndex(OpenconnectAuthWidgetPrivate::Debug);
+ d->ui.btnConnect->setIcon(KIcon("network-connect"));
+@@ -118,6 +117,9 @@ OpenconnectAuthWidget::OpenconnectAuthWidget(const NetworkManager::VpnSetting::P
+ readConfig();
+ readSecrets();
+
++ // This might be set by readSecrets() so don't connect it until now
++ connect(d->ui.cmbHosts, SIGNAL(currentIndexChanged(int)), this, SLOT(connectHost()));
++
+ KAcceleratorManager::manage(this);
+ }
+
+@@ -230,8 +232,9 @@ void OpenconnectAuthWidget::readSecrets()
if (d->secrets["autoconnect"] == "yes") {
d->ui.chkAutoconnect->setChecked(true);
- connectHost();
-+ connect(this, SIGNAL(activated(int)), this, SLOT(connectHost()));
++ QTimer::singleShot(0, this, SLOT(connectHost()));
}
++
if (!d->secrets["certsigs"].isEmpty()) {
d->certificateFingerprints.append(d->secrets["certsigs"].split('\t'));
+ }
--
1.9.3
diff --git a/0002-Add-NEWGROUP-support-for-OpenConnect.patch b/0002-Add-NEWGROUP-support-for-OpenConnect.patch
new file mode 100644
index 0000000..4ebffc3
--- /dev/null
+++ b/0002-Add-NEWGROUP-support-for-OpenConnect.patch
@@ -0,0 +1,143 @@
+From d0c5ed98bc816a5f5a59a3dae270884c87dded24 Mon Sep 17 00:00:00 2001
+From: David Woodhouse <David.Woodhouse at intel.com>
+Date: Mon, 14 Jul 2014 13:47:58 +0100
+Subject: [PATCH 2/2] Add NEWGROUP support for OpenConnect
+
+---
+ vpn/openconnect/openconnectauth.cpp | 19 ++++++++++++++-----
+ vpn/openconnect/openconnectauth.h | 1 +
+ vpn/openconnect/openconnectauthworkerthread.cpp | 9 +++++----
+ vpn/openconnect/openconnectauthworkerthread.h | 3 ++-
+ 4 files changed, 22 insertions(+), 10 deletions(-)
+
+diff --git a/vpn/openconnect/openconnectauth.cpp b/vpn/openconnect/openconnectauth.cpp
+index b629c8f..0c557e6 100644
+--- a/vpn/openconnect/openconnectauth.cpp
++++ b/vpn/openconnect/openconnectauth.cpp
+@@ -74,6 +74,7 @@ public:
+ OpenconnectAuthWorkerThread *worker;
+ QList<VPNHost> hosts;
+ bool userQuit;
++ bool formGroupChanged;
+ int cancelPipes[2];
+ QList<QPair<QString, int> > serverLog;
+
+@@ -88,6 +89,8 @@ OpenconnectAuthWidget::OpenconnectAuthWidget(const NetworkManager::VpnSetting::P
+ d->setting = setting;
+ d->ui.setupUi(this);
+ d->userQuit = false;
++ d->formGroupChanged = false;
++
+ if (pipe2(d->cancelPipes, O_NONBLOCK|O_CLOEXEC)) {
+ // Should never happen. Just don't do real cancellation if it does
+ d->cancelPipes[0] = -1;
+@@ -102,7 +105,7 @@ OpenconnectAuthWidget::OpenconnectAuthWidget(const NetworkManager::VpnSetting::P
+ d->ui.btnConnect->setIcon(KIcon("network-connect"));
+ d->ui.viewServerLog->setChecked(false);
+
+- d->worker = new OpenconnectAuthWorkerThread(&d->mutex, &d->workerWaiting, &d->userQuit, d->cancelPipes[0]);
++ d->worker = new OpenconnectAuthWorkerThread(&d->mutex, &d->workerWaiting, &d->userQuit, &d->formGroupChanged, d->cancelPipes[0]);
+
+ // gets the pointer to struct openconnect_info (defined in openconnect.h), which contains data that OpenConnect needs,
+ // and which needs to be populated with settings we get from NM, like host, certificate or private key
+@@ -452,14 +455,12 @@ void OpenconnectAuthWidget::processAuthForm(struct oc_auth_form *form)
+ cmb->setCurrentIndex(i);
+ if (sopt == AUTHGROUP_OPT(form) &&
+ i != AUTHGROUP_SELECTION(form)) {
+- // XXX: Immediately return OC_FORM_RESULT_NEWGROUP to
+- // change group
++ QTimer::singleShot(0, this, SLOT(formGroupChanged()));
+ }
+ }
+ }
+ if (sopt == AUTHGROUP_OPT(form)) {
+- // TODO: Hook up signal when the KComboBox entry changes, to
+- // return OC_FORM_RESULT_NEWGROUP
++ connect(cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(formGroupChanged()));
+ }
+ widget = qobject_cast<QWidget*>(cmb);
+ }
+@@ -555,6 +556,14 @@ void OpenconnectAuthWidget::validatePeerCert(const QString &fingerprint,
+ d->mutex.unlock();
+ }
+
++void OpenconnectAuthWidget::formGroupChanged()
++{
++ Q_D(OpenconnectAuthWidget);
++
++ d->formGroupChanged = true;
++ formLoginClicked();
++}
++
+ // Writes the user input from the form into the oc_auth_form structs we got from
+ // libopenconnect, and wakes the worker thread up to try to log in and obtain a
+ // cookie with this data
+diff --git a/vpn/openconnect/openconnectauth.h b/vpn/openconnect/openconnectauth.h
+index 5b80e9e..ad1e9ff 100644
+--- a/vpn/openconnect/openconnectauth.h
++++ b/vpn/openconnect/openconnectauth.h
+@@ -58,6 +58,7 @@ private Q_SLOTS:
+ void updateLog(const QString &, const int &);
+ void logLevelChanged(int);
+ void formLoginClicked();
++ void formGroupChanged();
+ void workerFinished(const int&);
+ void viewServerLogToggled(bool);
+ void passwordModeToggled(bool);
+diff --git a/vpn/openconnect/openconnectauthworkerthread.cpp b/vpn/openconnect/openconnectauthworkerthread.cpp
+index 7060fb2..cf130da 100644
+--- a/vpn/openconnect/openconnectauthworkerthread.cpp
++++ b/vpn/openconnect/openconnectauthworkerthread.cpp
+@@ -72,8 +72,8 @@ public:
+ }
+ };
+
+-OpenconnectAuthWorkerThread::OpenconnectAuthWorkerThread(QMutex *mutex, QWaitCondition *waitForUserInput, bool *userDecidedToQuit, int cancelFd)
+- : QThread(), m_mutex(mutex), m_waitForUserInput(waitForUserInput), m_userDecidedToQuit(userDecidedToQuit)
++OpenconnectAuthWorkerThread::OpenconnectAuthWorkerThread(QMutex *mutex, QWaitCondition *waitForUserInput, bool *userDecidedToQuit, bool *formGroupChanged, int cancelFd)
++ : QThread(), m_mutex(mutex), m_waitForUserInput(waitForUserInput), m_userDecidedToQuit(userDecidedToQuit), m_formGroupChanged(formGroupChanged)
+ {
+ m_openconnectInfo = openconnect_vpninfo_new((char*)"OpenConnect VPN Agent (PlasmaNM - running on KDE)",
+ OpenconnectAuthStaticWrapper::validatePeerCert,
+@@ -177,14 +177,15 @@ int OpenconnectAuthWorkerThread::processAuthFormP(struct oc_auth_form *form)
+ return -1;
+
+ m_mutex->lock();
++ *m_formGroupChanged = false;
+ emit processAuthForm(form);
+ m_waitForUserInput->wait(m_mutex);
+ m_mutex->unlock();
+ if (*m_userDecidedToQuit)
+ return OC_FORM_RESULT_CANCELLED;
+
+- // TODO : If group changed, return OC_FORM_RESULT_NEWGROUP
+-
++ if (*m_formGroupChanged)
++ return OC_FORM_RESULT_NEWGROUP;
+ return OC_FORM_RESULT_OK;
+ }
+
+diff --git a/vpn/openconnect/openconnectauthworkerthread.h b/vpn/openconnect/openconnectauthworkerthread.h
+index 5d18615..f6992c2 100644
+--- a/vpn/openconnect/openconnectauthworkerthread.h
++++ b/vpn/openconnect/openconnectauthworkerthread.h
+@@ -70,7 +70,7 @@ class OpenconnectAuthWorkerThread : public QThread
+ Q_OBJECT
+ friend class OpenconnectAuthStaticWrapper;
+ public:
+- OpenconnectAuthWorkerThread(QMutex *, QWaitCondition *, bool *, int);
++ OpenconnectAuthWorkerThread(QMutex *, QWaitCondition *, bool *, bool *, int);
+ ~OpenconnectAuthWorkerThread();
+ struct openconnect_info* getOpenconnectInfo();
+
+@@ -93,6 +93,7 @@ private:
+ QMutex *m_mutex;
+ QWaitCondition *m_waitForUserInput;
+ bool *m_userDecidedToQuit;
++ bool *m_formGroupChanged;
+ struct openconnect_info *m_openconnectInfo;
+ };
+
+--
+1.9.3
+
diff --git a/kde-plasma-nm.spec b/kde-plasma-nm.spec
index 286af02..9208d98 100644
--- a/kde-plasma-nm.spec
+++ b/kde-plasma-nm.spec
@@ -1,7 +1,7 @@
%global git_commit 61bb6a0
Name: kde-plasma-nm
Version: 0.9.3.4
-Release: 8.20140702git%{git_commit}%{?dist}
+Release: 9.20140702git%{git_commit}%{?dist}
Summary: Plasma applet written in QML for managing network connections
License: LGPLv2+ and GPLv2+
URL: https://projects.kde.org/projects/playground/network/plasma-nm
@@ -9,6 +9,7 @@ URL: https://projects.kde.org/projects/playground/network/plasma-nm
# # Package from git snapshots using releaseme scripts
Source0: plasma-nm-%{version}.tar.xz
Patch1: 0001-Fix-handling-of-autoconnect-in-OpenConnect-VPN.patch
+Patch2: 0002-Add-NEWGROUP-support-for-OpenConnect.patch
# Add plasma-nm to default systray if needed, for upgraders...
Source10: 01-fedora-plasma-nm.js
@@ -116,6 +117,7 @@ Provides: kde-plasma-networkmanagement-pptp = 1:%{version}-%{release}
%prep
%setup -qn plasma-nm-%{version}
%patch1 -p1
+%patch2 -p1
%build
mkdir -p %{_target_platform}
@@ -233,6 +235,9 @@ fi
%endif
%changelog
+* Mon Jul 14 2014 David Woodhouse <dwmw2 at infradead.org> - 0.9.3.4-9.20140702git61bb6a0
+- Fix handling of NEWGROUP return for OpenConnect VPN
+
* Mon Jul 14 2014 David Woodhouse <dwmw2 at infradead.org> - 0.9.3.4-8.20140702git61bb6a0
- fix handling of 'autoconnect' option for OpenConnect VPN
More information about the scm-commits
mailing list