From 0f37827d4eaa59f0c793225c3723adc16941ef40 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Sat, 11 Jun 2011 11:07:39 +0300 Subject: [PATCH] gsupplicant: Fix how raw key as psk are provided. --- gsupplicant/supplicant.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 2c3e5dd..485b671 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -2554,13 +2555,36 @@ static void add_network_security_wep(DBusMessageIter *dict, } } +static dbus_bool_t is_psk_raw_key(const char *psk) +{ + int i; + + /* A raw key is always 64 bytes length... */ + if (strlen(psk) != 64) + return FALSE; + + /* ... and its content is in hex representation */ + for (i = 0; i < 64; i++) + if (!isxdigit((unsigned char) psk[i])) + return FALSE; + + return TRUE; +} + static void add_network_security_psk(DBusMessageIter *dict, GSupplicantSSID *ssid) { - if (ssid->passphrase && strlen(ssid->passphrase) > 0) + if (ssid->passphrase && strlen(ssid->passphrase) > 0) { + + if (is_psk_raw_key(ssid->passphrase) == TRUE) + supplicant_dbus_property_append_fixed_array(dict, + "psk", DBUS_TYPE_BYTE, + &ssid->passphrase, 64); + else supplicant_dbus_dict_append_basic(dict, "psk", - DBUS_TYPE_STRING, + DBUS_TYPE_STRING, &ssid->passphrase); + } } static void add_network_security_tls(DBusMessageIter *dict, -- 2.7.4