[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