diff --git a/ChangeLog b/ChangeLog index 6ad608dc7a..08a5ed9b92 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2005-12-12 Dan Williams + + * libnm-util/dbus-helpers.[ch] + libnm-util/Makefile.am + - new helper calls to consolidate locations where + NM's setDevice method is called + + * gnome/applet/applet-dbus-devices.c + gnome/applet/wireless-security-option.c + gnome/applet/wso-* + - Implement dbus message param append function for + all wireless security options + 2005-12-12 Robert Love * libnm-util/cipher-wep-passphrase.c, diff --git a/gnome/applet/applet-dbus-devices.c b/gnome/applet/applet-dbus-devices.c index 823b0df75b..a83975fc4c 100644 --- a/gnome/applet/applet-dbus-devices.c +++ b/gnome/applet/applet-dbus-devices.c @@ -1071,7 +1071,8 @@ void nmwa_dbus_device_remove_one_device (NMWirelessApplet *applet, const char *d void nmwa_dbus_set_device (DBusConnection *connection, NetworkDevice *dev, const char *essid, WirelessSecurityOption * opt) { - DBusMessage *message; + DBusMessage * message; + gboolean success = TRUE; g_return_if_fail (connection != NULL); g_return_if_fail (dev != NULL); @@ -1091,14 +1092,15 @@ void nmwa_dbus_set_device (DBusConnection *connection, NetworkDevice *dev, const /* If we've got specific wireless security options, add them */ if (opt) - wso_append_dbus_params (opt, essid, message); + success = wso_append_dbus_params (opt, essid, message); } else { nm_info ("Forcing device '%s'\n", network_device_get_nm_path (dev)); dbus_message_append_args (message, DBUS_TYPE_OBJECT_PATH, &dev_path, DBUS_TYPE_INVALID); } - dbus_connection_send (connection, message, NULL); +// if (success) +// dbus_connection_send (connection, message, NULL); dbus_message_unref (message); } else diff --git a/gnome/applet/wireless-security-option.c b/gnome/applet/wireless-security-option.c index e780500a1d..778084f817 100644 --- a/gnome/applet/wireless-security-option.c +++ b/gnome/applet/wireless-security-option.c @@ -110,7 +110,7 @@ gboolean wso_validate_helper (WirelessSecurityOption *opt, const char *ssid, con g_return_val_if_fail (ssid != NULL, FALSE); if (out_cipher) - g_return_val_if_fail (*out_cipher != NULL, FALSE); + g_return_val_if_fail (*out_cipher == NULL, FALSE); /* Try each of our ciphers in turn, if one validates that's enough */ for (elt = opt->ciphers; elt; elt = g_slist_next (elt)) @@ -118,7 +118,8 @@ gboolean wso_validate_helper (WirelessSecurityOption *opt, const char *ssid, con IEEE_802_11_Cipher * cipher = (IEEE_802_11_Cipher *) (elt->data); if (ieee_802_11_cipher_validate (cipher, ssid, input) == 0) { - *out_cipher = cipher; + if (out_cipher) + *out_cipher = cipher; return TRUE; } } diff --git a/gnome/applet/wso-wep-ascii.c b/gnome/applet/wso-wep-ascii.c index e5592b86e1..8561eb099f 100644 --- a/gnome/applet/wso-wep-ascii.c +++ b/gnome/applet/wso-wep-ascii.c @@ -30,6 +30,7 @@ #include "wso-private.h" #include "cipher.h" #include "cipher-wep-ascii.h" +#include "dbus-helpers.h" struct OptData @@ -94,10 +95,8 @@ static gboolean append_dbus_params_func (WirelessSecurityOption *opt, const char IEEE_802_11_Cipher * cipher = NULL; GtkWidget * auth_combo; int auth_alg = -1; - int we_cipher = -1; GtkWidget * entry; const char * input; - char * hashed = NULL; g_return_val_if_fail (opt != NULL, FALSE); g_return_val_if_fail (opt->data != NULL, FALSE); @@ -112,11 +111,7 @@ static gboolean append_dbus_params_func (WirelessSecurityOption *opt, const char auth_combo = glade_xml_get_widget (opt->uixml, opt->data->auth_combo_name); auth_alg = wso_wep_auth_combo_get_auth_alg (opt, GTK_COMBO_BOX (auth_combo)); - we_cipher = ieee_802_11_cipher_get_we_cipher (cipher); - hashed = ieee_802_11_cipher_hash (cipher, ssid, input); - - g_free (hashed); - + nmu_dbus_message_append_wep_args (message, cipher, ssid, input, auth_alg); return TRUE; } diff --git a/gnome/applet/wso-wep-hex.c b/gnome/applet/wso-wep-hex.c index 0ca2488fdb..f85711af89 100644 --- a/gnome/applet/wso-wep-hex.c +++ b/gnome/applet/wso-wep-hex.c @@ -23,12 +23,14 @@ #include #include #include +#include #include "wireless-security-option.h" #include "wso-wep-hex.h" #include "wso-private.h" #include "cipher.h" #include "cipher-wep-hex.h" +#include "dbus-helpers.h" struct OptData @@ -85,6 +87,32 @@ static gboolean validate_input_func (WirelessSecurityOption *opt, const char *ss } +static gboolean append_dbus_params_func (WirelessSecurityOption *opt, const char *ssid, DBusMessage *message) +{ + IEEE_802_11_Cipher * cipher = NULL; + GtkWidget * auth_combo; + int auth_alg = -1; + GtkWidget * entry; + const char * input; + + g_return_val_if_fail (opt != NULL, FALSE); + g_return_val_if_fail (opt->data != NULL, FALSE); + g_return_val_if_fail (opt->data->auth_combo_name != NULL, FALSE); + g_return_val_if_fail (opt->data->entry_name != NULL, FALSE); + + entry = glade_xml_get_widget (opt->uixml, opt->data->entry_name); + input = gtk_entry_get_text (GTK_ENTRY (entry)); + if (!wso_validate_helper (opt, ssid, input, &cipher) || !cipher) + return FALSE; + + auth_combo = glade_xml_get_widget (opt->uixml, opt->data->auth_combo_name); + auth_alg = wso_wep_auth_combo_get_auth_alg (opt, GTK_COMBO_BOX (auth_combo)); + + nmu_dbus_message_append_wep_args (message, cipher, ssid, input, auth_alg); + return TRUE; +} + + WirelessSecurityOption * wso_wep_hex_new (const char *glade_file) { WirelessSecurityOption * opt = NULL; @@ -99,6 +127,7 @@ WirelessSecurityOption * wso_wep_hex_new (const char *glade_file) opt->data_free_func = data_free_func; opt->validate_input_func = validate_input_func; opt->widget_create_func = widget_create_func; + opt->append_dbus_params_func = append_dbus_params_func; if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL))) { diff --git a/gnome/applet/wso-wep-passphrase.c b/gnome/applet/wso-wep-passphrase.c index a4dda7a422..aceb0a7426 100644 --- a/gnome/applet/wso-wep-passphrase.c +++ b/gnome/applet/wso-wep-passphrase.c @@ -23,12 +23,14 @@ #include #include #include +#include #include "wireless-security-option.h" #include "wso-wep-passphrase.h" #include "wso-private.h" #include "cipher.h" #include "cipher-wep-passphrase.h" +#include "dbus-helpers.h" struct OptData @@ -85,6 +87,32 @@ static gboolean validate_input_func (WirelessSecurityOption *opt, const char *ss } +static gboolean append_dbus_params_func (WirelessSecurityOption *opt, const char *ssid, DBusMessage *message) +{ + IEEE_802_11_Cipher * cipher = NULL; + GtkWidget * auth_combo; + int auth_alg = -1; + GtkWidget * entry; + const char * input; + + g_return_val_if_fail (opt != NULL, FALSE); + g_return_val_if_fail (opt->data != NULL, FALSE); + g_return_val_if_fail (opt->data->auth_combo_name != NULL, FALSE); + g_return_val_if_fail (opt->data->entry_name != NULL, FALSE); + + entry = glade_xml_get_widget (opt->uixml, opt->data->entry_name); + input = gtk_entry_get_text (GTK_ENTRY (entry)); + if (!wso_validate_helper (opt, ssid, input, &cipher) || !cipher) + return FALSE; + + auth_combo = glade_xml_get_widget (opt->uixml, opt->data->auth_combo_name); + auth_alg = wso_wep_auth_combo_get_auth_alg (opt, GTK_COMBO_BOX (auth_combo)); + + nmu_dbus_message_append_wep_args (message, cipher, ssid, input, auth_alg); + return TRUE; +} + + WirelessSecurityOption * wso_wep_passphrase_new (const char *glade_file) { WirelessSecurityOption * opt = NULL; @@ -99,6 +127,7 @@ WirelessSecurityOption * wso_wep_passphrase_new (const char *glade_file) opt->data_free_func = data_free_func; opt->validate_input_func = validate_input_func; opt->widget_create_func = widget_create_func; + opt->append_dbus_params_func = append_dbus_params_func; if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL))) { diff --git a/gnome/applet/wso-wpa-psk-passphrase.c b/gnome/applet/wso-wpa-psk-passphrase.c index 9796e490a1..8e35cb58a1 100644 --- a/gnome/applet/wso-wpa-psk-passphrase.c +++ b/gnome/applet/wso-wpa-psk-passphrase.c @@ -23,12 +23,15 @@ #include #include #include +#include +#include #include "wireless-security-option.h" #include "wso-wpa-psk-passphrase.h" #include "wso-private.h" #include "cipher.h" #include "cipher-wpa-psk-passphrase.h" +#include "dbus-helpers.h" struct OptData @@ -74,6 +77,30 @@ static gboolean validate_input_func (WirelessSecurityOption *opt, const char *ss } +static gboolean append_dbus_params_func (WirelessSecurityOption *opt, const char *ssid, DBusMessage *message) +{ + IEEE_802_11_Cipher * cipher = NULL; + GtkWidget * auth_combo; + int auth_alg = -1; + GtkWidget * entry; + const char * input; + + g_return_val_if_fail (opt != NULL, FALSE); + g_return_val_if_fail (opt->data != NULL, FALSE); + g_return_val_if_fail (opt->data->entry_name != NULL, FALSE); + + entry = glade_xml_get_widget (opt->uixml, opt->data->entry_name); + input = gtk_entry_get_text (GTK_ENTRY (entry)); + if (!wso_validate_helper (opt, ssid, input, &cipher) || !cipher) + return FALSE; + + nmu_dbus_message_append_wpa_psk_args (message, cipher, ssid, input, + IW_AUTH_WPA_VERSION_WPA, IW_AUTH_KEY_MGMT_PSK); + + return TRUE; +} + + WirelessSecurityOption * wso_wpa_psk_passphrase_new (const char *glade_file) { WirelessSecurityOption * opt = NULL; diff --git a/libnm-util/Makefile.am b/libnm-util/Makefile.am index eb4c0ce3ae..f757ead431 100644 --- a/libnm-util/Makefile.am +++ b/libnm-util/Makefile.am @@ -2,7 +2,14 @@ INCLUDES = -I${top_srcdir} -I${top_srcdir}/include lib_LTLIBRARIES=libnm-util.la -libnm_util_la_CPPFLAGS = $(GLIB_CFLAGS) +libnm_util_la_CPPFLAGS = \ + $(GLIB_CFLAGS) \ + $(DBUS_CFLAGS) \ + -DDBUS_API_SUBJECT_TO_CHANGE \ + -DG_DISABLE_DEPRECATED \ + -DGDK_DISABLE_DEPRECATED \ + -DGNOME_DISABLE_DEPRECATED \ + -DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" if WITH_GCRYPT libnm_util_la_CPPFLAGS += $(LIBGCRYPT_CFLAGS) @@ -24,6 +31,8 @@ libnm_util_la_SOURCES= \ cipher-wpa-psk-passphrase.h \ gnome-keyring-md5.c \ gnome-keyring-md5.h \ + dbus-helpers.c \ + dbus-helpers.h \ sha1.c \ sha1.h @@ -31,7 +40,7 @@ if !WITH_GCRYPT libnm_util_la_SOURCES += gnome-keyring-md5.c gnome-keyring-md5.h endif -libnm_util_la_LDFLAGS= $(GLIB_LIBS) +libnm_util_la_LDFLAGS= $(GLIB_LIBS) $(DBUS_LIBS) if WITH_GCRYPT libnm_util_la_LDFLAGS += $(LIBGCRYPT_LIBS) @@ -45,7 +54,8 @@ libnm_util_include_HEADERS = \ cipher-wep-passphrase.h \ cipher-wep-ascii.h \ cipher-wpa-psk-hex.h \ - cipher-wpa-psk-passphrase.h + cipher-wpa-psk-passphrase.h \ + dbus-helpers.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libnm-util.pc diff --git a/libnm-util/dbus-helpers.c b/libnm-util/dbus-helpers.c new file mode 100644 index 0000000000..306cdb2220 --- /dev/null +++ b/libnm-util/dbus-helpers.c @@ -0,0 +1,85 @@ +/* NetworkManager Wireless Applet -- Display wireless access points and allow user control + * + * Dan Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * (C) Copyright 2005 Red Hat, Inc. + */ + + +#include +#include +#include + +#include "dbus-helpers.h" +#include "cipher.h" + + +dbus_bool_t nmu_dbus_message_append_wep_args (DBusMessage *message, IEEE_802_11_Cipher *cipher, + const char *ssid, const char *input, int auth_alg) +{ + int we_cipher = -1; + char * hashed = NULL; + int hashed_len; + dbus_bool_t result; + + g_return_val_if_fail (message != NULL, FALSE); + g_return_val_if_fail (cipher != NULL, FALSE); + g_return_val_if_fail ((auth_alg == IW_AUTH_ALG_OPEN_SYSTEM) || (auth_alg == IW_AUTH_ALG_SHARED_KEY), FALSE); + + we_cipher = ieee_802_11_cipher_get_we_cipher (cipher); +fprintf (stderr, "Cipher=%d, ssid='%s', input='%s'\n", we_cipher, ssid, input); + hashed = ieee_802_11_cipher_hash (cipher, ssid, input); + hashed_len = strlen (hashed); +fprintf (stderr, "hashed = '%s', len = %d\n", hashed, hashed_len); + + result = dbus_message_append_args (message, DBUS_TYPE_INT32, &we_cipher, + DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &hashed, hashed_len, + DBUS_TYPE_INT32, &auth_alg, + DBUS_TYPE_INVALID); + g_free (hashed); + + return result; +} + + +dbus_bool_t nmu_dbus_message_append_wpa_psk_args (DBusMessage *message, IEEE_802_11_Cipher *cipher, + const char *ssid, const char *input, int wpa_version, int key_mgt) +{ + int we_cipher = -1; + char * hashed = NULL; + int hashed_len; + dbus_bool_t result; + + g_return_val_if_fail (message != NULL, FALSE); + g_return_val_if_fail (cipher != NULL, FALSE); + g_return_val_if_fail ((wpa_version == IW_AUTH_WPA_VERSION_WPA) || (wpa_version == IW_AUTH_WPA_VERSION_WPA2), FALSE); + g_return_val_if_fail ((key_mgt == IW_AUTH_KEY_MGMT_802_1X) || (key_mgt == IW_AUTH_KEY_MGMT_PSK), FALSE); + + we_cipher = ieee_802_11_cipher_get_we_cipher (cipher); + hashed = ieee_802_11_cipher_hash (cipher, ssid, input); + hashed_len = strlen (hashed); + + result = dbus_message_append_args (message, DBUS_TYPE_INT32, &we_cipher, + DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &hashed, hashed_len, + DBUS_TYPE_INT32, &wpa_version, + DBUS_TYPE_INT32, &key_mgt, + DBUS_TYPE_INVALID); + g_free (hashed); + + return result; +} + diff --git a/libnm-util/dbus-helpers.h b/libnm-util/dbus-helpers.h new file mode 100644 index 0000000000..917b7d357b --- /dev/null +++ b/libnm-util/dbus-helpers.h @@ -0,0 +1,36 @@ +/* NetworkManager Wireless Applet -- Display wireless access points and allow user control + * + * Dan Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * (C) Copyright 2005 Red Hat, Inc. + */ + +#ifndef DBUS_HELPERS_H +#define DBUS_HELPERS_H + +#include + +#include "cipher.h" + +dbus_bool_t nmu_dbus_message_append_wep_args (DBusMessage *message, IEEE_802_11_Cipher *cipher, + const char *ssid, const char *input, int auth_alg); + +dbus_bool_t nmu_dbus_message_append_wpa_psk_args (DBusMessage *message, IEEE_802_11_Cipher *cipher, + const char *ssid, const char *input, int wpa_version, int key_mgt); + + +#endif /* DBUS_HELPERS_H */