|
|
1aae59 |
From 1289e8ea1dbeb91012c262fcb6f014ec73d4c690 Mon Sep 17 00:00:00 2001
|
|
|
c791bc |
From: Jonathan Kang <jonathankang@gnome.org>
|
|
|
c791bc |
Date: Wed, 9 Sep 2020 14:58:06 +0800
|
|
|
1aae59 |
Subject: [PATCH 5/8] network: complete SAE support
|
|
|
c791bc |
|
|
|
c791bc |
Added WirelessSecuritySAE class to fully implement SAE support.
|
|
|
c791bc |
|
|
|
c791bc |
Heavily modifid and based on the 3.28.2 version of the WPA PSK widget.
|
|
|
c791bc |
|
|
|
c791bc |
(cherry picked from commit 918838f567740172591ff1f2c32d8227c348be72)
|
|
|
c791bc |
---
|
|
|
c791bc |
.../connection-editor/ce-page-security.c | 8 +-
|
|
|
c791bc |
panels/network/wireless-security/meson.build | 3 +
|
|
|
c791bc |
.../wireless-security.gresource.xml | 1 +
|
|
|
c791bc |
.../wireless-security/wireless-security.h | 1 +
|
|
|
1aae59 |
panels/network/wireless-security/ws-sae.c | 214 ++++++++++++++++++
|
|
|
c791bc |
panels/network/wireless-security/ws-sae.h | 30 +++
|
|
|
c791bc |
panels/network/wireless-security/ws-sae.ui | 117 ++++++++++
|
|
|
1aae59 |
7 files changed, 370 insertions(+), 4 deletions(-)
|
|
|
c791bc |
create mode 100644 panels/network/wireless-security/ws-sae.c
|
|
|
c791bc |
create mode 100644 panels/network/wireless-security/ws-sae.h
|
|
|
c791bc |
create mode 100644 panels/network/wireless-security/ws-sae.ui
|
|
|
c791bc |
|
|
|
c791bc |
diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c
|
|
|
c791bc |
index 5104d7442..37b1e1286 100644
|
|
|
c791bc |
--- a/panels/network/connection-editor/ce-page-security.c
|
|
|
c791bc |
+++ b/panels/network/connection-editor/ce-page-security.c
|
|
|
c791bc |
@@ -343,11 +343,11 @@ finish_setup (CEPageSecurity *page)
|
|
|
c791bc |
|
|
|
c791bc |
#if NM_CHECK_VERSION(1,20,6)
|
|
|
c791bc |
if (nm_utils_security_valid (NMU_SEC_SAE, dev_caps, FALSE, is_adhoc, 0, 0, 0)) {
|
|
|
c791bc |
- WirelessSecurityWPAPSK *ws_wpa_psk;
|
|
|
c791bc |
+ WirelessSecuritySAE *ws_sae;
|
|
|
c791bc |
|
|
|
c791bc |
- ws_wpa_psk = ws_wpa_psk_new (connection, FALSE);
|
|
|
c791bc |
- if (ws_wpa_psk) {
|
|
|
c791bc |
- add_security_item (page, WIRELESS_SECURITY (ws_wpa_psk), sec_model,
|
|
|
c791bc |
+ ws_sae = ws_sae_new (connection, FALSE);
|
|
|
c791bc |
+ if (ws_sae) {
|
|
|
c791bc |
+ add_security_item (page, WIRELESS_SECURITY (ws_sae), sec_model,
|
|
|
c791bc |
&iter, _("WPA3 Personal"), FALSE);
|
|
|
c791bc |
if ((active < 0) && ((default_type == NMU_SEC_SAE)))
|
|
|
c791bc |
active = item;
|
|
|
c791bc |
diff --git a/panels/network/wireless-security/meson.build b/panels/network/wireless-security/meson.build
|
|
|
c791bc |
index 47def7a63..6036f56af 100644
|
|
|
c791bc |
--- a/panels/network/wireless-security/meson.build
|
|
|
c791bc |
+++ b/panels/network/wireless-security/meson.build
|
|
|
c791bc |
@@ -14,6 +14,7 @@ nm_applet_headers = [
|
|
|
c791bc |
'wireless-security.h',
|
|
|
c791bc |
'ws-leap.h',
|
|
|
c791bc |
'ws-dynamic-wep.h',
|
|
|
c791bc |
+ 'ws-sae.h',
|
|
|
c791bc |
'ws-wep-key.h',
|
|
|
c791bc |
'ws-wpa-eap.h',
|
|
|
c791bc |
'ws-wpa-psk.h'
|
|
|
c791bc |
@@ -31,6 +32,7 @@ nm_applet_sources = [
|
|
|
c791bc |
'wireless-security.c',
|
|
|
c791bc |
'ws-leap.c',
|
|
|
c791bc |
'ws-dynamic-wep.c',
|
|
|
c791bc |
+ 'ws-sae.c',
|
|
|
c791bc |
'ws-wep-key.c',
|
|
|
c791bc |
'ws-wpa-eap.c',
|
|
|
c791bc |
'ws-wpa-psk.c'
|
|
|
c791bc |
@@ -47,6 +49,7 @@ nm_resource_data = [
|
|
|
c791bc |
'eap-method-ttls.ui',
|
|
|
c791bc |
'ws-dynamic-wep.ui',
|
|
|
c791bc |
'ws-leap.ui',
|
|
|
c791bc |
+ 'ws-sae.ui',
|
|
|
c791bc |
'ws-wep-key.ui',
|
|
|
c791bc |
'ws-wpa-eap.ui',
|
|
|
c791bc |
'ws-wpa-psk.ui'
|
|
|
c791bc |
diff --git a/panels/network/wireless-security/wireless-security.gresource.xml b/panels/network/wireless-security/wireless-security.gresource.xml
|
|
|
c791bc |
index a483d06a0..fa1a965ad 100644
|
|
|
c791bc |
--- a/panels/network/wireless-security/wireless-security.gresource.xml
|
|
|
c791bc |
+++ b/panels/network/wireless-security/wireless-security.gresource.xml
|
|
|
c791bc |
@@ -9,6 +9,7 @@
|
|
|
c791bc |
<file preprocess="xml-stripblanks">eap-method-ttls.ui</file>
|
|
|
c791bc |
<file preprocess="xml-stripblanks">ws-dynamic-wep.ui</file>
|
|
|
c791bc |
<file preprocess="xml-stripblanks">ws-leap.ui</file>
|
|
|
c791bc |
+ <file preprocess="xml-stripblanks">ws-sae.ui</file>
|
|
|
c791bc |
<file preprocess="xml-stripblanks">ws-wep-key.ui</file>
|
|
|
c791bc |
<file preprocess="xml-stripblanks">ws-wpa-eap.ui</file>
|
|
|
c791bc |
<file preprocess="xml-stripblanks">ws-wpa-psk.ui</file>
|
|
|
c791bc |
diff --git a/panels/network/wireless-security/wireless-security.h b/panels/network/wireless-security/wireless-security.h
|
|
|
c791bc |
index 975e750f6..c5508ad1b 100644
|
|
|
c791bc |
--- a/panels/network/wireless-security/wireless-security.h
|
|
|
c791bc |
+++ b/panels/network/wireless-security/wireless-security.h
|
|
|
c791bc |
@@ -102,6 +102,7 @@ GType wireless_security_get_type (void);
|
|
|
c791bc |
#include "ws-wep-key.h"
|
|
|
c791bc |
#include "ws-wpa-psk.h"
|
|
|
c791bc |
#include "ws-leap.h"
|
|
|
c791bc |
+#include "ws-sae.h"
|
|
|
c791bc |
#include "ws-wpa-eap.h"
|
|
|
c791bc |
#include "ws-dynamic-wep.h"
|
|
|
c791bc |
|
|
|
c791bc |
diff --git a/panels/network/wireless-security/ws-sae.c b/panels/network/wireless-security/ws-sae.c
|
|
|
c791bc |
new file mode 100644
|
|
|
1aae59 |
index 000000000..96138d522
|
|
|
c791bc |
--- /dev/null
|
|
|
c791bc |
+++ b/panels/network/wireless-security/ws-sae.c
|
|
|
1aae59 |
@@ -0,0 +1,214 @@
|
|
|
c791bc |
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
|
|
c791bc |
+/* NetworkManager Applet -- allow user control over networking
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * Dan Williams <dcbw@redhat.com>
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * This program is free software; you can redistribute it and/or modify
|
|
|
c791bc |
+ * it under the terms of the GNU General Public License as published by
|
|
|
c791bc |
+ * the Free Software Foundation; either version 2 of the License, or
|
|
|
c791bc |
+ * (at your option) any later version.
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * This program is distributed in the hope that it will be useful,
|
|
|
c791bc |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
c791bc |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
c791bc |
+ * GNU General Public License for more details.
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * You should have received a copy of the GNU General Public License along
|
|
|
c791bc |
+ * with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
c791bc |
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * Copyright 2007 - 2014 Red Hat, Inc.
|
|
|
c791bc |
+ */
|
|
|
c791bc |
+
|
|
|
c791bc |
+#include "nm-default.h"
|
|
|
c791bc |
+
|
|
|
c791bc |
+#include <ctype.h>
|
|
|
c791bc |
+#include <string.h>
|
|
|
c791bc |
+
|
|
|
c791bc |
+#include "wireless-security.h"
|
|
|
c791bc |
+#include "helpers.h"
|
|
|
c791bc |
+#include "nma-ui-utils.h"
|
|
|
c791bc |
+#include "utils.h"
|
|
|
c791bc |
+
|
|
|
c791bc |
+#define WPA_PMK_LEN 32
|
|
|
c791bc |
+
|
|
|
c791bc |
+struct _WirelessSecuritySAE {
|
|
|
c791bc |
+ WirelessSecurity parent;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ gboolean editing_connection;
|
|
|
c791bc |
+ const char *password_flags_name;
|
|
|
c791bc |
+};
|
|
|
c791bc |
+
|
|
|
c791bc |
+static void
|
|
|
c791bc |
+show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec)
|
|
|
c791bc |
+{
|
|
|
c791bc |
+ GtkWidget *widget;
|
|
|
c791bc |
+ gboolean visible;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (sec->builder, "sae_entry"));
|
|
|
c791bc |
+ g_assert (widget);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
|
|
|
c791bc |
+ gtk_entry_set_visibility (GTK_ENTRY (widget), visible);
|
|
|
c791bc |
+}
|
|
|
c791bc |
+
|
|
|
c791bc |
+static gboolean
|
|
|
c791bc |
+validate (WirelessSecurity *parent, GError **error)
|
|
|
c791bc |
+{
|
|
|
c791bc |
+ GtkWidget *entry;
|
|
|
c791bc |
+ const char *key;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ entry = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_entry"));
|
|
|
c791bc |
+ g_assert (entry);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ key = gtk_entry_get_text (GTK_ENTRY (entry));
|
|
|
c791bc |
+ if (key == NULL || key[0] == '\0') {
|
|
|
c791bc |
+ widget_set_error (entry);
|
|
|
c791bc |
+ g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Wi-Fi password is missing."));
|
|
|
c791bc |
+ return FALSE;
|
|
|
c791bc |
+ }
|
|
|
c791bc |
+ widget_unset_error (entry);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* passphrase can be between 8 and 63 characters inclusive */
|
|
|
c791bc |
+
|
|
|
c791bc |
+ return TRUE;
|
|
|
c791bc |
+}
|
|
|
c791bc |
+
|
|
|
c791bc |
+static void
|
|
|
c791bc |
+add_to_size_group (WirelessSecurity *parent, GtkSizeGroup *group)
|
|
|
c791bc |
+{
|
|
|
c791bc |
+ GtkWidget *widget;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_type_label"));
|
|
|
c791bc |
+ gtk_size_group_add_widget (group, widget);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_label"));
|
|
|
c791bc |
+ gtk_size_group_add_widget (group, widget);
|
|
|
c791bc |
+}
|
|
|
c791bc |
+
|
|
|
c791bc |
+static void
|
|
|
c791bc |
+fill_connection (WirelessSecurity *parent, NMConnection *connection)
|
|
|
c791bc |
+{
|
|
|
c791bc |
+ WirelessSecuritySAE *sae = (WirelessSecuritySAE *) parent;
|
|
|
c791bc |
+ GtkWidget *widget, *passwd_entry;
|
|
|
c791bc |
+ const char *key;
|
|
|
c791bc |
+ NMSettingWireless *s_wireless;
|
|
|
c791bc |
+ NMSettingWirelessSecurity *s_wireless_sec;
|
|
|
c791bc |
+ NMSettingSecretFlags secret_flags;
|
|
|
c791bc |
+ const char *mode;
|
|
|
c791bc |
+ gboolean is_adhoc = FALSE;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ s_wireless = nm_connection_get_setting_wireless (connection);
|
|
|
c791bc |
+ g_assert (s_wireless);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ mode = nm_setting_wireless_get_mode (s_wireless);
|
|
|
c791bc |
+ if (mode && !strcmp (mode, "adhoc"))
|
|
|
c791bc |
+ is_adhoc = TRUE;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Blow away the old security setting by adding a clear one */
|
|
|
c791bc |
+ s_wireless_sec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
|
|
|
c791bc |
+ nm_connection_add_setting (connection, (NMSetting *) s_wireless_sec);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_entry"));
|
|
|
c791bc |
+ passwd_entry = widget;
|
|
|
c791bc |
+ key = gtk_entry_get_text (GTK_ENTRY (widget));
|
|
|
c791bc |
+ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_PSK, key, NULL);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Save PSK_FLAGS to the connection */
|
|
|
c791bc |
+ secret_flags = nma_utils_menu_to_secret_flags (passwd_entry);
|
|
|
c791bc |
+ nm_setting_set_secret_flags (NM_SETTING (s_wireless_sec), NM_SETTING_WIRELESS_SECURITY_PSK,
|
|
|
c791bc |
+ secret_flags, NULL);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Update secret flags and popup when editing the connection */
|
|
|
c791bc |
+ if (sae->editing_connection)
|
|
|
c791bc |
+ nma_utils_update_password_storage (passwd_entry, secret_flags,
|
|
|
c791bc |
+ NM_SETTING (s_wireless_sec), sae->password_flags_name);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ wireless_security_clear_ciphers (connection);
|
|
|
c791bc |
+ if (is_adhoc) {
|
|
|
c791bc |
+ /* Ad-Hoc settings as specified by the supplicant */
|
|
|
c791bc |
+ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "sae", NULL);
|
|
|
c791bc |
+ nm_setting_wireless_security_add_proto (s_wireless_sec, "rsn");
|
|
|
c791bc |
+ nm_setting_wireless_security_add_pairwise (s_wireless_sec, "ccmp");
|
|
|
c791bc |
+ nm_setting_wireless_security_add_group (s_wireless_sec, "ccmp");
|
|
|
c791bc |
+ } else {
|
|
|
c791bc |
+ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "sae", NULL);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Just leave ciphers and protocol empty, the supplicant will
|
|
|
c791bc |
+ * figure that out magically based on the AP IEs and card capabilities.
|
|
|
c791bc |
+ */
|
|
|
c791bc |
+ }
|
|
|
c791bc |
+}
|
|
|
c791bc |
+
|
|
|
c791bc |
+static void
|
|
|
c791bc |
+update_secrets (WirelessSecurity *parent, NMConnection *connection)
|
|
|
c791bc |
+{
|
|
|
c791bc |
+ helper_fill_secret_entry (connection,
|
|
|
c791bc |
+ parent->builder,
|
|
|
c791bc |
+ "sae_entry",
|
|
|
c791bc |
+ NM_TYPE_SETTING_WIRELESS_SECURITY,
|
|
|
c791bc |
+ (HelperSecretFunc) nm_setting_wireless_security_get_psk);
|
|
|
c791bc |
+}
|
|
|
c791bc |
+
|
|
|
c791bc |
+WirelessSecuritySAE *
|
|
|
c791bc |
+ws_sae_new (NMConnection *connection, gboolean secrets_only)
|
|
|
c791bc |
+{
|
|
|
c791bc |
+ WirelessSecurity *parent;
|
|
|
c791bc |
+ WirelessSecuritySAE *sec;
|
|
|
c791bc |
+ NMSetting *setting = NULL;
|
|
|
c791bc |
+ GtkWidget *widget;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ parent = wireless_security_init (sizeof (WirelessSecuritySAE),
|
|
|
c791bc |
+ validate,
|
|
|
c791bc |
+ add_to_size_group,
|
|
|
c791bc |
+ fill_connection,
|
|
|
c791bc |
+ update_secrets,
|
|
|
c791bc |
+ NULL,
|
|
|
c791bc |
+ "/org/gnome/ControlCenter/network/ws-sae.ui",
|
|
|
c791bc |
+ "sae_notebook",
|
|
|
c791bc |
+ "sae_entry");
|
|
|
c791bc |
+ if (!parent)
|
|
|
c791bc |
+ return NULL;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ parent->adhoc_compatible = FALSE;
|
|
|
c791bc |
+ sec = (WirelessSecuritySAE *) parent;
|
|
|
c791bc |
+ sec->editing_connection = secrets_only ? FALSE : TRUE;
|
|
|
c791bc |
+ sec->password_flags_name = NM_SETTING_WIRELESS_SECURITY_PSK;
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_entry"));
|
|
|
c791bc |
+ g_assert (widget);
|
|
|
c791bc |
+ g_signal_connect (G_OBJECT (widget), "changed",
|
|
|
c791bc |
+ (GCallback) wireless_security_changed_cb,
|
|
|
c791bc |
+ sec);
|
|
|
c791bc |
+ gtk_entry_set_width_chars (GTK_ENTRY (widget), 28);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Create password-storage popup menu for password entry under entry's secondary icon */
|
|
|
c791bc |
+ if (connection)
|
|
|
c791bc |
+ setting = (NMSetting *) nm_connection_get_setting_wireless_security (connection);
|
|
|
c791bc |
+ nma_utils_setup_password_storage (widget, 0, setting, sec->password_flags_name,
|
|
|
c791bc |
+ FALSE, secrets_only);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Fill secrets, if any */
|
|
|
c791bc |
+ if (connection)
|
|
|
c791bc |
+ update_secrets (WIRELESS_SECURITY (sec), connection);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_wpa"));
|
|
|
c791bc |
+ g_assert (widget);
|
|
|
c791bc |
+ g_signal_connect (G_OBJECT (widget), "toggled",
|
|
|
c791bc |
+ (GCallback) show_toggled_cb,
|
|
|
c791bc |
+ sec);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ /* Hide WPA/RSN for now since this can be autodetected by NM and the
|
|
|
c791bc |
+ * supplicant when connecting to the AP.
|
|
|
c791bc |
+ */
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_type_combo"));
|
|
|
c791bc |
+ g_assert (widget);
|
|
|
c791bc |
+ gtk_widget_hide (widget);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_type_label"));
|
|
|
c791bc |
+ g_assert (widget);
|
|
|
c791bc |
+ gtk_widget_hide (widget);
|
|
|
c791bc |
+
|
|
|
c791bc |
+ return sec;
|
|
|
c791bc |
+}
|
|
|
c791bc |
diff --git a/panels/network/wireless-security/ws-sae.h b/panels/network/wireless-security/ws-sae.h
|
|
|
c791bc |
new file mode 100644
|
|
|
c791bc |
index 000000000..9a1262cd0
|
|
|
c791bc |
--- /dev/null
|
|
|
c791bc |
+++ b/panels/network/wireless-security/ws-sae.h
|
|
|
c791bc |
@@ -0,0 +1,30 @@
|
|
|
c791bc |
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
|
|
c791bc |
+/* NetworkManager Applet -- allow user control over networking
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * Dan Williams <dcbw@redhat.com>
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * This program is free software; you can redistribute it and/or modify
|
|
|
c791bc |
+ * it under the terms of the GNU General Public License as published by
|
|
|
c791bc |
+ * the Free Software Foundation; either version 2 of the License, or
|
|
|
c791bc |
+ * (at your option) any later version.
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * This program is distributed in the hope that it will be useful,
|
|
|
c791bc |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
c791bc |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
c791bc |
+ * GNU General Public License for more details.
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * You should have received a copy of the GNU General Public License along
|
|
|
c791bc |
+ * with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
c791bc |
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
c791bc |
+ *
|
|
|
c791bc |
+ * Copyright 2007 - 2014 Red Hat, Inc.
|
|
|
c791bc |
+ */
|
|
|
c791bc |
+
|
|
|
c791bc |
+#ifndef WS_SAE_H
|
|
|
c791bc |
+#define WS_SAE_H
|
|
|
c791bc |
+
|
|
|
c791bc |
+typedef struct _WirelessSecuritySAE WirelessSecuritySAE;
|
|
|
c791bc |
+
|
|
|
c791bc |
+WirelessSecuritySAE * ws_sae_new (NMConnection *connection, gboolean secrets_only);
|
|
|
c791bc |
+
|
|
|
c791bc |
+#endif /* WS_SAE_H */
|
|
|
c791bc |
diff --git a/panels/network/wireless-security/ws-sae.ui b/panels/network/wireless-security/ws-sae.ui
|
|
|
c791bc |
new file mode 100644
|
|
|
c791bc |
index 000000000..d523f16c8
|
|
|
c791bc |
--- /dev/null
|
|
|
c791bc |
+++ b/panels/network/wireless-security/ws-sae.ui
|
|
|
c791bc |
@@ -0,0 +1,117 @@
|
|
|
c791bc |
+
|
|
|
c791bc |
+<interface>
|
|
|
c791bc |
+ <requires lib="gtk+" version="3.4"/>
|
|
|
c791bc |
+ <object class="GtkNotebook" id="sae_notebook">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ <property name="show_tabs">False</property>
|
|
|
c791bc |
+ <property name="show_border">False</property>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkTable" id="sae_table">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ <property name="n_rows">3</property>
|
|
|
c791bc |
+ <property name="n_columns">2</property>
|
|
|
c791bc |
+ <property name="column_spacing">6</property>
|
|
|
c791bc |
+ <property name="row_spacing">6</property>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkLabel" id="sae_label">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ <property name="xalign">1</property>
|
|
|
c791bc |
+ <property name="label" translatable="yes">_Password</property>
|
|
|
c791bc |
+ <property name="use_underline">True</property>
|
|
|
c791bc |
+ <property name="mnemonic_widget">sae_entry</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="x_options">GTK_FILL</property>
|
|
|
c791bc |
+ <property name="y_options"/>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkEntry" id="sae_entry">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">True</property>
|
|
|
c791bc |
+ <property name="max_length">64</property>
|
|
|
c791bc |
+ <property name="visibility">False</property>
|
|
|
c791bc |
+ <property name="activates_default">True</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="left_attach">1</property>
|
|
|
c791bc |
+ <property name="right_attach">2</property>
|
|
|
c791bc |
+ <property name="y_options"/>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkLabel" id="sae_type_label">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ <property name="xalign">1</property>
|
|
|
c791bc |
+ <property name="label" translatable="yes">_Type</property>
|
|
|
c791bc |
+ <property name="use_underline">True</property>
|
|
|
c791bc |
+ <property name="mnemonic_widget">sae_type_combo</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="top_attach">2</property>
|
|
|
c791bc |
+ <property name="bottom_attach">3</property>
|
|
|
c791bc |
+ <property name="x_options">GTK_FILL</property>
|
|
|
c791bc |
+ <property name="y_options"/>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkLabel" id="label32">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ <property name="xalign">0</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="top_attach">1</property>
|
|
|
c791bc |
+ <property name="bottom_attach">2</property>
|
|
|
c791bc |
+ <property name="x_options">GTK_FILL</property>
|
|
|
c791bc |
+ <property name="y_options"/>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkCheckButton" id="show_checkbutton_wpa">
|
|
|
c791bc |
+ <property name="label" translatable="yes">Sho_w password</property>
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">True</property>
|
|
|
c791bc |
+ <property name="receives_default">False</property>
|
|
|
c791bc |
+ <property name="use_underline">True</property>
|
|
|
c791bc |
+ <property name="draw_indicator">True</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="left_attach">1</property>
|
|
|
c791bc |
+ <property name="right_attach">2</property>
|
|
|
c791bc |
+ <property name="top_attach">1</property>
|
|
|
c791bc |
+ <property name="bottom_attach">2</property>
|
|
|
c791bc |
+ <property name="x_options">GTK_FILL</property>
|
|
|
c791bc |
+ <property name="y_options"/>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ <child>
|
|
|
c791bc |
+ <object class="GtkComboBox" id="sae_type_combo">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="left_attach">1</property>
|
|
|
c791bc |
+ <property name="right_attach">2</property>
|
|
|
c791bc |
+ <property name="top_attach">2</property>
|
|
|
c791bc |
+ <property name="bottom_attach">3</property>
|
|
|
c791bc |
+ <property name="y_options">GTK_FILL</property>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ <child type="tab">
|
|
|
c791bc |
+ <object class="GtkLabel" id="GtkLabel2">
|
|
|
c791bc |
+ <property name="visible">True</property>
|
|
|
c791bc |
+ <property name="can_focus">False</property>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+ <packing>
|
|
|
c791bc |
+ <property name="tab_fill">False</property>
|
|
|
c791bc |
+ </packing>
|
|
|
c791bc |
+ </child>
|
|
|
c791bc |
+ </object>
|
|
|
c791bc |
+</interface>
|
|
|
c791bc |
--
|
|
|
1aae59 |
2.34.1
|
|
|
c791bc |
|