[PATCH] Dbus handlers

Dan Williams dcbw at redhat.com
Tue Feb 12 11:10:36 EST 2008


On Tue, 2008-02-12 at 15:09 +0100, Alban Browaeys wrote:
> The dbus handlers where broken. They tried to send the address of the ie
> internals instead of the data itself . This small patch fixes this.

Note that this issue doesn't affect the stable branch, because there the
parameters to wpa_dbus_dict_append_byte_array() are actually _arrays_,
not pointers, and therefore the & operator performs as expected.

There are two issues here:

1) The comment about D-Bus requiring the address of the variable is
wrong, because wpa_dbus_dict_append_byte_array() handles all of that for
you

2) Commit 3e4bd73d5382c5942c79df5b71aa0cd3f5b943d8 incorrectly changed
the handling of these array values to pointers, keeping the & instead of
dropping it when moving from u8[] to u8*

Following patch is simpler and removes the erroneous comment.


diff --git a/wpa_supplicant/ctrl_iface_dbus_handlers.c b/wpa_supplicant/ctrl_iface_dbus_handlers.c
index 7923d76..1735008 100644
--- a/wpa_supplicant/ctrl_iface_dbus_handlers.c
+++ b/wpa_supplicant/ctrl_iface_dbus_handlers.c
@@ -379,15 +379,8 @@ DBusMessage * wpas_dbus_bssid_properties(DBusMessage *message,
 					 struct wpa_scan_res *res)
 {
 	DBusMessage *reply = NULL;
-	char *bssid_data;
 	DBusMessageIter iter, iter_dict;
 	const u8 *ie;
-	size_t len;
-
-	/* dbus needs the address of a pointer to the actual value
-	 * for array types, not the address of the value itself.
-	 */
-	bssid_data = (char *) &res->bssid;
 
 	/* Dump the properties into a dbus message */
 	reply = dbus_message_new_method_return(message);
@@ -397,37 +390,31 @@ DBusMessage * wpas_dbus_bssid_properties(DBusMessage *message,
 		goto error;
 
 	if (!wpa_dbus_dict_append_byte_array(&iter_dict, "bssid",
-					     bssid_data, ETH_ALEN))
+					     (const char *) res->bssid,
+					     ETH_ALEN))
 		goto error;
 
 	ie = wpa_scan_get_ie(res, WLAN_EID_SSID);
 	if (ie) {
-		const char *ssid_data;
-		len = ie[1];
-		ie += 2;
-		ssid_data = (const char *) &ie;
 		if (!wpa_dbus_dict_append_byte_array(&iter_dict, "ssid",
-						     ssid_data, len))
+						     (const char *) (ie + 2),
+						     ie[1]))
 		goto error;
 	}
 
 	ie = wpa_scan_get_vendor_ie(res, WPA_IE_VENDOR_TYPE);
 	if (ie) {
-		const char *wpa_ie_data;
-		len = 2 + ie[1];
-		wpa_ie_data = (const char *) &ie;
 		if (!wpa_dbus_dict_append_byte_array(&iter_dict, "wpaie",
-						     wpa_ie_data, len))
+						     (const char *) ie,
+						     ie[1] + 2))
 			goto error;
 	}
 
 	ie = wpa_scan_get_ie(res, WLAN_EID_RSN);
 	if (ie) {
-		const char *rsn_ie_data;
-		len = 2 + ie[1];
-		rsn_ie_data = (const char *) &ie;
 		if (!wpa_dbus_dict_append_byte_array(&iter_dict, "rsnie",
-						     rsn_ie_data, len))
+						     (const char *) ie,
+						     ie[1] + 2))
 			goto error;
 	}
 



More information about the HostAP mailing list