Compare commits

..

5 commits

Author SHA1 Message Date
David Cantrell
ec74c6331f Fix 'guiutil.py:147:set_text:TypeError: Gtk.Entry.set_text()
argument 1 must be string, not dbus.Boolean' (#740256)
2012-04-25 11:43:36 -04:00
David Cantrell
7156261d57 Fix CVE-2012-2095 (#811763) 2012-04-13 10:36:53 -04:00
David Cantrell
23a76d9656 Fix CVS-2012-0813 (#785147) 2012-01-27 14:36:31 -05:00
David Cantrell
496bc86752 Initialize appGui._wired_showing in __init__ (#723553)
Make sure check and message in wicd-cli are a lambda (#712435)
2011-08-19 16:10:31 -04:00
David Cantrell
bd5839e538 Correct systemd unit file for wicd, add D-Bus service file (#699116)
Move docs to the wicd-common subpackage
Correct /etc/dbus-1/system.d/wicd.conf (#699116)
2011-08-11 17:05:39 -04:00
17 changed files with 795 additions and 1 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
wicd-1.7.0.tar.bz2

View file

@ -1 +0,0 @@
Orphaned for 6+ weeks

11
org.wicd.daemon.service Normal file
View file

@ -0,0 +1,11 @@
# This D-Bus service activation file is only for systemd support since
# an auto-activated wicd would be quite surprising for those people
# who have wicd installed but turned off. Thus the Exec path available to
# D-Bus is /bin/false, but systemd knows the real Exec path due to the
# wicd systemd .service file.
[D-BUS Service]
Name=org.wicd.daemon
Exec=/bin/false
User=root
SystemdService=dbus-org.wicd.daemon.service

1
sources Normal file
View file

@ -0,0 +1 @@
7e5956891d6696b6185baa7f5dc70c56 wicd-1.7.0.tar.bz2

View file

@ -0,0 +1,19 @@
diff -up wicd-1.7.0/wicd/configmanager.py.CVE-2012-0813 wicd-1.7.0/wicd/configmanager.py
--- wicd-1.7.0/wicd/configmanager.py.CVE-2012-0813 2012-01-27 14:34:12.779219466 -0500
+++ wicd-1.7.0/wicd/configmanager.py 2012-01-27 14:34:33.534091679 -0500
@@ -97,8 +97,13 @@ class ConfigManager(RawConfigParser):
ret = ret[3:-3]
if default:
if self.debug:
- print ''.join(['found ', option, ' in configuration ',
- str(ret)])
+ # mask out sensitive information
+ if option in ['apsk', 'password', 'identity', 'private_key', \
+ 'private_key_passwd', 'key', 'passphrase']:
+ print ''.join(['found ', option, ' in configuration *****'])
+ else:
+ print ''.join(['found ', option, ' in configuration ',
+ str(ret)])
else:
if default != "__None__":
print 'did not find %s in configuration, setting default %s' % (option, str(default))

View file

@ -0,0 +1,91 @@
diff -up wicd-1.7.0/wicd/wicd-daemon.py.CVE-2012-2095 wicd-1.7.0/wicd/wicd-daemon.py
--- wicd-1.7.0/wicd/wicd-daemon.py.CVE-2012-2095 2012-04-13 10:17:46.356047035 -0400
+++ wicd-1.7.0/wicd/wicd-daemon.py 2012-04-13 10:18:35.018046979 -0400
@@ -978,6 +978,28 @@ class WirelessDaemon(dbus.service.Object
"wireless-settings.conf"),
debug=debug)
+ self._validProperties = (
+ 'bssid',
+ 'essid',
+ 'hidden',
+ 'channel',
+ 'mode',
+ 'enctype',
+ 'encryption_method',
+ 'key',
+ 'automatic',
+ 'ip',
+ 'netmask',
+ 'broadcast',
+ 'gateway',
+ 'use_static_dns',
+ 'use_global_dns',
+ 'dns1',
+ 'dns2',
+ 'dns3',
+ 'use_settings_globally',
+ )
+
def get_debug_mode(self):
return self._debug_mode
def set_debug_mode(self, mode):
@@ -1086,9 +1108,9 @@ class WirelessDaemon(dbus.service.Object
def SetWirelessProperty(self, netid, prop, value):
""" Sets property to value in network specified. """
# We don't write script settings here.
- if (prop.strip()).endswith("script"):
- print "Setting script properties through the daemon is not" \
- + " permitted."
+ if prop.strip() not in self._validProperties:
+ print "Trying to set invalid property (or property not " \
+ "permitted): "+ prop.strip() + "."
return False
self.LastScan[netid][prop] = misc.to_unicode(misc.Noneify(value))
@@ -1365,6 +1387,25 @@ class WiredDaemon(dbus.service.Object):
"wired-settings.conf"),
debug=debug)
+ self._validProperties = (
+ 'ip',
+ 'broadcast',
+ 'netmask',
+ 'gateway',
+ 'search_domain',
+ 'dns_domain',
+ 'dns1',
+ 'dns2',
+ 'dns3',
+ 'encryption_enabled',
+ 'default',
+ 'dhcphostname',
+ 'lastused',
+ 'profilename',
+ 'use_global_dns',
+ 'use_static_dns',
+ )
+
def get_debug_mode(self):
return self._debug_mode
def set_debug_mode(self, mode):
@@ -1405,14 +1446,14 @@ class WiredDaemon(dbus.service.Object):
return str(iface)
@dbus.service.method('org.wicd.daemon.wired')
- def SetWiredProperty(self, property, value):
+ def SetWiredProperty(self, prop, value):
""" Sets the given property to the given value. """
if self.WiredNetwork:
- if (property.strip()).endswith("script"):
- print "Setting script properties through the daemon" \
- + " is not permitted."
+ if prop.strip() not in self._validProperties:
+ print "Trying to set invalid property (or property not " \
+ "permitted): "+ prop.strip() + "."
return False
- self.WiredNetwork[property] = misc.to_unicode(misc.Noneify(value))
+ self.WiredNetwork[prop] = misc.to_unicode(misc.Noneify(value))
return True
else:
print 'SetWiredProperty: WiredNetwork does not exist'

34
wicd-1.7.0-bz740256.patch Normal file
View file

@ -0,0 +1,34 @@
diff -up wicd-1.7.0/gtk/guiutil.py.orig wicd-1.7.0/gtk/guiutil.py
--- wicd-1.7.0/gtk/guiutil.py.orig 2010-01-14 23:49:11.000000000 -0500
+++ wicd-1.7.0/gtk/guiutil.py 2012-04-25 11:40:30.747191654 -0400
@@ -106,13 +106,12 @@ def string_input(prompt, secondary, text
dialog.vbox.pack_end(hbox, True, True, 0)
dialog.show_all()
+ text = ''
if dialog.run() == gtk.RESPONSE_OK:
- text = entry.get_text()
- dialog.destroy()
- return text
- else:
- dialog.destroy()
- return None
+ text = entry.get_text().strip()
+
+ dialog.destroy()
+ return text
class SmallLabel(gtk.Label):
def __init__(self, text=''):
diff -up wicd-1.7.0/gtk/netentry.py.orig wicd-1.7.0/gtk/netentry.py
--- wicd-1.7.0/gtk/netentry.py.orig 2010-01-14 23:49:11.000000000 -0500
+++ wicd-1.7.0/gtk/netentry.py 2012-04-25 11:41:06.364192922 -0400
@@ -725,7 +725,7 @@ class WiredNetworkEntry(NetworkEntry):
"will not be used by the computer. It " +
"allows you to " +
"easily distinguish between different network " +
- "profiles.", "Profile name:").strip()
+ "profiles.", "Profile name:")
# if response is "" or None
if not response:

View file

@ -0,0 +1,50 @@
diff -up wicd-1.7.0/cli/wicd-cli.py.orig wicd-1.7.0/cli/wicd-cli.py
--- wicd-1.7.0/cli/wicd-cli.py.orig 2010-01-14 23:49:11.000000000 -0500
+++ wicd-1.7.0/cli/wicd-cli.py 2011-08-05 11:09:57.561058338 -0400
@@ -43,6 +43,10 @@ except dbus.DBusException:
print 'Error: Could not connect to the daemon. Please make sure it is running.'
sys.exit(3)
+if daemon is None:
+ print 'Error connecting to wicd via D-Bus. Please make sure the wicd service is running.'
+ sys.exit(3)
+
parser = optparse.OptionParser()
parser.add_option('--network', '-n', type='int', default=-1)
diff -up wicd-1.7.0/curses/wicd-curses.py.orig wicd-1.7.0/curses/wicd-curses.py
--- wicd-1.7.0/curses/wicd-curses.py.orig 2010-01-14 23:49:11.000000000 -0500
+++ wicd-1.7.0/curses/wicd-curses.py 2011-08-05 11:09:00.248056606 -0400
@@ -1016,6 +1016,10 @@ def setup_dbus(force=True):
wireless = dbus_ifaces['wireless']
wired = dbus_ifaces['wired']
+ if daemon is None:
+ print 'Error connecting to wicd via D-Bus. Please make sure the wicd service is running.'
+ sys.exit(3)
+
netentry_curses.dbus_init(dbus_ifaces)
return True
diff -up wicd-1.7.0/gtk/gui.py.orig wicd-1.7.0/gtk/gui.py
--- wicd-1.7.0/gtk/gui.py.orig 2010-01-14 23:49:11.000000000 -0500
+++ wicd-1.7.0/gtk/gui.py 2011-08-05 10:49:08.392177338 -0400
@@ -146,6 +146,17 @@ class appGui(object):
""" Initializes everything needed for the GUI. """
setup_dbus()
+ if daemon is None:
+ errmsg = "Error connecting to wicd service via D-Bus." + \
+ "Please ensure the wicd service is running."
+ d = gtk.MessageDialog(parent=None,
+ flags=gtk.DIALOG_MODAL,
+ type=gtk.MESSAGE_ERROR,
+ buttons=gtk.BUTTONS_OK,
+ message_format=errmsg)
+ d.run()
+ sys.exit(1)
+
self.tray = tray
gladefile = os.path.join(wpath.gtk, "wicd.glade")
diff -up wicd-1.7.0/gtk/wicd-client.py.orig wicd-1.7.0/gtk/wicd-client.py

View file

@ -0,0 +1,54 @@
diff -up wicd-1.7.0/in/other=wicd.conf.in.orig wicd-1.7.0/in/other=wicd.conf.in
--- wicd-1.7.0/in/other=wicd.conf.in.orig 2010-01-14 23:49:11.000000000 -0500
+++ wicd-1.7.0/in/other=wicd.conf.in 2011-08-11 16:57:20.818332542 -0400
@@ -7,41 +7,24 @@
<allow own="org.wicd.daemon"/>
<allow send_destination="org.wicd.daemon"/>
<allow send_interface="org.wicd.daemon"/>
- <allow send_destination="org.wicd.daemon.wireless"/>
- <allow send_interface="org.wicd.daemon.wireless"/>
- <allow send_destination="org.wicd.daemon.wired"/>
- <allow send_interface="org.wicd.daemon.wired"/>
+ <allow send_destination="org.wicd.daemon.wireless"/>
+ <allow send_interface="org.wicd.daemon.wireless"/>
+ <allow send_destination="org.wicd.daemon.wired"/>
+ <allow send_interface="org.wicd.daemon.wired"/>
</policy>
<policy context="default">
<deny own="org.wicd.daemon"/>
</policy>
- <!-- This Unix group will have permission to use Wicd's gui -->
- <policy group="%WICDGROUP%">
- <allow send_destination="org.wicd.daemon"/>
- <allow send_interface="org.wicd.daemon"/>
- <allow send_interface="org.freedesktop.DBus.Introspectable"/>
- <!-- The Introspectable allow shouldn't be needed here, but
- it seems that a few distributions aren't yet allowing
- it in their hal configs, and we need it here, so... -->
- </policy>
-
- <!-- Comment the block below if you do not want all users logged in
- locally to have permission to use wicd-client. This ignores the
- group based permission model defined above for the "%WICDGROUP%"
- group. Note that this only applies if you are using ConsoleKit -
- if you do not have ConsoleKit installed and in use, then this
- block makes no difference either way. -->
-
<policy at_console="true">
<allow send_destination="org.wicd.daemon"/>
<allow send_interface="org.wicd.daemon"/>
- <allow send_destination="org.wicd.daemon.wireless"/>
- <allow send_interface="org.wicd.daemon.wireless"/>
- <allow send_destination="org.wicd.daemon.wired"/>
- <allow send_interface="org.wicd.daemon.wired"/>
- <allow send_interface="org.freedesktop.DBus.Introspectable"/>
+ <allow send_destination="org.wicd.daemon.wireless"/>
+ <allow send_interface="org.wicd.daemon.wireless"/>
+ <allow send_destination="org.wicd.daemon.wired"/>
+ <allow send_interface="org.wicd.daemon.wired"/>
+ <allow send_interface="org.freedesktop.DBus.Introspectable"/>
</policy>
</busconfig>

50
wicd-1.7.0-deepcopy.patch Normal file
View file

@ -0,0 +1,50 @@
diff -up wicd-1.7.0/wicd/configmanager.py.deepcopy wicd-1.7.0/wicd/configmanager.py
--- wicd-1.7.0/wicd/configmanager.py.deepcopy 2010-01-14 18:49:11.000000000 -1000
+++ wicd-1.7.0/wicd/configmanager.py 2010-10-22 10:18:14.000000000 -1000
@@ -25,6 +25,7 @@ reusable for other purposes as well.
#
import os, copy
+import cPickle
from ConfigParser import RawConfigParser
@@ -35,7 +36,7 @@ from dbus import Int32
class ConfigManager(RawConfigParser):
""" A class that can be used to manage a given configuration file. """
def __init__(self, path, debug=False, mark_whitespace="`'`"):
- RawConfigParser.__init__(self)
+ RawConfigParser.__init__(self, allow_no_value = True)
self.config_file = path
self.debug = debug
self.mrk_ws = mark_whitespace
@@ -67,7 +68,7 @@ class ConfigManager(RawConfigParser):
if value.startswith(' ') or value.endswith(' '):
value = "%(ws)s%(value)s%(ws)s" % {"value" : value,
"ws" : self.mrk_ws}
- RawConfigParser.set(self, section, str(option), value)
+ RawConfigParser.set(self, section, str(option), "None" if value is None else value)
if write:
self.write()
@@ -176,9 +177,7 @@ class ConfigManager(RawConfigParser):
def _copy_section(self, name):
- # Yes, deepcopy sucks, but it is robust to changes in both
- # this class and RawConfigParser.
- p = copy.deepcopy(self)
+ p = cPickle.loads(cPickle.dumps(self, -1))
for sname in p.sections():
if sname != name:
p.remove_section(sname)
@@ -188,8 +187,7 @@ class ConfigManager(RawConfigParser):
def write(self):
""" Writes the loaded config file to disk. """
- # Really don't like this deepcopy.
- p = copy.deepcopy(self)
+ p = cPickle.loads(cPickle.dumps(self, -1))
for sname in p.sections():
fname = p.get_option(sname, '_filename_')
if fname and fname != self.config_file:

View file

@ -0,0 +1,27 @@
diff -up wicd-1.7.0/curses/wicd-curses.py.orig wicd-1.7.0/curses/wicd-curses.py
--- wicd-1.7.0/curses/wicd-curses.py.orig 2011-08-11 17:01:29.969340068 -0400
+++ wicd-1.7.0/curses/wicd-curses.py 2011-08-11 17:01:30.159340092 -0400
@@ -1033,7 +1033,7 @@ if __name__ == '__main__':
parser = OptionParser(version="wicd-curses-%s (using wicd %s)" % (CURSES_REV,daemon.Hello()))
except Exception, e:
if "DBus.Error.AccessDenied" in e.get_dbus_name():
- print language['access_denied_wc'].replace('$A','\033[1;34m'+wpath.wicd_group+'\033[0m')
+ print language['access_denied_wc']
sys.exit(1)
else:
raise
diff -up wicd-1.7.0/wicd/translations.py.orig wicd-1.7.0/wicd/translations.py
--- wicd-1.7.0/wicd/translations.py.orig 2010-01-14 23:49:23.000000000 -0500
+++ wicd-1.7.0/wicd/translations.py 2011-08-11 17:01:30.179340042 -0400
@@ -214,9 +214,9 @@ language['connection_established'] = _('
language['disconnected'] = _('''Disconnected''')
language['establishing_connection'] = _('''Establishing connection...''')
language['association_failed'] = _('''Connection failed: Could not contact the wireless access point.''')
-language['access_denied'] = _('''Unable to contact the Wicd daemon due to an access denied error from DBus. Please check that your user is in the $A group.''')
+language['access_denied'] = _('''Unable to contact the Wicd daemon due to an access denied error from DBus. Please check your D-Bus policy configuration.''')
language['disconnecting_active'] = _('''Disconnecting active connections...''')
-language['access_denied_wc'] = _('''ERROR: wicd-curses was denied access to the wicd daemon: please check that your user is in the "$A" group.''')
+language['access_denied_wc'] = _('''ERROR: wicd-curses was denied access to the wicd daemon: please check your D-Bus policy configuration.''')
language['post_disconnect_script'] = _('''Run post-disconnect script''')
language['resume_script'] = _('''Resume script''')
language['suspend_script'] = _('''Suspend script''')

View file

@ -0,0 +1,13 @@
diff -up wicd-1.7.0/cli/wicd-cli.py.orig wicd-1.7.0/cli/wicd-cli.py
--- wicd-1.7.0/cli/wicd-cli.py.orig 2011-08-19 15:24:57.413159478 -0400
+++ wicd-1.7.0/cli/wicd-cli.py 2011-08-19 15:31:49.790055545 -0400
@@ -195,6 +195,9 @@ if options.connect:
check = lambda: wired.CheckIfWiredConnecting()
message = lambda: wired.CheckWiredConnectingMessage()
+ else:
+ check = lambda: False
+ message = lambda: False
# update user on what the daemon is doing
last = None

View file

@ -0,0 +1,53 @@
diff -up wicd-1.7.0/in/man=wicd-curses.8.in.orig wicd-1.7.0/in/man=wicd-curses.8.in
--- wicd-1.7.0/in/man=wicd-curses.8.in.orig 2010-01-14 18:49:11.000000000 -1000
+++ wicd-1.7.0/in/man=wicd-curses.8.in 2010-05-19 09:20:00.000000000 -1000
@@ -57,10 +57,6 @@ Bring up instructions on how to edit the
.BR O
Raise the Ad-Hoc network creation dialog
-.SH "FILES"
-.TP
-.I ~/.wicd/WHEREAREMYFILES
-Reminder that your network configuration files are not here ;-)
.PP
.SH "SEE ALSO"
.BR wicd-client (1),
diff -up wicd-1.7.0/in/scripts=wicd-client.in.orig wicd-1.7.0/in/scripts=wicd-client.in
--- wicd-1.7.0/in/scripts=wicd-client.in.orig 2010-01-14 18:49:11.000000000 -1000
+++ wicd-1.7.0/in/scripts=wicd-client.in 2010-05-19 09:20:25.000000000 -1000
@@ -6,10 +6,6 @@ NC=$(tput sgr0)
if [ ! -d "$HOME/.wicd" ]; then
mkdir -p "$HOME/.wicd"
fi
-# Make sure the user knows WHEREAREMYFILES ;-)
-if [ -e "%VARLIB%WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then
- ln -s "%VARLIB%WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES"
-fi
if [ "$DISPLAY" = "" ]; then
if [ -x "%BIN%wicd-curses" ]; then
if [ ! -f "$HOME/.wicd/CLIENT_CURSES_WARNING" ]; then
diff -up wicd-1.7.0/in/scripts=wicd-curses.in.orig wicd-1.7.0/in/scripts=wicd-curses.in
--- wicd-1.7.0/in/scripts=wicd-curses.in.orig 2010-01-14 18:49:11.000000000 -1000
+++ wicd-1.7.0/in/scripts=wicd-curses.in 2010-05-19 09:20:36.000000000 -1000
@@ -2,8 +2,5 @@
if [ ! -d "$HOME/.wicd" ]; then
mkdir -p "$HOME/.wicd"
fi
-if [ -e "%VARLIB%WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then
- ln -s "%VARLIB%WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES"
-fi
exec %PYTHON% -O %SHARE%curses/wicd-curses.py $@
diff -up wicd-1.7.0/in/scripts=wicd-gtk.in.orig wicd-1.7.0/in/scripts=wicd-gtk.in
--- wicd-1.7.0/in/scripts=wicd-gtk.in.orig 2010-01-14 18:49:11.000000000 -1000
+++ wicd-1.7.0/in/scripts=wicd-gtk.in 2010-05-19 09:20:44.000000000 -1000
@@ -4,9 +4,5 @@
if [ ! -d "$HOME/.wicd" ]; then
mkdir -p "$HOME/.wicd"
fi
-# Make sure the user knows WHEREAREMYFILES ;-)
-if [ -e "/var/lib/wicd/WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then
- ln -s "/var/lib/wicd/WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES"
-fi
exec %PYTHON% -O %SHARE%gtk/wicd-client.py $@

View file

@ -0,0 +1,11 @@
diff -up wicd-1.7.0/gtk/gui.py.orig wicd-1.7.0/gtk/gui.py
--- wicd-1.7.0/gtk/gui.py.orig 2011-08-19 14:53:37.667180427 -0400
+++ wicd-1.7.0/gtk/gui.py 2011-08-19 14:55:43.657056952 -0400
@@ -220,6 +220,7 @@ class appGui(object):
self.refreshing = False
self.prev_state = None
self.update_cb = None
+ self._wired_showing = False
self.network_list.set_sensitive(False)
label = gtk.Label("%s..." % language['scanning'])
self.network_list.pack_start(label)

6
wicd.logrotate Normal file
View file

@ -0,0 +1,6 @@
/var/log/wicd.log {
missingok
notifempty
size 30k
create 0600 root root
}

15
wicd.service Normal file
View file

@ -0,0 +1,15 @@
[Unit]
Description=Wicd a wireless and wired network manager for Linux
After=syslog.target
Wants=network.target
Before=network.target
Conflicts=NetworkManager.service
[Service]
Type=dbus
BusName=org.wicd.daemon
ExecStart=/usr/sbin/wicd --no-daemon
[Install]
WantedBy=multi-user.target
Alias=dbus-org.wicd.daemon.service

359
wicd.spec Normal file
View file

@ -0,0 +1,359 @@
%if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%endif
%{!?_systemd_unitdir: %global _systemd_unitdir %(pkg-config systemd --variable=systemdsystemunitdir)}
%define debug_package %{nil}
Name: wicd
Version: 1.7.0
Release: 13%{?dist}
Summary: Wireless and wired network connection manager
Group: System Environment/Base
License: GPLv2+
URL: http://wicd.sourceforge.net/
Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.bz2
Source1: wicd.logrotate
Source2: wicd.service
Source3: org.wicd.daemon.service
Patch0: wicd-1.7.0-remove-WHEREAREMYFILES.patch
Patch1: wicd-1.7.0-deepcopy.patch
Patch2: wicd-1.7.0-dbus-failure.patch
Patch3: wicd-1.7.0-error-messages.patch
Patch4: wicd-1.7.0-dbus-policy.patch
Patch5: wicd-1.7.0-wired_showing.patch
Patch6: wicd-1.7.0-initialize-check-and-message.patch
Patch7: wicd-1.7.0-CVE-2012-0813.patch
Patch8: wicd-1.7.0-CVE-2012-2095.patch
Patch9: wicd-1.7.0-bz740256.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n)
BuildRequires: python2-devel
BuildRequires: desktop-file-utils
BuildRequires: pkgconfig
BuildRequires: systemd-units
Requires: pm-utils >= 1.2.4
Requires: %{name}-common = %{version}-%{release}
%description
Wicd is designed to give the user as much control over behavior of network
connections as possible. Every network, both wired and wireless, has its
own profile with its own configuration options and connection behavior.
Wicd will try to automatically connect only to networks the user specifies
it should try, with a preference first to a wired network, then to wireless.
This package provides the architecture-dependent components of wicd.
%package common
Summary: Wicd common files
Group: System Environment/Base
BuildArch: noarch
Requires: dbus
Requires: dbus-python
Requires: dhclient
Requires: ethtool
Requires: iproute
Requires: logrotate
Requires: net-tools
Requires: wireless-tools
Requires: wpa_supplicant
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
%description common
This package provides the main wicd daemon and the wicd-cli front-end.
%package curses
Summary: Curses client for wicd
Group: Applications/System
BuildArch: noarch
Requires: %{name}-common = %{version}-%{release}
Requires: python-urwid >= 0.9.8.3
%description curses
Client program for wicd that uses a curses interface.
%package gtk
Summary: GTK+ client for wicd
Group: Applications/Internet
BuildArch: noarch
Requires: %{name}-common = %{version}-%{release}
Requires: pygtk2-libglade >= 2.10
%description gtk
Client program for wicd that uses a GTK+ interface.
%prep
%setup -q
# Remove the WHEREAREMYFILES and resetting of ~/.wicd/WHEREAREMYFILES
# This is pointless. The documentation can just provide WHEREAREMYFILES,
# which we do in this package.
%patch0 -p1
# Use cPickle instead of deepcopy in configmanager.py
%patch1 -p1
# Handle D-Bus connection failures a little better
%patch2 -p1
# Direct users to D-Bus policy configuration on connection failure
%patch3 -p1
# Allow users at the console to control wicd
%patch4 -p1
# Initialize appGui._wired_showing in __init__
%patch5 -p1
# Make sure check and message are always a lambda
%patch6 -p1
# Fix CVE-2012-0813
# Patch based on upstream:
# http://bazaar.launchpad.net/~wicd-devel/wicd/experimental/revision/682
%patch7 -p1
# Fix CVE-2012-2095
# Patch based on upstream:
# http://bazaar.launchpad.net/~wicd-devel/wicd/experimental/revision/751
%patch8 -p1
# Fix BZ #740256
%patch9 -p1
%build
# NOTE: --etc is where dhclient.conf.template goes
%{__python} setup.py configure \
--distro redhat \
--lib %{_libdir} \
--share %{_datadir}/wicd \
--etc %{_sysconfdir}/dhcp \
--bin %{_bindir} \
--pmutils %{_libdir}/pm-utils/sleep.d \
--log %{_localstatedir}/log \
--no-install-init
%{__python} setup.py build
%install
rm -rf %{buildroot}
%{__python} setup.py install --skip-build --no-compile --root %{buildroot}
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/backends/be-external.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/backends/be-ioctl.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/cli/wicd-cli.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/curses/curses_misc.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/curses/netentry_curses.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/curses/prefs_curses.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/daemon/wicd-daemon.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/gtk/gui.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/gtk/prefs.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{_datadir}/wicd/gtk/wicd-client.py
rm -f %{buildroot}%{_localstatedir}/lib/wicd/WHEREAREMYFILES
rm -rf %{buildroot}%{_datadir}/doc
find %{buildroot} -type f -name ".empty_on_purpose" | xargs rm
for lib in %{buildroot}%{python_sitelib}/wicd/*.py ; do
sed '/\/usr\/bin\/env/d' $lib > $lib.new &&
touch -r $lib $lib.new &&
mv $lib.new $lib
done
sed -i -e 's/.$//' %{buildroot}%{python_sitelib}/wicd/logfile.py
sed -i -e '/^#!\//, 1d' %{buildroot}%{python_sitelib}/wicd/logfile.py
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
install -m 0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/wicd
mkdir -p %{buildroot}%{_systemd_unitdir}
install -m 0644 %{SOURCE2} %{buildroot}%{_systemd_unitdir}/wicd.service
mkdir -p %{buildroot}%{_datadir}/dbus-1/system-services
install -m 0644 %{SOURCE3} %{buildroot}%{_datadir}/dbus-1/system-services/org.wicd.daemon.service
desktop-file-install \
--remove-category="Application" \
--delete-original \
--dir=%{buildroot}%{_datadir}/applications \
%{buildroot}%{_datadir}/applications/wicd.desktop
desktop-file-install \
--dir=%{buildroot}%{_sysconfdir}/xdg/autostart \
%{buildroot}%{_sysconfdir}/xdg/autostart/wicd-tray.desktop
%find_lang %{name}
%clean
rm -rf %{buildroot}
%post common
if [ $1 -eq 1 ]; then
# Package install, not upgrade
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
fi
%preun common
if [ $1 -eq 0 ] ; then
# Package removal, not upgrade
/bin/systemctl disable wicd.service > /dev/null 2>&1 || :
/bin/systemctl stop wicd.service > /dev/null 2>&1 || :
fi
%postun common
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
if [ $1 -ge 1 ] ; then
# Package upgrade, not uninstall
/bin/systemctl try-restart wicd.service >/dev/null 2>&1 || :
fi
%triggerun -- wicd-common < 1.7.0-5
if /sbin/chkconfig --level 3 wicd ; then
/bin/systemctl enable wicd.service >/dev/null 2>&1 || :
fi
%post gtk
touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
%postun gtk
if [ $1 -eq 0 ]; then
touch --no-create %{_datadir}/icons/hicolor &>/dev/null
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
fi
%posttrans gtk
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%files
%defattr(-,root,root,-)
%{_libdir}/pm-utils/sleep.d/91wicd
%files common -f %{name}.lang
%defattr(-,root,root,-)
%doc AUTHORS CHANGES LICENSE NEWS README other/WHEREAREMYFILES
%dir %{python_sitelib}/wicd
%dir %{_sysconfdir}/wicd
%dir %{_sysconfdir}/wicd/encryption
%dir %{_sysconfdir}/wicd/encryption/templates
%dir %{_sysconfdir}/wicd/scripts
%dir %{_sysconfdir}/wicd/scripts/postconnect
%dir %{_sysconfdir}/wicd/scripts/postdisconnect
%dir %{_sysconfdir}/wicd/scripts/preconnect
%dir %{_sysconfdir}/wicd/scripts/predisconnect
%{_sysconfdir}/acpi/resume.d/80-wicd-connect.sh
%{_sysconfdir}/acpi/suspend.d/50-wicd-suspend.sh
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/wicd.conf
%config(noreplace) %{_sysconfdir}/dhcp/dhclient.conf.template.default
%config(noreplace) %{_sysconfdir}/logrotate.d/wicd
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/active
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/eap
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/eap-tls
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/leap
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/peap
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/peap-tkip
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/ttls
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/wep-hex
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/wep-passphrase
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/wep-shared
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/wpa
%config(noreplace) %{_sysconfdir}/wicd/encryption/templates/wpa-psk
%{_systemd_unitdir}/wicd.service
%{python_sitelib}/wicd/*
%{python_sitelib}/Wicd-%{version}*.egg-info
%{_bindir}/wicd-cli
%{_bindir}/wicd-client
%{_sbindir}/wicd
%{_datadir}/applications/wicd.desktop
%{_datadir}/dbus-1/system-services/org.wicd.daemon.service
%{_datadir}/man/man1/wicd-client.1*
%{_datadir}/man/man5/wicd-manager-settings.conf.5*
%{_datadir}/man/man5/wicd-wired-settings.conf.5*
%{_datadir}/man/man5/wicd-wireless-settings.conf.5*
%{_datadir}/man/man8/wicd-cli.8*
%{_datadir}/man/man8/wicd.8*
%lang(nl) %{_datadir}/man/nl/man1/wicd-client.1*
%lang(nl) %{_datadir}/man/nl/man5/wicd-manager-settings.conf.5*
%lang(nl) %{_datadir}/man/nl/man5/wicd-wired-settings.conf.5*
%lang(nl) %{_datadir}/man/nl/man5/wicd-wireless-settings.conf.5*
%lang(nl) %{_datadir}/man/nl/man8/wicd.8*
%dir %{_datadir}/wicd
%dir %{_datadir}/wicd/backends
%dir %{_datadir}/wicd/cli
%dir %{_datadir}/wicd/daemon
%{_datadir}/wicd/backends/*
%{_datadir}/wicd/cli/*
%{_datadir}/wicd/daemon/*
%dir %{_localstatedir}/lib/wicd
%dir %{_localstatedir}/lib/wicd/configurations
%files curses
%defattr(-,root,root,-)
%dir %{_datadir}/wicd/curses
%{_datadir}/wicd/curses/*
%{_bindir}/wicd-curses
%{_datadir}/man/man8/wicd-curses.8*
%lang(nl) %{_datadir}/man/nl/man8/wicd-curses.8*
%files gtk
%defattr(-,root,root,-)
%dir %{_datadir}/wicd/gtk
%dir %{_datadir}/pixmaps/wicd
%{_sysconfdir}/xdg/autostart/wicd-tray.desktop
%{_datadir}/wicd/gtk/*
%{_datadir}/pixmaps/wicd/*
%{_datadir}/pixmaps/wicd-gtk.xpm
%{_bindir}/wicd-gtk
%{_datadir}/icons/hicolor/*/apps/wicd-gtk.png
%{_datadir}/icons/hicolor/scalable/apps/wicd-gtk.svg
%changelog
* Wed Apr 25 2012 David Cantrell <dcantrell@redhat.com> - 1.7.0-13
- Fix 'guiutil.py:147:set_text:TypeError: Gtk.Entry.set_text()
argument 1 must be string, not dbus.Boolean' (#740256)
* Fri Apr 13 2012 David Cantrell <dcantrell@redhat.com> - 1.7.0-12
- Fix CVE-2012-2095 (#811763)
* Fri Jan 27 2012 David Cantrell <dcantrell@redhat.com> - 1.7.0-11
- Fix CVE-2012-0813 (#785147)
* Fri Aug 19 2011 David Cantrell <dcantrell@redhat.com> - 1.7.0-10
- Initialize appGui._wired_showing in __init__ (#723553)
- Make sure check and message in wicd-cli are a lambda (#712435)
* Thu Aug 11 2011 David Cantrell <dcantrell@redhat.com> - 1.7.0-9
- Correct systemd unit file for wicd, add D-Bus service file (#699116)
- Move docs to the wicd-common subpackage
- Correct /etc/dbus-1/system.d/wicd.conf (#699116)
* Mon May 09 2011 Bill Nottingham <notting@redhat.com> - 1.7.0-8
- fix systemd scriptlets for upgrade
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org>
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Sat Jan 15 2011 David Cantrell <dcantrell@redhat.com> - 1.7.0-6
- Correct typo with _systemd_unitdir macro usage in spec file
* Sat Jan 15 2011 David Cantrell <dcantrell@redhat.com> - 1.7.0-5
- Replace existing init script with systemd unit file (#661226)
* Fri Oct 22 2010 David Cantrell <dcantrell@redhat.com> - 1.7.0-4
- Use cPickle instead of deepcopy in configmanager.py (#645251)
* Wed Aug 25 2010 David Cantrell <dcantrell@redhat.com> - 1.7.0-3
- Remove hard dependency on the base package by wicd-common. The
base package is arch-specific and contains optional components
for wicd. If it is present, wicd will make use of it, but it is
not required for normal functionality.
* Fri Jul 30 2010 Thomas Spura <tomspur@fedoraproject.org> - 1.7.0-2
- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
* Mon Jun 21 2010 David Cantrell <dcantrell@redhat.com> - 1.7.0-1
- Initial package