diff options
author | Robby Workman <rworkman@slackbuilds.org> | 2016-01-02 22:43:09 -0600 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2016-01-17 09:40:16 +0700 |
commit | 09612fa87d14a00c944f5a2631c6b5a3c123e469 (patch) | |
tree | f189ab1517cd8b6fa2550c91c9be319087273e2f | |
parent | 708fc2697c10502d0d667b258e9f8c56ee196112 (diff) |
network/NetworkManager-openconnect: Updated for version 1.0.8.
Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
5 files changed, 18 insertions, 862 deletions
diff --git a/network/NetworkManager-openconnect/NetworkManager-openconnect-0.9.8.6-libopenconnect5.patch b/network/NetworkManager-openconnect/NetworkManager-openconnect-0.9.8.6-libopenconnect5.patch deleted file mode 100644 index 21a68000446e2..0000000000000 --- a/network/NetworkManager-openconnect/NetworkManager-openconnect-0.9.8.6-libopenconnect5.patch +++ /dev/null @@ -1,836 +0,0 @@ -commit a965a00b2b4ba93a6ddbd7ff9dbf2d5ac08e2a66 -Author: David Woodhouse <David.Woodhouse@intel.com> -Date: Mon Nov 3 17:39:43 2014 +0000 - - Update to new hash handling, fix to match stored certs only for the same host/port - - (cherry picked from commit 2dc45e25b200e1b70e862f46c9f7ad652e59c8a2) - - Conflicts: - auth-dialog/main.c - -commit eb0bbb7254a3623b0bee32f30d31bcff7b91fb5d -Author: David Woodhouse <David.Woodhouse@intel.com> -Date: Thu Oct 30 23:16:20 2014 +0000 - - Drop support for libopenconnect.so.1 - - (cherry picked from commit b8c7e773204d3b4a85a27d7d2ae58dfc1939e1a8) - - Conflicts: - auth-dialog/main.c - -commit 9e4b394da0c29d77de9a110603aefa437c6b4173 -Author: David Woodhouse <David.Woodhouse@intel.com> -Date: Thu Oct 30 23:09:14 2014 +0000 - - Support libopenconnect.so.4 - - (cherry picked from commit 58944a3ef9c92f7afa07cbb539d062e1956bafc0) - -commit b3709a279c7e82dab34462bfc311d7d080255fc0 -Author: David Woodhouse <David.Woodhouse@intel.com> -Date: Tue Aug 12 14:58:05 2014 +0100 - - Always return success from auth-dialog - - We want to store the secrets even when we ultimately failed to log in. - This was slightly suboptimal even before, when we were failing to remember - things like the 'autoconnect' and 'certsigs' secrets. But now with HOTP - it's particularly important that we keep track of which tokens have been - used *even* if we end up failing to log in. - - Even if we don't get a valid login cookie, it's OK to return success. - - (cherry picked from commit 5e899ec0dfff56ac15f9e19cccb8b8d17f792afd) - -commit 48530310d1a5d68c285343261eb4acfa55f3bdcb -Author: David Woodhouse <David.Woodhouse@intel.com> -Date: Tue Aug 12 14:55:39 2014 +0100 - - 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. - - (cherry picked from commit b3815e96635c8f89c6161bdb6de53cd3c01c8535) - -commit b5cbc8ca833353b8b712220c6cc7eab492d59835 -Author: Jiří Klimeš <jklimes@redhat.com> -Date: Fri May 30 12:06:52 2014 +0200 - - properties: use a real GError domain instead of 0 in export() - - (cherry picked from commit d16e7d1ea954516d0a12a7b4b8ebf67c15a11746) - -commit a90c1cd297aaa6120f253e0c13e70c1c09fa21bd -Author: Dan Williams <dcbw@redhat.com> -Date: Thu Apr 10 12:22:28 2014 -0500 - - properties: don't overwrite a GError and use real GError domains - - Fixes warnings when importing connections. - -commit c78853ced9a61e6bb91a7ea75f95f2ea94f3e535 -Author: Piotr Drąg <piotrdrag@gmail.com> -Date: Fri Mar 14 17:14:03 2014 +0100 - - Updated Polish translation -diff --git a/auth-dialog/main.c b/auth-dialog/main.c -index bc03cba..49c4ce0 100644 ---- a/auth-dialog/main.c -+++ b/auth-dialog/main.c -@@ -48,20 +48,6 @@ - - #include "openconnect.h" - --#if OPENCONNECT_API_VERSION_MAJOR == 1 --#define openconnect_vpninfo_new openconnect_vpninfo_new_with_cbdata --#define openconnect_init_ssl openconnect_init_openssl --#endif -- --#ifndef OPENCONNECT_CHECK_VER --#define OPENCONNECT_CHECK_VER(x,y) 0 --#endif -- --#if !OPENCONNECT_CHECK_VER(1,5) --#define OPENCONNECT_X509 X509 --#define OPENCONNECT_OPENSSL --#endif -- - #if !OPENCONNECT_CHECK_VER(2,1) - #define __openconnect_set_token_mode(...) -EOPNOTSUPP - #elif !OPENCONNECT_CHECK_VER(2,2) -@@ -88,10 +74,19 @@ - #define OC_FORM_RESULT_NEWGROUP 2 - #endif - --#ifdef OPENCONNECT_OPENSSL --#include <openssl/ssl.h> --#include <openssl/bio.h> --#include <openssl/ui.h> -+#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 - - static const GnomeKeyringPasswordSchema OPENCONNECT_SCHEMA_DEF = { -@@ -184,7 +179,6 @@ typedef struct auth_ui_data { - GtkWidget *last_notice_icon; - GtkTextBuffer *log; - -- int retval; - int cookie_retval; - - int cancel_pipes[2]; -@@ -305,9 +299,6 @@ typedef struct ui_fragment_data { - GtkWidget *entry; - gpointer find_request; - auth_ui_data *ui_data; --#ifdef OPENCONNECT_OPENSSL -- UI_STRING *uis; --#endif - struct oc_form_opt *opt; - char *entry_text; - int initial_selection; -@@ -319,27 +310,9 @@ static void entry_activate_cb(GtkWidget *widget, auth_ui_data *ui_data) - gtk_dialog_response(GTK_DIALOG(ui_data->dialog), AUTH_DIALOG_RESPONSE_LOGIN); - } - --#ifdef OPENCONNECT_OPENSSL --static void do_check_visibility(ui_fragment_data *data, gboolean *visible) --{ -- int min_len; -- -- if (!data->uis) -- return; -- -- min_len = UI_get_result_minsize(data->uis); -- -- if (min_len && (!data->entry_text || strlen(data->entry_text) < min_len)) -- *visible = FALSE; --} --#endif - static void evaluate_login_visibility(auth_ui_data *ui_data) - { - gboolean visible = TRUE; --#ifdef OPENCONNECT_OPENSSL -- g_queue_foreach(ui_data->form_entries, (GFunc)do_check_visibility, -- &visible); --#endif - gtk_widget_set_sensitive (ui_data->login_button, visible); - } - -@@ -347,9 +320,6 @@ static void entry_changed(GtkEntry *entry, ui_fragment_data *data) - { - g_free (data->entry_text); - data->entry_text = g_strdup(gtk_entry_get_text(entry)); --#ifdef OPENCONNECT_OPENSSL -- evaluate_login_visibility(data->ui_data); --#endif - } - - static void do_override_label(ui_fragment_data *data, struct oc_choice *choice) -@@ -391,26 +361,6 @@ static void combo_changed(GtkComboBox *combo, ui_fragment_data *data) - FORMCHOICE(sopt, entry)); - } - --#ifdef OPENCONNECT_OPENSSL --static gboolean ui_write_error (ui_fragment_data *data) --{ -- ssl_box_add_error(data->ui_data, UI_get0_output_string(data->uis)); -- -- g_slice_free (ui_fragment_data, data); -- -- return FALSE; --} -- --static gboolean ui_write_info (ui_fragment_data *data) --{ -- ssl_box_add_info(data->ui_data, UI_get0_output_string(data->uis)); -- -- g_slice_free (ui_fragment_data, data); -- -- return FALSE; --} --#endif -- - static gboolean ui_write_prompt (ui_fragment_data *data) - { - auth_ui_data *ui_data = _ui_data; /* FIXME global */ -@@ -418,16 +368,8 @@ static gboolean ui_write_prompt (ui_fragment_data *data) - int visible; - const char *label; - --#ifdef OPENCONNECT_OPENSSL -- if (data->uis) { -- label = UI_get0_output_string(data->uis); -- visible = UI_get_input_flags(data->uis) & UI_INPUT_FLAG_ECHO; -- } else --#endif -- { -- label = data->opt->label; -- visible = (data->opt->type == OC_FORM_OPT_TEXT); -- } -+ label = data->opt->label; -+ visible = (data->opt->type == OC_FORM_OPT_TEXT); - - #if GTK_CHECK_VERSION(3,1,6) - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); -@@ -524,128 +466,6 @@ static gboolean ui_show (auth_ui_data *ui_data) - return FALSE; - } - --#ifdef OPENCONNECT_OPENSSL --/* runs in worker thread */ --static int ui_open(UI *ui) --{ -- auth_ui_data *ui_data = _ui_data; /* FIXME global */ -- -- UI_add_user_data(ui, ui_data); -- -- return 1; --} -- --/* runs in worker thread */ --static int ui_write(UI *ui, UI_STRING *uis) --{ -- auth_ui_data *ui_data; -- ui_fragment_data *data; -- -- ui_data = UI_get0_user_data(ui); -- -- /* return if a new host has been selected */ -- if (ui_data->cancelled) { -- return 1; -- } -- -- data = g_slice_new0 (ui_fragment_data); -- data->ui_data = ui_data; -- data->uis = uis; -- -- switch(UI_get_string_type(uis)) { -- case UIT_ERROR: -- g_idle_add ((GSourceFunc)ui_write_error, data); -- break; -- -- case UIT_INFO: -- g_idle_add ((GSourceFunc)ui_write_info, data); -- break; -- -- case UIT_PROMPT: -- case UIT_VERIFY: -- g_mutex_lock (ui_data->form_mutex); -- g_queue_push_head(ui_data->form_entries, data); -- g_mutex_unlock (ui_data->form_mutex); -- -- g_idle_add ((GSourceFunc)ui_write_prompt, data); -- break; -- -- case UIT_BOOLEAN: -- /* FIXME */ -- case UIT_NONE: -- default: -- g_slice_free (ui_fragment_data, data); -- } -- return 1; --} -- --/* runs in worker thread */ --static int ui_flush(UI* ui) --{ -- auth_ui_data *ui_data; -- int response; -- -- ui_data = UI_get0_user_data(ui); -- -- g_idle_add((GSourceFunc)ui_show, ui_data); -- g_mutex_lock(ui_data->form_mutex); -- /* wait for ui to show */ -- while (!ui_data->form_shown) { -- g_cond_wait(ui_data->form_shown_changed, ui_data->form_mutex); -- } -- ui_data->form_shown = FALSE; -- -- if (!ui_data->cancelled) { -- /* wait for form submission or cancel */ -- while (!ui_data->form_retval) { -- g_cond_wait(ui_data->form_retval_changed, ui_data->form_mutex); -- } -- response = GPOINTER_TO_INT (ui_data->form_retval); -- ui_data->form_retval = NULL; -- } else -- response = AUTH_DIALOG_RESPONSE_CANCEL; -- -- /* set entry results and free temporary data structures */ -- while (!g_queue_is_empty (ui_data->form_entries)) { -- ui_fragment_data *data; -- data = g_queue_pop_tail (ui_data->form_entries); -- if (data->entry_text) { -- UI_set_result(ui, data->uis, data->entry_text); -- } -- if (data->find_request) { -- gnome_keyring_cancel_request(data->find_request); -- } -- g_slice_free (ui_fragment_data, data); -- } -- ui_data->form_grabbed = 0; -- g_mutex_unlock(ui_data->form_mutex); -- -- /* -1 = cancel, -- * 0 = failure, -- * 1 = success */ -- return (response == AUTH_DIALOG_RESPONSE_LOGIN ? 1 : -1); --} -- --/* runs in worker thread */ --static int ui_close(UI *ui) --{ -- return 1; --} -- --static int init_openssl_ui(void) --{ -- UI_METHOD *ui_method = UI_create_method("OpenConnect VPN UI (gtk)"); -- -- UI_method_set_opener(ui_method, ui_open); -- UI_method_set_flusher(ui_method, ui_flush); -- UI_method_set_writer(ui_method, ui_write); -- UI_method_set_closer(ui_method, ui_close); -- -- UI_set_default_method(ui_method); -- return 0; --} --#endif /* OPENCONNECT_OPENSSL */ -- - static char *find_form_answer(GHashTable *secrets, struct oc_auth_form *form, - struct oc_form_opt *opt) - { -@@ -723,7 +543,7 @@ static gboolean ui_form (struct oc_auth_form *form) - 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 { - data->find_request = gnome_keyring_find_password( - OPENCONNECT_SCHEMA, -@@ -786,8 +606,7 @@ static gboolean set_initial_authgroup (auth_ui_data *ui_data, struct oc_auth_for - 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; - } - } -@@ -833,7 +652,7 @@ static int nm_process_auth_form (void *cbdata, struct oc_auth_form *form) - gnome_keyring_cancel_request(data->find_request); - - 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) { -@@ -884,7 +703,7 @@ static char* get_title(const char *vpn_name) - - typedef struct cert_data { - auth_ui_data *ui_data; -- OPENCONNECT_X509 *peer_cert; -+ char *cert_details; - const char *reason; - } cert_data; - -@@ -912,13 +731,10 @@ static gboolean user_validate_cert(cert_data *data) - { - 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, -@@ -941,8 +757,7 @@ static gboolean user_validate_cert(cert_data *data) - - 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); -@@ -965,36 +780,40 @@ static gboolean user_validate_cert(cert_data *data) - - /* 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; -+#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 - -- while (*this) { -- if (!strcmp(*this, fingerprint)) { -- g_strfreev(certs); -- goto out; -- } -- this++; -- } -- g_strfreev(certs); -- } -+ 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); -@@ -1006,24 +825,25 @@ static int validate_peer_cert(void *cbdata, - 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; - } - -@@ -1176,7 +996,7 @@ static int get_config (GHashTable *options, GHashTable *secrets, - - 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")) { -@@ -1186,16 +1006,16 @@ static int get_config (GHashTable *options, GHashTable *secrets, - 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); -@@ -1203,7 +1023,9 @@ static int get_config (GHashTable *options, GHashTable *secrets, - 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; - -@@ -1213,6 +1035,10 @@ static int get_config (GHashTable *options, GHashTable *secrets, - 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); -@@ -1238,7 +1064,18 @@ static void populate_vpnhost_combo(auth_ui_data *ui_data) - } - } - --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"), -@@ -1387,9 +1224,8 @@ static gboolean cookie_obtained(auth_ui_data *ui_data) - gtk_widget_show_all(ui_data->ssl_box); - gtk_widget_set_sensitive(ui_data->cancel_button, FALSE); - } -- ui_data->retval = 1; - } else if (!ui_data->cookie_retval) { -- OPENCONNECT_X509 *cert; -+ const void *cert; - gchar *key, *value; - - /* got cookie */ -@@ -1411,26 +1247,32 @@ static gboolean cookie_obtained(auth_ui_data *ui_data) - 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, - NULL); - } -- ui_data->retval = 0; - - gtk_main_quit(); - } else { - /* no cookie; user cancellation */ - gtk_widget_show (ui_data->no_form_label); -- ui_data->retval = 1; - } - - g_hash_table_remove_all (ui_data->success_secrets); -@@ -1487,11 +1329,11 @@ static void connect_host(auth_ui_data *ui_data) - 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"), -@@ -1708,7 +1550,6 @@ static auth_ui_data *init_ui_data (char *vpn_name, GHashTable *options, GHashTab - auth_ui_data *ui_data; - - ui_data = g_slice_new0(auth_ui_data); -- ui_data->retval = 1; - - ui_data->form_entries = g_queue_new(); - #if GLIB_CHECK_VERSION(2,31,0) -@@ -1868,11 +1709,13 @@ int main (int argc, char **argv) - fprintf(stderr, "Failed to find VPN UUID %s\n", vpn_uuid); - return 1; - } -- build_main_dialog(_ui_data); - --#ifdef OPENCONNECT_OPENSSL -- init_openssl_ui(); -+#if OPENCONNECT_CHECK_VER(3,4) -+ openconnect_set_token_callbacks (_ui_data->vpninfo, _ui_data, NULL, update_token); - #endif -+ -+ build_main_dialog(_ui_data); -+ - openconnect_init_ssl(); - - /* Start connecting now if there's only one host. Or if configured to */ -@@ -1893,5 +1736,5 @@ int main (int argc, char **argv) - - wait_for_quit (); - -- return _ui_data->retval; -+ return 0; - } -diff --git a/properties/nm-openconnect-dialog.ui b/properties/nm-openconnect-dialog.ui -index b3401db..4643b73 100644 ---- a/properties/nm-openconnect-dialog.ui -+++ b/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> -diff --git a/properties/nm-openconnect.c b/properties/nm-openconnect.c -index 3a9f69f..dfd5f5c 100644 ---- a/properties/nm-openconnect.c -+++ b/properties/nm-openconnect.c -@@ -95,6 +95,26 @@ typedef struct { - #define COL_AUTH_PAGE 1 - #define COL_AUTH_TYPE 2 - -+/************** import/export **************/ -+ -+typedef enum { -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_UNKNOWN = 0, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_NOT_OPENCONNECT, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_BAD_DATA, -+} NMOpenconnectImportError; -+ -+#define NM_OPENCONNECT_IMPORT_EXPORT_ERROR nm_openconnect_import_export_error_quark () -+ -+static GQuark -+nm_openconnect_import_export_error_quark (void) -+{ -+ static GQuark quark = 0; -+ -+ if (G_UNLIKELY (quark == 0)) -+ quark = g_quark_from_static_string ("nm-openconnect-import-export-error-quark"); -+ return quark; -+} -+ - static NMConnection * - import (NMVpnPluginUiInterface *iface, const char *path, GError **error) - { -@@ -110,8 +130,12 @@ import (NMVpnPluginUiInterface *iface, const char *path, GError **error) - keyfile = g_key_file_new (); - flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; - -- if (!g_key_file_load_from_file (keyfile, path, flags, error)) { -- g_set_error (error, 0, 0, "does not look like a %s VPN connection (parse failed)", OPENCONNECT_PLUGIN_NAME); -+ if (!g_key_file_load_from_file (keyfile, path, flags, NULL)) { -+ g_set_error (error, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_NOT_OPENCONNECT, -+ "does not look like a %s VPN connection (parse failed)", -+ OPENCONNECT_PLUGIN_NAME); - return NULL; - } - -@@ -131,7 +155,11 @@ import (NMVpnPluginUiInterface *iface, const char *path, GError **error) - if (buf) { - nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_GATEWAY, buf); - } else { -- g_set_error (error, 0, 0, "does not look like a %s VPN connection (no Host)", OPENCONNECT_PLUGIN_NAME); -+ g_set_error (error, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_BAD_DATA, -+ "does not look like a %s VPN connection (no Host)", -+ OPENCONNECT_PLUGIN_NAME); - g_object_unref (connection); - return NULL; - } -@@ -186,7 +214,7 @@ import (NMVpnPluginUiInterface *iface, const char *path, GError **error) - /* 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; - } -@@ -215,7 +243,10 @@ export (NMVpnPluginUiInterface *iface, - - f = fopen (path, "w"); - if (!f) { -- g_set_error (error, 0, 0, "could not open file for writing"); -+ g_set_error_literal (error, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_UNKNOWN, -+ "could not open file for writing"); - return FALSE; - } - -@@ -227,7 +258,10 @@ export (NMVpnPluginUiInterface *iface, - if (value && strlen (value)) - gateway = value; - else { -- g_set_error (error, 0, 0, "connection was incomplete (missing gateway)"); -+ g_set_error_literal (error, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR, -+ NM_OPENCONNECT_IMPORT_EXPORT_ERROR_BAD_DATA, -+ "connection was incomplete (missing gateway)"); - goto done; - } - -@@ -263,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" -@@ -393,6 +432,9 @@ init_token_mode_options (GtkComboBox *token_mode) - 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++; -@@ -458,7 +500,9 @@ init_token_ui (OpenconnectPluginUiWidget *self, - 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); - } -@@ -619,7 +663,7 @@ update_connection (NMVpnPluginUiWidgetInterface *iface, - *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)) diff --git a/network/NetworkManager-openconnect/NetworkManager-openconnect.SlackBuild b/network/NetworkManager-openconnect/NetworkManager-openconnect.SlackBuild index 98cdc52f56040..003ddab0734b0 100644 --- a/network/NetworkManager-openconnect/NetworkManager-openconnect.SlackBuild +++ b/network/NetworkManager-openconnect/NetworkManager-openconnect.SlackBuild @@ -23,7 +23,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. PRGNAM=NetworkManager-openconnect -VERSION=${VERSION:-0.9.8.6} +VERSION=${VERSION:-1.0.8} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -54,6 +54,15 @@ else LIBDIRSUFFIX="" fi +# Bail out if user isn't valid on your system +# For slackbuilds.org, assigned nm-openconnect uid is 321 +# See http://slackbuilds.org/uid_gid.txt +if ! getent passwd nm-openconnect 2>&1 > /dev/null; then + echo " You must have a \"nm-openconnect\" user to run this script." + echo " # useradd -u 320 -g nogroup -d /var/empty -s /bin/false nm-openconnect" + exit 1 +fi + set -e rm -rf $PKG @@ -69,12 +78,6 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -# Support openconnect-7.x -patch -p1 < $CWD/NetworkManager-openconnect-0.9.8.6-libopenconnect5.patch - -# Remove mention of an extraneous user account from the dbus config file -patch -p1 < $CWD/nm-openconnect-service.conf.diff - CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ diff --git a/network/NetworkManager-openconnect/NetworkManager-openconnect.info b/network/NetworkManager-openconnect/NetworkManager-openconnect.info index d8af13bf73cff..28cd0b2d310a7 100644 --- a/network/NetworkManager-openconnect/NetworkManager-openconnect.info +++ b/network/NetworkManager-openconnect/NetworkManager-openconnect.info @@ -1,8 +1,8 @@ PRGNAM="NetworkManager-openconnect" -VERSION="0.9.8.6" +VERSION="1.0.8" HOMEPAGE="http://projects.gnome.org/NetworkManager/" -DOWNLOAD="http://ftp.gnome.org/pub/GNOME/sources/NetworkManager-openconnect/0.9/NetworkManager-openconnect-0.9.8.6.tar.xz" -MD5SUM="f0c8b87704af77ea764f70d5bdef91ca" +DOWNLOAD="http://ftp.gnome.org/pub/GNOME/sources/NetworkManager-openconnect/1.0/NetworkManager-openconnect-1.0.8.tar.xz" +MD5SUM="c4d496016bad3f901fccbb571702df32" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="openconnect" diff --git a/network/NetworkManager-openconnect/README b/network/NetworkManager-openconnect/README index c5c8f064019bd..4c1b2d2d6f878 100644 --- a/network/NetworkManager-openconnect/README +++ b/network/NetworkManager-openconnect/README @@ -1,4 +1,7 @@ Cisco AnyConnect VPN support for NetworkManager. -If you are using KDE's networkmanagement client, then you -will also need the kde-networkmanagement-openconnect package. +If you are using KDE's plasma-nm applet, then you will also +need the plasma-nm-openconnect package. + +You will need an "nm-openconnect" user to use this. Suggested: +# useradd -u 321 -g nogroup -d /var/empty -s /bin/false nm-openconnect diff --git a/network/NetworkManager-openconnect/nm-openconnect-service.conf.diff b/network/NetworkManager-openconnect/nm-openconnect-service.conf.diff deleted file mode 100644 index a604132b82ea6..0000000000000 --- a/network/NetworkManager-openconnect/nm-openconnect-service.conf.diff +++ /dev/null @@ -1,14 +0,0 @@ -diff -Nur NetworkManager-openconnect-0.8.1.orig//nm-openconnect-service.conf NetworkManager-openconnect-0.8.1/nm-openconnect-service.conf ---- NetworkManager-openconnect-0.8.1.orig//nm-openconnect-service.conf 2009-04-20 06:09:58.000000000 -0500 -+++ NetworkManager-openconnect-0.8.1/nm-openconnect-service.conf 2010-09-12 11:57:41.100526093 -0500 -@@ -6,10 +6,6 @@ - <allow own="org.freedesktop.NetworkManager.openconnect"/> - <allow send_destination="org.freedesktop.NetworkManager.openconnect"/> - </policy> -- <policy user="nm-openconnect"> -- <allow own="org.freedesktop.NetworkManager.openconnect"/> -- <allow send_destination="org.freedesktop.NetworkManager.openconnect"/> -- </policy> - <policy context="default"> - <deny own="org.freedesktop.NetworkManager.openconnect"/> - <deny send_destination="org.freedesktop.NetworkManager.openconnect"/> |