[pkg-wpa-devel] r1047 - in /wpasupplicant/trunk/debian: changelog patches/38_dbus_blob_support.patch patches/series

kelmo-guest at users.alioth.debian.org kelmo-guest at users.alioth.debian.org
Sun Jan 20 01:11:15 UTC 2008


Author: kelmo-guest
Date: Sun Jan 20 01:11:15 2008
New Revision: 1047

URL: http://svn.debian.org/wsvn/pkg-wpa/?sc=1&rev=1047
Log:
* Add debian/patches/38_dbus_blob_support.patch to allow support for loading
  of blobs via the D-Bus interface. Patch cherry picked from upstream git.

Added:
    wpasupplicant/trunk/debian/patches/38_dbus_blob_support.patch
Modified:
    wpasupplicant/trunk/debian/changelog
    wpasupplicant/trunk/debian/patches/series

Modified: wpasupplicant/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/changelog?rev=1047&op=diff
==============================================================================
--- wpasupplicant/trunk/debian/changelog (original)
+++ wpasupplicant/trunk/debian/changelog Sun Jan 20 01:11:15 2008
@@ -27,8 +27,10 @@
   * /etc/init.d/wpa-ifupdown must stop before sendsigs does when using
     dependency based init system. Add $remote_fs to Required-Stop keyword of
     LSB header in debian/wpasupplicant.wpa-ifupdown.init.
-
- -- Kel Modderman <kel at otaku42.de>  Fri, 18 Jan 2008 18:32:48 +1000
+  * Add debian/patches/38_dbus_blob_support.patch to allow support for loading
+    of blobs via the D-Bus interface. Patch cherry picked from upstream git.
+
+ -- Kel Modderman <kel at otaku42.de>  Sun, 20 Jan 2008 11:04:24 +1000
 
 wpasupplicant (0.6.2-1) experimental; urgency=low
 

Added: wpasupplicant/trunk/debian/patches/38_dbus_blob_support.patch
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/patches/38_dbus_blob_support.patch?rev=1047&op=file
==============================================================================
--- wpasupplicant/trunk/debian/patches/38_dbus_blob_support.patch (added)
+++ wpasupplicant/trunk/debian/patches/38_dbus_blob_support.patch Sun Jan 20 01:11:15 2008
@@ -1,0 +1,178 @@
+--- a/wpa_supplicant/config.c
++++ b/wpa_supplicant/config.c
+@@ -74,13 +74,14 @@
+ 		if (hlen & 1)
+ 			return NULL;
+ 		tlen = hlen / 2;
+-		str = os_malloc(tlen);
++		str = os_malloc(tlen + 1);
+ 		if (str == NULL)
+ 			return NULL;
+ 		if (hexstr2bin(value, str, tlen)) {
+ 			os_free(str);
+ 			return NULL;
+ 		}
++		str[tlen] = '\0';
+ 		*len = tlen;
+ 		return (char *) str;
+ 	}
+--- a/wpa_supplicant/ctrl_iface_dbus.c
++++ b/wpa_supplicant/ctrl_iface_dbus.c
+@@ -536,6 +536,10 @@
+ 			reply = wpas_dbus_iface_set_ap_scan(message, wpa_s);
+ 		else if (!strcmp(method, "state"))
+ 			reply = wpas_dbus_iface_get_state(message, wpa_s);
++		else if (!strcmp(method, "setBlobs"))
++			reply = wpas_dbus_iface_set_blobs(message, wpa_s);
++		else if (!strcmp(method, "removeBlobs"))
++			reply = wpas_dbus_iface_remove_blobs(message, wpa_s);
+ 	}
+ 
+ 	/* If the message was handled, send back the reply */
+--- a/wpa_supplicant/ctrl_iface_dbus_handlers.c
++++ b/wpa_supplicant/ctrl_iface_dbus_handlers.c
+@@ -1225,3 +1225,129 @@
+ 
+ 	return reply;
+ }
++
++
++/**
++ * wpas_dbus_iface_set_blobs - Store named binary blobs (ie, for certificates)
++ * @message: Pointer to incoming dbus message
++ * @global: %wpa_supplicant global data structure
++ * Returns: A dbus message containing a UINT32 indicating success (1) or
++ *          failure (0)
++ *
++ * Asks wpa_supplicant to internally store a one or more binary blobs.
++ */
++DBusMessage * wpas_dbus_iface_set_blobs(DBusMessage *message,
++					struct wpa_supplicant *wpa_s)
++{
++	DBusMessage *reply = NULL;
++	struct wpa_dbus_dict_entry entry = { .type = DBUS_TYPE_STRING };
++	DBusMessageIter	iter, iter_dict;
++
++	dbus_message_iter_init(message, &iter);
++
++	if (!wpa_dbus_dict_open_read(&iter, &iter_dict))
++		return wpas_dbus_new_invalid_opts_error(message, NULL);
++
++	while (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
++		struct wpa_config_blob *blob;
++
++		if (!wpa_dbus_dict_get_entry(&iter_dict, &entry)) {
++			reply = wpas_dbus_new_invalid_opts_error(message,
++								 NULL);
++			break;
++		}
++
++		if (entry.type != DBUS_TYPE_ARRAY ||
++		    entry.array_type != DBUS_TYPE_BYTE) {
++			reply = wpas_dbus_new_invalid_opts_error(
++				message, "Byte array expected.");
++			break;
++		}
++
++		if ((entry.array_len <= 0) || (entry.array_len > 65536) ||
++		    !strlen(entry.key)) {
++			reply = wpas_dbus_new_invalid_opts_error(
++				message, "Invalid array size.");
++			break;
++		}
++
++		blob = os_zalloc(sizeof(*blob));
++		if (blob == NULL) {
++			reply = dbus_message_new_error(
++				message, WPAS_ERROR_ADD_ERROR,
++				"Not enough memory to add blob.");
++			break;
++		}
++		blob->data = os_zalloc(entry.array_len);
++		if (blob->data == NULL) {
++			reply = dbus_message_new_error(
++				message, WPAS_ERROR_ADD_ERROR,
++				"Not enough memory to add blob data.");
++			os_free(blob);
++			break;
++		}
++
++		blob->name = os_strdup(entry.key);
++		blob->len = entry.array_len;
++		os_memcpy(blob->data, (u8 *) entry.bytearray_value,
++				entry.array_len);
++		if (blob->name == NULL || blob->data == NULL) {
++			wpa_config_free_blob(blob);
++			reply = dbus_message_new_error(
++				message, WPAS_ERROR_ADD_ERROR,
++				"Error adding blob.");
++			break;
++		}
++
++		/* Success */
++		wpa_config_remove_blob(wpa_s->conf, blob->name);
++		wpa_config_set_blob(wpa_s->conf, blob);
++		wpa_dbus_dict_entry_clear(&entry);
++	}
++	wpa_dbus_dict_entry_clear(&entry);
++
++	return reply ? reply : wpas_dbus_new_success_reply(message);
++}
++
++
++/**
++ * wpas_dbus_iface_remove_blob - Remove named binary blobs
++ * @message: Pointer to incoming dbus message
++ * @global: %wpa_supplicant global data structure
++ * Returns: A dbus message containing a UINT32 indicating success (1) or
++ *          failure (0)
++ *
++ * Asks wpa_supplicant to remove one or more previously stored binary blobs.
++ */
++DBusMessage * wpas_dbus_iface_remove_blobs(DBusMessage *message,
++					  struct wpa_supplicant *wpa_s)
++{
++	DBusMessageIter iter, array;
++	char *err_msg = NULL;
++
++	dbus_message_iter_init(message, &iter);
++
++	if ((dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY) ||
++	    (dbus_message_iter_get_element_type (&iter) != DBUS_TYPE_STRING))
++		return wpas_dbus_new_invalid_opts_error(message, NULL);
++
++	dbus_message_iter_recurse(&iter, &array);
++	while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) {
++		const char *name;
++
++		dbus_message_iter_get_basic(&array, &name);
++		if (!strlen(name))
++			err_msg = "Invalid blob name.";
++
++		if (wpa_config_remove_blob(wpa_s->conf, name) != 0)
++			err_msg = "Error removing blob.";
++		dbus_message_iter_next(&array);
++	}
++
++	if (err_msg) {
++		return dbus_message_new_error(message, WPAS_ERROR_REMOVE_ERROR,
++					      err_msg);
++	}
++
++	return wpas_dbus_new_success_reply(message);
++}
+--- a/wpa_supplicant/ctrl_iface_dbus_handlers.h
++++ b/wpa_supplicant/ctrl_iface_dbus_handlers.h
+@@ -71,6 +71,12 @@
+ DBusMessage * wpas_dbus_iface_get_state(DBusMessage *message,
+ 					struct wpa_supplicant *wpa_s);
+ 
++DBusMessage * wpas_dbus_iface_set_blobs(DBusMessage *message,
++				        struct wpa_supplicant *wpa_s);
++
++DBusMessage * wpas_dbus_iface_remove_blobs(DBusMessage *message,
++					   struct wpa_supplicant *wpa_s);
++
+ #endif /* CONFIG_CTRL_IFACE_DBUS */
+ 
+ #endif /* CTRL_IFACE_DBUS_HANDLERS_H */

Modified: wpasupplicant/trunk/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-wpa/wpasupplicant/trunk/debian/patches/series?rev=1047&op=diff
==============================================================================
--- wpasupplicant/trunk/debian/patches/series (original)
+++ wpasupplicant/trunk/debian/patches/series Sun Jan 20 01:11:15 2008
@@ -13,3 +13,4 @@
 35_ctrl_iface_disable_all.patch
 36_ctrl_iface_remove_all.patch
 37_rm_wait_for_interface.patch
+38_dbus_blob_support.patch




More information about the Pkg-wpa-devel mailing list