2005-12-16 Dan Williams <dcbw@redhat.com>

* gnome/applet/*
		- Fix up the passphrase dialog to use all the
			WirelessSecurityOption stuff (untested)


git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1208 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams 2005-12-16 22:22:42 +00:00
parent 77b3b18ffd
commit 4a9cb5a3f0
6 changed files with 154 additions and 132 deletions

View file

@ -1,3 +1,20 @@
2005-12-16 Dan Williams <dcbw@redhat.com>
* gnome/applet/*
- Fix up the passphrase dialog to use all the
WirelessSecurityOption stuff (untested)
2005-12-16 Dan Williams <dcbw@redhat.com>
* Move nm_gconf_get_*_helper() functions to separate files,
gconf-helpers.c & gconf-helpers.h
* New NMGConfWSO objects for managing the gconf side of things.
Eventually these should be merged with the
WirelessSecurityOption objects and a common base (that can
serialize/deserialize from dbus & gconf) should be
refactored out, but for now they are separate.
2005-12-16 Robert Love <rml@novell.com>
* src/backends/NetworkManagerSuSE.c: Do not invoke ypbind or autofs

View file

@ -37,6 +37,7 @@
#include "applet-dbus-info.h"
#include "passphrase-dialog.h"
#include "nm-utils.h"
#include "nm-gconf-wso.h"
#include "gconf-helpers.h"
@ -257,8 +258,8 @@ nmi_dbus_return_user_key (DBusConnection *connection,
return;
}
dbus_message_iter_append_init (reply, &iter);
if (nm_gconf_wso_serialize_dbus (gconf_wso, &iter)
dbus_message_iter_init_append (reply, &iter);
if (nm_gconf_wso_serialize_dbus (gconf_wso, &iter))
dbus_connection_send (connection, reply, NULL);
else
nm_warning ("nmi_dbus_return_user_key(): couldn't serialize gconf_wso");

View file

@ -27,10 +27,11 @@
#include "nm-device.h"
#include "wireless-network.h"
#include "NetworkManager.h"
#include "nm-gconf-wso.h"
DBusHandlerResult nmi_dbus_info_message_handler (DBusConnection *connection, DBusMessage *message, void *user_data);
void nmi_dbus_return_user_key (DBusConnection *connection, DBusMessage *message, const char *passphrase, const NMEncKeyType key_type);
void nmi_dbus_return_user_key (DBusConnection *connection, DBusMessage *message, NMGConfWSO *security);
void nmi_dbus_signal_update_network (DBusConnection *connection, const char *network, NMNetworkType type);

View file

@ -31,6 +31,7 @@
#include "nm-gconf-wso-wep.h"
#include "nm-gconf-wso-wpa-psk.h"
#include "gconf-helpers.h"
#include "wireless-security-option.h"
#define NM_GCONF_WSO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_GCONF_WSO, NMGConfWSOPrivate))
@ -107,7 +108,6 @@ nm_gconf_wso_new_deserialize_gconf (GConfClient *client, const char *network)
g_return_val_if_fail (client != NULL, NULL);
g_return_val_if_fail (network != NULL, NULL);
if (!nm_gconf_get_int_helper (client,
GCONF_PATH_WIRELESS_NETWORKS,
"we_cipher",
@ -140,6 +140,32 @@ out:
return security;
}
/* HACK: to convert the WirelessSecurityOption -> NMGConfWSO,
* we serialize the WSO to a dbus message then deserialize
* it into an NMGConfWSO.
*/
NMGConfWSO *
nm_gconf_wso_new_from_wso (WirelessSecurityOption *opt, const char *ssid)
{
DBusMessage * message;
DBusMessageIter iter;
NMGConfWSO * gconf_wso = NULL;
g_return_val_if_fail (opt != NULL, NULL);
g_return_val_if_fail (ssid != NULL, NULL);
message = dbus_message_new_method_call (NMI_DBUS_SERVICE, NMI_DBUS_PATH, NMI_DBUS_INTERFACE, "foobar");
if (!wso_append_dbus_params (opt, ssid, message))
goto out;
dbus_message_iter_init (message, &iter);
gconf_wso = nm_gconf_wso_new_deserialize_dbus (&iter);
out:
dbus_message_unref (message);
return gconf_wso;
}
void
nm_gconf_wso_set_we_cipher (NMGConfWSO *self, int we_cipher)
{

View file

@ -26,6 +26,8 @@
#include <gconf/gconf-client.h>
#include <dbus/dbus.h>
#include "wireless-security-option.h"
#define NM_TYPE_GCONF_WSO (nm_gconf_wso_get_type ())
#define NM_GCONF_WSO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_GCONF_WSO, NMGConfWSO))
#define NM_GCONF_WSO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_GCONF_WSO, NMGConfWSOClass))
@ -64,6 +66,8 @@ NMGConfWSO * nm_gconf_wso_new_deserialize_dbus (DBusMessageIter *iter);
NMGConfWSO * nm_gconf_wso_new_deserialize_gconf (GConfClient *client, const char *network);
NMGConfWSO * nm_gconf_wso_new_from_wso (WirelessSecurityOption *opt, const char *ssid);
int nm_gconf_wso_get_we_cipher (NMGConfWSO *self);
const char * nm_gconf_wso_get_key (NMGConfWSO *self);

View file

@ -36,56 +36,39 @@
#include "passphrase-dialog.h"
#include "nm-utils.h"
#include "NetworkManager.h"
#include "wireless-security-manager.h"
static GladeXML *get_dialog_xml (GtkWidget *dialog)
{
char *data;
g_return_val_if_fail (dialog != NULL, NULL);
if ((data = g_object_get_data (G_OBJECT (dialog), "glade-xml")))
return (GladeXML *)data;
return NULL;
return (GladeXML *) g_object_get_data (G_OBJECT (dialog), "glade-xml");
}
static void update_button_cb (GtkWidget *widget, GladeXML *xml)
static void update_button_cb (GtkWidget *unused, GtkDialog *dialog)
{
GtkButton * button;
GtkComboBox * combo;
GtkEntry * passphrase_entry;
const char * passphrase_text;
gboolean enable = FALSE;
const char * ssid = NULL;
GtkWidget * button;
GladeXML * xml;
WirelessSecurityManager * wsm;
GtkComboBox * security_combo;
g_return_if_fail (dialog != NULL);
xml = get_dialog_xml (GTK_WIDGET (dialog));
g_return_if_fail (xml != NULL);
wsm = (WirelessSecurityManager *) g_object_get_data (G_OBJECT (dialog), "wireless-security-manager");
g_return_if_fail (wsm != NULL);
button = GTK_BUTTON (glade_xml_get_widget (xml, "login_button"));
combo = GTK_COMBO_BOX (glade_xml_get_widget (xml, "key_type_combo"));
/*
passphrase_entry = GTK_ENTRY (glade_xml_get_widget (xml, "passphrase_entry"));
passphrase_text = gtk_entry_get_text (passphrase_entry);
ssid = (const char *) g_object_get_data (G_OBJECT (dialog), "network");
g_assert (ssid);
switch (gtk_combo_box_get_active (combo))
{
case KEY_TYPE_128_BIT_PASSPHRASE:
if (strlen (passphrase_text) > 0)
enable = TRUE;
break;
case KEY_TYPE_ASCII_KEY:
if ((strlen (passphrase_text) == 5) || (strlen (passphrase_text) == 13))
enable = TRUE;
break;
case KEY_TYPE_HEX_KEY:
if ((strlen (passphrase_text) == 10) || (strlen (passphrase_text) == 26))
enable = TRUE;
break;
default:
break;
}
*/
/* Validate the wireless security choices */
security_combo = GTK_COMBO_BOX (glade_xml_get_widget (xml, "security_combo"));
enable = wsm_validate_active (wsm, security_combo, ssid);
gtk_widget_set_sensitive (GTK_WIDGET (button), enable);
button = glade_xml_get_widget (xml, "login_button");
gtk_widget_set_sensitive (button, enable);
}
/*
@ -123,10 +106,7 @@ static void nmi_passphrase_dialog_clear (GtkWidget *dialog)
if ((xml = (GladeXML *)g_object_get_data (G_OBJECT (dialog), "glade-xml")))
{
/*
entry = glade_xml_get_widget (xml, "passphrase_entry");
gtk_entry_set_text (GTK_ENTRY (entry), "");
*/
/* FIXME: clear WSO widgets here */
}
gtk_widget_hide (dialog);
@ -134,40 +114,46 @@ static void nmi_passphrase_dialog_clear (GtkWidget *dialog)
/*
* nmi_passphrase_dialog_key_type_combo_changed
* nmi_passphrase_dialog_security_combo_changed
*
* Change the text of the passphrase entry label to match the selected
* key type.
* Replace the current wireless security widgets with new ones
* according to what the user chose.
*
*/
static void nmi_passphrase_dialog_key_type_combo_changed (GtkWidget *key_type_combo, gpointer user_data)
static void nmi_passphrase_dialog_security_combo_changed (GtkWidget *security_combo, gpointer user_data)
{
GtkWidget * dialog = gtk_widget_get_toplevel (key_type_combo);
int choice;
GtkDialog * dialog = (GtkDialog *) user_data;
WirelessSecurityManager * wsm;
GtkWidget * wso_widget;
GladeXML * xml;
GtkWidget * vbox;
GList * elt;
if (GTK_WIDGET_TOPLEVEL (dialog))
g_return_if_fail (dialog != NULL);
xml = get_dialog_xml (GTK_WIDGET (dialog));
g_return_if_fail (xml != NULL);
wsm = g_object_get_data (G_OBJECT (dialog), "wireless-security-manager");
g_return_if_fail (wsm != NULL);
vbox = GTK_WIDGET (glade_xml_get_widget (xml, "wireless_security_vbox"));
/* Remove any previous wireless security widgets */
for (elt = gtk_container_get_children (GTK_CONTAINER (vbox)); elt; elt = g_list_next (elt))
{
GtkLabel * entry_label;
int combo_choice;
GladeXML * dialog_xml;
GtkWidget * child = GTK_WIDGET (elt->data);
g_return_if_fail ((dialog_xml = get_dialog_xml (dialog)) != NULL);
entry_label = GTK_LABEL (glade_xml_get_widget (dialog_xml, "passphrase_entry_label"));
switch ((combo_choice = gtk_combo_box_get_active (GTK_COMBO_BOX (key_type_combo))))
{
case KEY_TYPE_128_BIT_PASSPHRASE:
gtk_label_set_label (entry_label, _("Passphrase:"));
break;
case KEY_TYPE_ASCII_KEY:
gtk_label_set_label (entry_label, _("ASCII Key:"));
break;
case KEY_TYPE_HEX_KEY:
gtk_label_set_label (entry_label, _("Hex Key:"));
break;
default:
break;
}
if (wso_is_wso_widget (child))
gtk_container_remove (GTK_CONTAINER (vbox), child);
}
/* Determine and add the correct wireless security widget to the dialog */
wso_widget = wsm_get_widget_for_active (wsm, GTK_COMBO_BOX (security_combo), GTK_SIGNAL_FUNC (update_button_cb), dialog);
if (wso_widget)
gtk_container_add (GTK_CONTAINER (vbox), wso_widget);
update_button_cb (NULL, dialog);
}
@ -179,64 +165,51 @@ static void nmi_passphrase_dialog_key_type_combo_changed (GtkWidget *key_type_co
* a cancellation message to NetworkManager.
* Either way, get rid of the dialog.
*/
static void nmi_passphrase_dialog_response_received (GtkWidget *cancel_button, gint response, gpointer user_data)
static void nmi_passphrase_dialog_response_received (GtkWidget *dialog, gint response, gpointer user_data)
{
GtkWidget * dialog = gtk_widget_get_toplevel (cancel_button);
NMWirelessApplet * applet = (NMWirelessApplet *)user_data;
NMWirelessApplet * applet = (NMWirelessApplet *) user_data;
GladeXML * dialog_xml;
GladeXML * xml;
GtkEntry * entry;
GtkComboBox * key_type_combo;
const char * passphrase;
NetworkDevice * dev;
WirelessNetwork * net;
GtkComboBox * security_combo;
DBusMessage * message;
NMEncKeyType key_type_return;
WirelessSecurityManager *wsm;
WirelessSecurityOption * opt;
WirelessNetwork * net;
NMGConfWSO * gconf_wso;
g_return_if_fail (applet != NULL);
if (! GTK_WIDGET_TOPLEVEL (dialog))
return;
message = g_object_get_data (G_OBJECT (dialog), "dbus-message");
g_assert (message);
if (response != GTK_RESPONSE_OK)
{
DBusMessage * message = g_object_get_data (G_OBJECT (dialog), "dbus-message");
DBusMessage * reply;
nmi_dbus_return_user_key (applet->connection, message, "***canceled***", NM_ENC_TYPE_UNKNOWN);
nmi_passphrase_dialog_clear (dialog);
return;
reply = dbus_message_new_error (message, "CanceledError", "Request was cancelled.");
dbus_connection_send (applet->connection, reply, NULL);
goto out;
}
dev = g_object_get_data (G_OBJECT (dialog), "device");
net = g_object_get_data (G_OBJECT (dialog), "network");
message = g_object_get_data (G_OBJECT (dialog), "dbus-message");
key_type_return = NM_ENC_TYPE_UNKNOWN;
xml = get_dialog_xml (dialog);
g_assert (xml);
g_return_if_fail ((dialog_xml = get_dialog_xml (dialog)) != NULL);
wsm = g_object_get_data (G_OBJECT (dialog), "wireless-security-manager");
g_assert (wsm);
entry = GTK_ENTRY (glade_xml_get_widget (dialog_xml, "passphrase_entry"));
key_type_combo = GTK_COMBO_BOX (glade_xml_get_widget (dialog_xml, "key_type_combo"));
passphrase = gtk_entry_get_text (entry);
security_combo = GTK_COMBO_BOX (glade_xml_get_widget (xml, "security_combo"));
opt = wsm_get_option_for_active (wsm, security_combo);
switch (gtk_combo_box_get_active (key_type_combo))
{
case KEY_TYPE_128_BIT_PASSPHRASE:
key_type_return = NM_ENC_TYPE_128_BIT_PASSPHRASE;
break;
case KEY_TYPE_ASCII_KEY:
key_type_return = NM_ENC_TYPE_ASCII_KEY;
break;
case KEY_TYPE_HEX_KEY:
key_type_return = NM_ENC_TYPE_HEX_KEY;
break;
default:
key_type_return = NM_ENC_TYPE_UNKNOWN;
break;
}
net = (WirelessNetwork *) g_object_get_data (G_OBJECT (dialog), "network");
g_assert (net);
gconf_wso = nm_gconf_wso_new_from_wso (opt, wireless_network_get_essid (net));
/* Tell NetworkManager about the key the user typed in */
nmi_dbus_return_user_key (applet->connection, message, passphrase, key_type_return);
/* Return new security information to NM */
nmi_dbus_return_user_key (applet->connection, message, gconf_wso);
g_object_unref (G_OBJECT (gconf_wso));
out:
nmi_passphrase_dialog_clear (dialog);
}
@ -359,49 +332,49 @@ void nmi_passphrase_dialog_cancel (NMWirelessApplet *applet)
*/
GtkWidget *nmi_passphrase_dialog_init (NMWirelessApplet *applet)
{
GtkWidget * dialog;
GtkButton * ok_button;
GtkEntry * entry;
GtkComboBox * key_type_combo;
GtkLabel * label;
GladeXML * dialog_xml;
char * orig_label_text;
GtkWidget * dialog;
GtkButton * ok_button;
GtkEntry * entry;
GtkLabel * label;
GladeXML * xml;
char * orig_label_text;
WirelessSecurityManager * wsm;
GtkComboBox * security_combo;
if (!(dialog_xml = glade_xml_new (applet->glade_file, "passphrase_dialog", NULL)))
if (!(xml = glade_xml_new (applet->glade_file, "passphrase_dialog", NULL)))
{
nmwa_schedule_warning_dialog (applet, _("The NetworkManager Applet could not find some required resources (the glade file was not found)."));
return NULL;
}
dialog = glade_xml_get_widget (dialog_xml, "passphrase_dialog");
dialog = glade_xml_get_widget (xml, "passphrase_dialog");
gtk_widget_hide (dialog);
g_object_set_data (G_OBJECT (dialog), "glade-xml", dialog_xml);
g_object_set_data (G_OBJECT (dialog), "glade-xml", xml);
/* Save original label text to preserve the '%s' and other formatting that gets overwritten
* when the dialog is first shown.
*/
label = GTK_LABEL (glade_xml_get_widget (dialog_xml, "label1"));
label = GTK_LABEL (glade_xml_get_widget (xml, "label1"));
orig_label_text = g_strdup (gtk_label_get_label (label));
g_object_set_data (G_OBJECT (dialog), "orig-label-text", orig_label_text);
g_signal_connect (G_OBJECT (dialog), "response", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_response_received), applet);
ok_button = GTK_BUTTON (glade_xml_get_widget (dialog_xml, "login_button"));
ok_button = GTK_BUTTON (glade_xml_get_widget (xml, "login_button"));
gtk_widget_grab_default (GTK_WIDGET (ok_button));
// entry = GTK_ENTRY (glade_xml_get_widget (dialog_xml, "passphrase_entry"));
nmi_passphrase_dialog_clear (dialog);
gtk_widget_set_sensitive (GTK_WIDGET (ok_button), FALSE);
// g_signal_connect (entry, "changed", G_CALLBACK (update_button_cb), dialog_xml);
/*
key_type_combo = GTK_COMBO_BOX (glade_xml_get_widget (dialog_xml, "key_type_combo"));
gtk_combo_box_set_active (key_type_combo, 0);
g_signal_connect (G_OBJECT (key_type_combo), "changed", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_key_type_combo_changed), applet);
nmi_passphrase_dialog_key_type_combo_changed (GTK_WIDGET (key_type_combo), applet);
*/
wsm = wsm_new (applet->glade_file);
g_object_set_data (G_OBJECT (dialog), "wireless-security-manager", (gpointer) wsm);
security_combo = GTK_COMBO_BOX (glade_xml_get_widget (xml, "security_combo"));
wsm_populate_combo (wsm, security_combo);
g_signal_connect (G_OBJECT (security_combo), "changed", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_security_combo_changed), dialog);
nmi_passphrase_dialog_security_combo_changed (GTK_WIDGET (security_combo), dialog);
return dialog;
}
@ -415,7 +388,7 @@ GtkWidget *nmi_passphrase_dialog_init (NMWirelessApplet *applet)
*/
void nmi_passphrase_dialog_destroy (GtkWidget *dialog)
{
char *data;
char * data;
g_return_if_fail (dialog != NULL);