|
Packit Service |
639700 |
// SPDX-License-Identifier: GPL-2.0+
|
|
Packit |
fabffb |
/* NetworkManager Applet -- allow user control over networking
|
|
Packit |
fabffb |
*
|
|
Packit |
fabffb |
* Dan Williams <dcbw@redhat.com>
|
|
Packit |
fabffb |
*
|
|
Packit |
fabffb |
* Copyright 2008 Novell, Inc.
|
|
Packit |
fabffb |
* Copyright 2008 - 2014 Red Hat, Inc.
|
|
Packit |
fabffb |
*/
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#include "nm-default.h"
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
#include "ethernet-dialog.h"
|
|
Packit |
fabffb |
#include "wireless-security.h"
|
|
Packit |
fabffb |
#include "applet-dialogs.h"
|
|
Packit |
fabffb |
#include "eap-method.h"
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
stuff_changed_cb (WirelessSecurity *sec, gpointer user_data)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
GtkWidget *button = GTK_WIDGET (user_data);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_widget_set_sensitive (button, wireless_security_validate (sec, NULL));
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static void
|
|
Packit |
fabffb |
dialog_set_network_name (NMConnection *connection, GtkEntry *entry)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMSettingConnection *setting;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
setting = nm_connection_get_setting_connection (connection);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_widget_set_sensitive (GTK_WIDGET (entry), FALSE);
|
|
Packit |
fabffb |
gtk_entry_set_text (entry, nm_setting_connection_get_id (setting));
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
static WirelessSecurity *
|
|
Packit |
fabffb |
dialog_set_security (NMConnection *connection,
|
|
Packit |
fabffb |
GtkBuilder *builder,
|
|
Packit |
fabffb |
GtkBox *box)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
GList *children;
|
|
Packit |
fabffb |
GList *iter;
|
|
Packit |
fabffb |
WirelessSecurity *security;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
security = (WirelessSecurity *) ws_wpa_eap_new (connection, FALSE, TRUE, NULL);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Remove any previous wireless security widgets */
|
|
Packit |
fabffb |
children = gtk_container_get_children (GTK_CONTAINER (box));
|
|
Packit |
fabffb |
for (iter = children; iter; iter = iter->next)
|
|
Packit |
fabffb |
gtk_container_remove (GTK_CONTAINER (box), GTK_WIDGET (iter->data));
|
|
Packit |
fabffb |
g_list_free (children);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_box_pack_start (box, wireless_security_get_widget (security), TRUE, TRUE, 0);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return security;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
GtkWidget *
|
|
Packit |
fabffb |
nma_ethernet_dialog_new (NMConnection *connection)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
GtkBuilder *builder;
|
|
Packit |
fabffb |
GtkWidget *dialog;
|
|
Packit |
fabffb |
GError *error = NULL;
|
|
Packit |
fabffb |
WirelessSecurity *security;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
builder = gtk_builder_new ();
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
if (!gtk_builder_add_from_resource (builder, "/org/freedesktop/network-manager-applet/8021x.ui", &error)) {
|
|
Packit |
fabffb |
g_warning ("Couldn't load builder resource: %s", error->message);
|
|
Packit |
fabffb |
g_error_free (error);
|
|
Packit |
fabffb |
applet_missing_ui_warning_dialog_show ();
|
|
Packit |
fabffb |
g_object_unref (builder);
|
|
Packit |
fabffb |
return NULL;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
dialog = (GtkWidget *) gtk_builder_get_object (builder, "8021x_dialog");
|
|
Packit |
fabffb |
if (!dialog) {
|
|
Packit |
fabffb |
g_warning ("Couldn't find wireless_dialog widget.");
|
|
Packit |
fabffb |
applet_missing_ui_warning_dialog_show ();
|
|
Packit |
fabffb |
g_object_unref (builder);
|
|
Packit |
fabffb |
return NULL;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
gtk_window_set_title (GTK_WINDOW (dialog), _("802.1X authentication"));
|
|
Packit |
fabffb |
gtk_window_set_icon_name (GTK_WINDOW (dialog), "dialog-password");
|
|
Packit |
fabffb |
dialog_set_network_name (connection, GTK_ENTRY (gtk_builder_get_object (builder, "network_name_entry")));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Handle CA cert ignore stuff */
|
|
Packit |
fabffb |
eap_method_ca_cert_ignore_load (connection);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
security = dialog_set_security (connection, builder, GTK_BOX (gtk_builder_get_object (builder, "security_vbox")));
|
|
Packit |
fabffb |
wireless_security_set_changed_notify (security, stuff_changed_cb, GTK_WIDGET (gtk_builder_get_object (builder, "ok_button")));
|
|
Packit |
fabffb |
g_object_set_data_full (G_OBJECT (dialog),
|
|
Packit |
fabffb |
"security", security,
|
|
Packit |
fabffb |
(GDestroyNotify) wireless_security_unref);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_object_set_data_full (G_OBJECT (dialog),
|
|
Packit |
fabffb |
"connection", g_object_ref (connection),
|
|
Packit |
fabffb |
(GDestroyNotify) g_object_unref);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Ensure the builder gets destroyed when the dialog goes away */
|
|
Packit |
fabffb |
g_object_set_data_full (G_OBJECT (dialog),
|
|
Packit |
fabffb |
"builder", builder,
|
|
Packit |
fabffb |
(GDestroyNotify) g_object_unref);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return dialog;
|
|
Packit |
fabffb |
}
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
NMConnection *
|
|
Packit |
fabffb |
nma_ethernet_dialog_get_connection (GtkWidget *dialog)
|
|
Packit |
fabffb |
{
|
|
Packit |
fabffb |
NMConnection *connection, *tmp_connection;
|
|
Packit |
fabffb |
WirelessSecurity *security;
|
|
Packit |
fabffb |
NMSetting *s_8021x, *s_con;
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
g_return_val_if_fail (dialog != NULL, NULL);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
connection = g_object_get_data (G_OBJECT (dialog), "connection");
|
|
Packit |
fabffb |
security = g_object_get_data (G_OBJECT (dialog), "security");
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Here's a nice hack to work around the fact that ws_802_1x_fill_connection()
|
|
Packit |
fabffb |
* needs a wireless setting and a connection setting for various things.
|
|
Packit |
fabffb |
*/
|
|
Packit |
fabffb |
tmp_connection = nm_simple_connection_new ();
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Add the fake connection setting (mainly for the UUID for cert ignore checking) */
|
|
Packit |
fabffb |
s_con = nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION);
|
|
Packit |
fabffb |
g_assert (s_con);
|
|
Packit |
fabffb |
nm_connection_add_setting (tmp_connection, NM_SETTING (g_object_ref (s_con)));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* And the fake wireless setting */
|
|
Packit |
fabffb |
nm_connection_add_setting (tmp_connection, nm_setting_wireless_new ());
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Fill up the 802.1x setting */
|
|
Packit |
fabffb |
ws_802_1x_fill_connection (security, "wpa_eap_auth_combo", tmp_connection);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Grab it and add it to our original connection */
|
|
Packit |
fabffb |
s_8021x = nm_connection_get_setting (tmp_connection, NM_TYPE_SETTING_802_1X);
|
|
Packit |
fabffb |
nm_connection_add_setting (connection, NM_SETTING (g_object_ref (s_8021x)));
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Save new CA cert ignore values to GSettings */
|
|
Packit |
fabffb |
eap_method_ca_cert_ignore_save (tmp_connection);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
/* Remove the 8021x setting to prevent the clearing of secrets when the
|
|
Packit |
fabffb |
* simple-connection is destroyed.
|
|
Packit |
fabffb |
*/
|
|
Packit |
fabffb |
nm_connection_remove_setting (tmp_connection, NM_TYPE_SETTING_802_1X);
|
|
Packit |
fabffb |
g_object_unref (tmp_connection);
|
|
Packit |
fabffb |
|
|
Packit |
fabffb |
return connection;
|
|
Packit |
fabffb |
}
|