From: Tomasz Bursztyka Date: Sat, 11 Jun 2011 08:07:39 +0000 (+0300) Subject: gsupplicant: Fix how raw key as psk are provided. X-Git-Tag: accepted/2.0alpha-wayland/20121110.002834~1405 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0f37827d4eaa59f0c793225c3723adc16941ef40;p=profile%2Fivi%2Fconnman.git gsupplicant: Fix how raw key as psk are provided. --- 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,