diff options
Diffstat (limited to 'extra/gnome-shell')
-rw-r--r-- | extra/gnome-shell/PKGBUILD | 11 | ||||
-rw-r--r-- | extra/gnome-shell/network_fixes_up_to_5090a4ccce.patch | 814 |
2 files changed, 821 insertions, 4 deletions
diff --git a/extra/gnome-shell/PKGBUILD b/extra/gnome-shell/PKGBUILD index 847a2570b..cbef4fbb6 100644 --- a/extra/gnome-shell/PKGBUILD +++ b/extra/gnome-shell/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 120693 2011-04-25 23:29:13Z ibiru $ +# $Id: PKGBUILD 122633 2011-05-05 11:05:07Z ibiru $ # Maintainer: Ionut Biru <ibiru@archlinux.org> # Contributor: Flamelab <panosfilip@gmail.com pkgname=gnome-shell pkgver=3.0.1 -pkgrel=1 +pkgrel=2 pkgdesc="The next generation GNOME Shell" arch=('i686' 'x86_64') url="http://live.gnome.org/GnomeShell" @@ -18,14 +18,17 @@ options=('!libtool' '!emptydirs') install=gnome-shell.install groups=(gnome) source=(http://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.bz2 - arch.patch) + arch.patch + network_fixes_up_to_5090a4ccce.patch) sha256sums=('01f7ae942ba9687a5e67d62423843ed404d77b35f74acc212a5f391beed8e079' - 'a35d5e5f9f781728070aecae3bfe329f49dadcd50ca2984e0fbdd2219825a0db') + 'a35d5e5f9f781728070aecae3bfe329f49dadcd50ca2984e0fbdd2219825a0db' + '01bf41483d5d8935ed2dd6294ee04024f2d9bcb2ef13276b07331e485965c822') build() { cd "${srcdir}/${pkgname}-${pkgver}" patch -Np1 -i "${srcdir}/arch.patch" + patch -Np1 -i "${srcdir}/network_fixes_up_to_5090a4ccce.patch" ./configure --prefix=/usr --sysconfdir=/etc \ --libexecdir=/usr/lib/gnome-shell \ diff --git a/extra/gnome-shell/network_fixes_up_to_5090a4ccce.patch b/extra/gnome-shell/network_fixes_up_to_5090a4ccce.patch new file mode 100644 index 000000000..16453b0b9 --- /dev/null +++ b/extra/gnome-shell/network_fixes_up_to_5090a4ccce.patch @@ -0,0 +1,814 @@ +From d0780d16224d7bb2ad183542337c48324fdd2185 Mon Sep 17 00:00:00 2001 +From: Giovanni Campagna <gcampagna@src.gnome.org> +Date: Wed, 06 Apr 2011 16:11:23 +0000 +Subject: NetworkMenu: keep wirelesss networks in predictable order + +Adds a function that compares wireless networks and keeps them sorted +at all times. Order is: first already configured connections, then +first secure networks, then alphabtic. Also, the appearance of a new access +point no longer causes the whole menu to be rebuilt (but it still linear +searches for the position, I guess that could be skipped), which caused +the addition of more code for tracking the active access point. + +https://bugzilla.gnome.org/show_bug.cgi?id=646580 +--- +(limited to 'js/ui/status/network.js') + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index 6fa5642..49cb3f0 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -42,6 +42,10 @@ const NM80211Mode = NetworkManager['80211Mode']; + const NM80211ApFlags = NetworkManager['80211ApFlags']; + const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags']; + ++// number of wireless networks that should be visible ++// (the remaining are placed into More...) ++const NUM_VISIBLE_NETWORKS = 5; ++ + function macToArray(string) { + return string.split(':').map(function(el) { + return parseInt(el, 16); +@@ -1036,6 +1040,7 @@ NMDeviceWireless.prototype = { + item: null, + accessPoints: [ ap ] + }; ++ obj.ssidText = NetworkManager.utils_ssid_to_utf8(obj.ssid); + this._networks.push(obj); + } + +@@ -1048,6 +1053,14 @@ NMDeviceWireless.prototype = { + } + } + } ++ if (this.device.active_access_point) { ++ this._activeNetwork = this._networks[this._findNetwork(this.device.active_access_point)]; ++ } else { ++ this._activeNetwork = null; ++ } ++ this._networks.sort(this._networkSortFunction); ++ ++ this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged)); + this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded)); + this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved)); + +@@ -1055,8 +1068,13 @@ NMDeviceWireless.prototype = { + }, + + destroy: function() { +- if (this._apAddedId) { ++ if (this._apChangedId) { + // see above for this HACK ++ GObject.Object.prototype.disconnect.call(this.device, this._apChangedId); ++ this._apChangedId = 0; ++ } ++ ++ if (this._apAddedId) { + GObject.Object.prototype.disconnect.call(this.device, this._apAddedId); + this._apAddedId = 0; + } +@@ -1122,6 +1140,19 @@ NMDeviceWireless.prototype = { + } + }, + ++ _activeApChanged: function() { ++ this._activeNetwork = null; ++ ++ let activeAp = this.device.active_access_point; ++ ++ if (activeAp) { ++ let pos = this._findNetwork(activeAp); ++ this._activeNetwork = this._networks[pos]; ++ } ++ ++ // we don't refresh the view here, setActiveConnection will ++ }, ++ + _getApSecurityType: function(accessPoint) { + if (accessPoint._secType) + return accessPoint._secType; +@@ -1151,6 +1182,32 @@ NMDeviceWireless.prototype = { + return type; + }, + ++ _networkSortFunction: function(one, two) { ++ let oneHasConnection = one.connections.length != 0; ++ let twoHasConnection = two.connections.length != 0; ++ ++ // place known connections first ++ // (-1 = good order, 1 = wrong order) ++ if (oneHasConnection && !twoHasConnection) ++ return -1; ++ else if (!oneHasConnection && twoHasConnection) ++ return 1; ++ ++ let oneHasSecurity = one.security != NMAccessPointSecurity.NONE; ++ let twoHasSecurity = two.security != NMAccessPointSecurity.NONE; ++ ++ // place secure connections first ++ // (we treat WEP/WPA/WPA2 the same as there is no way to ++ // take them apart from the UI) ++ if (oneHasSecurity && !twoHasSecurity) ++ return -1; ++ else if (!oneHasSecurity && twoHasSecurity) ++ return 1; ++ ++ // sort alphabetically ++ return GLib.utf8_collate(one.ssidText, two.ssidText); ++ }, ++ + _networkCompare: function(network, accessPoint) { + if (!ssidCompare(network.ssid, accessPoint.get_ssid())) + return false; +@@ -1173,6 +1230,8 @@ NMDeviceWireless.prototype = { + _accessPointAdded: function(device, accessPoint) { + let pos = this._findNetwork(accessPoint); + let apObj; ++ let needsupdate = false; ++ + if (pos != -1) { + apObj = this._networks[pos]; + if (apObj.accessPoints.indexOf(accessPoint) != -1) { +@@ -1181,6 +1240,8 @@ NMDeviceWireless.prototype = { + } + + apObj.accessPoints.push(accessPoint); ++ if (apObj.item) ++ apObj.item.updateAccessPoints(apObj.accessPoints); + } else { + apObj = { ssid: accessPoint.get_ssid(), + mode: accessPoint.mode, +@@ -1189,7 +1250,8 @@ NMDeviceWireless.prototype = { + item: null, + accessPoints: [ accessPoint ] + }; +- this._networks.push(apObj); ++ apObj.ssidText = NetworkManager.utils_ssid_to_utf8(apObj.ssid); ++ needsupdate = true; + } + + // check if this enables new connections for this group +@@ -1198,12 +1260,44 @@ NMDeviceWireless.prototype = { + if (this._connectionValidForAP(connection, accessPoint) && + apObj.connections.indexOf(connection) == -1) { + apObj.connections.push(connection); ++ ++ // this potentially changes the order ++ needsupdate = true; + } + } + +- // update everything +- this._clearSection(); +- this._createSection(); ++ if (needsupdate) { ++ if (apObj.item) ++ apObj.item.destroy(); ++ ++ if (pos != -1) ++ this._networks.splice(pos, 1); ++ ++ if (this._networks.length == 0) { ++ // only network in the list ++ this._networks.push(apObj); ++ this._clearSection(); ++ this._createSection(); ++ return; ++ } ++ ++ // skip networks that should appear earlier ++ let menuPos = 0; ++ for (pos = 0; ++ pos < this._networks.length && ++ this._networkSortFunction(this._networks[i], apObj) < 0; ++pos) { ++ if (this._networks[pos] != this._activeNetwork) ++ menuPos++; ++ } ++ ++ // (re-)add the network ++ this._networks.splice(pos, 0, apObj); ++ ++ if (this._shouldShowConnectionList()) { ++ menuPos += (this._activeConnectionItem ? 1 : 0); ++ this._createNetworkItem(apObj, menuPos); ++ } ++ } + }, + + _accessPointRemoved: function(device, accessPoint) { +@@ -1315,6 +1409,12 @@ NMDeviceWireless.prototype = { + // remove the connection from the access point group + connections.splice(k); + anyauto = connections.length == 0; ++ ++ if (anyauto) { ++ // this potentially changes the sorting order ++ forceupdate = true; ++ break; ++ } + if (apObj.item) { + if (apObj.item instanceof PopupMenu.PopupSubMenuMenuItem) { + let items = apObj.item.menu.getMenuItems(); +@@ -1340,6 +1440,7 @@ NMDeviceWireless.prototype = { + } + + if (forceupdate || anyauto) { ++ this._networks.sort(this._networkSortFunction); + this._clearSection(); + this._createSection(); + } +@@ -1355,42 +1456,24 @@ NMDeviceWireless.prototype = { + this._connections.push(obj); + + // find an appropriate access point +- let any = false, forceupdate = false; ++ let forceupdate = false; + for (let i = 0; i < this._networks.length; i++) { + let apObj = this._networks[i]; + + // Check if connection is valid for any of these access points +- let any = false; + for (let k = 0; k < apObj.accessPoints.length; k++) { + let ap = apObj.accessPoints[k]; + if (this._connectionValidForAP(connection, ap)) { + apObj.connections.push(connection); +- any = true; ++ // this potentially changes the sorting order ++ forceupdate = true; + break; + } + } +- +- if (any && this._shouldShowConnectionList()) { +- // we need to show this connection +- if (apObj.item && apObj.item.menu) { +- // We're already showing the submenu for this access point +- apObj.item.menu.addMenuItem(this._createAPItem(connection, apObj, true)); +- } else { +- if (apObj.item) +- apObj.item.destroy(); +- if (apObj.connections.length == 1) { +- apObj.item = this._createAPItem(connection, apObj, false); +- this.section.addMenuItem(apObj.item); +- } else { +- apObj.item = null; +- // we need to force an update to create the submenu +- forceupdate = true; +- } +- } +- } + } + + if (forceupdate) { ++ this._networks.sort(this._networkSortFunction); + this._clearSection(); + this._createSection(); + } +@@ -1473,6 +1556,37 @@ NMDeviceWireless.prototype = { + return connection; + }, + ++ _createNetworkItem: function(apObj, position) { ++ if(apObj.connections.length > 0) { ++ if (apObj.connections.length == 1) ++ apObj.item = this._createAPItem(apObj.connections[0], apObj, false); ++ else { ++ let title = apObj.ssidText; ++ apObj.item = new PopupMenu.PopupSubMenuMenuItem(title); ++ apObj.item._apObj = apObj; ++ for (let i = 0; i < apObj.connections.length; i++) ++ apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true)); ++ } ++ } else { ++ apObj.item = new NMNetworkMenuItem(apObj.accessPoints); ++ apObj.item._apObj = apObj; ++ apObj.item.connect('activate', Lang.bind(this, function() { ++ let connection = this._createAutomaticConnection(apObj); ++ let accessPoints = sortAccessPoints(apObj.accessPoints); ++ this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null) ++ })); ++ } ++ if (position < NUM_VISIBLE_NETWORKS) ++ this.section.addMenuItem(apObj.item); ++ else { ++ if (!this._overflowItem) { ++ this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More...")); ++ this.section.addMenuItem(this._overflowItem); ++ } ++ this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS); ++ } ++ }, ++ + _createSection: function() { + if (!this._shouldShowConnectionList()) + return; +@@ -1482,47 +1596,14 @@ NMDeviceWireless.prototype = { + this.section.addMenuItem(this._activeConnectionItem); + } + +- let activeAp = this.device.active_access_point; +- let activeApSsid = activeAp ? activeAp.get_ssid() : null; +- +- // we want five access points in the menu, including the active one +- let numItems = this._activeConnection ? 4 : 5; ++ let activeOffset = this._activeConnectionItem ? 1 : 0; + + for(let j = 0; j < this._networks.length; j++) { + let apObj = this._networks[j]; +- if(activeAp && ssidCompare(apObj.ssid, activeApSsid)) ++ if (apObj == this._activeNetwork) + continue; + +- let menuItem; +- if(apObj.connections.length > 0) { +- if (apObj.connections.length == 1) +- apObj.item = this._createAPItem(apObj.connections[0], apObj, false); +- else { +- let title = NetworkManager.utils_ssid_to_utf8(apObj.ssid) || _("<unknown>"); +- apObj.item = new PopupMenu.PopupSubMenuMenuItem(title); +- apObj.item._apObj = apObj; +- for (let i = 0; i < apObj.connections.length; i++) +- apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true)); +- } +- } else { +- apObj.item = new NMNetworkMenuItem(apObj.accessPoints); +- apObj.item._apObj = apObj; +- apObj.item.connect('activate', Lang.bind(this, function() { +- let connection = this._createAutomaticConnection(apObj); +- let accessPoints = sortAccessPoints(apObj.accessPoints); +- this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null) +- })); +- } +- +- if (j < numItems) +- this.section.addMenuItem(apObj.item); +- else { +- if (!this._overflowItem) { +- this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More...")); +- this.section.addMenuItem(this._overflowItem); +- } +- this._overflowItem.menu.addMenuItem(apObj.item); +- } ++ this._createNetworkItem(apObj, j + activeOffset); + } + }, + }; +-- +cgit v0.9 +From 42a5531f1588ae3063e7d8ff7642e9f81c13afbd Mon Sep 17 00:00:00 2001 +From: Dan Winship <danw@gnome.org> +Date: Wed, 27 Apr 2011 13:05:39 +0000 +Subject: network: fix a variable name + +--- +(limited to 'js/ui/status/network.js') + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index 49cb3f0..d56c0b1 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -1285,7 +1285,7 @@ NMDeviceWireless.prototype = { + let menuPos = 0; + for (pos = 0; + pos < this._networks.length && +- this._networkSortFunction(this._networks[i], apObj) < 0; ++pos) { ++ this._networkSortFunction(this._networks[pos], apObj) < 0; ++pos) { + if (this._networks[pos] != this._activeNetwork) + menuPos++; + } +-- +cgit v0.9 +From c31109800b3267df433841bff08c9383a5d669cb Mon Sep 17 00:00:00 2001 +From: Dan Williams <dcbw@redhat.com> +Date: Mon, 25 Apr 2011 22:13:12 +0000 +Subject: network: simplify connection sorting by using libnm-glib functions + +Instead of rolling our own code, use new libnm-glib functions to do +the same thing. Requires libnm-glib as of +779215c742bbe29a2c66202ec7e2e6d43edeb8ff (which will be part of 0.9). + +Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648648 +--- +(limited to 'js/ui/status/network.js') + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index d56c0b1..bf8e272 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -505,7 +505,7 @@ NMDevice.prototype = { + }, + + connectionValid: function(connection) { +- throw new TypeError('Invoking pure virtual function NMDevice.connectionValid'); ++ return this.device.connection_valid(connection); + }, + + setEnabled: function(enabled) { +@@ -723,17 +723,6 @@ NMDeviceWired.prototype = { + NMDevice.prototype._init.call(this, client, device, connections); + }, + +- connectionValid: function(connection) { +- if (connection._type != NetworkManager.SETTING_WIRED_SETTING_NAME) +- return false; +- +- let ethernetSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRED_SETTING_NAME); +- let fixedMac = ethernetSettings.get_mac_address(); +- if (fixedMac) +- return macCompare(fixedMac, macToArray(this.device.perm_hw_address)); +- return true; +- }, +- + _createSection: function() { + NMDevice.prototype._createSection.call(this); + +@@ -876,10 +865,6 @@ NMDeviceModem.prototype = { + NMDevice.prototype._clearSection.call(this); + }, + +- connectionValid: function(connection) { +- return connection._type == this._connectionType; +- }, +- + _createAutomaticConnection: function() { + // FIXME: we need to summon the mobile wizard here + // or NM will not have the necessary parameters to complete the connection +@@ -913,18 +898,6 @@ NMDeviceBluetooth.prototype = { + NMDevice.prototype._init.call(this, client, device, connections); + }, + +- connectionValid: function(connection) { +- if (connection._type != NetworkManager.SETTING_BLUETOOTH_SETTING_NAME) +- return false; +- +- let bluetoothSettings = connection.get_setting_by_name(NetworkManager.SETTING_BLUETOOTH_SETTING_NAME); +- let fixedBdaddr = bluetoothSettings.get_bdaddr(); +- if (fixedBdaddr) +- return macCompare(fixedBdaddr, macToArray(this.device.hw_address)); +- +- return true; +- }, +- + _createAutomaticConnection: function() { + let connection = new NetworkManager.Connection; + connection._uuid = NetworkManager.utils_uuid_generate(); +@@ -1047,7 +1020,7 @@ NMDeviceWireless.prototype = { + // Check if some connection is valid for this AP + for (let j = 0; j < validConnections.length; j++) { + let connection = validConnections[j]; +- if (this._connectionValidForAP(connection, ap) && ++ if (ap.connection_valid(connection) && + obj.connections.indexOf(connection) == -1) { + obj.connections.push(connection); + } +@@ -1121,7 +1094,7 @@ NMDeviceWireless.prototype = { + if (best) { + for (let i = 0; i < bestApObj.accessPoints.length; i++) { + let ap = bestApObj.accessPoints[i]; +- if (this._connectionValidForAP(best, ap)) { ++ if (ap.connection_valid(best)) { + this._client.activate_connection(best, this.device, ap.dbus_path, null); + break; + } +@@ -1257,7 +1230,7 @@ NMDeviceWireless.prototype = { + // check if this enables new connections for this group + for (let i = 0; i < this._connections.length; i++) { + let connection = this._connections[i].connection; +- if (this._connectionValidForAP(connection, accessPoint) && ++ if (accessPoint.connection_valid(connection) && + apObj.connections.indexOf(connection) == -1) { + apObj.connections.push(connection); + +@@ -1337,7 +1310,7 @@ NMDeviceWireless.prototype = { + item.connect('activate', Lang.bind(this, function() { + let accessPoints = sortAccessPoints(accessPointObj.accessPoints); + for (let i = 0; i < accessPoints.length; i++) { +- if (this._connectionValidForAP(connection, accessPoints[i])) { ++ if (accessPoints[i].connection_valid(connection)) { + this._client.activate_connection(connection, this.device, accessPoints[i].dbus_path, null); + break; + } +@@ -1346,40 +1319,6 @@ NMDeviceWireless.prototype = { + return item; + }, + +- connectionValid: function(connection) { +- if (connection._type != NetworkManager.SETTING_WIRELESS_SETTING_NAME) +- return false; +- +- let wirelessSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SETTING_NAME); +- let wirelessSecuritySettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SECURITY_SETTING_NAME); +- +- let fixedMac = wirelessSettings.get_mac_address(); +- if (fixedMac && !macCompare(fixedMac, macToArray(this.device.perm_hw_address))) +- return false; +- +- if (wirelessSecuritySettings && +- wirelessSecuritySettings.key_mgmt != 'none' && +- wirelessSecuritySettings.key_mgmt != 'ieee8021x') { +- let capabilities = this.device.wireless_capabilities; +- if (!(capabilities & NetworkManager.DeviceWifiCapabilities.WPA) || +- !(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_TKIP)) +- return false; +- if (wirelessSecuritySettings.get_num_protos() == 1 && +- wirelessSecuritySettings.get_proto(0) == 'rsn' && +- !(capabilities & NetworkManager.DeviceWifiCapabilities.RSN)) +- return false; +- if (wirelessSecuritySettings.get_num_pairwise() == 1 && +- wirelessSecuritySettings.get_pairwise(0) == 'ccmp' && +- !(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_CCMP)) +- return false; +- if (wirelessSecuritySettings.get_num_groups() == 1 && +- wirelessSecuritySettings.get_group(0) == 'ccmp' && +- !(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_CCMP)) +- return false; +- } +- return true; +- }, +- + _clearSection: function() { + NMDevice.prototype._clearSection.call(this); + +@@ -1463,7 +1402,7 @@ NMDeviceWireless.prototype = { + // Check if connection is valid for any of these access points + for (let k = 0; k < apObj.accessPoints.length; k++) { + let ap = apObj.accessPoints[k]; +- if (this._connectionValidForAP(connection, ap)) { ++ if (ap.connection_valid(connection)) { + apObj.connections.push(connection); + // this potentially changes the sorting order + forceupdate = true; +@@ -1479,37 +1418,6 @@ NMDeviceWireless.prototype = { + } + }, + +- _connectionValidForAP: function(connection, ap) { +- // copied and adapted from nm-applet +- let wirelessSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SETTING_NAME); +- if (!ssidCompare(wirelessSettings.get_ssid(), ap.get_ssid())) +- return false; +- +- let wirelessSecuritySettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SECURITY_SETTING_NAME); +- +- let fixedBssid = wirelessSettings.get_bssid(); +- if (fixedBssid && !macCompare(fixedBssid, macToArray(ap.hw_address))) +- return false; +- +- let fixedBand = wirelessSettings.band; +- if (fixedBand) { +- let freq = ap.frequency; +- if (fixedBand == 'a' && (freq < 4915 || freq > 5825)) +- return false; +- if (fixedBand == 'bg' && (freq < 2412 || freq > 2484)) +- return false; +- } +- +- let fixedChannel = wirelessSettings.channel; +- if (fixedChannel && fixedChannel != NetworkManager.utils_wifi_freq_to_channel(ap.frequency)) +- return false; +- +- if (!wirelessSecuritySettings) +- return true; +- +- return wirelessSettings.ap_security_compatible(wirelessSecuritySettings, ap.flags, ap.wpa_flags, ap.rsn_flags, ap.mode); +- }, +- + _createActiveConnectionItem: function() { + let activeAp = this.device.active_access_point; + let icon, title; +-- +cgit v0.9 +From 101a07a3d79223cc153a6c65f22acd76cbae4818 Mon Sep 17 00:00:00 2001 +From: Dan Williams <dcbw@redhat.com> +Date: Tue, 03 May 2011 17:21:45 +0000 +Subject: network: fix handling of AP flags and enhance for 802.1x + +All WPA APs were getting set as WPA2 due to the check for privacy; +WPA/WPA2 APs *must* set the Privacy bit according to the standard, +so we'd never end up in the case for NMAccessPointSecurity.WPA. + +Fix that, and also add flags for WPA[2] Enterprise which we'll +use a bit later for the first-time connect case for 802.1x enabled +access points. +--- +(limited to 'js/ui/status/network.js') + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index bf8e272..6f0cdac 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -33,8 +33,10 @@ const NMAccessPointSecurity = { + UNKNOWN: 0, + NONE: 1, + WEP: 2, +- WPA: 3, +- WPA2: 4 ++ WPA_PSK: 3, ++ WPA2_PSK: 4, ++ WPA_ENT: 5, ++ WPA2_ENT: 6 + }; + + // small optimization, to avoid using [] all the time +@@ -1129,26 +1131,28 @@ NMDeviceWireless.prototype = { + _getApSecurityType: function(accessPoint) { + if (accessPoint._secType) + return accessPoint._secType; +- // XXX: have this checked by someone familiar with IEEE 802.1x + + let flags = accessPoint.flags; + let wpa_flags = accessPoint.wpa_flags; + let rsn_flags = accessPoint.rsn_flags; + let type; +- if ( !(flags & NM80211ApFlags.PRIVACY) +- && (wpa_flags == NM80211ApSecurityFlags.NONE) +- && (rsn_flags == NM80211ApSecurityFlags.NONE)) +- type = NMAccessPointSecurity.NONE; +- else if ( (flags & NM80211ApFlags.PRIVACY) +- && (wpa_flags == NM80211ApSecurityFlags.NONE) +- && (rsn_flags == NM80211ApSecurityFlags.NONE)) +- type = NMAccessPointSecurity.WEP; +- else if ( !(flags & NM80211ApFlags.PRIVACY) +- && (wpa_flags != NM80211ApSecurity.NONE) +- && (rsn_flags != NM80211ApSecurity.NONE)) +- type = NMAccessPointSecurity.WPA; +- else +- type = NMAccessPointSecurity.WPA2; ++ if (rsn_flags != NM80211ApSecurityFlags.NONE) { ++ /* RSN check first so that WPA+WPA2 APs are treated as RSN/WPA2 */ ++ if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X) ++ type = NMAccessPointSecurity.WPA2_ENT; ++ else if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK) ++ type = NMAccessPointSecurity.WPA2_PSK; ++ } else if (wpa_flags != NM80211ApSecurityFlags.NONE) { ++ if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X) ++ type = NMAccessPointSecurity.WPA_ENT; ++ else if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK) ++ type = NMAccessPointSecurity.WPA_PSK; ++ } else { ++ if (flags & NM80211ApFlags.PRIVACY) ++ type = NMAccessPointSecurity.WEP; ++ else ++ type = NMAccessPointSecurity.NONE; ++ } + + // cache the found value to avoid checking flags all the time + accessPoint._secType = type; +-- +cgit v0.9 +From ae0652d13fc2d7caa3d64f2b87d174253cae5901 Mon Sep 17 00:00:00 2001 +From: Dan Williams <dcbw@redhat.com> +Date: Tue, 03 May 2011 18:31:45 +0000 +Subject: network: fix initial connections to WPA[2] Enterprise APs + +Call out to nm-applet to do the dirty work since the dialog of +doom is pretty complicated and we don't have a JS equivalent +of it for now. + +Fixes https://bugzilla.gnome.org/show_bug.cgi?id=648171 +--- +(limited to 'js/ui/status/network.js') + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index 6f0cdac..ca4facf 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -48,6 +48,16 @@ const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags']; + // (the remaining are placed into More...) + const NUM_VISIBLE_NETWORKS = 5; + ++const NMAppletHelperInterface = { ++ name: 'org.gnome.network_manager_applet', ++ methods: [ ++ { name: 'ConnectToHiddenNetwork', inSignature: '', outSignature: '' }, ++ { name: 'CreateWifiNetwork', inSignature: '', outSignature: '' }, ++ { name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' } ++ ], ++}; ++const NMAppletProxy = DBus.makeProxyClass(NMAppletHelperInterface); ++ + function macToArray(string) { + return string.split(':').map(function(el) { + return parseInt(el, 16); +@@ -991,6 +1001,10 @@ NMDeviceWireless.prototype = { + this._overflowItem = null; + this._networks = [ ]; + ++ this._applet_proxy = new NMAppletProxy(DBus.session, ++ 'org.gnome.network_manager_applet', ++ '/org/gnome/network_manager_applet'); ++ + // breaking the layers with this, but cannot call + // this.connectionValid until I have a device + this.device = device; +@@ -1483,9 +1497,20 @@ NMDeviceWireless.prototype = { + apObj.item = new NMNetworkMenuItem(apObj.accessPoints); + apObj.item._apObj = apObj; + apObj.item.connect('activate', Lang.bind(this, function() { +- let connection = this._createAutomaticConnection(apObj); + let accessPoints = sortAccessPoints(apObj.accessPoints); +- this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null) ++ if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT) ++ || (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) { ++ // 802.1x-enabled APs get handled by nm-applet for now... ++ this._applet_proxy.ConnectTo8021xNetworkRemote(this.device.get_path(), ++ accessPoints[0].dbus_path, ++ Lang.bind(this, function(results, err) { ++ if (err) ++ log(err); ++ })); ++ } else { ++ let connection = this._createAutomaticConnection(apObj); ++ this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null) ++ } + })); + } + if (position < NUM_VISIBLE_NETWORKS) +-- +cgit v0.9 +From 5090a4ccce87643081138272fb8a2fe687f1ed0a Mon Sep 17 00:00:00 2001 +From: Dan Williams <dcbw@redhat.com> +Date: Tue, 03 May 2011 19:48:10 +0000 +Subject: network: request that nm-applet show the mobile broadband wizard + +Use nm-applet 0.8.999 API to call the mobile broadband wizard and +activate the new connection. + +Fixes https://bugzilla.gnome.org/show_bug.cgi?id=649318 +--- +(limited to 'js/ui/status/network.js') + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index ca4facf..756b27f 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -53,7 +53,8 @@ const NMAppletHelperInterface = { + methods: [ + { name: 'ConnectToHiddenNetwork', inSignature: '', outSignature: '' }, + { name: 'CreateWifiNetwork', inSignature: '', outSignature: '' }, +- { name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' } ++ { name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' }, ++ { name: 'ConnectTo3gNetwork', inSignature: 'o', outSignature: '' } + ], + }; + const NMAppletProxy = DBus.makeProxyClass(NMAppletHelperInterface); +@@ -440,7 +441,8 @@ NMDevice.prototype = { + this._client.activate_connection(this._connections[0].connection, this.device, null, null); + } else if (this._autoConnectionName) { + let connection = this._createAutomaticConnection(); +- this._client.add_and_activate_connection(connection, this.device, null, null); ++ if (connection) ++ this._client.add_and_activate_connection(connection, this.device, null, null); + } + }, + +@@ -620,7 +622,8 @@ NMDevice.prototype = { + this._autoConnectionItem = new PopupMenu.PopupMenuItem(this._autoConnectionName); + this._autoConnectionItem.connect('activate', Lang.bind(this, function() { + let connection = this._createAutomaticConnection(); +- this._client.add_and_activate_connection(connection, this.device, null, null); ++ if (connection) ++ this._client.add_and_activate_connection(connection, this.device, null, null); + })); + this.section.addMenuItem(this._autoConnectionItem); + } +@@ -777,6 +780,10 @@ NMDeviceModem.prototype = { + this.mobileDevice = null; + this._connectionType = 'ppp'; + ++ this._applet_proxy = new NMAppletProxy(DBus.session, ++ 'org.gnome.network_manager_applet', ++ '/org/gnome/network_manager_applet'); ++ + this._capabilities = device.current_capabilities; + if (this._capabilities & NetworkManager.DeviceModemCapabilities.GSM_UMTS) { + is_wwan = true; +@@ -878,19 +885,13 @@ NMDeviceModem.prototype = { + }, + + _createAutomaticConnection: function() { +- // FIXME: we need to summon the mobile wizard here +- // or NM will not have the necessary parameters to complete the connection +- // pending a DBus method on nm-applet +- +- let connection = new NetworkManager.Connection; +- connection._uuid = NetworkManager.utils_uuid_generate(); +- connection.add_setting(new NetworkManager.SettingConnection({ +- uuid: connection._uuid, +- id: this._autoConnectionName, +- type: this._connectionType, +- autoconnect: false +- })); +- return connection; ++ // Mobile wizard is handled by nm-applet for now... ++ this._applet_proxy.ConnectTo3gNetworkRemote(this.device.get_path(), ++ Lang.bind(this, function(results, err) { ++ if (err) ++ log(err); ++ })); ++ return null; + } + }; + +-- +cgit v0.9 |