[kde-plasma-nm] Fix build with openconnect
Jan Grulich
jgrulich at fedoraproject.org
Fri Mar 7 08:58:23 UTC 2014
commit c89cdde89b6f0b0ceb13e89e5877c0625a950fb7
Author: Jan Grulich <jgrulich at redhat.com>
Date: Fri Mar 7 09:57:53 2014 +0100
Fix build with openconnect
kde-plasma-nm.spec | 8 ++++-
openconnect.patch | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 108 insertions(+), 1 deletions(-)
---
diff --git a/kde-plasma-nm.spec b/kde-plasma-nm.spec
index e57fa45..86cc435 100644
--- a/kde-plasma-nm.spec
+++ b/kde-plasma-nm.spec
@@ -1,6 +1,6 @@
Name: kde-plasma-nm
Version: 0.9.3.3
-Release: 1%{?dist}
+Release: 2%{?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
@@ -10,6 +10,7 @@ Source0: http://download.kde.org/unstable/plasma-nm//plasma-nm-%{version}
Source10: 01-fedora-plasma-nm.js
## upstream patches
+Patch0: openconnect.patch
BuildRequires: gettext
BuildRequires: kdelibs4-devel
@@ -108,6 +109,8 @@ Provides: kde-plasma-networkmanagement-pptp = 1:%{version}-%{release}
%prep
%setup -qn plasma-nm-%{version}
+%patch0 -p1 -b .openconnect
+
%build
mkdir -p %{_target_platform}
pushd %{_target_platform}
@@ -224,6 +227,9 @@ fi
%endif
%changelog
+* Fri Mar 07 2014 Jan Grulich <jgrulich at redhat.com> - 0.9.3.3-2
+- fix build with openconnect
+
* Wed Feb 26 2014 Jan Grulich <jgrulich at redhat.com> - 0.9.3.3-1
- Update to 0.9.3.3
diff --git a/openconnect.patch b/openconnect.patch
new file mode 100644
index 0000000..c336726
--- /dev/null
+++ b/openconnect.patch
@@ -0,0 +1,101 @@
+diff --git a/vpn/openconnect/openconnectauth.cpp b/vpn/openconnect/openconnectauth.cpp
+index 33e8c93..e2eb15a 100644
+--- a/vpn/openconnect/openconnectauth.cpp
++++ b/vpn/openconnect/openconnectauth.cpp
+@@ -414,7 +414,7 @@ void OpenconnectAuthWidget::processAuthForm(struct oc_auth_form *form)
+ int passwordnumber = 0;
+ bool focusSet = false;
+ for (opt = form->opts; opt; opt = opt->next) {
+- if (opt->type == OC_FORM_OPT_HIDDEN)
++ if (opt->type == OC_FORM_OPT_HIDDEN || IGNORE_OPT(opt))
+ continue;
+ QLabel *text = new QLabel(this);
+ text->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
+@@ -441,9 +441,20 @@ void OpenconnectAuthWidget::processAuthForm(struct oc_auth_form *form)
+ KComboBox *cmb = new KComboBox(this);
+ struct oc_form_opt_select *sopt = reinterpret_cast<oc_form_opt_select *>(opt);
+ for (int i = 0; i < sopt->nr_choices; i++) {
+- cmb->addItem(QString::fromUtf8(sopt->choices[i].label), QString::fromUtf8(sopt->choices[i].name));
+- if (value == QString::fromUtf8(sopt->choices[i].name))
++ cmb->addItem(QString::fromUtf8(FORMCHOICE(sopt, i)->label),
++ QString::fromUtf8(FORMCHOICE(sopt, i)->name));
++ if (value == QString::fromUtf8(FORMCHOICE(sopt, i)->name)) {
+ cmb->setCurrentIndex(i);
++ if (sopt == AUTHGROUP_OPT(form) &&
++ i != AUTHGROUP_SELECTION(form)) {
++ // XXX: Immediately return OC_FORM_RESULT_NEWGROUP to
++ // change group
++ }
++ }
++ }
++ if (sopt == AUTHGROUP_OPT(form)) {
++ /// XXX: Hook up signal when the KComboBox entry changes, to
++ // return OC_FORM_RESULT_NEWGROUP
+ }
+ widget = qobject_cast<QWidget*>(cmb);
+ }
+@@ -540,6 +551,7 @@ void OpenconnectAuthWidget::validatePeerCert(const QString &fingerprint,
+ void OpenconnectAuthWidget::formLoginClicked()
+ {
+ Q_D(OpenconnectAuthWidget);
++ /// XXX: This, or something like it, needs to be called when the KComboBox for the auth group changes too.
+ const int lastIndex = d->ui.loginBoxLayout->count() - 1;
+ QLayout *layout = d->ui.loginBoxLayout->itemAt(lastIndex - 2)->layout();
+ struct oc_auth_form *form = (struct oc_auth_form *) d->ui.loginBoxLayout->itemAt(lastIndex)->widget()->property("openconnect_form").value<quintptr>();
+diff --git a/vpn/openconnect/openconnectauthworkerthread.cpp b/vpn/openconnect/openconnectauthworkerthread.cpp
+index 4c16388..194b164 100644
+--- a/vpn/openconnect/openconnectauthworkerthread.cpp
++++ b/vpn/openconnect/openconnectauthworkerthread.cpp
+@@ -59,7 +59,7 @@ public:
+ {
+ if (obj)
+ return static_cast<OpenconnectAuthWorkerThread*>(obj)->processAuthFormP(form);
+- return -1;
++ return OC_FORM_RESULT_ERR;
+ }
+ static void writeProgress(void *obj, int level, const char *str, ...)
+ {
+@@ -181,9 +181,11 @@ int OpenconnectAuthWorkerThread::processAuthFormP(struct oc_auth_form *form)
+ m_waitForUserInput->wait(m_mutex);
+ m_mutex->unlock();
+ if (*m_userDecidedToQuit)
+- return -1;
++ return OC_FORM_RESULT_CANCELLED;
+
+- return 0;
++ /// XXX: If group changed, return OC_FORM_RESULT_NEWGROUP
++
++ return OC_FORM_RESULT_OK;
+ }
+
+ void OpenconnectAuthWorkerThread::writeProgress(int level, const char *fmt, va_list argPtr)
+diff --git a/vpn/openconnect/openconnectauthworkerthread.h b/vpn/openconnect/openconnectauthworkerthread.h
+index 37c854f..39d68b3 100644
+--- a/vpn/openconnect/openconnectauthworkerthread.h
++++ b/vpn/openconnect/openconnectauthworkerthread.h
+@@ -40,6 +40,25 @@ struct x509_st;
+ #define OPENCONNECT_OPENSSL
+ #endif
+
++#if OPENCONNECT_CHECK_VER(3,0)
++#define NEWGROUP_SUPPORTED 1
++#define AUTHGROUP_OPT(form) (void *)(form)->authgroup_opt
++#define AUTHGROUP_SELECTION(form) (form)->authgroup_selection
++#define FORMCHOICE(sopt, i) ((sopt)->choices[i])
++#define IGNORE_OPT(opt) ((opt)->flags & OC_FORM_OPT_IGNORE)
++#else
++#define NEWGROUP_SUPPORTED 0
++#define AUTHGROUP_OPT(form) NULL
++#define AUTHGROUP_SELECTION(form) 0
++#define FORMCHOICE(sopt, i) (&(sopt)->choices[i])
++#define IGNORE_OPT(opt) 0
++
++#define OC_FORM_RESULT_ERR -1
++#define OC_FORM_RESULT_OK 0
++#define OC_FORM_RESULT_CANCELLED 1
++#define OC_FORM_RESULT_NEWGROUP 2
++#endif
++
+ #include <QThread>
+
+ class QMutex;
More information about the scm-commits
mailing list