Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Side by Side Diff: plugins/newwifi.c

Issue 6609007: flimflam: add "psk" security as a way to specify either "wpa" or "rsn" (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/flimflam.git@master
Patch Set: add backwards compat Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « include/wifi.h ('k') | src/service.c » ('j') | src/service.c » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * New WiFi - communicate with wpa_supplicant using the "new D-Bus api" 2 * New WiFi - communicate with wpa_supplicant using the "new D-Bus api"
3 * 3 *
4 * This file initially created by Google, Inc. 4 * This file initially created by Google, Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 * 9 *
10 * This program is distributed in the hope that it will be useful, 10 * This program is distributed in the hope that it will be useful,
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 803
804 if (use_pkcs11) { 804 if (use_pkcs11) {
805 append_from_network(dict, network, CONNMAN_WIFI_EAP_PIN, "pin"); 805 append_from_network(dict, network, CONNMAN_WIFI_EAP_PIN, "pin");
806 connman_dbus_dict_append_variant(dict, "engine", 806 connman_dbus_dict_append_variant(dict, "engine",
807 DBUS_TYPE_INT32, &engine); 807 DBUS_TYPE_INT32, &engine);
808 connman_dbus_dict_append_variant(dict, "engine_id", 808 connman_dbus_dict_append_variant(dict, "engine_id",
809 DBUS_TYPE_STRING, &engine_id); 809 DBUS_TYPE_STRING, &engine_id);
810 } 810 }
811 } 811 }
812 812
813 static int check_wpa(struct connman_network *network) 813 static int check_psk(struct connman_network *network)
814 { 814 {
815 const char *passphrase = 815 const char *passphrase =
816 connman_network_get_string(network, "WiFi.Passphrase"); 816 connman_network_get_string(network, "WiFi.Passphrase");
817 return (passphrase == NULL || strlen(passphrase) == 0 ? -EINVAL : 0); 817 return (passphrase == NULL || strlen(passphrase) == 0 ? -EINVAL : 0);
818 } 818 }
819 819
820 static void append_wpa(DBusMessageIter *dict, 820 static void append_psk(DBusMessageIter *dict,
821 » struct connman_network *network) 821 » struct connman_network *network, const char *proto)
822 { 822 {
823 const char *key_mgmt = "WPA-PSK"; 823 const char *key_mgmt = "WPA-PSK";
824 const char *passphrase; 824 const char *passphrase;
825 825
826 connman_dbus_dict_append_variant(dict, "key_mgmt", 826 connman_dbus_dict_append_variant(dict, "key_mgmt",
827 DBUS_TYPE_STRING, &key_mgmt); 827 DBUS_TYPE_STRING, &key_mgmt);
828 connman_dbus_dict_append_variant(dict, "proto",
829 DBUS_TYPE_STRING, &proto);
828 830
829 passphrase = connman_network_get_string(network, "WiFi.Passphrase"); 831 passphrase = connman_network_get_string(network, "WiFi.Passphrase");
830 connman_dbus_dict_append_variant(dict, "psk", 832 connman_dbus_dict_append_variant(dict, "psk",
831 DBUS_TYPE_STRING, &passphrase); 833 DBUS_TYPE_STRING, &passphrase);
832 } 834 }
833 835
834 static int check_wep(struct connman_network *network) 836 static int check_wep(struct connman_network *network)
835 { 837 {
836 const char *passphrase = 838 const char *passphrase =
837 connman_network_get_string(network, "WiFi.Passphrase"); 839 connman_network_get_string(network, "WiFi.Passphrase");
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len); 894 ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
893 append_byte_array(&dict, "ssid", ssid, ssid_len); 895 append_byte_array(&dict, "ssid", ssid, ssid_len);
894 /* NB: do not set the bssid; this allows wpa_supplicant to roam */ 896 /* NB: do not set the bssid; this allows wpa_supplicant to roam */
895 897
896 /* must configure background scanning for each netblock */ 898 /* must configure background scanning for each netblock */
897 append_bgscan(&dict, network); 899 append_bgscan(&dict, network);
898 900
899 security = connman_network_get_string(network, "WiFi.Security"); 901 security = connman_network_get_string(network, "WiFi.Security");
900 if (g_ascii_strcasecmp(security, "802_1x") == 0) { 902 if (g_ascii_strcasecmp(security, "802_1x") == 0) {
901 append_8021x(&dict, network); 903 append_8021x(&dict, network);
902 } else if (g_ascii_strcasecmp(security, "wpa") == 0 || 904 } else if (g_ascii_strcasecmp(security, "psk") == 0) {
903 » g_ascii_strcasecmp(security, "rsn") == 0) { 905 » » append_psk(&dict, network, "WPA RSN");
904 » » append_wpa(&dict, network); 906 » } else if (g_ascii_strcasecmp(security, "wpa") == 0) {
907 » » append_psk(&dict, network, "WPA");
908 » } else if (g_ascii_strcasecmp(security, "rsn") == 0) {
909 » » append_psk(&dict, network, "RSN");
905 } else if (g_ascii_strcasecmp(security, "wep") == 0) { 910 } else if (g_ascii_strcasecmp(security, "wep") == 0) {
906 append_wep(&dict, network); 911 append_wep(&dict, network);
907 } else { 912 } else {
908 const char *key_mgmt = "NONE"; 913 const char *key_mgmt = "NONE";
909 connman_dbus_dict_append_variant(&dict, "key_mgmt", 914 connman_dbus_dict_append_variant(&dict, "key_mgmt",
910 DBUS_TYPE_STRING, &key_mgmt); 915 DBUS_TYPE_STRING, &key_mgmt);
911 } 916 }
912 917
913 dbus_message_iter_close_container(array, &dict); 918 dbus_message_iter_close_container(array, &dict);
914 } 919 }
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 1347
1343 free_scan_request(&request); 1348 free_scan_request(&request);
1344 1349
1345 /* NB: do here, the reply is slow and we want the ui to update asap */ 1350 /* NB: do here, the reply is slow and we want the ui to update asap */
1346 connman_device_set_scanning_state(task->device, TRUE); 1351 connman_device_set_scanning_state(task->device, TRUE);
1347 1352
1348 return send_call2(task, message, scan_reply, &task->scan_call, 1353 return send_call2(task, message, scan_reply, &task->scan_call,
1349 __func__, "interface scan"); 1354 __func__, "interface scan");
1350 } 1355 }
1351 1356
1352 static struct {
1353 char *name;
1354 char *value;
1355 } special_ssid[] = {
1356 { "<hidden>", "hidden" },
1357 { "default", "linksys" },
1358 { "wireless" },
1359 { "linksys" },
1360 { "netgear" },
1361 { "dlink" },
1362 { "2wire" },
1363 { "compaq" },
1364 { "tsunami" },
1365 { "comcomcom", "3com" },
1366 { "3Com", "3com" },
1367 { "Symbol", "symbol" },
1368 { "Motorola", "motorola" },
1369 { "Wireless" , "wireless" },
1370 { "WLAN", "wlan" },
1371 { }
1372 };
1373
1374 static char *build_group(const char *addr, const char *name,
1375 const unsigned char *ssid, unsigned int ssid_len,
1376 const char *mode, const char *security)
1377 {
1378 GString *str;
1379 unsigned int i;
1380
1381 if (addr == NULL)
1382 return NULL;
1383
1384 str = g_string_sized_new((ssid_len * 2) + 24);
1385 if (str == NULL)
1386 return NULL;
1387
1388 if (ssid == NULL) {
1389 g_string_append_printf(str, "hidden_%s", addr);
1390 goto done;
1391 }
1392
1393 for (i = 0; special_ssid[i].name; i++) {
1394 if (g_strcmp0(special_ssid[i].name, name) == 0) {
1395 if (special_ssid[i].value == NULL)
1396 g_string_append_printf(str, "%s_%.*s",
1397 name, 2*ETH_ALEN, addr);
1398 else
1399 g_string_append_printf(str, "%s_%.*s",
1400 special_ssid[i].value, 2*ETH_ALEN, addr);
1401 goto done;
1402 }
1403 }
1404
1405 if (ssid_len > 0 && ssid[0] != '\0') {
1406 for (i = 0; i < ssid_len; i++)
1407 g_string_append_printf(str, "%02x", ssid[i]);
1408 } else
1409 g_string_append_printf(str, "hidden_%.*s", 2*ETH_ALEN, addr);
1410
1411 done:
1412 g_string_append_printf(str, "_%s_%s", mode, security);
1413
1414 return g_string_free(str, FALSE);
1415 }
1416
1417 /* 1357 /*
1418 * Construct the identifier for a network from the bssid and ssid. 1358 * Construct the identifier for a network from the bssid and ssid.
1419 * We intentionally construct a valid d-bus object path because 1359 * We intentionally construct a valid d-bus object path because
1420 * the constructed string is eventually used this way. 1360 * the constructed string is eventually used this way.
1421 */ 1361 */
1422 static void make_objpath(struct supplicant_result *result) 1362 static void make_objpath(struct supplicant_result *result)
1423 { 1363 {
1424 int i, off; 1364 int i, off;
1425 1365
1426 CONNMAN_ASSERT(2*(ETH_ALEN + result->ssid_len) < sizeof(result->path)); 1366 CONNMAN_ASSERT(2*(ETH_ALEN + result->ssid_len) < sizeof(result->path));
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
1827 * Add/update a BSS entry based on the supplied scan result. 1767 * Add/update a BSS entry based on the supplied scan result.
1828 * We construct a network object (or use an existing one) 1768 * We construct a network object (or use an existing one)
1829 * and record relevant state. 1769 * and record relevant state.
1830 */ 1770 */
1831 static struct connman_network *add_bss(struct supplicant_task *task, 1771 static struct connman_network *add_bss(struct supplicant_task *task,
1832 struct supplicant_result *bss) 1772 struct supplicant_result *bss)
1833 { 1773 {
1834 struct connman_network *network; 1774 struct connman_network *network;
1835 char *group; 1775 char *group;
1836 1776
1837 » group = build_group(bss->path, bss->name, 1777 » group = connman_wifi_build_group(bss->path, bss->name,
1838 bss->ssid, bss->ssid_len, bss->mode, bss->security); 1778 bss->ssid, bss->ssid_len, bss->mode, bss->security);
1839 1779
1840 network = connman_device_get_network(task->device, bss->path); 1780 network = connman_device_get_network(task->device, bss->path);
1841 1781
1842 _DBG_WIFI("%s %s \"%s\" (%s %s%s) signal %d strength %u freq %u", 1782 _DBG_WIFI("%s %s \"%s\" (%s %s%s) signal %d strength %u freq %u",
1843 network == NULL ? "add" : "update", bss->path, bss->name, 1783 network == NULL ? "add" : "update", bss->path, bss->name,
1844 bss->mode, bss->security, (bss->has_wps == TRUE) ? " WPS" : "", 1784 bss->mode, bss->security, (bss->has_wps == TRUE) ? " WPS" : "",
1845 bss->signal, bss->strength, bss->frequency); 1785 bss->signal, bss->strength, bss->frequency);
1846 1786
1847 if (network == NULL) { 1787 if (network == NULL) {
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
2660 /* 2600 /*
2661 * Validate security credentials here; doing it later when 2601 * Validate security credentials here; doing it later when
2662 * constructing netblock contents results in side effects 2602 * constructing netblock contents results in side effects
2663 * or requires complicated back out of state. 2603 * or requires complicated back out of state.
2664 */ 2604 */
2665 err = 0; 2605 err = 0;
2666 if (security == NULL) 2606 if (security == NULL)
2667 err = -EINVAL; 2607 err = -EINVAL;
2668 else if (g_ascii_strcasecmp(security, "802_1x") == 0) 2608 else if (g_ascii_strcasecmp(security, "802_1x") == 0)
2669 err = check_8021x(network); 2609 err = check_8021x(network);
2670 else if (g_ascii_strcasecmp(security, "wpa") == 0 || 2610 else if (g_ascii_strcasecmp(security, "psk") == 0 ||
2611 » g_ascii_strcasecmp(security, "wpa") == 0 ||
2671 g_ascii_strcasecmp(security, "rsn") == 0) 2612 g_ascii_strcasecmp(security, "rsn") == 0)
2672 » » err = check_wpa(network); 2613 » » err = check_psk(network);
2673 else if (g_ascii_strcasecmp(security, "wep") == 0) 2614 else if (g_ascii_strcasecmp(security, "wep") == 0)
2674 err = check_wep(network); 2615 err = check_wep(network);
2675 if (err != 0) { 2616 if (err != 0) {
2676 _DBG_WIFI("security failed, network %p security %s err %d", 2617 _DBG_WIFI("security failed, network %p security %s err %d",
2677 network, security, err); 2618 network, security, err);
2678 return err; 2619 return err;
2679 } 2620 }
2680 2621
2681 handle = network_get_handle(task, network, &service_path); 2622 handle = network_get_handle(task, network, &service_path);
2682 if (handle != NULL) { 2623 if (handle != NULL) {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2966 dbus_bus_remove_match(connection, bss_rule, NULL); 2907 dbus_bus_remove_match(connection, bss_rule, NULL);
2967 dbus_bus_remove_match(connection, interface_rule, NULL); 2908 dbus_bus_remove_match(connection, interface_rule, NULL);
2968 dbus_connection_flush(connection); 2909 dbus_connection_flush(connection);
2969 dbus_connection_remove_filter(connection, supplicant_filter, NULL); 2910 dbus_connection_remove_filter(connection, supplicant_filter, NULL);
2970 dbus_connection_unref(connection); 2911 dbus_connection_unref(connection);
2971 connection = NULL; 2912 connection = NULL;
2972 } 2913 }
2973 2914
2974 CONNMAN_PLUGIN_DEFINE(newwifi, "New WiFi interface", VERSION, 2915 CONNMAN_PLUGIN_DEFINE(newwifi, "New WiFi interface", VERSION,
2975 CONNMAN_PLUGIN_PRIORITY_DEFAULT, new_wifi_init, new_wifi_finis) 2916 CONNMAN_PLUGIN_PRIORITY_DEFAULT, new_wifi_init, new_wifi_finis)
OLDNEW
« no previous file with comments | « include/wifi.h ('k') | src/service.c » ('j') | src/service.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698