diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2019-07-11 22:31:10 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2019-07-11 22:31:10 +0200 |
commit | 808d45423ca90c23f4a246ab85f501b1d138f1a4 (patch) | |
tree | d3d33c3df7967d3e818eacb065d23f236e253dc1 | |
parent | fd059c3982b5db36a1a255f5dd8fe390bde07c95 (diff) | |
download | NetworkManager-bg/802-1x-fallback.tar.gz |
-rw-r--r-- | src/devices/nm-device-ethernet.c | 21 | ||||
-rw-r--r-- | src/supplicant/nm-supplicant-interface.c | 22 | ||||
-rw-r--r-- | src/supplicant/nm-supplicant-interface.h | 1 |
3 files changed, 44 insertions, 0 deletions
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 1c39147759..6d50fb4178 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -65,6 +65,7 @@ typedef struct Supplicant { /* signal handler ids */ gulong iface_state_id; + gulong auth_status_id; /* Timeouts and idles */ guint con_timeout_id; @@ -415,6 +416,7 @@ supplicant_interface_release (NMDeviceEthernet *self) nm_clear_g_source (&priv->supplicant_timeout_id); nm_clear_g_source (&priv->supplicant.con_timeout_id); nm_clear_g_signal_handler (priv->supplicant.iface, &priv->supplicant.iface_state_id); + nm_clear_g_signal_handler (priv->supplicant.iface, &priv->supplicant.auth_status_id); if (priv->supplicant.iface) { nm_supplicant_interface_disconnect (priv->supplicant.iface); @@ -423,8 +425,20 @@ supplicant_interface_release (NMDeviceEthernet *self) } static void +supplicant_auth_status_changed (NMSupplicantInterface *iface, + const char *status, + const char *detail, + gpointer user_data) +{ + NMDeviceEthernet *self = NM_DEVICE_ETHERNET (user_data); + + _LOGE (LOGD_CORE, "supplicant auth status changed: %s - %s", status, detail); +} + +static void wired_auth_cond_fail (NMDeviceEthernet *self, NMDeviceStateReason reason) { + NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); NMConnection *applied; NMSetting8021x *s_8021x; @@ -437,6 +451,13 @@ wired_auth_cond_fail (NMDeviceEthernet *self, NMDeviceStateReason reason) return; } + if (!priv->supplicant.auth_status_id) { + priv->supplicant.auth_status_id = g_signal_connect (priv->supplicant.iface, + NM_SUPPLICANT_INTERFACE_AUTH_STATUS_CHANGED, + G_CALLBACK (supplicant_auth_status_changed), + self); + } + nm_device_state_changed (NM_DEVICE (self), NM_DEVICE_STATE_FAILED, reason); diff --git a/src/supplicant/nm-supplicant-interface.c b/src/supplicant/nm-supplicant-interface.c index e94c98765b..9743e52880 100644 --- a/src/supplicant/nm-supplicant-interface.c +++ b/src/supplicant/nm-supplicant-interface.c @@ -93,6 +93,7 @@ enum { GROUP_STARTED, /* a new Group (interface) was created */ GROUP_FINISHED, /* a Group (interface) has been finished */ GROUP_FORMATION_FAILURE, /* P2P Group formation failed */ + AUTH_STATUS_CHANGED, /* Authentication status changed */ LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -1270,6 +1271,17 @@ wpas_iface_network_request (GDBusProxy *proxy, } static void +eap_changed (GDBusProxy *proxy, + const char *status, + const char *parameter, + gpointer user_data) +{ + NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data); + + g_signal_emit (self, signals[AUTH_STATUS_CHANGED], 0, status, parameter); +} + +static void props_changed_cb (GDBusProxy *proxy, GVariant *changed_properties, GStrv invalidated_properties, @@ -1611,6 +1623,8 @@ on_iface_proxy_acquired (GDBusProxy *proxy, GAsyncResult *result, gpointer user_ G_CALLBACK (wpas_iface_bss_removed), self); _nm_dbus_signal_connect (priv->iface_proxy, "NetworkRequest", G_VARIANT_TYPE ("(oss)"), G_CALLBACK (wpas_iface_network_request), self); + _nm_dbus_signal_connect (priv->iface_proxy, "EAP", G_VARIANT_TYPE ("(ss)"), + G_CALLBACK (eap_changed), self); /* Scan result aging parameters */ g_dbus_proxy_call (priv->iface_proxy, @@ -2981,4 +2995,12 @@ nm_supplicant_interface_class_init (NMSupplicantInterfaceClass *klass) 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_VARIANT); + + signals[AUTH_STATUS_CHANGED] = + g_signal_new (NM_SUPPLICANT_INTERFACE_AUTH_STATUS_CHANGED, + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); } diff --git a/src/supplicant/nm-supplicant-interface.h b/src/supplicant/nm-supplicant-interface.h index 2e124df92d..f577c2c1de 100644 --- a/src/supplicant/nm-supplicant-interface.h +++ b/src/supplicant/nm-supplicant-interface.h @@ -82,6 +82,7 @@ typedef enum { #define NM_SUPPLICANT_INTERFACE_GROUP_STARTED "group-started" #define NM_SUPPLICANT_INTERFACE_GROUP_FINISHED "group-finished" #define NM_SUPPLICANT_INTERFACE_GROUP_FORMATION_FAILURE "group-formation-failure" +#define NM_SUPPLICANT_INTERFACE_AUTH_STATUS_CHANGED "auth-status-changed" typedef struct _NMSupplicantInterfaceClass NMSupplicantInterfaceClass; |