summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-12-06 00:36:41 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-12-06 00:36:41 +0100
commitd7a989cc7e5ae1f7ba1791fab7aecc1e06dcde63 (patch)
tree79da7f61a3e2383089c827b0f346f27863630350
parente4192ffa8649754ebbab769495bb3ab40a7c146c (diff)
downloadconnman-d7a989cc7e5ae1f7ba1791fab7aecc1e06dcde63.tar.gz
connman-d7a989cc7e5ae1f7ba1791fab7aecc1e06dcde63.tar.bz2
connman-d7a989cc7e5ae1f7ba1791fab7aecc1e06dcde63.zip
Convert hex WEP key string into binary
-rw-r--r--plugins/supplicant.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c
index 39e1624d..0a23039e 100644
--- a/plugins/supplicant.c
+++ b/plugins/supplicant.c
@@ -23,6 +23,7 @@
#include <config.h>
#endif
+#include <stdlib.h>
#include <string.h>
#include <dbus/dbus.h>
@@ -516,9 +517,28 @@ static int set_network(struct supplicant_task *task,
connman_dbus_dict_append_variant(&dict, "key_mgmt",
DBUS_TYPE_STRING, &key_mgmt);
- if (passphrase && strlen(passphrase) > 0) {
- connman_dbus_dict_append_variant(&dict, "wep_key0",
- DBUS_TYPE_STRING, &passphrase);
+ if (passphrase) {
+ int size = strlen(passphrase);
+ if (size == 10 || size == 26) {
+ unsigned char *key = malloc(13);
+ char tmp[3];
+ int i;
+ memset(tmp, 0, sizeof(tmp));
+ if (key == NULL)
+ size = 0;
+ for (i = 0; i < size / 2; i++) {
+ memcpy(tmp, passphrase + (i * 2), 2);
+ key[i] = (unsigned char) strtol(tmp,
+ NULL, 16);
+ }
+ connman_dbus_dict_append_array(&dict,
+ "wep_key0", DBUS_TYPE_BYTE,
+ &key, size / 2);
+ free(key);
+ } else
+ connman_dbus_dict_append_variant(&dict,
+ "wep_key0", DBUS_TYPE_STRING,
+ &passphrase);
connman_dbus_dict_append_variant(&dict, "wep_tx_keyidx",
DBUS_TYPE_STRING, &index);
}