summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Rostovtsev <tetromino@gentoo.org>2014-03-12 04:40:50 +0000
committerAlexandre Rostovtsev <tetromino@gentoo.org>2014-03-12 04:40:50 +0000
commit06d7ab7499c910db29fc3a86ad1dbadb553cf7b9 (patch)
tree6f6d314d4704252562b97721facbfbc131c753c5 /net-misc/networkmanager-openconnect
parentShorten description for improved repoman happy (diff)
downloadhistorical-06d7ab7499c910db29fc3a86ad1dbadb553cf7b9.tar.gz
historical-06d7ab7499c910db29fc3a86ad1dbadb553cf7b9.tar.bz2
historical-06d7ab7499c910db29fc3a86ad1dbadb553cf7b9.zip
Fix support for >=openconnect-4.99 (bug #504192, thanks to Kobboi and Pacho Ramos).
Package-Manager: portage-2.2.8-r1/cvs/Linux x86_64 Manifest-Sign-Key: 0xCF0ADD61
Diffstat (limited to 'net-misc/networkmanager-openconnect')
-rw-r--r--net-misc/networkmanager-openconnect/ChangeLog14
-rw-r--r--net-misc/networkmanager-openconnect/Manifest16
-rw-r--r--net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-formchoice.patch60
-rw-r--r--net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-ignore.patch39
-rw-r--r--net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-newgroup.patch227
-rw-r--r--net-misc/networkmanager-openconnect/networkmanager-openconnect-0.9.8.4-r1.ebuild59
6 files changed, 409 insertions, 6 deletions
diff --git a/net-misc/networkmanager-openconnect/ChangeLog b/net-misc/networkmanager-openconnect/ChangeLog
index 994a8d4d1736..116db5b9c2c5 100644
--- a/net-misc/networkmanager-openconnect/ChangeLog
+++ b/net-misc/networkmanager-openconnect/ChangeLog
@@ -1,6 +1,16 @@
# ChangeLog for net-misc/networkmanager-openconnect
-# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-misc/networkmanager-openconnect/ChangeLog,v 1.21 2013/12/08 19:30:06 pacho Exp $
+# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/networkmanager-openconnect/ChangeLog,v 1.22 2014/03/12 04:40:46 tetromino Exp $
+
+*networkmanager-openconnect-0.9.8.4-r1 (12 Mar 2014)
+
+ 12 Mar 2014; Alexandre Rostovtsev <tetromino@gentoo.org>
+ +networkmanager-openconnect-0.9.8.4-r1.ebuild,
+ +files/networkmanager-openconnect-0.9.8.4-auth-dialog-formchoice.patch,
+ +files/networkmanager-openconnect-0.9.8.4-auth-dialog-ignore.patch,
+ +files/networkmanager-openconnect-0.9.8.4-auth-dialog-newgroup.patch:
+ Fix support for >=openconnect-4.99 (bug #504192, thanks to Kobboi and Pacho
+ Ramos).
08 Dec 2013; Pacho Ramos <pacho@gentoo.org>
networkmanager-openconnect-0.9.8.4.ebuild:
diff --git a/net-misc/networkmanager-openconnect/Manifest b/net-misc/networkmanager-openconnect/Manifest
index 0d7043d31134..09636b11d387 100644
--- a/net-misc/networkmanager-openconnect/Manifest
+++ b/net-misc/networkmanager-openconnect/Manifest
@@ -1,18 +1,26 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
+AUX networkmanager-openconnect-0.9.8.4-auth-dialog-formchoice.patch 2081 SHA256 46438dc5127894c5ab87e770a7743ccd993b0966168a062eac83c37902e5922a SHA512 da952baf1f0fbed4e008bb7d3da8d85c7b5baad72db90c1d45a55e3fad4782ec9e628ae5c89283bb4086170806329e1e182871b9c846229533b4121a99333f24 WHIRLPOOL 25fe45219cb324fb7c11b62688de51b221b248146cf8a7c97b953a1ed8d9c0873e4795b5d1f2f6dcc36c7383fbc09eb53bb4ab543b5a9f2a8946711e780ef515
+AUX networkmanager-openconnect-0.9.8.4-auth-dialog-ignore.patch 1287 SHA256 159c4b720b34445eac161935f79e772fd1cd439d47a3b632fa4c79743f6587f5 SHA512 82cd6a47f712d885a4f3bfed730a614c548aa04608baac580f979129898f079d97db97171e90f1f1d66b91c8d57f639989f98fa7d1d9a467fcfa012590a9f800 WHIRLPOOL 1df82dea084069f2de22452e07f273ea638d531dd8754a6779aae300f26e3ebab43107cd4e6754d797a0dd59880cc84c2b59b086e6351362f7db68eb2a36cbc5
+AUX networkmanager-openconnect-0.9.8.4-auth-dialog-newgroup.patch 7165 SHA256 1ed334a693b77bafa1068e0716c3e49a1b7f4e55872a983630d1dbe02acb4bfd SHA512 db705ce18e1b1aa47c701da271d3fd05694c8b5f1ec18c31b4850286a18b6f3e89591352e4a478421318fac73e7403b594fa1c76f6d48d6db152e7b973799d94 WHIRLPOOL bae9278f97f4c76ad43d34fbc2e13fa91a366ddd8fd5c9073897b2406242d5a51f49f0d0c67a316af0d9fd27b5d9eb7187165cd33f940cd5929d6d87f0b1b8d8
DIST NetworkManager-openconnect-0.9.6.2.tar.xz 319652 SHA256 3f53d87dbeb00fc841ef5981e6f1a1a192c65d273386246d48245cca84fa41b0 SHA512 e9ffc20584738507589ac22f6ceb9315495664ff341a6a95e4126383915d04658990d19e7c4bd82cf7838f01ff89a55f3556921b44b5ba8074acef0be9d990ce WHIRLPOOL 6cb65f73ed5a9cd3c7fcf850f51f0cf1d0f25ad0e0c032107787ea33665b0da8f7af5f782846935c5617a6fd4673008998d8edb890ee2b9c013c85cc999a12d5
DIST NetworkManager-openconnect-0.9.8.2.tar.xz 393908 SHA256 8c3b393d155448d41f5de539d4920f0e5205a087aa5b25ed65601d6a370c44eb SHA512 d444d19d68124e10c5303327ac996b6e13900c99c511ae4f276e81113b23f5baf5e89d2bbd7dde503ddb88ac2276d2f45467aec18697a3966b16af30981a3a5f WHIRLPOOL 243a5240c3cb6035c2b9e5614fa36ffebd69f519760c66373dec2c0de726382edd6dec028ba5b3acc836d5fce4c1245eff63512ce13cafc9e7e70bebc87c3348
DIST NetworkManager-openconnect-0.9.8.4.tar.xz 409672 SHA256 99b4dc03da311026eaa4bee2ff3f141270e8ba4bf341762d4eeee7152be387b6 SHA512 8356ac68e3f280a6860839284a422177fbc3592d23c3dff28b366165eea2d3c36d7cbd1ea75d027168f6c8fd852a886f85753de55b904105e04b81ae30300dba WHIRLPOOL fc662802c5e75ce6384bc45bd4e1abb66043f24f74eb120b2cfea2d3655238cbe215d9ea5ab3236ebe4553a62627309cece3017ac5ea112b8e7c7a23a263f11d
EBUILD networkmanager-openconnect-0.9.6.2.ebuild 1219 SHA256 98006ea9469270ae0c21a91983a7a5b451dc355c5c49981e5e6bda0c238e0959 SHA512 37263c9b0e190135148d4d2a5b3c2a080d9287e042b799b5269c4d3736d68c8d2ba0468540df99a9fb1aa0c6ff104b7b1d87fbc3efd7132c461acdac5e714cdd WHIRLPOOL 9fa0a63fdc45b72de0cb399dc5bcc5de7b72d94b82f338c5234c29bc819acc3bbc9de48cc1e98dfa8642b486a623b9b6a34f8f3b6a76da5856d6abd7780ff87c
EBUILD networkmanager-openconnect-0.9.8.2.ebuild 1211 SHA256 185688ad0fdfc3b85e354581aa068926e7bbd06928cbd07cb6fb89dbed685e2c SHA512 90b6fdafaf9406a97bcdf08e1f0c475f1b39c4f6ba79996687810e78644825871f3de09788a22e002771563743d162fcc56f23627ea757bcd410a2643b060cbd WHIRLPOOL 8f0ee4ac80d88c2b6226e0689e4cf934440b15b3ce4aa3dc01d11be4febfde65ccc0cd366d0fe314800418bade8c644ac8189ce2175638f0b7cefb45f2176f0d
+EBUILD networkmanager-openconnect-0.9.8.4-r1.ebuild 1333 SHA256 7304b2e30242dcff3a7c92c4242714449c271b97682591d58b287d1a0ae8312a SHA512 382e7c5551e189bf6a00f2eade6241b70b13e78fa096e9e9877f47e239ee4193b91162920036932933db04c4c1d03086347338e097296e2dfb6d49c832f188ac WHIRLPOOL 39f406fee4a29dd26fabf2e48b082388b9d58523e983cae96b1285e351c1f06824fbe24ae2908f2baa87b1a284454aece52001cfd71a1615ace5b8a521f90557
EBUILD networkmanager-openconnect-0.9.8.4.ebuild 1188 SHA256 31d853df84cd5650356551fbe8ef18ad90b6cdcc6fa1ed455b216fe3df27acd9 SHA512 2b471f2a86e1a185894b86dccb606c4b3f0879cf3c482c09b904ef9359ae059c0328357e2083f411049b8ac1dafa41747ff2db3dc73705c7a4b52f0ccaded845 WHIRLPOOL cbfd5e28b452ae233c1b4b3c7e757616a7a1d6417053f60da2e8adbd59c24ae2bead420a6de3801fcf9407648f0765f5da57fe587c8da8b3f9f553931b8e75a6
-MISC ChangeLog 4664 SHA256 8f5700d092ac560930ff80723219ea7916ab40a72443b1e1d3ca5da05e87f7f1 SHA512 b346883270f22df653baa14f06f42f94efb6927a8a9d358c022cc65dc146f3c7e95be2c44bb856d3e10f464f41b731e80753e1414c0534930ac8fb7ca703548c WHIRLPOOL 1d7d2cb0a957e0d6c7d443a0afc0edc4fe99139f02ddce55a5b76250d0941eaaf4021947202363f522e8c586423dba858d6b282e0e1285045c9bbdd73de84739
+MISC ChangeLog 5135 SHA256 e0f5571db66ab95fd39df00c5bac420cb4fa4a2a0e3710dd5476c04c99a40a4d SHA512 1fb2c7c510404c38cf879e11f129e330177de21d5045fb6b34213c0211aecf696cb9a1dfff40605edeea911a07649ce2b433fc5f9bba85d6d8aeb095fa1145d8 WHIRLPOOL 999eaa572ec1038a2d76452e0a776bab8ccfa26d12a5bc0d3903205555c5f82579658f06e76ae0a14334d2c4f6033dde9cd640483d894618f0edba48fec134b3
MISC metadata.xml 257 SHA256 a5789d9be253767cbc21f45ce73723ac16e2c45637033a3b67ec1e9f12ae8846 SHA512 0947d371f24a86e39c1faeb42f6d635550d7cf96480bf36eccbcbed7dc73c80c51c9ebe90c9749257e17950247b47eea19aae5161722e789efb0e212efcb6640 WHIRLPOOL 7a5853a2040251133a790c202b92b0e3ba151700cdf0b7c60a21d41ea90377155296a16d5f3085e6933fe2991290e7ae03958f7477112e195b06c977a1b8a049
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
-iEYEAREIAAYFAlKkyL8ACgkQCaWpQKGI+9S7uQCdEIxmgFRP/Hpg2zh58VogXk+p
-yRsAn3krHE1bTUhzfQYHAO84XBLMnXfC
-=5TGW
+iQEcBAEBCAAGBQJTH+UdAAoJEJ0WA1zPCt1hk6oH/R4iGTaCMWPyW2F1kxBxRjz1
+VxssaYPg8IvYpvEsCWac4kBT2pBnGcmYhaRcw6pVHRSICcZPW3OCfXw6GRY08jky
+xo5egVylpu4Qd9UsnauU8rsdIG+1Z0terJrzM2eRQuAAouSkQob2e1fePuysWRzq
+QBXqNBI1P7JnTwygc8RTrvEy293Xv1N/HpuZWCeZcVO3zAqniztIE7FWU0otA4C1
+8zh50yE+a6v3bRRv7t7jaut5YN5mNKzmJCtPErIXaRxCJb0f6bjuLKln8NeHrkJL
+FOmZo4SLpgO0nPDXAhNpmpHoOwnAbAxeK90blkj41v8hB3TCa3MMN94BnQFb040=
+=7U1L
-----END PGP SIGNATURE-----
diff --git a/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-formchoice.patch b/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-formchoice.patch
new file mode 100644
index 000000000000..26dd1966e42a
--- /dev/null
+++ b/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-formchoice.patch
@@ -0,0 +1,60 @@
+From d846b4e5bb9b89c1110d8ae38fd06021f3e4a9f2 Mon Sep 17 00:00:00 2001
+From: Kevin Cernekee <cernekee@gmail.com>
+Date: Mon, 30 Dec 2013 17:49:35 -0800
+Subject: [PATCH] auth-dialog: Introduce FORMCHOICE helper macro
+
+libopenconnect >= 3.0 uses a pointer array so we need to change the way
+the "choices" field is accessed.
+
+
+diff --git a/auth-dialog/main.c b/auth-dialog/main.c
+index 2d8c830..9b32f61 100644
+--- a/auth-dialog/main.c
++++ b/auth-dialog/main.c
+@@ -70,6 +70,8 @@
+ #define __openconnect_set_token_mode openconnect_set_token_mode
+ #endif
+
++#define FORMCHOICE(sopt, i) (&(sopt)->choices[i])
++
+ #ifdef OPENCONNECT_OPENSSL
+ #include <openssl/ssl.h>
+ #include <openssl/bio.h>
+@@ -350,10 +352,10 @@ static void combo_changed(GtkComboBox *combo, ui_fragment_data *data)
+ if (entry < 0)
+ return;
+
+- data->entry_text = sopt->choices[entry].name;
++ data->entry_text = FORMCHOICE(sopt, entry)->name;
+
+ g_queue_foreach(data->ui_data->form_entries, (GFunc)do_override_label,
+- &sopt->choices[entry]);
++ FORMCHOICE(sopt, entry));
+ }
+
+ #ifdef OPENCONNECT_OPENSSL
+@@ -449,17 +451,17 @@ static gboolean ui_add_select (ui_fragment_data *data)
+ combo = gtk_combo_box_text_new();
+ gtk_box_pack_end(GTK_BOX(hbox), combo, FALSE, FALSE, 0);
+ for (i = 0; i < sopt->nr_choices; i++) {
+- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), sopt->choices[i].label);
++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), FORMCHOICE(sopt, i)->label);
+ if (data->entry_text &&
+- !strcmp(data->entry_text, sopt->choices[i].name)) {
++ !strcmp(data->entry_text, FORMCHOICE(sopt, i)->name)) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), i);
+ g_free(data->entry_text);
+- data->entry_text = sopt->choices[i].name;
++ data->entry_text = FORMCHOICE(sopt, i)->name;
+ }
+ }
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)) < 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
+- data->entry_text = sopt->choices[0].name;
++ data->entry_text = FORMCHOICE(sopt, 0)->name;
+ }
+
+ if (g_queue_peek_tail(ui_data->form_entries) == data)
+--
+Gitg
+
diff --git a/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-ignore.patch b/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-ignore.patch
new file mode 100644
index 000000000000..2bda8e529c5a
--- /dev/null
+++ b/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-ignore.patch
@@ -0,0 +1,39 @@
+From e2144cbd1b7f71c2fc57264f125ef298c60f22b7 Mon Sep 17 00:00:00 2001
+From: Kevin Cernekee <cernekee@gmail.com>
+Date: Mon, 30 Dec 2013 17:49:37 -0800
+Subject: [PATCH] auth-dialog: Add support for OC_FORM_OPT_IGNORE
+
+Hide any options that libopenconnect doesn't want us to display.
+
+
+diff --git a/auth-dialog/main.c b/auth-dialog/main.c
+index 4ab28cb..2174ea8 100644
+--- a/auth-dialog/main.c
++++ b/auth-dialog/main.c
+@@ -75,11 +75,13 @@
+ #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
+@@ -704,7 +706,8 @@ static gboolean ui_form (struct oc_auth_form *form)
+ for (opt = form->opts; opt; opt = opt->next) {
+ ui_fragment_data *data;
+
+- if (opt->type == OC_FORM_OPT_HIDDEN)
++ if (opt->type == OC_FORM_OPT_HIDDEN ||
++ IGNORE_OPT(opt))
+ continue;
+
+ data = g_slice_new0 (ui_fragment_data);
+--
+Gitg
+
diff --git a/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-newgroup.patch b/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-newgroup.patch
new file mode 100644
index 000000000000..fe6f8ad5cfd9
--- /dev/null
+++ b/net-misc/networkmanager-openconnect/files/networkmanager-openconnect-0.9.8.4-auth-dialog-newgroup.patch
@@ -0,0 +1,227 @@
+From 944389128a6cd95b7e6a3e9e4c7700528e6c14b0 Mon Sep 17 00:00:00 2001
+From: Kevin Cernekee <cernekee@gmail.com>
+Date: Mon, 30 Dec 2013 17:49:36 -0800
+Subject: [PATCH] auth-dialog: Add support for NEWGROUP
+
+When the user selects a different authgroup, return NEWGROUP to
+libopenconnect to allow it to refresh the form. Different groups may
+require different prompts.
+
+Also, if secondary_username is provided by the server, prepopulate the
+form field.
+
+[dwmw2: Update to use form->authgrop_opt and fix crash due to calling
+ gtk_dialog_response() from combo_changed callback.]
+
+
+diff --git a/auth-dialog/main.c b/auth-dialog/main.c
+index 9b32f61..4ab28cb 100644
+--- a/auth-dialog/main.c
++++ b/auth-dialog/main.c
+@@ -70,7 +70,21 @@
+ #define __openconnect_set_token_mode openconnect_set_token_mode
+ #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])
++#else
++#define NEWGROUP_SUPPORTED 0
++#define AUTHGROUP_OPT(form) NULL
++#define AUTHGROUP_SELECTION(form) 0
+ #define FORMCHOICE(sopt, i) (&(sopt)->choices[i])
++#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
+
+ #ifdef OPENCONNECT_OPENSSL
+ #include <openssl/ssl.h>
+@@ -185,6 +199,9 @@ typedef struct auth_ui_data {
+ GCond *form_shown_changed;
+ gboolean form_shown;
+
++ gboolean newgroup;
++ gboolean group_set;
++
+ GCond *cert_response_changed;
+ enum certificate_response cert_response;
+
+@@ -291,6 +308,7 @@ typedef struct ui_fragment_data {
+ #endif
+ struct oc_form_opt *opt;
+ char *entry_text;
++ int initial_selection;
+ int grab_focus;
+ } ui_fragment_data;
+
+@@ -345,6 +363,13 @@ static void do_override_label(ui_fragment_data *data, struct oc_choice *choice)
+ gtk_label_set_text(GTK_LABEL(data->widget), new_label);
+
+ }
++
++static gboolean do_newgroup(GtkDialog *dialog)
++{
++ gtk_dialog_response(dialog, AUTH_DIALOG_RESPONSE_LOGIN);
++ return FALSE;
++}
++
+ static void combo_changed(GtkComboBox *combo, ui_fragment_data *data)
+ {
+ struct oc_form_opt_select *sopt = (void *)data->opt;
+@@ -354,6 +379,12 @@ static void combo_changed(GtkComboBox *combo, ui_fragment_data *data)
+
+ data->entry_text = FORMCHOICE(sopt, entry)->name;
+
++ if (NEWGROUP_SUPPORTED && entry != data->initial_selection) {
++ data->ui_data->newgroup = TRUE;
++ g_idle_add ((GSourceFunc)do_newgroup, data->ui_data->dialog);
++ return;
++ }
++
+ g_queue_foreach(data->ui_data->form_entries, (GFunc)do_override_label,
+ FORMCHOICE(sopt, entry));
+ }
+@@ -436,7 +467,7 @@ static gboolean ui_add_select (ui_fragment_data *data)
+ auth_ui_data *ui_data = _ui_data; /* FIXME global */
+ GtkWidget *hbox, *text, *combo;
+ struct oc_form_opt_select *sopt = (void *)data->opt;
+- int i;
++ int i, user_selection = -1;
+
+ #if GTK_CHECK_VERSION(3,1,6)
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+@@ -450,20 +481,21 @@ static gboolean ui_add_select (ui_fragment_data *data)
+
+ combo = gtk_combo_box_text_new();
+ gtk_box_pack_end(GTK_BOX(hbox), combo, FALSE, FALSE, 0);
++
+ for (i = 0; i < sopt->nr_choices; i++) {
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), FORMCHOICE(sopt, i)->label);
+ if (data->entry_text &&
+- !strcmp(data->entry_text, FORMCHOICE(sopt, i)->name)) {
+- gtk_combo_box_set_active(GTK_COMBO_BOX(combo), i);
+- g_free(data->entry_text);
+- data->entry_text = FORMCHOICE(sopt, i)->name;
+- }
+- }
+- if (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)) < 0) {
+- gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
+- data->entry_text = FORMCHOICE(sopt, 0)->name;
++ !strcmp(data->entry_text, FORMCHOICE(sopt, i)->name))
++ user_selection = i;
+ }
+
++ i = data->initial_selection != -1 ? data->initial_selection :
++ user_selection != -1 ? user_selection : 0;
++ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), i);
++ g_free(data->entry_text);
++ data->entry_text = FORMCHOICE(sopt, i)->name;
++ data->initial_selection = i;
++
+ if (g_queue_peek_tail(ui_data->form_entries) == data)
+ gtk_widget_grab_focus (combo);
+ g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_changed), data);
+@@ -684,10 +716,12 @@ static gboolean ui_form (struct oc_auth_form *form)
+ g_mutex_lock (ui_data->form_mutex);
+ g_queue_push_head(ui_data->form_entries, data);
+ g_mutex_unlock (ui_data->form_mutex);
+- if (opt->type != OC_FORM_OPT_PASSWORD)
++ if (opt->type != OC_FORM_OPT_PASSWORD) {
+ data->entry_text = g_strdup (find_form_answer(ui_data->secrets,
+ form, opt));
+- else {
++ if (!data->entry_text)
++ data->entry_text = g_strdup (opt->value);
++ } else {
+ data->find_request = gnome_keyring_find_password(
+ OPENCONNECT_SCHEMA,
+ got_keyring_pw,
+@@ -709,6 +743,11 @@ static gboolean ui_form (struct oc_auth_form *form)
+ data->entry_text = g_strdup (find_form_answer(ui_data->secrets,
+ form, opt));
+
++ if (opt == AUTHGROUP_OPT(form))
++ data->initial_selection = AUTHGROUP_SELECTION(form);
++ else
++ data->initial_selection = -1;
++
+ ui_add_select(data);
+ } else
+ g_slice_free (ui_fragment_data, data);
+@@ -717,11 +756,51 @@ static gboolean ui_form (struct oc_auth_form *form)
+ return ui_show(ui_data);
+ }
+
++/* If our stored group_list selection differs from the server default, send a
++ NEWGROUP request to try to change it before rendering the form */
++
++static gboolean set_initial_authgroup (auth_ui_data *ui_data, struct oc_auth_form *form)
++{
++ struct oc_form_opt *opt;
++
++ if (!NEWGROUP_SUPPORTED || ui_data->group_set || !AUTHGROUP_OPT(form))
++ return FALSE;
++ ui_data->group_set = TRUE;
++
++ for (opt = form->opts; opt; opt = opt->next) {
++ int i;
++ char *saved_group;
++ struct oc_form_opt_select *sopt;
++
++ if (opt != AUTHGROUP_OPT(form))
++ continue;
++
++ saved_group = find_form_answer(ui_data->secrets, form, opt);
++ if (!saved_group)
++ return FALSE;
++
++ sopt = (struct oc_form_opt_select *)opt;
++ for (i = 0; i < sopt->nr_choices; i++) {
++ struct oc_choice *ch = FORMCHOICE(sopt, i);
++ if (!strcmp(saved_group, ch->name) && i != AUTHGROUP_SELECTION(form)) {
++ free(opt->value);
++ opt->value = g_strdup(saved_group);
++ return TRUE;
++ }
++ }
++ }
++ return FALSE;
++}
++
+ static int nm_process_auth_form (void *cbdata, struct oc_auth_form *form)
+ {
+ auth_ui_data *ui_data = cbdata;
+ int response;
+
++ if (set_initial_authgroup(ui_data, form))
++ return OC_FORM_RESULT_NEWGROUP;
++
++ ui_data->newgroup = FALSE;
+ g_idle_add((GSourceFunc)ui_form, form);
+
+ g_mutex_lock(ui_data->form_mutex);
+@@ -782,10 +861,13 @@ static int nm_process_auth_form (void *cbdata, struct oc_auth_form *form)
+ ui_data->form_grabbed = 0;
+ g_mutex_unlock(ui_data->form_mutex);
+
+- /* -1 = cancel,
+- * 0 = failure,
+- * 1 = success */
+- return (response == AUTH_DIALOG_RESPONSE_LOGIN ? 0 : 1);
++ if (response == AUTH_DIALOG_RESPONSE_LOGIN) {
++ if (ui_data->newgroup)
++ return OC_FORM_RESULT_NEWGROUP;
++ else
++ return OC_FORM_RESULT_OK;
++ } else
++ return OC_FORM_RESULT_CANCELLED;
+
+ }
+
+--
+Gitg
+
diff --git a/net-misc/networkmanager-openconnect/networkmanager-openconnect-0.9.8.4-r1.ebuild b/net-misc/networkmanager-openconnect/networkmanager-openconnect-0.9.8.4-r1.ebuild
new file mode 100644
index 000000000000..e85d37646bf2
--- /dev/null
+++ b/net-misc/networkmanager-openconnect/networkmanager-openconnect-0.9.8.4-r1.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/networkmanager-openconnect/networkmanager-openconnect-0.9.8.4-r1.ebuild,v 1.1 2014/03/12 04:40:46 tetromino Exp $
+
+EAPI="5"
+GNOME_ORG_MODULE="NetworkManager-${PN##*-}"
+
+inherit eutils gnome.org gnome2-utils user
+
+DESCRIPTION="NetworkManager OpenConnect plugin"
+HOMEPAGE="http://www.gnome.org/projects/NetworkManager/"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="gtk"
+
+RDEPEND="
+ >=net-misc/networkmanager-0.9.8:=
+ >=dev-libs/dbus-glib-0.74
+ dev-libs/libxml2:2
+ gnome-base/libgnome-keyring
+ >=net-misc/openconnect-3.02:=
+ gtk? (
+ >=x11-libs/gtk+-2.91.4:3
+ gnome-base/gnome-keyring
+ )"
+
+DEPEND="${RDEPEND}
+ sys-devel/gettext
+ dev-util/intltool
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ # fix build failure with >=openconnect-5.99; in next release
+ epatch "${FILESDIR}/${P}-auth-dialog-"{formchoice,newgroup,ignore}.patch
+ gnome2_disable_deprecation_warning
+ default
+}
+
+src_configure() {
+ econf \
+ --disable-more-warnings \
+ --disable-static \
+ --with-gtkver=3 \
+ $(use_with gtk gnome) \
+ $(use_with gtk authdlg)
+}
+
+src_install() {
+ default
+ prune_libtool_files --modules
+}
+
+pkg_postinst() {
+ enewgroup nm-openconnect
+ enewuser nm-openconnect -1 -1 -1 nm-openconnect
+}