Use only printable characters for network name
authorSamuel Ortiz <sameo@linux.intel.com>
Thu, 2 Jul 2009 10:19:31 +0000 (12:19 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 2 Jul 2009 11:44:14 +0000 (04:44 -0700)
plugins/supplicant.c
src/device.c

index e9612f3..d955f6f 100644 (file)
@@ -929,7 +929,8 @@ static void extract_ssid(DBusMessageIter *value,
 {
        DBusMessageIter array;
        unsigned char *ssid;
-       int ssid_len;
+       int ssid_len, i;
+       char *d;
 
        dbus_message_iter_recurse(value, &array);
        dbus_message_iter_get_fixed_array(&array, &ssid, &ssid_len);
@@ -948,7 +949,12 @@ static void extract_ssid(DBusMessageIter *value,
        if (result->name == NULL)
                return;
 
-       memcpy(result->name, ssid, ssid_len);
+       d =  result->name;
+       for (i = 0; i < ssid_len; i++)
+               if (g_ascii_isprint(ssid[i]))
+                       *d++ = ssid[i];
+
+       *d = '\0';
 }
 
 static void extract_wpaie(DBusMessageIter *value,
index a2507b5..63d5209 100644 (file)
@@ -468,6 +468,20 @@ static char *build_group(const unsigned char *ssid, unsigned int ssid_len,
        return g_string_free(str, FALSE);
 }
 
+static char *build_network_name(const char *ssid, char *name,
+                                               unsigned int ssid_len)
+{
+       unsigned int i;
+       char *d = name;
+
+       for (i = 0; i < ssid_len; i++)
+               if (g_ascii_isprint(ssid[i]))
+                       *d++ = ssid[i];
+
+       *d = '\0';
+       return name;
+}
+
 static DBusMessage *join_network(DBusConnection *conn,
                                        DBusMessage *msg, void *data)
 {
@@ -517,10 +531,22 @@ static DBusMessage *join_network(DBusConnection *conn,
                switch (dbus_message_iter_get_arg_type(&value)) {
                case DBUS_TYPE_STRING:
                        dbus_message_iter_get_basic(&value, &str);
-                       if (g_str_equal(key, "WiFi.SSID") == TRUE)
+                       if (g_str_equal(key, "WiFi.SSID") == TRUE) {
+                               char *name;
+
                                connman_network_set_blob(network, key,
                                                        str, strlen(str));
-                       else
+                               name = g_try_malloc0(strlen(str) + 1);
+                               if (name == NULL)
+                                       return __connman_error_failed(msg,
+                                                                     -ENOMEM);
+
+                               name = build_network_name((char *) str, name,
+                                                                 strlen(str));
+                               connman_network_set_name(network, name);
+                               g_free(name);
+
+                       } else
                                connman_network_set_string(network, key, str);
                        break;
                }