[libnma/ac/owe] wireless security: include owe




commit cd53272bbbdcccf2b733442861b951639a5ee7e7
Author: Ana Cabral <acabral redhat com>
Date:   Mon Mar 7 16:08:50 2022 -0300

    wireless security: include owe
    
    https://gitlab.gnome.org/GNOME/libnma/-/issues/9
    
    https://gitlab.gnome.org/GNOME/libnma/-/merge_requests/24

 Makefile.am              |   2 +
 shared/nm-libnm-compat.h |   6 ++
 src/libnma.ver           |   5 ++
 src/nma-version.h.in     |   7 ++
 src/nma-wifi-dialog.c    |  14 ++++
 src/nma-ws/meson.build   |   2 +
 src/nma-ws/nma-ws-owe.c  | 166 +++++++++++++++++++++++++++++++++++++++++++++++
 src/nma-ws/nma-ws-owe.h  |  26 ++++++++
 src/nma-ws/nma-ws.h      |   1 +
 9 files changed, 229 insertions(+)
---
diff --git a/Makefile.am b/Makefile.am
index b60baf41..1f755e9b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -172,6 +172,7 @@ libnma_h_pub = \
        src/nma-ws/nma-ws-dynamic-wep.h \
        src/nma-ws/nma-ws.h \
        src/nma-ws/nma-ws-leap.h \
+       src/nma-ws/nma-ws-owe.h \
        src/nma-ws/nma-ws-sae.h \
        src/nma-ws/nma-ws-wep-key.h \
        src/nma-ws/nma-ws-wpa-eap.h \
@@ -200,6 +201,7 @@ libnma_c_real = \
        src/nma-ws/nma-ws-dynamic-wep.c \
        src/nma-ws/nma-ws-helpers.c \
        src/nma-ws/nma-ws-leap.c \
+       src/nma-ws/nma-ws-owe.c \
        src/nma-ws/nma-ws-sae.c \
        src/nma-ws/nma-ws-wep-key.c \
        src/nma-ws/nma-ws-wpa-eap.c \
diff --git a/shared/nm-libnm-compat.h b/shared/nm-libnm-compat.h
index 9cfac52b..fa66703e 100644
--- a/shared/nm-libnm-compat.h
+++ b/shared/nm-libnm-compat.h
@@ -28,4 +28,10 @@
                G_GNUC_END_IGNORE_DEPRECATIONS \
        })
 
+#define _NMU_SEC_OWE ((NMUtilsSecurityType) 10)
+#if !NM_CHECK_VERSION (1,24,0)
+#define NMU_SEC_OWE _NMU_SEC_OWE
+#endif
+G_STATIC_ASSERT(NMU_SEC_OWE == _NMU_SEC_OWE);
+
 #endif /* __NM_LIBNM_COMPAT_H__ */
diff --git a/src/libnma.ver b/src/libnma.ver
index 3e444d44..dd9e33e7 100644
--- a/src/libnma.ver
+++ b/src/libnma.ver
@@ -134,3 +134,8 @@ libnma_1_8_28 {
        nma_ws_wpa_psk_get_type;
        nma_ws_wpa_psk_new;
 } libnma_1_8_22;
+
+libnma_1_8_36 {
+       nma_ws_owe_get_type;
+       nma_ws_owe_new;
+} libnma_1_8_28;
diff --git a/src/nma-version.h.in b/src/nma-version.h.in
index 9c511da6..d2be7b9f 100644
--- a/src/nma-version.h.in
+++ b/src/nma-version.h.in
@@ -62,6 +62,7 @@
 #define NMA_VERSION_1_8_26 (NMA_ENCODE_VERSION (1, 8, 26))
 #define NMA_VERSION_1_8_28 (NMA_ENCODE_VERSION (1, 8, 28))
 #define NMA_VERSION_1_8_34 (NMA_ENCODE_VERSION (1, 8, 34))
+#define NMA_VERSION_1_8_36 (NMA_ENCODE_VERSION (1, 8, 36))
 
 /* For releases, NMA_API_VERSION is equal to NMA_VERSION.
  *
@@ -150,4 +151,10 @@
 # define NMA_AVAILABLE_IN_1_8_34
 #endif
 
+#if NMA_VERSION_MAX_ALLOWED < NMA_VERSION_1_8_36
+# define NMA_AVAILABLE_IN_1_8_36            G_UNAVAILABLE(1.8,36)
+#else
+# define NMA_AVAILABLE_IN_1_8_36
+#endif
+
 #endif  /* NMA_VERSION_H */
diff --git a/src/nma-wifi-dialog.c b/src/nma-wifi-dialog.c
index 60793fc6..06c9af0e 100644
--- a/src/nma-wifi-dialog.c
+++ b/src/nma-wifi-dialog.c
@@ -686,6 +686,9 @@ get_default_type_for_security (NMSettingWirelessSecurity *sec,
        if (!strcmp (key_mgmt, "none"))
                return NMU_SEC_STATIC_WEP;
 
+       if (!strcmp (key_mgmt, "owe"))
+           return NMU_SEC_OWE;
+
        if (   !strcmp (key_mgmt, "ieee8021x")
            && (!have_ap || (ap_flags & NM_802_11_AP_FLAGS_PRIVACY))) {
                if (auth_alg && !strcmp (auth_alg, "leap"))
@@ -1018,6 +1021,17 @@ security_combo_init (NMAWifiDialog *self, gboolean secrets_only,
                item++;
        }
 
+       if (security_valid (NMU_SEC_OWE, mode, dev_caps, !!priv->ap, ap_flags, ap_wpa, ap_rsn)) {
+               NMAWsOwe *ws_owe;
+
+               ws_owe = nma_ws_owe_new (priv->connection, secrets_only);
+               add_security_item (self, NMA_WS (ws_owe), sec_model,
+                                                  &iter, _("Enhanced Open"));
+               if (active < 0 && default_type == NMU_SEC_OWE)
+                       active = item;
+               item++;
+       }
+
        gtk_combo_box_set_model (GTK_COMBO_BOX (priv->sec_combo), GTK_TREE_MODEL (sec_model));
        gtk_combo_box_set_active (GTK_COMBO_BOX (priv->sec_combo), active < 0 ? 0 : (guint32) active);
        g_object_unref (G_OBJECT (sec_model));
diff --git a/src/nma-ws/meson.build b/src/nma-ws/meson.build
index 7b94d4be..1e971ea2 100644
--- a/src/nma-ws/meson.build
+++ b/src/nma-ws/meson.build
@@ -19,6 +19,7 @@ nma_ws_headers = files(
   'nma-ws-dynamic-wep.h',
   'nma-ws.h',
   'nma-ws-leap.h',
+  'nma-ws-owe.h',
   'nma-ws-sae.h',
   'nma-ws-wep-key.h',
   'nma-ws-wpa-eap.h',
@@ -38,6 +39,7 @@ nma_ws_sources = files(
   'nma-ws-dynamic-wep.c',
   'nma-ws-helpers.c',
   'nma-ws-leap.c',
+  'nma-ws-owe.c',
   'nma-ws-sae.c',
   'nma-ws-wep-key.c',
   'nma-ws-wpa-eap.c',
diff --git a/src/nma-ws/nma-ws-owe.c b/src/nma-ws/nma-ws-owe.c
new file mode 100644
index 00000000..1bd8ba66
--- /dev/null
+++ b/src/nma-ws/nma-ws-owe.c
@@ -0,0 +1,166 @@
+#include "nm-default.h"
+#include "nma-private.h"
+
+#include "nma-ws.h"
+#include "nma-ws-private.h"
+#include "nma-ws-owe.h"
+
+struct _NMAWsOwe {
+       GtkGrid parent;
+
+       NMConnection *connection;
+       gboolean secrets_only;
+};
+
+struct _NMAWsOweClass {
+       GtkGridClass parent;
+};
+
+static void nma_ws_interface_init (NMAWsInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (NMAWsOwe, nma_ws_owe, GTK_TYPE_GRID,
+                         G_IMPLEMENT_INTERFACE (NMA_TYPE_WS, nma_ws_interface_init))
+
+enum {
+       PROP_0,
+       PROP_CONNECTION,
+       PROP_SECRETS_ONLY,
+       PROP_LAST
+};
+
+static gboolean
+validate (NMAWs *ws, GError **error)
+{
+       return TRUE;
+}
+
+static void
+add_to_size_group (NMAWs *ws, GtkSizeGroup *group)
+{
+}
+
+static void
+fill_connection (NMAWs *ws, NMConnection *connection)
+{
+       NMSetting *s_wireless_sec;
+
+       /* Blow away the old security setting by adding a clear one */
+       s_wireless_sec = nm_setting_wireless_security_new ();
+       g_object_set (s_wireless_sec,
+                             NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "owe",
+                                 NULL);
+
+       nm_connection_add_setting (connection, s_wireless_sec);
+}
+
+static void
+update_secrets (NMAWs *ws, NMConnection *connection)
+{
+}
+
+static void
+get_property (GObject *object,
+              guint prop_id,
+              GValue *value,
+              GParamSpec *pspec)
+{
+       NMAWsOwe *self = NMA_WS_OWE (object);
+
+       switch (prop_id) {
+       case PROP_CONNECTION:
+               g_value_set_object (value, self->connection);
+               break;
+       case PROP_SECRETS_ONLY:
+               g_value_set_boolean (value, self->secrets_only);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+set_property (GObject *object,
+              guint prop_id,
+              const GValue *value,
+              GParamSpec *pspec)
+{
+       NMAWsOwe *self = NMA_WS_OWE (object);
+
+       switch (prop_id) {
+       case PROP_CONNECTION:
+               self->connection = g_value_dup_object (value);
+               break;
+       case PROP_SECRETS_ONLY:
+               /* This property is not used in OWE,
+                * it should always be FALSE.
+                * */
+               self->secrets_only = FALSE;
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+nma_ws_owe_init (NMAWsOwe *self)
+{
+}
+
+static void
+nma_ws_interface_init (NMAWsInterface *iface)
+{
+       iface->validate = validate;
+       iface->add_to_size_group = add_to_size_group;
+       iface->fill_connection = fill_connection;
+       iface->update_secrets = update_secrets;
+       iface->adhoc_compatible = FALSE;
+       iface->hotspot_compatible = TRUE;
+}
+
+static void
+constructed (GObject *object)
+{
+       G_OBJECT_CLASS (nma_ws_owe_parent_class)->constructed (object);
+}
+
+NMAWsOwe *
+nma_ws_owe_new (NMConnection *connection, gboolean secrets_only)
+{
+       /*
+        * secrets_only property is not used in OWE,
+        * it must always be FALSE.
+        */
+       return g_object_new (NMA_TYPE_WS_OWE,
+                            "connection", connection,
+                                                "secrets-only", FALSE,
+                            NULL);
+}
+
+static void
+dispose (GObject *object)
+{
+       NMAWsOwe *self = NMA_WS_OWE (object);
+
+       g_clear_object (&self->connection);
+
+       G_OBJECT_CLASS (nma_ws_owe_parent_class)->dispose (object);
+}
+
+static void
+nma_ws_owe_class_init (NMAWsOweClass *klass){
+       GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+       object_class->get_property = get_property;
+       object_class->set_property = set_property;
+       object_class->constructed = constructed;
+       object_class->dispose = dispose;
+
+       g_object_class_override_property (object_class,
+                                             PROP_CONNECTION, "connection");
+
+       g_object_class_override_property (object_class,
+                                             PROP_SECRETS_ONLY, "secrets-only");
+
+}
diff --git a/src/nma-ws/nma-ws-owe.h b/src/nma-ws/nma-ws-owe.h
new file mode 100644
index 00000000..fbfe0b87
--- /dev/null
+++ b/src/nma-ws/nma-ws-owe.h
@@ -0,0 +1,26 @@
+#ifndef NMA_WS_OWE_H
+#define NMA_WS_OWE_H
+
+#include "nma-version.h"
+
+G_BEGIN_DECLS
+
+typedef struct _NMAWsOwe NMAWsOwe;
+typedef struct _NMAWsOweClass NMAWsOweClass;
+
+#define NMA_TYPE_WS_OWE            (nma_ws_owe_get_type ())
+#define NMA_WS_OWE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMA_TYPE_WS_OWE, NMAWsOwe))
+#define NMA_WS_OWE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), NMA_TYPE_WS_OWE, NMAWsOweClass))
+#define NMA_IS_WS_OWE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NMA_TYPE_OWE))
+#define NMA_IS_OWE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NMA_TYPE_WS_OWE))
+#define NMA_WS_OWE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NMA_TYPE_WS_OWE, NMAWsOweClass))
+
+NMA_AVAILABLE_IN_1_8_36
+GType nma_ws_owe_get_type (void);
+
+NMA_AVAILABLE_IN_1_8_36
+NMAWsOwe *nma_ws_owe_new (NMConnection *connection,  gboolean secrets_only);
+
+G_END_DECLS
+
+#endif /* NMA_WS_OWE_H */
diff --git a/src/nma-ws/nma-ws.h b/src/nma-ws/nma-ws.h
index e046cc11..752f76cd 100644
--- a/src/nma-ws/nma-ws.h
+++ b/src/nma-ws/nma-ws.h
@@ -49,6 +49,7 @@ G_END_DECLS
 #include "nma-ws-802-1x.h"
 #include "nma-ws-dynamic-wep.h"
 #include "nma-ws-leap.h"
+#include "nma-ws-owe.h"
 #include "nma-ws-sae.h"
 #include "nma-ws-wep-key.h"
 #include "nma-ws-wpa-eap.h"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]