[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