Hello community,
here is the log from the commit of package NetworkManager-openconnect for
openSUSE:Factory checked in at 2014-12-10 23:44:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/NetworkManager-openconnect (Old)
and /work/SRC/openSUSE:Factory/.NetworkManager-openconnect.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "NetworkManager-openconnect"
Changes:
--------
---
/work/SRC/openSUSE:Factory/NetworkManager-openconnect/NetworkManager-openconnect.changes
2014-07-24 00:21:55.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.NetworkManager-openconnect.new/NetworkManager-openconnect.changes
2014-12-10 23:44:06.000000000 +0100
@@ -1,0 +2,6 @@
+Mon Dec 8 08:40:44 UTC 2014 - [email protected]
+
+- Add NetworkManager-openconnect-7.0.patch: Fix build with
+ OpenConnect 7.0. Patch taken from git, commit 58944a3.
+
+-------------------------------------------------------------------
New:
----
NetworkManager-openconnect-7.0.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ NetworkManager-openconnect.spec ++++++
--- /var/tmp/diff_new_pack.CMB8xt/_old 2014-12-10 23:44:07.000000000 +0100
+++ /var/tmp/diff_new_pack.CMB8xt/_new 2014-12-10 23:44:07.000000000 +0100
@@ -25,6 +25,8 @@
Group: Productivity/Networking/System
Url: http://www.gnome.org/projects/NetworkManager
Source0:
http://download.gnome.org/sources/NetworkManager-openconnect/0.9/%{name}-%{version}.tar.xz
+# PATCH-FIX-UPSTREAM NetworkManager-openconnect-7.0.patch [email protected]
-- Fix build with OpenConnect 7.0, taken from git.
+Patch0: NetworkManager-openconnect-7.0.patch
BuildRequires: intltool
BuildRequires: openconnect-devel >= 3.02
BuildRequires: translation-update-upstream
@@ -62,6 +64,7 @@
%lang_package
%prep
%setup -q
+%patch0 -p1
translation-update-upstream
%build
++++++ NetworkManager-openconnect-7.0.patch ++++++
>From b3815e96635c8f89c6161bdb6de53cd3c01c8535 Mon Sep 17 00:00:00 2001
From: David Woodhouse <[email protected]>
Date: Tue, 12 Aug 2014 14:55:39 +0100
Subject: Add HOTP support
This requires migrating the token_secret from a config item to a secret,
which thankfully doesn't seem to be too diffcult.
Index: NetworkManager-openconnect-0.9.10.0/auth-dialog/main.c
===================================================================
--- NetworkManager-openconnect-0.9.10.0.orig/auth-dialog/main.c
+++ NetworkManager-openconnect-0.9.10.0/auth-dialog/main.c
@@ -89,6 +89,21 @@
#define OC_FORM_RESULT_NEWGROUP 2
#endif
+#if OPENCONNECT_CHECK_VER(4,0)
+#define dup_option_value(opt) g_strdup((opt)->_value);
+#define OC3DUP(x) (x)
+#define write_config_const const
+#else
+#define dup_option_value(opt) g_strdup((opt)->value);
+#define openconnect_set_option_value(opt, val) do { \
+ struct oc_form_opt *_o = (opt); \
+ free(_o->value); _o->value = g_strdup(val); \
+ } while (0)
+#define openconnect_free_cert_info(v, x) free(x)
+#define OC3DUP(x) g_strdup(x)
+#define write_config_const /* */
+#endif
+
#ifdef OPENCONNECT_OPENSSL
#include <openssl/ssl.h>
#include <openssl/bio.h>
@@ -713,7 +728,7 @@ static gboolean ui_form (struct oc_auth_
data->entry_text = g_strdup
(find_form_answer(ui_data->secrets,
form, opt));
if (!data->entry_text)
- data->entry_text = g_strdup
(opt->value);
+ data->entry_text =
dup_option_value(opt);
} else {
GHashTable *attrs;
@@ -777,8 +792,7 @@ static gboolean set_initial_authgroup (a
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);
+ openconnect_set_option_value(opt, saved_group);
return TRUE;
}
}
@@ -824,7 +838,7 @@ static int nm_process_auth_form (void *c
g_cancellable_cancel(data->cancel);
if (data->entry_text) {
- data->opt->value = g_strdup (data->entry_text);
+ openconnect_set_option_value(data->opt,
data->entry_text);
if (data->opt->type == OC_FORM_OPT_TEXT ||
data->opt->type == OC_FORM_OPT_SELECT) {
@@ -875,7 +889,7 @@ static char* get_title(const char *vpn_n
typedef struct cert_data {
auth_ui_data *ui_data;
- OPENCONNECT_X509 *peer_cert;
+ char *cert_details;
const char *reason;
} cert_data;
@@ -903,13 +917,10 @@ static gboolean user_validate_cert(cert_
{
auth_ui_data *ui_data = _ui_data; /* FIXME global */
char *title;
- char *details;
GtkWidget *dlg, *text, *scroll;
GtkTextBuffer *buffer;
int result;
- details = openconnect_get_cert_details(ui_data->vpninfo,
data->peer_cert);
-
title = get_title(data->ui_data->vpn_name);
dlg = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_QUESTION,
GTK_BUTTONS_OK_CANCEL,
@@ -932,8 +943,7 @@ static gboolean user_validate_cert(cert_
text = gtk_text_view_new();
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
- gtk_text_buffer_set_text(buffer, details, -1);
- free(details);
+ gtk_text_buffer_set_text(buffer, data->cert_details, -1);
gtk_text_view_set_editable(GTK_TEXT_VIEW(text), 0);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text), FALSE);
gtk_container_add(GTK_CONTAINER(scroll), text);
@@ -956,36 +966,40 @@ static gboolean user_validate_cert(cert_
/* runs in worker thread */
static int validate_peer_cert(void *cbdata,
- OPENCONNECT_X509 *peer_cert, const char *reason)
+#if !OPENCONNECT_CHECK_VER(5,0)
+ OPENCONNECT_X509 *peer_cert,
+#endif
+ const char *reason)
{
auth_ui_data *ui_data = cbdata;
- char fingerprint[41];
- char *certs_data;
int ret = 0;
cert_data *data;
+ char *certkey;
+ char *accepted_hash = NULL;
+#if OPENCONNECT_CHECK_VER(5,0)
+ const char *fingerprint =
openconnect_get_peer_cert_hash(ui_data->vpninfo);
+#else
+ char fingerprint[41];
ret = openconnect_get_cert_sha1(ui_data->vpninfo, peer_cert,
fingerprint);
if (ret)
return ret;
- certs_data = g_hash_table_lookup (ui_data->secrets, "certsigs");
- if (certs_data) {
- char **certs = g_strsplit_set(certs_data, "\t", 0);
- char **this = certs;
-
- while (*this) {
- if (!strcmp(*this, fingerprint)) {
- g_strfreev(certs);
- goto out;
- }
- this++;
- }
- g_strfreev(certs);
- }
+#define openconnect_check_peer_cert_hash(v, h) strcmp(h, fingerprint)
+#define openconnect_get_peer_cert_details(v) openconnect_get_cert_details(v,
peer_cert);
+#endif
+
+ certkey = g_strdup_printf ("certificate:%s:%d",
+ openconnect_get_hostname(ui_data->vpninfo),
+ openconnect_get_port(ui_data->vpninfo));
+
+ accepted_hash = g_hash_table_lookup (ui_data->secrets, certkey);
+ if (accepted_hash &&
!openconnect_check_peer_cert_hash(ui_data->vpninfo, accepted_hash))
+ goto accepted;
data = g_slice_new(cert_data);
data->ui_data = ui_data; /* FIXME uses global */
- data->peer_cert = peer_cert;
+ data->cert_details =
openconnect_get_peer_cert_details(ui_data->vpninfo);
data->reason = reason;
g_mutex_lock(&ui_data->form_mutex);
@@ -994,27 +1008,27 @@ static int validate_peer_cert(void *cbda
g_idle_add((GSourceFunc)user_validate_cert, data);
/* wait for user to accept or cancel */
- while (ui_data->cert_response == CERT_USER_NOT_READY) {
+ while (ui_data->cert_response == CERT_USER_NOT_READY)
g_cond_wait(&ui_data->cert_response_changed,
&ui_data->form_mutex);
- }
- if (ui_data->cert_response == CERT_ACCEPTED) {
- if (certs_data) {
- char *new = g_strdup_printf("%s\t%s", certs_data,
fingerprint);
- g_hash_table_insert (ui_data->secrets,
- g_strdup ("certsigs"), new);
- } else {
- g_hash_table_insert (ui_data->secrets, g_strdup
("certsigs"),
- g_strdup (fingerprint));
- }
+
+ openconnect_free_cert_info(data->ui_data->vpninfo, data->cert_details);
+ g_slice_free(cert_data, data);
+
+ if (ui_data->cert_response == CERT_ACCEPTED)
ret = 0;
- } else {
+ else
ret = -EINVAL;
- }
+
g_mutex_unlock (&ui_data->form_mutex);
- g_slice_free(cert_data, data);
+ accepted:
+ if (!ret) {
+ g_hash_table_insert (ui_data->secrets, certkey,
+ g_strdup(fingerprint));
+ certkey = NULL;
+ }
- out:
+ g_free (certkey);
return ret;
}
@@ -1167,7 +1181,7 @@ static int get_config (GHashTable *optio
cafile = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_CACERT);
if (cafile)
- openconnect_set_cafile(vpninfo, g_strdup (cafile));
+ openconnect_set_cafile(vpninfo, OC3DUP (cafile));
csd = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_CSD_ENABLE);
if (csd && !strcmp(csd, "yes")) {
@@ -1177,16 +1191,16 @@ static int get_config (GHashTable *optio
if (csd_wrapper && !csd_wrapper[0])
csd_wrapper = NULL;
- openconnect_setup_csd(vpninfo, getuid(), 1, g_strdup
(csd_wrapper));
+ openconnect_setup_csd(vpninfo, getuid(), 1, OC3DUP
(csd_wrapper));
}
proxy = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_PROXY);
- if (proxy && proxy[0] && openconnect_set_http_proxy(vpninfo, g_strdup
(proxy)))
+ if (proxy && proxy[0] && openconnect_set_http_proxy(vpninfo, OC3DUP
(proxy)))
return -EINVAL;
cert = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_USERCERT);
sslkey = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_PRIVKEY);
- openconnect_set_client_cert (vpninfo, g_strdup (cert), g_strdup
(sslkey));
+ openconnect_set_client_cert (vpninfo, OC3DUP (cert), OC3DUP (sslkey));
pem_passphrase_fsid = g_hash_table_lookup (options,
NM_OPENCONNECT_KEY_PEM_PASSPHRASE_FSID);
@@ -1194,7 +1208,9 @@ static int get_config (GHashTable *optio
openconnect_passphrase_from_fsid(vpninfo);
token_mode = g_hash_table_lookup (options,
NM_OPENCONNECT_KEY_TOKEN_MODE);
- token_secret = g_hash_table_lookup (options,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
+ token_secret = g_hash_table_lookup (secrets,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
+ if (!token_secret || !token_secret[0])
+ token_secret = g_hash_table_lookup (options,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
if (token_mode) {
int ret = 0;
@@ -1204,6 +1220,10 @@ static int get_config (GHashTable *optio
ret = __openconnect_set_token_mode(vpninfo,
OC_TOKEN_MODE_STOKEN, NULL);
else if (!strcmp(token_mode, "totp") && token_secret)
ret = __openconnect_set_token_mode(vpninfo,
OC_TOKEN_MODE_TOTP, token_secret);
+#if OPENCONNECT_CHECK_VER(3,4)
+ else if (!strcmp(token_mode, "hotp") && token_secret)
+ ret = __openconnect_set_token_mode(vpninfo,
OC_TOKEN_MODE_HOTP, token_secret);
+#endif
if (ret)
fprintf(stderr, "Failed to initialize software token:
%d\n", ret);
@@ -1229,7 +1249,18 @@ static void populate_vpnhost_combo(auth_
}
}
-static int write_new_config(void *cbdata, char *buf, int buflen)
+#if OPENCONNECT_CHECK_VER(3,4)
+static int update_token(void *cbdata, const char *tok)
+{
+ auth_ui_data *ui_data = cbdata;
+ g_hash_table_insert (ui_data->secrets, g_strdup
(NM_OPENCONNECT_KEY_TOKEN_SECRET),
+ g_strdup(tok));
+
+ return 0;
+}
+#endif
+
+static int write_new_config(void *cbdata, write_config_const char *buf, int
buflen)
{
auth_ui_data *ui_data = cbdata;
g_hash_table_insert (ui_data->secrets, g_strdup ("xmlconfig"),
@@ -1361,7 +1392,7 @@ static gboolean cookie_obtained(auth_ui_
}
ui_data->retval = 1;
} else if (!ui_data->cookie_retval) {
- OPENCONNECT_X509 *cert;
+ const void *cert;
gchar *key, *value;
/* got cookie */
@@ -1383,14 +1414,22 @@ static gboolean cookie_obtained(auth_ui_
g_hash_table_insert (ui_data->secrets, key, value);
openconnect_clear_cookie(ui_data->vpninfo);
+#if OPENCONNECT_CHECK_VER(5,0)
+ cert = openconnect_get_peer_cert_hash (ui_data->vpninfo);
+ if (cert) {
+ key = g_strdup (NM_OPENCONNECT_KEY_GWCERT);
+ value = g_strdup (cert);
+ g_hash_table_insert (ui_data->secrets, key, value);
+ }
+#else
cert = openconnect_get_peer_cert (ui_data->vpninfo);
if (cert) {
key = g_strdup (NM_OPENCONNECT_KEY_GWCERT);
value = g_malloc0 (41);
- openconnect_get_cert_sha1(ui_data->vpninfo, cert,
value);
+ openconnect_get_cert_sha1(ui_data->vpninfo, (void
*)cert, value);
g_hash_table_insert (ui_data->secrets, key, value);
}
-
+#endif
if (get_save_passwords(ui_data->secrets)) {
g_hash_table_foreach(ui_data->success_passwords,
keyring_store_passwords,
@@ -1459,11 +1498,11 @@ static void connect_host(auth_ui_data *u
if (openconnect_parse_url(ui_data->vpninfo, host->hostaddress)) {
fprintf(stderr, "Failed to parse server URL '%s'\n",
host->hostaddress);
- openconnect_set_hostname (ui_data->vpninfo,
g_strdup(host->hostaddress));
+ openconnect_set_hostname (ui_data->vpninfo, OC3DUP
(host->hostaddress));
}
if (!openconnect_get_urlpath(ui_data->vpninfo) && host->usergroup)
- openconnect_set_urlpath(ui_data->vpninfo,
g_strdup(host->usergroup));
+ openconnect_set_urlpath(ui_data->vpninfo, OC3DUP
(host->usergroup));
g_hash_table_insert (ui_data->success_secrets, g_strdup("lasthost"),
@@ -1801,6 +1840,11 @@ int main (int argc, char **argv)
fprintf(stderr, "Failed to find VPN UUID %s\n", vpn_uuid);
return 1;
}
+
+#if OPENCONNECT_CHECK_VER(3,4)
+ openconnect_set_token_callbacks (_ui_data->vpninfo, _ui_data, NULL,
update_token);
+#endif
+
build_main_dialog(_ui_data);
#ifdef OPENCONNECT_OPENSSL
Index: NetworkManager-openconnect-0.9.10.0/properties/nm-openconnect-dialog.ui
===================================================================
--- NetworkManager-openconnect-0.9.10.0.orig/properties/nm-openconnect-dialog.ui
+++ NetworkManager-openconnect-0.9.10.0/properties/nm-openconnect-dialog.ui
@@ -766,6 +766,12 @@
<col id="2" translatable="no">totp</col>
<col id="3" translatable="no">True</col>
</row>
+ <row>
+ <col id="0" translatable="yes">HOTP - manually entered</col>
+ <col id="1" translatable="no">hotp</col>
+ <col id="2" translatable="no">hotp</col>
+ <col id="3" translatable="no">True</col>
+ </row>
</data>
</object>
</interface>
Index: NetworkManager-openconnect-0.9.10.0/properties/nm-openconnect.c
===================================================================
--- NetworkManager-openconnect-0.9.10.0.orig/properties/nm-openconnect.c
+++ NetworkManager-openconnect-0.9.10.0/properties/nm-openconnect.c
@@ -214,7 +214,7 @@ import (NMVpnPluginUiInterface *iface, c
/* Soft token secret */
buf = g_key_file_get_string (keyfile, "openconnect", "StokenString",
NULL);
if (buf)
- nm_setting_vpn_add_data_item (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET, buf);
+ nm_setting_vpn_add_secret (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET, buf);
return connection;
}
@@ -297,9 +297,14 @@ export (NMVpnPluginUiInterface *iface,
if (value && strlen (value))
token_mode = value;
- value = nm_setting_vpn_get_data_item (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
+ value = nm_setting_vpn_get_secret (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
if (value && strlen (value))
token_secret = value;
+ else {
+ value = nm_setting_vpn_get_data_item (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
+ if (value && strlen (value))
+ token_secret = value;
+ }
fprintf (f,
"[openconnect]\n"
@@ -427,6 +432,9 @@ init_token_mode_options (GtkComboBox *to
iter_valid = gtk_list_store_remove (token_mode_list,
&iter);
else if (!strcmp (token_type, "totp") &&
!openconnect_has_oath_support ())
iter_valid = gtk_list_store_remove (token_mode_list,
&iter);
+ else if (!strcmp (token_type, "hotp") &&
+ (!openconnect_has_oath_support () ||
!OPENCONNECT_CHECK_VER(3,4)))
+ iter_valid = gtk_list_store_remove (token_mode_list,
&iter);
else {
iter_valid = gtk_tree_model_iter_next (model, &iter);
valid_rows++;
@@ -492,7 +500,9 @@ init_token_ui (OpenconnectPluginUiWidget
if (!buffer)
return FALSE;
if (s_vpn) {
- value = nm_setting_vpn_get_data_item (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
+ value = nm_setting_vpn_get_secret (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
+ if (!value)
+ value = nm_setting_vpn_get_data_item (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET);
if (value)
gtk_text_buffer_set_text (buffer, value, -1);
}
@@ -653,7 +663,7 @@ update_connection (NMVpnPluginUiWidgetIn
*dst = 0;
if (strlen (str))
- nm_setting_vpn_add_data_item (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET, str);
+ nm_setting_vpn_add_secret (s_vpn,
NM_OPENCONNECT_KEY_TOKEN_SECRET, str);
}
if (!check_validity (self, error))
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]