Ticket #1602: 0001-Send-all-network-settings-to-NetworkManager-in-secre.patch

File 0001-Send-all-network-settings-to-NetworkManager-in-secre.patch, 7.3 KB (added by dsd, 14 years ago)
  • src/jarabe/desktop/keydialog.py

    From cf8fd967f72bdddcdc335395dde4678aec721cf5 Mon Sep 17 00:00:00 2001
    From: Daniel Drake <dsd@laptop.org>
    Date: Fri, 4 Dec 2009 14:07:28 +0000
    Subject: [PATCH] Send all network settings to NetworkManager in secrets response (#1602)
    
    This fixes shared key authentication with WEP networks. Thanks to Dan
    Williams for suggesting the solution.
    ---
     src/jarabe/desktop/keydialog.py |   24 ++++++++++++++----------
     src/jarabe/desktop/meshbox.py   |    6 +++---
     src/jarabe/model/network.py     |   24 +++++++++++++++++-------
     3 files changed, 34 insertions(+), 20 deletions(-)
    
    diff --git a/src/jarabe/desktop/keydialog.py b/src/jarabe/desktop/keydialog.py
    index 8b8f0bf..14b549e 100644
    a b class CanceledKeyRequestError(dbus.DBusException): 
    6262        self._dbus_error_name = network.NM_SETTINGS_IFACE + '.CanceledError'
    6363
    6464class KeyDialog(gtk.Dialog):
    65     def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
     65    def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, settings,
     66                 response):
    6667        gtk.Dialog.__init__(self, flags=gtk.DIALOG_MODAL)
    6768        self.set_title("Wireless Key Required")
    6869
     70        self._settings = settings
    6971        self._response = response
    7072        self._entry = None
    7173        self._ssid = ssid
    WEP_HEX = 2 
    110112WEP_ASCII = 3
    111113
    112114class WEPKeyDialog(KeyDialog):
    113     def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
     115    def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, settings,
     116                 response):
    114117        KeyDialog.__init__(self, ssid, flags, wpa_flags, rsn_flags,
    115                            dev_caps, response)
     118                           dev_caps, settings, response)
    116119
    117120        # WEP key type
    118121        self.key_store = gtk.ListStore(str, int)
    class WEPKeyDialog(KeyDialog): 
    180183
    181184    def create_security(self):
    182185        (key, auth_alg) = self._get_security()
    183         secrets = Secrets()
     186        secrets = Secrets(self._settings)
    184187        secrets.wep_key = key
    185188        secrets.auth_alg = auth_alg
    186189        return secrets
    class WEPKeyDialog(KeyDialog): 
    206209        self.set_response_sensitive(gtk.RESPONSE_OK, valid)
    207210
    208211class WPAKeyDialog(KeyDialog):
    209     def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
     212    def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, settings,
     213                 response):
    210214        KeyDialog.__init__(self, ssid, flags, wpa_flags, rsn_flags,
    211                            dev_caps, response)
     215                           dev_caps, settings, response)
    212216        self.add_key_entry()
    213217
    214218        self.store = gtk.ListStore(str)
    class WPAKeyDialog(KeyDialog): 
    258262        print "Key: %s" % key
    259263
    260264    def create_security(self):
    261         secrets = Secrets()
     265        secrets = Secrets(self._settings)
    262266        secrets.psk = self._get_security()
    263267        return secrets
    264268
    class WPAKeyDialog(KeyDialog): 
    276280        self.set_response_sensitive(gtk.RESPONSE_OK, valid)
    277281        return False
    278282
    279 def create(ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
     283def create(ssid, flags, wpa_flags, rsn_flags, dev_caps, settings, response):
    280284    if wpa_flags == network.NM_802_11_AP_SEC_NONE and \
    281285            rsn_flags == network.NM_802_11_AP_SEC_NONE:
    282286        key_dialog = WEPKeyDialog(ssid, flags, wpa_flags, rsn_flags,
    283                                   dev_caps, response)
     287                                  dev_caps, settings, response)
    284288    else:
    285289        key_dialog = WPAKeyDialog(ssid, flags, wpa_flags, rsn_flags,
    286                                   dev_caps, response)
     290                                  dev_caps, settings, response)
    287291
    288292    key_dialog.connect("response", _key_dialog_response_cb)
    289293    key_dialog.connect("destroy", _key_dialog_destroy_cb)
  • src/jarabe/desktop/meshbox.py

    diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py
    index 9fee736..4ade8a1 100644
    a b class WirelessNetworkView(CanvasPulsingIcon): 
    373373        self._update_state()
    374374        self._update_color()
    375375
    376     def create_keydialog(self, response):
     376    def create_keydialog(self, settings, response):
    377377        keydialog.create(self._name, self._flags, self._wpa_flags,
    378                          self._rsn_flags, self._device_caps, response)
     378                         self._rsn_flags, self._device_caps, settings, response)
    379379
    380380    def update_strength(self):
    381381        if self._active_ap is not None:
    class NetworkManagerObserver(object): 
    702702                    for net in self._box.wireless_networks.values():
    703703                        if net.find_ap(ap_o) is not None:
    704704                            found = True
    705                             net.create_keydialog(kwargs['response'])
     705                            net.create_keydialog(kwargs['connection'].get_settings(), kwargs['response'])
    706706                if not found:
    707707                    logging.error('Could not determine AP for'
    708708                                  ' specific object %s' % conn_o)
  • src/jarabe/model/network.py

    diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
    index 78770ce..3b30178 100644
    a b class Settings(object): 
    164164        return settings
    165165
    166166class Secrets(object):
    167     def __init__(self):
     167    def __init__(self, settings):
     168        self.settings = settings
    168169        self.wep_key = None
    169170        self.psk = None
    170171        self.auth_alg = None
    171172
    172173    def get_dict(self):
    173         secrets = {}
     174        # Although we could just return the keys here, we instead return all
     175        # of the network settings so that we can apply any late decisions made
     176        # by the user (e.g. if they selected shared key authentication). see
     177        # http://bugs.sugarlabs.org/ticket/1602
     178        settings = self.settings.get_dict()
     179        if '802-11-wireless-security' not in settings:
     180            settings['802-11-wireless-security'] = {}
    174181
    175182        if self.wep_key is not None:
    176             secrets['wep-key0'] = self.wep_key
     183            settings['802-11-wireless-security']['wep-key0'] = self.wep_key
    177184        if self.psk is not None:
    178             secrets['psk'] = self.psk
     185            settings['802-11-wireless-security']['psk'] = self.psk
    179186        if self.auth_alg is not None:
    180             secrets['auth-alg'] = self.auth_alg
     187            settings['802-11-wireless-security']['auth-alg'] = self.auth_alg
    181188
    182         return {'802-11-wireless-security': secrets}
     189        return settings
    183190
    184191class NMSettings(dbus.service.Object):
    185192    def __init__(self):
    class NMSettingsConnection(dbus.service.Object): 
    246253        self._secrets = secrets
    247254        self.save()
    248255
     256    def get_settings(self):
     257        return self._settings
     258
    249259    def save(self):
    250260        profile_path = env.get_profile_path()
    251261        config_path = os.path.join(profile_path, 'nm', 'connections.cfg')
    def load_connections(): 
    498508
    499509            secrets = None
    500510            if config.has_option(section, 'key-mgmt'):
    501                 secrets = Secrets()
     511                secrets = Secrets(settings)
    502512                settings.wireless_security = WirelessSecurity()
    503513                mgmt = config.get(section, 'key-mgmt')
    504514                settings.wireless_security.key_mgmt = mgmt