rpms/sugar/F-10 nm07-support.patch,NONE,1.1 sugar.spec,1.29,1.30

Simon Schampijer erikos at fedoraproject.org
Mon Nov 17 16:50:57 UTC 2008


Author: erikos

Update of /cvs/pkgs/rpms/sugar/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv19500

Modified Files:
	sugar.spec 
Added Files:
	nm07-support.patch 
Log Message:
* Mon Nov 17 2008 Simon Schampijer <simon at laptop.org> - 0.82.9-2
- NM07 support



nm07-support.patch:

--- NEW FILE nm07-support.patch ---
diff --git a/data/Makefile.am b/data/Makefile.am
index cdf9dc5..8800ad8 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -22,6 +22,9 @@ GTKRC_FILES =		\
 xsessionsdir = $(datadir)/xsessions
 xsessions_DATA = sugar.desktop
 
+nmservicedir = $(sysconfdir)/dbus-1/system.d/
+nmservice_DATA = nm-user-settings.conf
+
 mime_xml_in_files = sugar.xml.in
 mime_xml_files = $(mime_xml_in_files:.xml.in=.xml)
 @INTLTOOL_XML_RULE@
@@ -43,5 +46,5 @@ if ENABLE_UPDATE_MIMEDB
 	fi
 endif
 
-EXTRA_DIST = $(sugar_DATA) $(xsessions_DATA) $(mime_xml_in_files) em.py gtkrc.em
+EXTRA_DIST = $(sugar_DATA) $(xsessions_DATA) $(nmservice_DATA) $(mime_xml_in_files) em.py gtkrc.em
 CLEANFILES = $(GTKRC_FILES) $(mime_xml_files)
diff --git a/data/nm-user-settings.conf b/data/nm-user-settings.conf
new file mode 100644
index 0000000..af7c642
--- /dev/null
+++ b/data/nm-user-settings.conf
@@ -0,0 +1,34 @@
+<!DOCTYPE busconfig PUBLIC
+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+	<policy user="root">
+		<allow own="org.freedesktop.NetworkManagerUserSettings"/>
+
+		<allow send_destination="org.freedesktop.NetworkManagerUserSettings"/>
+		<allow send_interface="org.freedesktop.NetworkManagerSettings"/>
+
+		<!-- Only root can get secrets -->
+		<allow send_interface="org.freedesktop.NetworkManagerSettings.Secrets"/>
+	</policy>
+	<policy at_console="true">
+		<allow own="org.freedesktop.NetworkManagerUserSettings"/>
+
+		<allow send_destination="org.freedesktop.NetworkManagerUserSettings"/>
+		<allow send_interface="org.freedesktop.NetworkManagerSettings"/>
+
+		<!-- Only root can get secrets -->
+		<deny send_interface="org.freedesktop.NetworkManagerSettings.Secrets"/>
+	</policy>
+	<policy context="default">
+		<deny own="org.freedesktop.NetworkManagerUserSettings"/>
+
+		<allow send_destination="org.freedesktop.NetworkManagerUserSettings"/>
+		<allow send_interface="org.freedesktop.NetworkManagerSettings"/>
+		<!-- Only root can get secrets -->
+		<deny send_interface="org.freedesktop.NetworkManagerSettings.Secrets"/>
+	</policy>
+
+	<limit name="max_replies_per_connection">512</limit>
+</busconfig>
+
diff --git a/src/hardware/Makefile.am b/src/hardware/Makefile.am
index 8cd9c77..f589d42 100644
--- a/src/hardware/Makefile.am
+++ b/src/hardware/Makefile.am
@@ -2,12 +2,4 @@ sugardir = $(pkgdatadir)/shell/hardware
 sugar_PYTHON =				\
 	__init__.py			\
 	hardwaremanager.py		\
-	keydialog.py			\
-	nmclient.py			\
-	nminfo.py			\
 	schoolserver.py
-
-dbusservicedir = $(sysconfdir)/dbus-1/system.d/
-dbusservice_DATA = NetworkManagerInfo.conf
-
-EXTRA_DIST = $(dbusservice_DATA)
diff --git a/src/hardware/NetworkManagerInfo.conf b/src/hardware/NetworkManagerInfo.conf
deleted file mode 100644
index 4fb8270..0000000
--- a/src/hardware/NetworkManagerInfo.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE busconfig PUBLIC
- "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
-	<policy user="root">
-		<allow own="org.freedesktop.NetworkManagerInfo"/>
-
-		<allow send_destination="org.freedesktop.NetworkManagerInfo"/>
-                <allow send_interface="org.freedesktop.NetworkManagerInfo"/>
-	</policy>
-	<policy at_console="true">
-		<allow own="org.freedesktop.NetworkManagerInfo"/>
-
-		<allow send_destination="org.freedesktop.NetworkManagerInfo"/>
-                <allow send_interface="org.freedesktop.NetworkManagerInfo"/>
-	</policy>
-	<policy context="default">
-		<deny own="org.freedesktop.NetworkManagerInfo"/>
-
-		<deny send_destination="org.freedesktop.NetworkManagerInfo"/>
-		<deny send_interface="org.freedesktop.NetworkManagerInfo"/>
-	</policy>
-
-        <limit name="max_replies_per_connection">512</limit>
-</busconfig>
-
diff --git a/src/hardware/hardwaremanager.py b/src/hardware/hardwaremanager.py
index c4f9f75..2e5a16b 100644
--- a/src/hardware/hardwaremanager.py
+++ b/src/hardware/hardwaremanager.py
@@ -19,7 +19,6 @@ import logging
 import dbus
 import gobject
 
-from hardware.nmclient import NMClient
 from sugar.profile import get_profile
 from sugar import env
 from sugar import _sugarext
@@ -111,13 +110,5 @@ class HardwareManager(gobject.GObject):
 def get_manager():
     return _manager
 
-def get_network_manager():
-    return _network_manager
-
 _manager = HardwareManager()
 
-try:
-    _network_manager = NMClient()
-except dbus.DBusException, e:
-    _network_manager = None
-    logging.info('Network manager service not found.')
diff --git a/src/hardware/keydialog.py b/src/hardware/keydialog.py
deleted file mode 100644
index 88a551f..0000000
--- a/src/hardware/keydialog.py
+++ /dev/null
@@ -1,354 +0,0 @@
-# vi: ts=4 ai noet
-#
-# Copyright (C) 2006-2007 Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-import md5
-from gettext import gettext as _
-
-import gtk
-
-IW_AUTH_ALG_OPEN_SYSTEM = 0x00000001
-IW_AUTH_ALG_SHARED_KEY  = 0x00000002
-
-IW_AUTH_WPA_VERSION_DISABLED = 0x00000001
-IW_AUTH_WPA_VERSION_WPA      = 0x00000002
-IW_AUTH_WPA_VERSION_WPA2     = 0x00000004
-
-NM_802_11_CAP_NONE            = 0x00000000
-NM_802_11_CAP_PROTO_NONE      = 0x00000001
-NM_802_11_CAP_PROTO_WEP       = 0x00000002
-NM_802_11_CAP_PROTO_WPA       = 0x00000004
-NM_802_11_CAP_PROTO_WPA2      = 0x00000008
-NM_802_11_CAP_KEY_MGMT_PSK    = 0x00000040
-NM_802_11_CAP_KEY_MGMT_802_1X = 0x00000080
-NM_802_11_CAP_CIPHER_WEP40    = 0x00001000
-NM_802_11_CAP_CIPHER_WEP104   = 0x00002000
-NM_802_11_CAP_CIPHER_TKIP     = 0x00004000
-NM_802_11_CAP_CIPHER_CCMP     = 0x00008000
-
-NM_AUTH_TYPE_WPA_PSK_AUTO = 0x00000000
-IW_AUTH_CIPHER_NONE   = 0x00000001
-IW_AUTH_CIPHER_WEP40  = 0x00000002
-IW_AUTH_CIPHER_TKIP   = 0x00000004
-IW_AUTH_CIPHER_CCMP   = 0x00000008
-IW_AUTH_CIPHER_WEP104 = 0x00000010
-
-IW_AUTH_KEY_MGMT_802_1X = 0x1
-IW_AUTH_KEY_MGMT_PSK    = 0x2
-
-def string_is_hex(key):
-    is_hex = True
-    for c in key:
-        if not 'a' <= c.lower() <= 'f' and not '0' <= c <= '9':
-            is_hex = False
[...4225 lines suppressed...]
+class WEPKeyDialog(KeyDialog):
+    def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
+        KeyDialog.__init__(self, ssid, flags, wpa_flags, rsn_flags,
+                           dev_caps, response)
+
+        # WEP key type
+        self.key_store = gtk.ListStore(str, int)
+        self.key_store.append(["Passphrase (128-bit)", WEP_PASSPHRASE])
+        self.key_store.append(["Hex (40/128-bit)", WEP_HEX])
+        self.key_store.append(["ASCII (40/128-bit)", WEP_ASCII])
+
+        self.key_combo = gtk.ComboBox(self.key_store)
+        cell = gtk.CellRendererText()
+        self.key_combo.pack_start(cell, True)
+        self.key_combo.add_attribute(cell, 'text', 0)
+        self.key_combo.set_active(0)
+        self.key_combo.connect('changed', self._key_combo_changed_cb)
+
+        hbox = gtk.HBox()
+        hbox.pack_start(gtk.Label(_("Key Type:")))
+        hbox.pack_start(self.key_combo)
+        hbox.show_all()
+        self.vbox.pack_start(hbox)
+
+        # Key entry field
+        self.add_key_entry()
+
+        # WEP authentication mode
+        self.auth_store = gtk.ListStore(str, str)
+        self.auth_store.append(["Open System", IW_AUTH_ALG_OPEN_SYSTEM])
+        self.auth_store.append(["Shared Key", IW_AUTH_ALG_SHARED_KEY])
+
+        self.auth_combo = gtk.ComboBox(self.auth_store)
+        cell = gtk.CellRendererText()
+        self.auth_combo.pack_start(cell, True)
+        self.auth_combo.add_attribute(cell, 'text', 0)
+        self.auth_combo.set_active(0)
+
+        hbox = gtk.HBox()
+        hbox.pack_start(gtk.Label(_("Authentication Type:")))
+        hbox.pack_start(self.auth_combo)
+        hbox.show_all()
+
+        self.vbox.pack_start(hbox)
+
+    def _key_combo_changed_cb(self, widget):
+        self._update_response_sensitivity()
+
+    def _get_security(self):
+        key = self._entry.get_text()
+
+        it = self.key_combo.get_active_iter()
+        (key_type, ) = self.key_store.get(it, 1)
+
+        if key_type == WEP_PASSPHRASE:
+            key = hash_passphrase(key)
+        elif key_type == WEP_ASCII:
+            key = string_to_hex(key)
+
+        it = self.auth_combo.get_active_iter()
+        (auth_alg, ) = self.auth_store.get(it, 1)
+
+        return (key, auth_alg)
+
+    def print_security(self):
+        (key, auth_alg) = self._get_security()
+        print "Key: %s" % key
+        print "Auth: %d" % auth_alg
+
+    def create_security(self):
+        (key, auth_alg) = self._get_security()
+        secrets = Secrets()
+        secrets.wep_key = key
+        secrets.auth_alg = auth_alg
+        return secrets
+
+    def _update_response_sensitivity(self, ignored=None):
+        key = self._entry.get_text()
+        it = self.key_combo.get_active_iter()
+        (key_type, ) = self.key_store.get(it, 1)
+
+        valid = False
+        if key_type == WEP_PASSPHRASE:
+            # As the md5 passphrase can be of any length and has no indicator,
+            # we cannot check for the validity of the input.
+            if len(key) > 0:
+                valid = True
+        elif key_type == WEP_ASCII:
+            if len(key) == 5 or len(key) == 13:
+                valid = string_is_ascii(key)
+        elif key_type == WEP_HEX:
+            if len(key) == 10 or len(key) == 26:
+                valid = string_is_hex(key)
+
+        self.set_response_sensitive(gtk.RESPONSE_OK, valid)
+
+class WPAKeyDialog(KeyDialog):
+    def __init__(self, ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
+        KeyDialog.__init__(self, ssid, flags, wpa_flags, rsn_flags,
+                           dev_caps, response)
+        self.add_key_entry()
+
+        self.store = gtk.ListStore(str)
+        self.store.append([_("WPA & WPA2 Personal")])
+
+        self.combo = gtk.ComboBox(self.store)
+        cell = gtk.CellRendererText()
+        self.combo.pack_start(cell, True)
+        self.combo.add_attribute(cell, 'text', 0)
+        self.combo.set_active(0)
+
+        self.hbox = gtk.HBox()
+        self.hbox.pack_start(gtk.Label(_("Wireless Security:")))
+        self.hbox.pack_start(self.combo)
+        self.hbox.show_all()
+
+        self.vbox.pack_start(self.hbox)
+
+    def _get_security(self):
+        ssid = self._ssid
+        key = self._entry.get_text()
+        is_hex = string_is_hex(key)
+
+        real_key = None
+        if len(key) == 64 and is_hex:
+            # Hex key
+            real_key = key
+        elif len(key) >= 8 and len(key) <= 63:
+            # passphrase
+            from subprocess import Popen, PIPE
+            p = Popen(['/usr/sbin/wpa_passphrase', ssid, key], stdout=PIPE)
+            for line in p.stdout:
+                if line.strip().startswith("psk="):
+                    real_key = line.strip()[4:]
+            if p.wait() != 0:
+                raise RuntimeError("Error hashing passphrase")
+            if real_key and len(real_key) != 64:
+                real_key = None
+
+        if not real_key:
+            raise RuntimeError("Invalid key")
+
+        return real_key
+
+    def print_security(self):
+        key = self._get_security()
+        print "Key: %s" % key
+
+    def create_security(self):
+        secrets = Secrets()
+        secrets.psk = self._get_security()
+        return secrets
+
+    def _update_response_sensitivity(self, ignored=None):
+        key = self._entry.get_text()
+        is_hex = string_is_hex(key)
+
+        valid = False
+        if len(key) == 64 and is_hex:
+            # hex key
+            valid = True
+        elif len(key) >= 8 and len(key) <= 63:
+            # passphrase
+            valid = True
+        self.set_response_sensitive(gtk.RESPONSE_OK, valid)
+        return False
+
+def create(ssid, flags, wpa_flags, rsn_flags, dev_caps, response):
+    if wpa_flags == network.NM_802_11_AP_SEC_NONE and \
+            rsn_flags == network.NM_802_11_AP_SEC_NONE:
+        key_dialog = WEPKeyDialog(ssid, flags, wpa_flags, rsn_flags,
+                                  dev_caps, response)
+    else:
+        key_dialog = WPAKeyDialog(ssid, flags, wpa_flags, rsn_flags,
+                                  dev_caps, response)
+
+    key_dialog.connect("response", _key_dialog_response_cb)
+    key_dialog.connect("destroy", _key_dialog_destroy_cb)
+    key_dialog.show_all()
+
+def _key_dialog_destroy_cb(key_dialog, data=None):
+    _key_dialog_response_cb(key_dialog, gtk.RESPONSE_CANCEL)
+
+def _key_dialog_response_cb(key_dialog, response_id):
+    response = key_dialog.get_response_object()
+    secrets = None
+    if response_id == gtk.RESPONSE_OK:
+        secrets = key_dialog.create_security()
+
+    if response_id in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_NONE]:
+        # key dialog dialog was canceled; send the error back to NM
+        response.set_error(CanceledKeyRequestError())
+    elif response_id == gtk.RESPONSE_OK:
+        if not secrets:
+            raise RuntimeError("Invalid security arguments.")
+        response.set_secrets(secrets)
+    else:
+        raise RuntimeError("Unhandled key dialog response %d" % response_id)
+
+    key_dialog.destroy()


Index: sugar.spec
===================================================================
RCS file: /cvs/pkgs/rpms/sugar/F-10/sugar.spec,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- sugar.spec	25 Sep 2008 19:15:35 -0000	1.29
+++ sugar.spec	17 Nov 2008 16:50:26 -0000	1.30
@@ -4,7 +4,7 @@
 Summary: OLPC desktop environment
 Name: sugar
 Version: 0.82.9
-Release: 1%{?dist}
+Release: 2%{?dist}
 #Release: 2.%{alphatag}%{?dist}
 URL: http://dev.laptop.org
 # git clone git://dev.laptop.org/sugar
@@ -16,6 +16,8 @@
 Group: System Environment/Libraries
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
+Patch1: nm07-support.patch
+
 BuildRequires: pkgconfig
 BuildRequires: perl-XML-Parser
 BuildRequires: gettext
@@ -49,6 +51,8 @@
 %prep
 %setup -q
 
+%patch1 -p1 -b .nm07-support
+
 %build
 %configure
 make
@@ -75,7 +79,7 @@
 %defattr(-,root,root,-)
 %doc COPYING README
 
-%config %{_sysconfdir}/dbus-1/system.d/NetworkManagerInfo.conf
+%config %{_sysconfdir}/dbus-1/system.d/nm-user-settings.conf
 
 %dir %{_datadir}/sugar
 %{_datadir}/sugar/*
@@ -93,6 +97,9 @@
 %{_bindir}/sugar-emulator
 
 %changelog
+* Mon Nov 17 2008 Simon Schampijer <simon at laptop.org> - 0.82.9-2
+- NM07 support
+
 * Thu Sep 25 2008 Marco Pesenti Gritti <mpg at redhat.com> - 0.82.9-1
 - #7969 Accidental searches lead to a "blank" Home screen
 - #8662 xo man jumps around while zooming




More information about the scm-commits mailing list