Blame src/ethernet-dialog.c

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
}