1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-20 04:48:00 +01:00

Merge r443 of mainline 1.6.

This commit is contained in:
Andrew Psaltis
2009-07-25 00:06:37 -04:00
27 changed files with 848 additions and 200 deletions

406
CHANGES
View File

@@ -1,4 +1,410 @@
------------------------------------------------------------ ------------------------------------------------------------
revno: 434
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sun 2009-07-05 08:51:39 -1000
message:
updated translations.py
------------------------------------------------------------
revno: 433
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6
timestamp: Sun 2009-07-05 14:42:39 -0400
message:
Actually tell the user that he may need to be in wpath.wicd_group if wicd-clientgets an access-denied error.
------------------------------------------------------------
revno: 432
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sun 2009-07-05 08:16:59 -1000
message:
check to see if the interface exists in the decorator
------------------------------------------------------------
revno: 431
committer: Dan O'Reilly <oreilldf@gmail.com>
branch nick: trunk
timestamp: Thu 2009-07-02 18:26:37 -0400
message:
Make sure we run to_unicode on all properties we read from disk or get from the user (bug 390680).
Don't try to run global scripts of the global script directory doesn't exist (bug 386244).
------------------------------------------------------------
revno: 430
committer: Dan O'Reilly <oreilldf@gmail.com>
branch nick: trunk
timestamp: Thu 2009-07-02 16:50:48 -0400
message:
Fix crash when trying to create an ad-hoc network.
------------------------------------------------------------
revno: 429
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6
timestamp: Tue 2009-06-30 22:58:44 -0400
message:
Merged r353 of 1.6-nacl.
------------------------------------------------------------
revno: 202.2.62
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Tue 2009-06-30 22:43:17 -0400
message:
Background wicd's startup in Slackware's initscript.
------------------------------------------------------------
revno: 202.2.61
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Tue 2009-06-30 21:51:33 -0400
message:
Fix a small unicode problem in wicd-curses that caused a crash in Debian Lenny.
------------------------------------------------------------
revno: 428
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6
timestamp: Wed 2009-06-24 19:14:43 -0400
message:
Merge bugfixes from r351 of 1.6-nacl, thanks to comfrey in #wicd for noticing them.
------------------------------------------------------------
revno: 202.2.60
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Wed 2009-06-24 19:10:30 -0400
message:
Do nothing if the user makes a connection attempt while scanning.
------------------------------------------------------------
revno: 202.2.59
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Wed 2009-06-24 18:44:29 -0400
message:
Do nothing in wicd-curses if there are no networks present.
------------------------------------------------------------
revno: 202.2.58
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Wed 2009-06-24 18:43:58 -0400
message:
Merged r417 of mainline 1.6.
------------------------------------------------------------
revno: 202.2.57
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Sun 2009-06-21 14:07:22 -0400
message:
Merged r426 of mainline 1.6.
------------------------------------------------------------
revno: 202.2.56
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Fri 2009-06-19 23:20:29 -0400
message:
Merge r417 of mainline 1.6.
------------------------------------------------------------
revno: 202.2.55
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Wed 2009-06-17 20:52:59 -0400
message:
Merge r416 of mainline 1.6.
------------------------------------------------------------
revno: 202.2.54
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-nacl
timestamp: Sun 2009-06-07 14:53:04 -0400
message:
Merge 411 of mainline 1.6.
------------------------------------------------------------
revno: 427
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6
timestamp: Sun 2009-06-21 14:45:44 -0400
message:
Fix typo that crashes wicd-curses on attempting to bring up the help dialog.
------------------------------------------------------------
revno: 426
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 23:02:23 -0500
message:
updated setup.py version and CHANGES
------------------------------------------------------------
revno: 425
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 23:46:38 -0400
message:
Fix the log file chmodding (os.chmod() can't accept a string, apparently).
------------------------------------------------------------
revno: 424
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 21:59:45 -0500
message:
updated translations.py
------------------------------------------------------------
revno: 423
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 21:44:32 -0500
message:
merged lp:~nacl/wicd/1.6-access-denied to display an error message if access to the daemon via DBus is denied
------------------------------------------------------------
revno: 417.2.6
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-access-denied
timestamp: Sat 2009-06-20 21:41:17 -0400
message:
Restore python 2.5 compatibility in both clients.
------------------------------------------------------------
revno: 417.2.5
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-access-denied
timestamp: Fri 2009-06-19 23:03:42 -0400
message:
Made the wicd-curses "access denied" string translatable, and updated wicd-curses.py to use it.
------------------------------------------------------------
revno: 417.2.4
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-access-denied
timestamp: Fri 2009-06-19 20:07:10 -0400
message:
Use the ANSI escape sequences to print colors instead of fetching them using tput(1) in wicd-curses.
------------------------------------------------------------
revno: 417.2.3
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-access-denied
timestamp: Fri 2009-06-19 18:59:30 -0400
message:
Fixed wicd-client to actually show the error dialog, by checking e.get_dbus_name() instead of just e.
------------------------------------------------------------
revno: 417.2.2
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-access-denied
timestamp: Fri 2009-06-19 18:48:39 -0400
message:
Updated wicd-curses to use DBusException.get_dbus_name() instead of the exception arguments.
------------------------------------------------------------
revno: 417.2.1
committer: Andrew Psaltis <ampsaltis@gmail.com>
branch nick: 1.6-access-denied
timestamp: Fri 2009-06-19 17:29:25 -0400
message:
Made wicd-curses.py spit out an error if a dbus access denied error appears on startup.
------------------------------------------------------------
revno: 422
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 19:25:10 -0500
message:
merged lp:~adamblackburn/wicd/1.6-return-101-if-no-strength to allow cards that don't report signal strength to work with Wicd's default settings
------------------------------------------------------------
revno: 418.1.2
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 14:40:30 -0500
message:
update FormatSignalForPrinting to return ??% instead of 101%
------------------------------------------------------------
revno: 418.1.1
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 13:42:21 -0500
message:
return 101 as the signal strength if altstrenth_pattern fails to find the strength
------------------------------------------------------------
revno: 421
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 19:24:07 -0500
message:
merged lp:~dpaleino/wicd/pre-post-down to allow having pre/post disconnection scripts
------------------------------------------------------------
revno: 415.2.1
committer: David Paleino <d.paleino@gmail.com>
branch nick: wicd
timestamp: Tue 2009-06-16 17:13:41 +0200
message:
Provide a pre-/post-down script mechanism
WICD currently only provides pre-/post-connection scripts, and
only one disconnection script, that is run before actually
disconnecting. This provides pre-/post-disconnection scripts,
thus increasing configuration flexibility.
------------------------------------------------------------
revno: 420
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 19:22:36 -0500
message:
merged lp:~adamblackburn/wicd/loggroup to allow passing the preferred log group and permissions to setup.py configure -- thanks to David Paleino
------------------------------------------------------------
revno: 412.3.6
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: loggroup
timestamp: Fri 2009-06-19 22:08:32 -0500
message:
seperated chmod and chown try/excepts
------------------------------------------------------------
revno: 412.3.5
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: loggroup
timestamp: Tue 2009-06-16 23:57:02 +0800
message:
added forgotten underscores
------------------------------------------------------------
revno: 412.3.4
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: loggroup
timestamp: Tue 2009-06-16 23:22:40 +0800
message:
removed wicd-daemon.py from .bzrignore
------------------------------------------------------------
revno: 412.3.3
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: loggroup
timestamp: Tue 2009-06-16 23:15:05 +0800
message:
merge 1.6 r415
------------------------------------------------------------
revno: 412.3.2
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: loggroup
timestamp: Tue 2009-06-16 23:08:52 +0800
message:
moved wicd-daemon.py back to wicd/ and changed wpath replacement values to use the wpath module
------------------------------------------------------------
revno: 412.3.1
committer: David Paleino <d.paleino@gmail.com>
branch nick: wicd
timestamp: Sat 2009-06-13 22:59:03 +0200
message:
Support --loggroup and --logperms arguments to setup.py
------------------------------------------------------------
revno: 419
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 19:20:42 -0500
message:
merged lp:~adamblackburn/wicd/1.6-cancel-edit-settings to allow canceling the edit settings dialog that appears when attempting to connect to an encrypted network without entering the encryption details
------------------------------------------------------------
revno: 417.1.2
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 07:58:15 -0500
message:
fix crash resulting from encryption info missing when connecting
------------------------------------------------------------
revno: 417.1.1
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Thu 2009-06-18 15:16:29 +0800
message:
allow user to cancel preferences dialog if they chose not to connect after clicking connect and showing the preferences dialog
------------------------------------------------------------
revno: 418
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sat 2009-06-20 10:33:23 -0500
message:
merged David Paleino's Debian init script that includes a status command
------------------------------------------------------------
revno: 415.1.1
committer: David Paleino <d.paleino@gmail.com>
branch nick: wicd
timestamp: Tue 2009-06-16 17:56:21 +0200
message:
Add "status" to /etc/init.d/wicd (Debian/Ubuntu)
------------------------------------------------------------
revno: 417
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Thu 2009-06-18 14:56:25 +0800
message:
fixed crash that occured when clicking to connect to a secured network but without entering the security information
------------------------------------------------------------
revno: 416
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Tue 2009-06-16 23:36:58 +0800
message:
fix a small typo in misc.py -- thanks to David Paleino
------------------------------------------------------------
revno: 415
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Tue 2009-06-16 07:44:27 +0800
message:
disable automatically disconnecting when Automatically reconnect is False
------------------------------------------------------------
revno: 414
committer: Dan O'Reilly <oreilldf@gmail.com>
branch nick: trunk
timestamp: Sun 2009-06-14 14:27:21 -0400
message:
Merge.
------------------------------------------------------------
revno: 412.2.1
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Sun 2009-06-14 12:27:36 +0800
message:
merged David's Debian patches branch
------------------------------------------------------------
revno: 412.1.3
committer: David Paleino <d.paleino@gmail.com>
branch nick: wicd
timestamp: Sat 2009-06-13 22:07:49 +0200
message:
Support udhcpc, this is needed to smoothly run on the OpenMoko FreeRunner.
Thanks to Luca Capello <gismo@debian.org> for porting the patch to 1.5.9, and
to "madmo" from the linked forum for making the patch.
Patch originally taken from http://wicd.net/punbb/viewtopic.php?id=132
Patch ported to 1.6.0 code by David Paleino <d.paleino@gmail.com>.
------------------------------------------------------------
revno: 412.1.2
committer: David Paleino <d.paleino@gmail.com>
branch nick: wicd
timestamp: Sat 2009-06-13 22:06:08 +0200
message:
Update manpage with an appropriate WHATIS entry
------------------------------------------------------------
revno: 412.1.1
committer: David Paleino <d.paleino@gmail.com>
branch nick: wicd
timestamp: Sat 2009-06-13 22:05:10 +0200
message:
Remove deprecated Encoding field
------------------------------------------------------------
revno: 413
committer: Dan O'Reilly <oreilldf@gmail.com>
branch nick: trunk
timestamp: Sun 2009-06-14 14:25:06 -0400
message:
Convert strings being prints out by dhclients to utf-8 before trying to log them.
When iwscan displays two entries for a hidden network, only display the one with the essid included.
------------------------------------------------------------
revno: 412
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: wicd
timestamp: Tue 2009-06-09 13:25:02 +0800
message:
display the ESSID/Wired Network in the title of the settings dialog
------------------------------------------------------------
revno: 411
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Fri 2009-06-05 16:13:38 +0800
message:
Updated translations.py
------------------------------------------------------------
revno: 410
committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6
timestamp: Fri 2009-06-05 15:20:58 +0800
message:
updated CHANGES
------------------------------------------------------------
revno: 409 revno: 409
committer: Adam Blackburn <compwiz18@gmail.com> committer: Adam Blackburn <compwiz18@gmail.com>
branch nick: 1.6 branch nick: 1.6

78
NEWS
View File

@@ -1,35 +1,49 @@
Wicd 1.6.x Branch Wicd 1.6.0 Branch
1.6.2:
Minor Changes:
- Now deals better if the interface disappears while running
- Will now start if the global script directories don't exist
- Adhoc window will now work correctly
- PSK can be generated from non-ASCII characters
- Fix a minor wicd-curses crash while connecting during a scan
Major Changes: 1.6.1:
- Improved tray icon and GUI images (thanks to Martin Sagastume) Minor Changes:
- Reorganized network list in the GUI for easier navigation - User is told if the lack permission to access the daemon
- New experimental ioctl backend, which is more cpu-friendly than the - Support for wireless cards that don't report signal strength added
previous one - Enhanced network configuration dialog title
- Added a curses client (thanks to Andrew Psaltis)
- Added a right-click connection menu to the tray icon
- Added options to specify a DNS domain and search domain for static networks
- Reworked the Preferences menu to be more in line with GNOME standards
- Added support for global scripts
- Made it possible to have optional entries in encryption templates
- Added ability to show libnotify notifications on status change
Minor Changes and Other Enhancements: 1.6.0:
- Better autoconnection behavior Major Changes:
- Tray/GUI will survive the daemon being killed - Improved tray icon and GUI images (thanks to Martin Sagastume)
- Reasons for connection failures will now bubble back to the GUI - Reorganized network list in the GUI for easier navigation
- Add/remove wired profile system is now more user-friendly - New experimental ioctl backend, which is more cpu-friendly than the
- Support for using resolvconf instead of directly editing /etc/resolv.conf previous one
- Wicd won't blindly kill dhcp clients / wpa_supplicant any more - Added a curses client (thanks to Andrew Psaltis)
- Added an option to automatically switch from a wireless network to a wired - Added a right-click connection menu to the tray icon
one as soon as a cable is plugged in - Added options to specify a DNS domain and search domain for static networks
- Moved scanning to its own thread, which makes GUI and daemon more responsive - Reworked the Preferences menu to be more in line with GNOME standards
during scans - Added support for global scripts
- Made it possible to specify macros in script entries - Made it possible to have optional entries in encryption templates
- The GUI will now display the encryption entry dialog if you attempt to - Added ability to show libnotify notifications on status change
connect to an encrypted network without entering a password
- Static gateway entry is now optional Minor Changes and Other Enhancements:
- Passwords with leading or trailing whitespace are now stored properly - Better autoconnection behavior
- Many init/config script, man page, and setup.py fixes/updates, including - Tray/GUI will survive the daemon being killed
better autodetection of file placement with regard to sleep hooks and - Reasons for connection failures will now bubble back to the GUI
KDE autostart files (thanks to Robby Workman) - Add/remove wired profile system is now more user-friendly
- Support for using resolvconf instead of directly editing /etc/resolv.conf
- Wicd won't blindly kill dhcp clients / wpa_supplicant any more
- Added an option to automatically switch from a wireless network to a wired
one as soon as a cable is plugged in
- Moved scanning to its own thread, which makes GUI and daemon more responsive
during scans
- Made it possible to specify macros in script entries
- The GUI will now display the encryption entry dialog if you attempt to
connect to an encrypted network without entering a password
- Static gateway entry is now optional
- Passwords with leading or trailing whitespace are now stored properly
- Many init/config script, man page, and setup.py fixes/updates, including
better autodetection of file placement with regard to sleep hooks and
KDE autostart files (thanks to Robby Workman)

View File

@@ -38,7 +38,8 @@ language = {}
language['configure_scripts'] = _("Configure Scripts") language['configure_scripts'] = _("Configure Scripts")
language['before_script'] = _("Pre-connection Script") language['before_script'] = _("Pre-connection Script")
language['after_script'] = _("Post-connection Script") language['after_script'] = _("Post-connection Script")
language['disconnect_script'] = _("Disconnection Script") language['pre_disconnect_script'] = _("Pre-disconnection Script")
language['post_disconnect_script'] = _("Post-disconnection Script")
def main(argv): def main(argv):
global ui,frame global ui,frame
@@ -62,16 +63,19 @@ def main(argv):
blank = urwid.Text('') blank = urwid.Text('')
pre_entry_t = ('body',language['before_script']+': ') pre_entry_t = ('body',language['before_script']+': ')
post_entry_t = ('body',language['after_script']+': ') post_entry_t = ('body',language['after_script']+': ')
disconnect_entry_t = ('body',language['disconnect_script']+': ') pre_disconnect_entry_t = ('body',language['pre_disconnect_script']+': ')
post_disconnect_entry_t = ('body',language['post_disconnect_script']+': ')
global pre_entry,post_entry,disconnect_entry global pre_entry,post_entry,pre_disconnect_entry,post_disconnect_entry
pre_entry = urwid.AttrWrap(urwid.Edit(pre_entry_t, pre_entry = urwid.AttrWrap(urwid.Edit(pre_entry_t,
none_to_blank(script_info.get('pre_entry'))),'editbx','editfc' ) none_to_blank(script_info.get('pre_entry'))),'editbx','editfc' )
post_entry = urwid.AttrWrap(urwid.Edit(post_entry_t, post_entry = urwid.AttrWrap(urwid.Edit(post_entry_t,
none_to_blank(script_info.get('post_entry'))),'editbx','editfc' ) none_to_blank(script_info.get('post_entry'))),'editbx','editfc' )
disconnect_entry = urwid.AttrWrap(urwid.Edit(disconnect_entry_t, pre_disconnect_entry = urwid.AttrWrap(urwid.Edit(pre_disconnect_entry_t,
none_to_blank(script_info.get('disconnect_entry'))),'editbx','editfc' ) none_to_blank(script_info.get('pre_disconnect_entry'))),'editbx','editfc' )
post_disconnect_entry = urwid.AttrWrap(urwid.Edit(post_disconnect_entry_t,
none_to_blank(script_info.get('post_disconnect_entry'))),'editbx','editfc' )
# The buttons # The buttons
ok_button = urwid.AttrWrap(urwid.Button('OK',ok_callback),'body','focus') ok_button = urwid.AttrWrap(urwid.Button('OK',ok_callback),'body','focus')
@@ -82,7 +86,8 @@ def main(argv):
lbox = urwid.Pile([('fixed',2,urwid.Filler(pre_entry)), lbox = urwid.Pile([('fixed',2,urwid.Filler(pre_entry)),
#('fixed',urwid.Filler(blank),1), #('fixed',urwid.Filler(blank),1),
('fixed',2,urwid.Filler(post_entry)), ('fixed',2,urwid.Filler(post_entry)),
('fixed',2,urwid.Filler(disconnect_entry)), ('fixed',2,urwid.Filler(pre_disconnect_entry)),
('fixed',2,urwid.Filler(post_disconnect_entry)),
#blank,blank,blank,blank,blank, #blank,blank,blank,blank,blank,
urwid.Filler(button_cols,'bottom') urwid.Filler(button_cols,'bottom')
]) ])
@@ -92,7 +97,8 @@ def main(argv):
if result == True: if result == True:
script_info["pre_entry"] = blank_to_none(pre_entry.get_edit_text()) script_info["pre_entry"] = blank_to_none(pre_entry.get_edit_text())
script_info["post_entry"] = blank_to_none(post_entry.get_edit_text()) script_info["post_entry"] = blank_to_none(post_entry.get_edit_text())
script_info["disconnect_entry"] = blank_to_none(disconnect_entry.get_edit_text()) script_info["pre_disconnect_entry"] = blank_to_none(pre_disconnect_entry.get_edit_text())
script_info["post_disconnect_entry"] = blank_to_none(post_disconnect_entry.get_edit_text())
write_scripts(network, network_type, script_info) write_scripts(network, network_type, script_info)
OK_PRESSED = False OK_PRESSED = False

View File

@@ -93,6 +93,7 @@ class PrefsDialog(urwid.WidgetWrap):
dhcp1_t = 'dhclient' dhcp1_t = 'dhclient'
dhcp2_t = 'dhcpcd' dhcp2_t = 'dhcpcd'
dhcp3_t = 'pump' dhcp3_t = 'pump'
dhcp4_t = 'udhcpc'
wired_detect_header_t = ('header',language["wired_detect"]) wired_detect_header_t = ('header',language["wired_detect"])
wired1_t = 'ethtool' wired1_t = 'ethtool'
@@ -185,7 +186,8 @@ class PrefsDialog(urwid.WidgetWrap):
self.dhcp1 = DynRadioButton(self.dhcp_l,dhcp1_t) self.dhcp1 = DynRadioButton(self.dhcp_l,dhcp1_t)
self.dhcp2 = DynRadioButton(self.dhcp_l,dhcp2_t) self.dhcp2 = DynRadioButton(self.dhcp_l,dhcp2_t)
self.dhcp3 = DynRadioButton(self.dhcp_l,dhcp3_t) self.dhcp3 = DynRadioButton(self.dhcp_l,dhcp3_t)
self.dhcp_l = [self.dhcp0,self.dhcp1,self.dhcp2,self.dhcp3] self.dhcp4 = DynRadioButton(self.dhcp_l,dhcp4_t)
self.dhcp_l = [self.dhcp0,self.dhcp1,self.dhcp2,self.dhcp3,self.dhcp4]
self.wired_l = [] self.wired_l = []
self.wired_detect_header = urwid.Text(wired_detect_header_t) self.wired_detect_header = urwid.Text(wired_detect_header_t)
@@ -202,7 +204,7 @@ class PrefsDialog(urwid.WidgetWrap):
self.flush_l = [self.flush0,self.flush1,self.flush2] self.flush_l = [self.flush0,self.flush1,self.flush2]
externalLB = urwid.ListBox([self.dhcp_header, externalLB = urwid.ListBox([self.dhcp_header,
self.dhcp0,self.dhcp2,self.dhcp3,self.dhcp1, self.dhcp0,self.dhcp2,self.dhcp3,self.dhcp1,self.dhcp4,
_blank, _blank,
self.wired_detect_header, self.wired_detect_header,
self.wired0,self.wired1,self.wired2, self.wired0,self.wired1,self.wired2,
@@ -351,8 +353,10 @@ class PrefsDialog(urwid.WidgetWrap):
dhcp_client = misc.DHCLIENT dhcp_client = misc.DHCLIENT
elif self.dhcp2.get_state(): elif self.dhcp2.get_state():
dhcp_client = misc.DHCPCD dhcp_client = misc.DHCPCD
else: elif self.dhcp3.get_state():
dhcp_client = misc.PUMP dhcp_client = misc.PUMP
else:
dhcp_client = misc.UDHCPC
daemon.SetDHCPClient(dhcp_client) daemon.SetDHCPClient(dhcp_client)
if self.wired0.get_state(): if self.wired0.get_state():

View File

@@ -38,7 +38,6 @@ at least get a network connection. Or those who don't like using X. ;-)
import warnings import warnings
warnings.filterwarnings("ignore","The popen2 module is deprecated. Use the subprocess module.") warnings.filterwarnings("ignore","The popen2 module is deprecated. Use the subprocess module.")
# UI stuff # UI stuff
# This library is the only reason why I wrote this program.
import urwid import urwid
# DBus communication stuff # DBus communication stuff
@@ -64,6 +63,7 @@ import netentry_curses
from netentry_curses import WirelessSettingsDialog, WiredSettingsDialog,AdvancedSettingsDialog from netentry_curses import WirelessSettingsDialog, WiredSettingsDialog,AdvancedSettingsDialog
from optparse import OptionParser from optparse import OptionParser
from os import system
# Stuff about getting the script configurer running # Stuff about getting the script configurer running
#from grp import getgrgid #from grp import getgrgid
@@ -72,7 +72,7 @@ from optparse import OptionParser
#import logging #import logging
#import logging.handler #import logging.handler
CURSES_REVNO=wpath.curses_revision CURSES_REV=wpath.curses_revision
# Fix strings in wicd-curses # Fix strings in wicd-curses
from wicd.translations import language from wicd.translations import language
@@ -145,7 +145,7 @@ def check_for_wireless(iwconfig, wireless_ip, set_status):
if not network: if not network:
return False return False
network = str(network) network = unicode(network)
if daemon.GetSignalDisplayType() == 0: if daemon.GetSignalDisplayType() == 0:
strength = wireless.GetCurrentSignalStrength(iwconfig) strength = wireless.GetCurrentSignalStrength(iwconfig)
else: else:
@@ -202,7 +202,7 @@ def about_dialog(body):
# Modeled after htop's help # Modeled after htop's help
def help_dialog(body): def help_dialog(body):
textT = urwid.Text(('header','wicd-curses help'),'right') textT = urwid.Text(('header','wicd-curses help'),'right')
textSH = urwid.Text(['This is ',('blue','wicd-curses-'+CURSES_REVNO),' using wicd ',unicode(daemon.Hello()),'\n']) textSH = urwid.Text(['This is ',('blue','wicd-curses-'+CURSES_REV),' using wicd ',unicode(daemon.Hello()),'\n'])
textH = urwid.Text([ textH = urwid.Text([
"For more detailed help, consult the wicd-curses(8) man page.\n", "For more detailed help, consult the wicd-curses(8) man page.\n",
@@ -263,7 +263,7 @@ def run_configscript(parent,netname,nettype):
# Translation needs to be changed to accomidate this text below. # Translation needs to be changed to accomidate this text below.
"""You can also configure the wireless networks by looking for the "[<ESSID>]" field in the config file. """You can also configure the wireless networks by looking for the "[<ESSID>]" field in the config file.
Once there, you can adjust (or add) the "beforescript", "afterscript", and "disconnectscript" variables as needed, to change the preconnect, postconnect, and disconnect scripts respectively. Note that you will be specifying the full path to the scripts - not the actual script contents. You will need to add/edit the script contents separately. Refer to the wicd manual page for more information."""] Once there, you can adjust (or add) the "beforescript", "afterscript", "predisconnectscript" and "postdisconnectscript" variables as needed, to change the preconnect, postconnect, predisconnect and postdisconnect scripts respectively. Note that you will be specifying the full path to the scripts - not the actual script contents. You will need to add/edit the script contents separately. Refer to the wicd manual page for more information."""]
dialog = TextDialog(theText,20,80) dialog = TextDialog(theText,20,80)
dialog.run(ui,parent) dialog.run(ui,parent)
# This code works with many distributions, but not all of them. So, to # This code works with many distributions, but not all of them. So, to
@@ -826,18 +826,17 @@ class appGUI():
self.diag.ready_widgets(ui,self.frame) self.diag.ready_widgets(ui,self.frame)
self.frame.set_body(self.diag) self.frame.set_body(self.diag)
self.diag_type = 'conf' self.diag_type = 'conf'
# Guess what! I actually need to put this here, else I'll have if "enter" in keys or 'C' in keys:
# tons of references to self.frame lying around. ^_^ if not self.scanning:
if "enter" in keys: focus = self.frame.body.get_focus()
focus = self.frame.body.get_focus() if focus == self.wiredCB:
if focus == self.wiredCB: self.special = focus
self.special = focus self.connect("wired",0)
self.connect("wired",0) else:
else: # wless list only other option, if it is around
# wless list only other option if self.wlessLB != self.no_wlan:
wid,pos = self.thePile.get_focus().get_focus() wid,pos = self.thePile.get_focus().get_focus()
self.connect("wireless",pos) self.connect("wireless",pos)
if "esc" in keys: if "esc" in keys:
# Force disconnect here if connection in progress # Force disconnect here if connection in progress
if self.connecting: if self.connecting:
@@ -858,15 +857,6 @@ class appGUI():
return True return True
if "A" in keys: if "A" in keys:
about_dialog(self.frame) about_dialog(self.frame)
if "C" in keys:
focus = self.frame.body.get_focus()
if focus == self.wiredCB:
self.special = focus
self.connect("wired",0)
else:
# wless list only other option
wid,pos = self.thePile.get_focus().get_focus()
self.connect("wireless",pos)
if "I" in keys: if "I" in keys:
self.raise_hidden_network_dialog() self.raise_hidden_network_dialog()
if "H" in keys or 'h' in keys or '?' in keys: if "H" in keys or 'h' in keys or '?' in keys:
@@ -1085,7 +1075,14 @@ setup_dbus()
##### MAIN ENTRY POINT ##### MAIN ENTRY POINT
######################################## ########################################
if __name__ == '__main__': if __name__ == '__main__':
parser = OptionParser(version="wicd-curses-%s (using wicd %s)" % (CURSES_REVNO,daemon.Hello())) try:
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')
sys.exit(1)
else:
raise
parser.set_defaults(screen='raw',debug=False) parser.set_defaults(screen='raw',debug=False)
parser.add_option("-r", "--raw-screen",action="store_const",const='raw' parser.add_option("-r", "--raw-screen",action="store_const",const='raw'
,dest='screen',help="use urwid's raw screen controller (default)") ,dest='screen',help="use urwid's raw screen controller (default)")

View File

@@ -342,18 +342,18 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child> <child>
<widget class="GtkLabel" id="disconnect_label"> <widget class="GtkLabel" id="pre_disconnect_label">
<property name="width_request">150</property> <property name="width_request">150</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Disconnection Script:</property> <property name="label" translatable="yes">Pre-disconnection Script:</property>
</widget> </widget>
<packing> <packing>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="disconnect_entry"> <widget class="GtkEntry" id="pre_disconnect_entry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -370,6 +370,39 @@
<property name="position">3</property> <property name="position">3</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkHBox" id="hbox10">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkLabel" id="post_disconnect_label">
<property name="width_request">150</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Post-disconnection Script:</property>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="post_disconnect_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">4</property>
</packing>
</child>
</widget> </widget>
<packing> <packing>
<property name="position">1</property> <property name="position">1</property>
@@ -1171,6 +1204,21 @@ is already active.</property>
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkRadioButton" id="udhcpc_radio">
<property name="label" translatable="yes">udhcpc</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">dhclient_radio</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">4</property>
</packing>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>

View File

@@ -153,9 +153,12 @@ case "$1" in
;; ;;
esac esac
;; ;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME
;;
*) *)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 3 exit 3
;; ;;
esac esac

View File

@@ -16,8 +16,8 @@ wicd_start() {
echo "$PIDFILE and try again..." echo "$PIDFILE and try again..."
exit 1 exit 1
else else
echo "Starting wicd daemon: $DAEMON" echo "Starting wicd daemon: $DAEMON &"
wicd 2>/dev/null 1>&2 wicd 2>/dev/null 1>&2 &
fi fi
} }

View File

@@ -33,8 +33,12 @@ The script should be a Bourne-compatible script and should be executable.
IMPORTANT - scripts should ONLY be writable by root and located in a IMPORTANT - scripts should ONLY be writable by root and located in a
directory that is only writable by root. directory that is only writable by root.
.TP .TP
.BI "disconnectscript = " <None|arbitrary_script> .BI "predisconnectscript = " <None|arbitrary_script>
This defines a script to run when Wicd disconnects the interface. This defines a script to run before Wicd disconnects the interface.
The script should be a Bourne-compatible script and should be executable.
.TP
.BI "postdisconnectscript = " <None|arbitrary_script>
This defines a script to run after Wicd disconnects the interface.
The script should be a Bourne-compatible script and should be executable. The script should be a Bourne-compatible script and should be executable.
.br .br
IMPORTANT - scripts should ONLY be writable by root and located in a IMPORTANT - scripts should ONLY be writable by root and located in a

View File

@@ -99,8 +99,11 @@ This defines a script to run after Wicd brings up the connection.
IMPORTANT - scripts should ONLY be writable by root and located IMPORTANT - scripts should ONLY be writable by root and located
in a directory that is writable by only root. in a directory that is writable by only root.
.TP .TP
.BI "disconnectscript = " <None|arbitrary_script> .BI "predisconnectscript = " <None|arbitrary_script>
This defines a script to run when Wicd disconnects the interface. This defines a script to run before Wicd disconnects the interface.
.TP
.BI "postdisconnectscript = " <None|arbitrary_script>
This defines a script to run after Wicd disconnects the interface.
.br .br
IMPORTANT - scripts should ONLY be writable by root and located IMPORTANT - scripts should ONLY be writable by root and located
in a directory that is writable by only root. in a directory that is writable by only root.

View File

@@ -11,20 +11,6 @@
<allow send_interface="org.wicd.daemon.wireless"/> <allow send_interface="org.wicd.daemon.wireless"/>
<allow send_destination="org.wicd.daemon.wired"/> <allow send_destination="org.wicd.daemon.wired"/>
<allow send_interface="org.wicd.daemon.wired"/> <allow send_interface="org.wicd.daemon.wired"/>
<allow send_destination="org.wicd.daemon.config"/>
<allow send_interface="org.wicd.daemon.config"/>
</policy>
<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_destination="org.wicd.daemon.config"/>
<allow send_interface="org.wicd.daemon.config"/>
<allow send_interface="org.freedesktop.DBus.Introspectable"/>
</policy> </policy>
<policy context="default"> <policy context="default">
@@ -33,9 +19,29 @@
<!-- This Unix group will have permission to use Wicd's gui --> <!-- This Unix group will have permission to use Wicd's gui -->
<policy group="%WICDGROUP%"> <policy group="%WICDGROUP%">
<allow send_interface="org.freedesktop.DBus.Introspectable"/>
<allow send_destination="org.wicd.daemon"/> <allow send_destination="org.wicd.daemon"/>
<allow send_interface="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"/>
</policy> </policy>
</busconfig> </busconfig>

View File

@@ -27,7 +27,8 @@ lib = '%LIB%'
share = '%SHARE%' share = '%SHARE%'
etc = '%ETC%' etc = '%ETC%'
scripts = '%SCRIPTS%' scripts = '%SCRIPTS%'
disconnectscripts = '%SCRIPTS%disconnect' predisconnectscripts = '%SCRIPTS%predisconnect'
postdisconnectscripts = '%SCRIPTS%postdisconnect'
preconnectscripts = '%SCRIPTS%preconnect' preconnectscripts = '%SCRIPTS%preconnect'
postconnectscripts = '%SCRIPTS%postconnect' postconnectscripts = '%SCRIPTS%postconnect'
images = '%IMAGES%' images = '%IMAGES%'
@@ -62,6 +63,8 @@ initfile = '%INITFILE%'
# stores only the file name, i.e. wicd # stores only the file name, i.e. wicd
initfilename = '%INITFILENAME%' initfilename = '%INITFILENAME%'
wicd_group = '%WICDGROUP%' wicd_group = '%WICDGROUP%'
log_group = '%LOGGROUP%'
log_perms = '%LOGPERMS%'
# BOOLEANS # BOOLEANS
no_install_pmutils = %NO_INSTALL_PMUTILS% no_install_pmutils = %NO_INSTALL_PMUTILS%

View File

@@ -1,6 +1,6 @@
.TH WICD-CLIENT "1" "February 2009" "wicd-client " "User Commands" .TH WICD-CLIENT "1" "June 2009" "wicd-client " "User Commands"
.SH NAME .SH NAME
wicd-client \- manual page for wicd-client wicd-client \- frontend to the WICD daemon
.SH DESCRIPTION .SH DESCRIPTION
wireless (and wired) connection daemon front\-end. wireless (and wired) connection daemon front\-end.

View File

@@ -1,6 +1,5 @@
[Desktop Entry] [Desktop Entry]
Categories=Application;Network; Categories=Application;Network;
Encoding=UTF-8
Exec=wicd-client --no-tray Exec=wicd-client --no-tray
GenericName=Network Manager GenericName=Network Manager
Icon=wicd-client Icon=wicd-client

View File

@@ -26,7 +26,7 @@ import subprocess
# Be sure to keep this updated! # Be sure to keep this updated!
# VERSIONNUMBER # VERSIONNUMBER
VERSION_NUM = '1.6.0' VERSION_NUM = '1.6.2'
# REVISION_NUM is automatically updated # REVISION_NUM is automatically updated
REVISION_NUM = 'unknown' REVISION_NUM = 'unknown'
CURSES_REVNO = 'uimod' CURSES_REVNO = 'uimod'
@@ -242,6 +242,8 @@ class configure(Command):
self.no_install_acpi = True self.no_install_acpi = True
elif self.distro in ['debian']: elif self.distro in ['debian']:
self.wicdgroup = "netdev" self.wicdgroup = "netdev"
self.loggroup = "adm"
self.logperms = "0640"
self.init = '/etc/init.d/' self.init = '/etc/init.d/'
self.initfile = 'init/debian/wicd' self.initfile = 'init/debian/wicd'
elif self.distro in ['arch']: elif self.distro in ['arch']:
@@ -410,7 +412,8 @@ class get_translations(Command):
def run(self): def run(self):
import urllib, shutil import urllib, shutil
shutil.rmtree('translations/') if os.path.exists('translations'):
shutil.rmtree('translations/')
os.makedirs('translations') os.makedirs('translations')
filename, headers = urllib.urlretrieve('http://wicd.sourceforge.net/translator/idlist/') filename, headers = urllib.urlretrieve('http://wicd.sourceforge.net/translator/idlist/')
id_file = open(filename, 'r') id_file = open(filename, 'r')
@@ -488,7 +491,8 @@ try:
(wpath.backends, ['wicd/backends/be-external.py', 'wicd/backends/be-ioctl.py']), (wpath.backends, ['wicd/backends/be-external.py', 'wicd/backends/be-ioctl.py']),
(wpath.autostart, ['other/wicd-tray.desktop', ]), (wpath.autostart, ['other/wicd-tray.desktop', ]),
(wpath.scripts, []), (wpath.scripts, []),
(wpath.disconnectscripts, []), (wpath.predisconnectscripts, []),
(wpath.postdisconnectscripts, []),
(wpath.preconnectscripts, []), (wpath.preconnectscripts, []),
(wpath.postconnectscripts, []), (wpath.postconnectscripts, []),
] ]

View File

@@ -111,12 +111,12 @@ class ConfigManager(RawConfigParser):
except (ValueError, TypeError, AttributeError): except (ValueError, TypeError, AttributeError):
ret = Noneify(ret) ret = Noneify(ret)
# This is a workaround for a python-dbus issue on 64-bit systems. # This is a workaround for a python-dbus issue on 64-bit systems.
if isinstance(ret, (int)): if isinstance(ret, (int, long)):
try: try:
Int32(ret) Int32(ret)
except OverflowError: except OverflowError:
ret = long(ret) ret = str(ret)
return ret return to_unicode(ret)
def get(self, *args, **kargs): def get(self, *args, **kargs):
""" Calls the get_option method """ """ Calls the get_option method """

View File

@@ -42,7 +42,8 @@ language = {}
language['configure_scripts'] = _("Configure Scripts") language['configure_scripts'] = _("Configure Scripts")
language['before_script'] = _("Pre-connection Script") language['before_script'] = _("Pre-connection Script")
language['after_script'] = _("Post-connection Script") language['after_script'] = _("Post-connection Script")
language['disconnect_script'] = _("Disconnection Script") language['pre_disconnect_script'] = _("Pre-disconnection Script")
language['post_disconnect_script'] = _("Post-disconnection Script")
dbus = dbusmanager.DBusManager() dbus = dbusmanager.DBusManager()
dbus.connect_to_dbus() dbus.connect_to_dbus()
@@ -100,14 +101,16 @@ def get_script_info(network, network_type):
if con.has_section(network): if con.has_section(network):
info["pre_entry"] = get_val(con, network, "beforescript") info["pre_entry"] = get_val(con, network, "beforescript")
info["post_entry"] = get_val(con, network, "afterscript") info["post_entry"] = get_val(con, network, "afterscript")
info["disconnect_entry"] = get_val(con, network, "disconnectscript") info["pre_disconnect_entry"] = get_val(con, network, "predisconnectscript")
info["post_disconnect_entry"] = get_val(con, network, "postdisconnectscript")
else: else:
bssid = wireless.GetWirelessProperty(int(network), "bssid") bssid = wireless.GetWirelessProperty(int(network), "bssid")
con.read(wireless_conf) con.read(wireless_conf)
if con.has_section(bssid): if con.has_section(bssid):
info["pre_entry"] = get_val(con, bssid, "beforescript") info["pre_entry"] = get_val(con, bssid, "beforescript")
info["post_entry"] = get_val(con, bssid, "afterscript") info["post_entry"] = get_val(con, bssid, "afterscript")
info["disconnect_entry"] = get_val(con, bssid, "disconnectscript") info["pre_disconnect_entry"] = get_val(con, bssid, "predisconnectscript")
info["post_disconnect_entry"] = get_val(con, bssid, "postdisconnectscript")
return info return info
def write_scripts(network, network_type, script_info): def write_scripts(network, network_type, script_info):
@@ -120,7 +123,8 @@ def write_scripts(network, network_type, script_info):
con.add_section(network) con.add_section(network)
con.set(network, "beforescript", script_info["pre_entry"]) con.set(network, "beforescript", script_info["pre_entry"])
con.set(network, "afterscript", script_info["post_entry"]) con.set(network, "afterscript", script_info["post_entry"])
con.set(network, "disconnectscript", script_info["disconnect_entry"]) con.set(network, "predisconnectscript", script_info["pre_disconnect_entry"])
con.set(network, "postdisconnectscript", script_info["post_disconnect_entry"])
con.write(open(wired_conf, "w")) con.write(open(wired_conf, "w"))
wired.ReloadConfig() wired.ReloadConfig()
wired.ReadWiredNetworkProfile(network) wired.ReadWiredNetworkProfile(network)
@@ -132,7 +136,8 @@ def write_scripts(network, network_type, script_info):
con.add_section(bssid) con.add_section(bssid)
con.set(bssid, "beforescript", script_info["pre_entry"]) con.set(bssid, "beforescript", script_info["pre_entry"])
con.set(bssid, "afterscript", script_info["post_entry"]) con.set(bssid, "afterscript", script_info["post_entry"])
con.set(bssid, "disconnectscript", script_info["disconnect_entry"]) con.set(bssid, "predisconnectscript", script_info["pre_disconnect_entry"])
con.set(bssid, "postdisconnectscript", script_info["post_disconnect_entry"])
con.write(open(wireless_conf, "w")) con.write(open(wireless_conf, "w"))
wireless.ReloadConfig() wireless.ReloadConfig()
wireless.ReadWirelessNetworkProfile(int(network)) wireless.ReadWirelessNetworkProfile(int(network))
@@ -155,25 +160,30 @@ def main (argv):
dialog = wTree.get_widget("configure_script_dialog") dialog = wTree.get_widget("configure_script_dialog")
wTree.get_widget("pre_label").set_label(language['before_script'] + ":") wTree.get_widget("pre_label").set_label(language['before_script'] + ":")
wTree.get_widget("post_label").set_label(language['after_script'] + ":") wTree.get_widget("post_label").set_label(language['after_script'] + ":")
wTree.get_widget("disconnect_label").set_label(language['disconnect_script'] wTree.get_widget("pre_disconnect_label").set_label(language['pre_disconnect_script']
+ ":")
wTree.get_widget("post_disconnect_label").set_label(language['post_disconnect_script']
+ ":") + ":")
wTree.get_widget("window1").hide() wTree.get_widget("window1").hide()
pre_entry = wTree.get_widget("pre_entry") pre_entry = wTree.get_widget("pre_entry")
post_entry = wTree.get_widget("post_entry") post_entry = wTree.get_widget("post_entry")
disconnect_entry = wTree.get_widget("disconnect_entry") pre_disconnect_entry = wTree.get_widget("pre_disconnect_entry")
post_disconnect_entry = wTree.get_widget("post_disconnect_entry")
pre_entry.set_text(none_to_blank(script_info.get("pre_entry"))) pre_entry.set_text(none_to_blank(script_info.get("pre_entry")))
post_entry.set_text(none_to_blank(script_info.get("post_entry"))) post_entry.set_text(none_to_blank(script_info.get("post_entry")))
disconnect_entry.set_text(none_to_blank(script_info.get("disconnect_entry"))) pre_disconnect_entry.set_text(none_to_blank(script_info.get("pre_disconnect_entry")))
post_disconnect_entry.set_text(none_to_blank(script_info.get("post_disconnect_entry")))
dialog.show_all() dialog.show_all()
result = dialog.run() result = dialog.run()
if result == 1: if result == 1:
script_info["pre_entry"] = blank_to_none(pre_entry.get_text()) script_info["pre_entry"] = blank_to_none(pre_entry.get_text())
script_info["post_entry"] = blank_to_none(post_entry.get_text()) script_info["post_entry"] = blank_to_none(post_entry.get_text())
script_info["disconnect_entry"] = blank_to_none(disconnect_entry.get_text()) script_info["pre_disconnect_entry"] = blank_to_none(pre_disconnect_entry.get_text())
script_info["post_disconnect_entry"] = blank_to_none(post_disconnect_entry.get_text())
write_scripts(network, network_type, script_info) write_scripts(network, network_type, script_info)
dialog.destroy() dialog.destroy()

View File

@@ -642,7 +642,7 @@ class appGui(object):
for entry_info in encryption_info.itervalues(): for entry_info in encryption_info.itervalues():
if entry_info[0].entry.get_text() == "" and \ if entry_info[0].entry.get_text() == "" and \
entry_info[1] == 'required': entry_info[1] == 'required':
error(self, "%s (%s)" % (language['encrypt_info_missing'], error(self.window, "%s (%s)" % (language['encrypt_info_missing'],
entry_info[0].label.get_label()) entry_info[0].label.get_label())
) )
return False return False
@@ -666,24 +666,28 @@ class appGui(object):
""" Initiates the connection process in the daemon. """ """ Initiates the connection process in the daemon. """
def handler(*args): def handler(*args):
self._connect_thread_started = True self._connect_thread_started = True
cancel_button = self.wTree.get_widget("cancel_button") def setup_interface_for_connection():
cancel_button.set_sensitive(True) cancel_button = self.wTree.get_widget("cancel_button")
self.network_list.set_sensitive(False) cancel_button.set_sensitive(True)
if self.statusID: self.network_list.set_sensitive(False)
gobject.idle_add(self.status_bar.remove, 1, self.statusID) if self.statusID:
gobject.idle_add(self.set_status, language["disconnecting_active"]) gobject.idle_add(self.status_bar.remove, 1, self.statusID)
gobject.idle_add(self.status_area.show_all) gobject.idle_add(self.set_status, language["disconnecting_active"])
self.wait_for_events() gobject.idle_add(self.status_area.show_all)
self._connect_thread_started = False self.wait_for_events()
self._connect_thread_started = False
if nettype == "wireless": if nettype == "wireless":
if not self.check_encryption_valid(networkid, if not self.check_encryption_valid(networkid,
networkentry.advanced_dialog): networkentry.advanced_dialog):
self.edit_advanced(None, None, nettype, networkid, networkentry) self.edit_advanced(None, nettype, networkid, networkentry)
return False return False
setup_interface_for_connection()
wireless.ConnectWireless(networkid, reply_handler=handler, wireless.ConnectWireless(networkid, reply_handler=handler,
error_handler=handler) error_handler=handler)
elif nettype == "wired": elif nettype == "wired":
setup_interface_for_connection()
wired.ConnectWired(reply_handler=handler, error_handler=handler) wired.ConnectWired(reply_handler=handler, error_handler=handler)
gobject.source_remove(self.update_cb) gobject.source_remove(self.update_cb)

View File

@@ -49,6 +49,7 @@ AUTO = 0
DHCLIENT = 1 DHCLIENT = 1
DHCPCD = 2 DHCPCD = 2
PUMP = 3 PUMP = 3
UDHCPC = 4
# Link detection tools # Link detection tools
ETHTOOL = 1 ETHTOOL = 1
@@ -181,6 +182,8 @@ def WriteLine(my_file, text):
def ExecuteScripts(scripts_dir, verbose=False): def ExecuteScripts(scripts_dir, verbose=False):
""" Execute every executable file in a given directory. """ """ Execute every executable file in a given directory. """
if not os.path.exists(scripts_dir):
return
for obj in os.listdir(scripts_dir): for obj in os.listdir(scripts_dir):
obj = os.path.abspath(os.path.join(scripts_dir, obj)) obj = os.path.abspath(os.path.join(scripts_dir, obj))
if os.path.isfile(obj) and os.access(obj, os.X_OK): if os.path.isfile(obj) and os.access(obj, os.X_OK):
@@ -446,7 +449,7 @@ def choose_sudo_prog(prog_num=0):
paths = [] paths = []
if desktop_env == "kde": if desktop_env == "kde":
progs = ["kdesu", "kdesudo", "ktusss"] progs = ["kdesu", "kdesudo", "ktsuss"]
else: else:
progs = ["gksudo", "gksu", "ktsuss"] progs = ["gksudo", "gksu", "ktsuss"]

View File

@@ -185,7 +185,7 @@ class ConnectionStatus(object):
# try to reconnect. # try to reconnect.
self.connection_lost_counter += 1 self.connection_lost_counter += 1
print self.connection_lost_counter print self.connection_lost_counter
if self.connection_lost_counter >= 4: if self.connection_lost_counter >= 4 and daemon.GetAutoReconnect():
wireless.DisconnectWireless() wireless.DisconnectWireless()
self.connection_lost_counter = 0 self.connection_lost_counter = 0
return False return False

View File

@@ -45,14 +45,20 @@ def setup_dbus():
wired = dbusmanager.get_interface('wired') wired = dbusmanager.get_interface('wired')
class AdvancedSettingsDialog(gtk.Dialog): class AdvancedSettingsDialog(gtk.Dialog):
def __init__(self): def __init__(self, network_name=None):
""" Build the base advanced settings dialog. """ Build the base advanced settings dialog.
This class isn't used by itself, instead it is used as a parent for This class isn't used by itself, instead it is used as a parent for
the WiredSettingsDialog and WirelessSettingsDialog. the WiredSettingsDialog and WirelessSettingsDialog.
""" """
gtk.Dialog.__init__(self, title=language['properties'], # if no network name was passed, just use Properties as the title
if network_name:
title = '%s - %s' % (network_name, language['properties'])
else:
title = language['properties']
gtk.Dialog.__init__(self, title=title,
flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL, flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL,
gtk.RESPONSE_REJECT, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.STOCK_OK,
@@ -236,7 +242,7 @@ class AdvancedSettingsDialog(gtk.Dialog):
class WiredSettingsDialog(AdvancedSettingsDialog): class WiredSettingsDialog(AdvancedSettingsDialog):
def __init__(self, name): def __init__(self, name):
""" Build the wired settings dialog. """ """ Build the wired settings dialog. """
AdvancedSettingsDialog.__init__(self) AdvancedSettingsDialog.__init__(self, language['wired_network'])
self.des = self.connect("destroy", self.destroy_called) self.des = self.connect("destroy", self.destroy_called)
self.script_button.connect("clicked", self.edit_scripts) self.script_button.connect("clicked", self.edit_scripts)
self.prof_name = name self.prof_name = name
@@ -294,7 +300,7 @@ class WiredSettingsDialog(AdvancedSettingsDialog):
class WirelessSettingsDialog(AdvancedSettingsDialog): class WirelessSettingsDialog(AdvancedSettingsDialog):
def __init__(self, networkID): def __init__(self, networkID):
""" Build the wireless settings dialog. """ """ Build the wireless settings dialog. """
AdvancedSettingsDialog.__init__(self) AdvancedSettingsDialog.__init__(self, wireless.GetWirelessProperty(networkID, 'essid'))
# Set up encryption stuff # Set up encryption stuff
self.networkID = networkID self.networkID = networkID
self.combo_encryption = gtk.combo_box_new_text() self.combo_encryption = gtk.combo_box_new_text()

View File

@@ -151,7 +151,8 @@ class Controller(object):
self.connecting_thread = None self.connecting_thread = None
self.before_script = None self.before_script = None
self.after_script = None self.after_script = None
self.disconnect_script = None self.pre_disconnect_script = None
self.post_disconnect_script = None
self.driver = None self.driver = None
self.iface = None self.iface = None
@@ -203,17 +204,23 @@ class Controller(object):
def Disconnect(self, *args, **kargs): def Disconnect(self, *args, **kargs):
""" Disconnect from the network. """ """ Disconnect from the network. """
iface = self.iface iface = self.iface
misc.ExecuteScripts(wpath.disconnectscripts, self.debug) misc.ExecuteScripts(wpath.predisconnectscripts, self.debug)
if self.disconnect_script: if self.pre_disconnect_script:
print 'Running disconnect script' print 'Running pre-disconnect script'
misc.ExecuteScript(expand_script_macros(self.disconnect_script, misc.ExecuteScript(expand_script_macros(self.pre_disconnect_script,
'disconnection', *args), 'pre-disconnection', *args),
self.debug) self.debug)
iface.ReleaseDHCP() iface.ReleaseDHCP()
iface.SetAddress('0.0.0.0') iface.SetAddress('0.0.0.0')
iface.FlushRoutes() iface.FlushRoutes()
iface.Down() iface.Down()
iface.Up() iface.Up()
misc.ExecuteScripts(wpath.postdisconnectscripts, self.debug)
if self.post_disconnect_script:
print 'Running post-disconnect script'
misc.ExecuteScript(expand_script_macros(self.post_disconnect_script,
'post-disconnection', *args),
self.debug)
def ReleaseDHCP(self): def ReleaseDHCP(self):
""" Release the DHCP lease for this interface. """ """ Release the DHCP lease for this interface. """
@@ -273,8 +280,8 @@ class ConnectThread(threading.Thread):
lock = threading.Lock() lock = threading.Lock()
def __init__(self, network, interface_name, before_script, after_script, def __init__(self, network, interface_name, before_script, after_script,
disconnect_script, gdns1, gdns2, gdns3, gdns_dom, gsearch_dom, pre_disconnect_script, post_disconnect_script, gdns1,
iface, debug): gdns2, gdns3, gdns_dom, gsearch_dom, iface, debug):
""" Initialise the required object variables and the thread. """ Initialise the required object variables and the thread.
Keyword arguments: Keyword arguments:
@@ -283,7 +290,8 @@ class ConnectThread(threading.Thread):
wired -- name of the wired interface wired -- name of the wired interface
before_script -- script to run before bringing up the interface before_script -- script to run before bringing up the interface
after_script -- script to run after bringing up the interface after_script -- script to run after bringing up the interface
disconnect_script -- script to run after disconnection pre_disconnect_script -- script to run before disconnection
post_disconnect_script -- script to run after disconnection
gdns1 -- global DNS server 1 gdns1 -- global DNS server 1
gdns2 -- global DNS server 2 gdns2 -- global DNS server 2
gdns3 -- global DNS server 3 gdns3 -- global DNS server 3
@@ -297,7 +305,8 @@ class ConnectThread(threading.Thread):
self.connect_result = None self.connect_result = None
self.before_script = before_script self.before_script = before_script
self.after_script = after_script self.after_script = after_script
self.disconnect_script = disconnect_script self.pre_disconnect_script = pre_disconnect_script
self.post_disconnect_script = post_disconnect_script
self._should_die = False self._should_die = False
self.abort_reason = "" self.abort_reason = ""
self.connect_result = "" self.connect_result = ""
@@ -315,6 +324,13 @@ class ConnectThread(threading.Thread):
self.SetStatus('interface_down') self.SetStatus('interface_down')
def run(self):
self.connect_result = "Failed"
try:
self._connect()
finally:
self.is_connecting = False
def set_should_die(self, val): def set_should_die(self, val):
self.lock.acquire() self.lock.acquire()
try: try:
@@ -600,7 +616,8 @@ class Wireless(Controller):
self.connecting_thread = WirelessConnectThread(network, self.connecting_thread = WirelessConnectThread(network,
self.wireless_interface, self.wpa_driver, self.before_script, self.wireless_interface, self.wpa_driver, self.before_script,
self.after_script, self.disconnect_script, self.global_dns_1, self.after_script, self.pre_disconnect_script,
self.post_disconnect_script, self.global_dns_1,
self.global_dns_2, self.global_dns_3, self.global_dns_dom, self.global_dns_2, self.global_dns_3, self.global_dns_dom,
self.global_search_dom, self.wiface, debug) self.global_search_dom, self.wiface, debug)
self.connecting_thread.setDaemon(True) self.connecting_thread.setDaemon(True)
@@ -702,7 +719,7 @@ class Wireless(Controller):
wiface = self.wiface wiface = self.wiface
print 'Creating ad-hoc network' print 'Creating ad-hoc network'
print 'Stopping dhcp client and wpa_supplicant' print 'Stopping dhcp client and wpa_supplicant'
BACKEND.ReleaseDHCP() wiface.ReleaseDHCP()
wiface.StopWPA() wiface.StopWPA()
print 'Putting wireless interface down' print 'Putting wireless interface down'
wiface.Down() wiface.Down()
@@ -772,8 +789,9 @@ class WirelessConnectThread(ConnectThread):
""" """
def __init__(self, network, wireless, wpa_driver, before_script, def __init__(self, network, wireless, wpa_driver, before_script,
after_script, disconnect_script, gdns1, gdns2, gdns3, after_script, pre_disconnect_script, post_disconnect_script,
gdns_dom, gsearch_dom, wiface, debug=False): gdns1, gdns2, gdns3, gdns_dom, gsearch_dom, wiface,
debug=False):
""" Initialise the thread with network information. """ Initialise the thread with network information.
Keyword arguments: Keyword arguments:
@@ -782,19 +800,21 @@ class WirelessConnectThread(ConnectThread):
wpa_driver -- type of wireless interface wpa_driver -- type of wireless interface
before_script -- script to run before bringing up the interface before_script -- script to run before bringing up the interface
after_script -- script to run after bringing up the interface after_script -- script to run after bringing up the interface
disconnect_script -- script to run after disconnection pre_disconnect_script -- script to run before disconnection
post_disconnect_script -- script to run after disconnection
gdns1 -- global DNS server 1 gdns1 -- global DNS server 1
gdns2 -- global DNS server 2 gdns2 -- global DNS server 2
gdns3 -- global DNS server 3 gdns3 -- global DNS server 3
""" """
ConnectThread.__init__(self, network, wireless, before_script, ConnectThread.__init__(self, network, wireless, before_script,
after_script, disconnect_script, gdns1, gdns2, after_script, pre_disconnect_script,
post_disconnect_script, gdns1, gdns2,
gdns3, gdns_dom, gsearch_dom, wiface, debug) gdns3, gdns_dom, gsearch_dom, wiface, debug)
self.wpa_driver = wpa_driver self.wpa_driver = wpa_driver
def run(self): def _connect(self):
""" The main function of the connection thread. """ The main function of the connection thread.
This function performs the necessary calls to connect to the This function performs the necessary calls to connect to the
@@ -960,9 +980,10 @@ class Wired(Controller):
if not self.liface: return False if not self.liface: return False
self.connecting_thread = WiredConnectThread(network, self.connecting_thread = WiredConnectThread(network,
self.wired_interface, self.before_script, self.after_script, self.wired_interface, self.before_script, self.after_script,
self.disconnect_script, self.global_dns_1, self.global_dns_2, self.pre_disconnect_script, self.post_disconnect_script,
self.global_dns_3, self.global_dns_dom, self.global_search_dom, self.global_dns_1, self.global_dns_2, self.global_dns_3,
self.liface, debug) self.global_dns_dom, self.global_search_dom, self.liface,
debug)
self.connecting_thread.setDaemon(True) self.connecting_thread.setDaemon(True)
self.connecting_thread.start() self.connecting_thread.start()
return self.connecting_thread return self.connecting_thread
@@ -986,8 +1007,8 @@ class WiredConnectThread(ConnectThread):
""" """
def __init__(self, network, wired, before_script, after_script, def __init__(self, network, wired, before_script, after_script,
disconnect_script, gdns1, gdns2, gdns3, gdns_dom, gsearch_dom, pre_disconnect_script, post_disconnect_script, gdns1,
liface, debug=False): gdns2, gdns3, gdns_dom, gsearch_dom, liface, debug=False):
""" Initialise the thread with network information. """ Initialise the thread with network information.
Keyword arguments: Keyword arguments:
@@ -996,17 +1017,19 @@ class WiredConnectThread(ConnectThread):
wired -- name of the wired interface wired -- name of the wired interface
before_script -- script to run before bringing up the interface before_script -- script to run before bringing up the interface
after_script -- script to run after bringing up the interface after_script -- script to run after bringing up the interface
disconnect_script -- script to run after disconnection pre_disconnect_script -- script to run before disconnection
post_disconnect_script -- script to run after disconnection
gdns1 -- global DNS server 1 gdns1 -- global DNS server 1
gdns2 -- global DNS server 2 gdns2 -- global DNS server 2
gdns3 -- global DNS server 3 gdns3 -- global DNS server 3
""" """
ConnectThread.__init__(self, network, wired, before_script, ConnectThread.__init__(self, network, wired, before_script,
after_script, disconnect_script, gdns1, gdns2, after_script, pre_disconnect_script,
post_disconnect_script, gdns1, gdns2,
gdns3, gdns_dom, gsearch_dom, liface, debug) gdns3, gdns_dom, gsearch_dom, liface, debug)
def run(self): def _connect(self):
""" The main function of the connection thread. """ The main function of the connection thread.
This function performs the necessary calls to connect to the This function performs the necessary calls to connect to the

View File

@@ -82,7 +82,7 @@ class PreferencesDialog(object):
self.preferwiredcheckbox.set_active(daemon.GetPreferWiredNetwork()) self.preferwiredcheckbox.set_active(daemon.GetPreferWiredNetwork())
dhcp_list = [self.dhcpautoradio, self.dhclientradio, self.dhcpcdradio, dhcp_list = [self.dhcpautoradio, self.dhclientradio, self.dhcpcdradio,
self.pumpradio] self.pumpradio, self.udhcpcradio]
self._setup_external_app_radios(dhcp_list, daemon.GetDHCPClient, self._setup_external_app_radios(dhcp_list, daemon.GetDHCPClient,
daemon.SetDHCPClient) daemon.SetDHCPClient)
@@ -100,7 +100,7 @@ class PreferencesDialog(object):
sudo_list = [self.sudoautoradio, self.gksudoradio, self.kdesuradio, sudo_list = [self.sudoautoradio, self.gksudoradio, self.kdesuradio,
self.ktsussradio] self.ktsussradio]
self._setup_external_app_radios(sudo_list, daemon.GetSudoApp, self._setup_external_app_radios(sudo_list, daemon.GetSudoApp,
daemon.SetAudoApp) daemon.SetSudoApp)
auto_conn_meth = daemon.GetWiredAutoConnectMethod() auto_conn_meth = daemon.GetWiredAutoConnectMethod()
if auto_conn_meth == 1: if auto_conn_meth == 1:
@@ -210,8 +210,10 @@ class PreferencesDialog(object):
dhcp_client = misc.DHCLIENT dhcp_client = misc.DHCLIENT
elif self.dhcpcdradio.get_active(): elif self.dhcpcdradio.get_active():
dhcp_client = misc.DHCPCD dhcp_client = misc.DHCPCD
else: elif self.pumpradio.get_active():
dhcp_client = misc.PUMP dhcp_client = misc.PUMP
else:
dhcp_client = misc.UDHCPC
daemon.SetDHCPClient(dhcp_client) daemon.SetDHCPClient(dhcp_client)
if self.linkautoradio.get_active(): if self.linkautoradio.get_active():
@@ -347,6 +349,7 @@ class PreferencesDialog(object):
self.dhclientradio = self.wTree.get_widget("dhclient_radio") self.dhclientradio = self.wTree.get_widget("dhclient_radio")
self.pumpradio = self.wTree.get_widget("pump_radio") self.pumpradio = self.wTree.get_widget("pump_radio")
self.dhcpcdradio = self.wTree.get_widget("dhcpcd_radio") self.dhcpcdradio = self.wTree.get_widget("dhcpcd_radio")
self.udhcpcradio = self.wTree.get_widget("udhcpc_radio")
# Wired Link Detection Apps # Wired Link Detection Apps
self.linkautoradio = setup_label("link_auto_radio", 'wicd_auto_config') self.linkautoradio = setup_label("link_auto_radio", 'wicd_auto_config')

View File

@@ -55,7 +55,7 @@ def get_gettext():
_ = lang.gettext _ = lang.gettext
return _ return _
# Generated automatically on Fri, 05 Jun 2009 03:13:27 CDT # Generated automatically on Sun, 05 Jul 2009 13:51:18 CDT
_ = get_gettext() _ = get_gettext()
language = {} language = {}
language['resetting_ip_address'] = _('''Resetting IP address...''') language['resetting_ip_address'] = _('''Resetting IP address...''')
@@ -74,7 +74,7 @@ language['wired_networks'] = _('''Wired Networks''')
language['backend_alert'] = _('''Changes to your backend won't occur until the daemon is restarted.''') language['backend_alert'] = _('''Changes to your backend won't occur until the daemon is restarted.''')
language['about_help'] = _('''Stop a network connection in progress''') language['about_help'] = _('''Stop a network connection in progress''')
language['connecting'] = _('''Connecting''') language['connecting'] = _('''Connecting''')
language['disconnect_script'] = _('''Run disconnect script''') language['pre_disconnect_script'] = _('''Run pre-disconnect script''')
language['cannot_edit_scripts_1'] = _('''To avoid various complications, wicd-curses does not support directly editing the scripts directly. However, you can edit them manually. First, (as root)", open the "$A" config file, and look for the section labeled by the $B in question. In this case, this is:''') language['cannot_edit_scripts_1'] = _('''To avoid various complications, wicd-curses does not support directly editing the scripts directly. However, you can edit them manually. First, (as root)", open the "$A" config file, and look for the section labeled by the $B in question. In this case, this is:''')
language['cannot_edit_scripts_3'] = _('''You can also configure the wireless networks by looking for the "[<ESSID>]" field in the config file.''') language['cannot_edit_scripts_3'] = _('''You can also configure the wireless networks by looking for the "[<ESSID>]" field in the config file.''')
language['cannot_edit_scripts_2'] = _('''Once there, you can adjust (or add) the "beforescript", "afterscript", and "disconnectscript" variables as needed, to change the preconnect, postconnect, and disconnect scripts respectively. Note that you will be specifying the full path to the scripts - not the actual script contents. You will need to add/edit the script contents separately. Refer to the wicd manual page for more information.''') language['cannot_edit_scripts_2'] = _('''Once there, you can adjust (or add) the "beforescript", "afterscript", and "disconnectscript" variables as needed, to change the preconnect, postconnect, and disconnect scripts respectively. Note that you will be specifying the full path to the scripts - not the actual script contents. You will need to add/edit the script contents separately. Refer to the wicd manual page for more information.''')
@@ -214,5 +214,7 @@ language['connection_established'] = _('''Connection established''')
language['disconnected'] = _('''Disconnected''') language['disconnected'] = _('''Disconnected''')
language['establishing_connection'] = _('''Establishing connection...''') language['establishing_connection'] = _('''Establishing connection...''')
language['association_failed'] = _('''Connection failed: Could not contact the wireless access point.''') 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 your DBus configuration.''') 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['disconnecting_active'] = _('''Disconnecting active connections...''') 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['post_disconnect_script'] = _('''Run post-disconnect script''')

View File

@@ -87,8 +87,9 @@ def catchdbus(func):
try: try:
return func(*args, **kwargs) return func(*args, **kwargs)
except DBusException, e: except DBusException, e:
if "DBus.Error.AccessDenied" in e: if e.get_dbus_name() != None and "DBus.Error.AccessDenied" in e.get_dbus_name():
error(None, language['access_denied']) error(None, language['access_denied'].replace("$A","<b>"+wpath.wicd_group+"</b>"))
#raise
raise DBusException(e) raise DBusException(e)
else: else:
print "warning: ignoring exception %s" % e print "warning: ignoring exception %s" % e
@@ -120,13 +121,15 @@ class TrayIcon(object):
Base Class for implementing a tray icon to display network status. Base Class for implementing a tray icon to display network status.
""" """
def __init__(self, animate): def __init__(self, animate, displaytray=True):
if USE_EGG: if USE_EGG:
self.tr = self.EggTrayIconGUI() self.tr = self.EggTrayIconGUI()
else: else:
self.tr = self.StatusTrayIconGUI() self.tr = self.StatusTrayIconGUI()
self.icon_info = self.TrayConnectionInfo(self.tr, animate) self.icon_info = self.TrayConnectionInfo(self.tr, animate)
self.tr.icon_info = self.icon_info self.tr.icon_info = self.icon_info
print 'displaytray %s' % displaytray
self.tr.visible(displaytray)
def is_embedded(self): def is_embedded(self):
if USE_EGG: if USE_EGG:
@@ -665,6 +668,18 @@ class TrayIcon(object):
""" """
self.tooltip.set_tip(self.eb, val) self.tooltip.set_tip(self.eb, val)
def visible(self, val):
""" Set if the icon is visible or not.
If val is True, makes the icon visible, if val is False,
hides the tray icon.
"""
if val:
self.tray.show_all()
else:
self.tray.hide_all()
if hasattr(gtk, "StatusIcon"): if hasattr(gtk, "StatusIcon"):
class StatusTrayIconGUI(gtk.StatusIcon, TrayIconGUI): class StatusTrayIconGUI(gtk.StatusIcon, TrayIconGUI):
@@ -695,6 +710,14 @@ class TrayIcon(object):
self.current_icon_path = path self.current_icon_path = path
gtk.StatusIcon.set_from_file(self, path) gtk.StatusIcon.set_from_file(self, path)
def visible(self, val):
""" Set if the icon is visible or not.
If val is True, makes the icon visible, if val is False,
hides the tray icon.
"""
self.set_visible(val)
def usage(): def usage():
""" Print usage information. """ """ Print usage information. """
@@ -706,6 +729,7 @@ Arguments:
\t-n\t--no-tray\tRun wicd without the tray icon. \t-n\t--no-tray\tRun wicd without the tray icon.
\t-h\t--help\t\tPrint this help information. \t-h\t--help\t\tPrint this help information.
\t-a\t--no-animate\tRun the tray without network traffic tray animations. \t-a\t--no-animate\tRun the tray without network traffic tray animations.
\t-o\t--only-notifications\tDon't display anything except notifications.
""" % wpath.version """ % wpath.version
def setup_dbus(force=True): def setup_dbus(force=True):
@@ -763,8 +787,9 @@ def main(argv):
""" """
try: try:
opts, args = getopt.getopt(sys.argv[1:], 'nha', ['help', 'no-tray', opts, args = getopt.getopt(sys.argv[1:], 'nhao', ['help', 'no-tray',
'no-animate']) 'no-animate',
'only-notifications'])
except getopt.GetoptError: except getopt.GetoptError:
# Print help information and exit # Print help information and exit
usage() usage()
@@ -772,6 +797,7 @@ def main(argv):
use_tray = True use_tray = True
animate = True animate = True
display_app = True
for opt, a in opts: for opt, a in opts:
if opt in ('-h', '--help'): if opt in ('-h', '--help'):
usage() usage()
@@ -780,6 +806,10 @@ def main(argv):
use_tray = False use_tray = False
elif opt in ('-a', '--no-animate'): elif opt in ('-a', '--no-animate'):
animate = False animate = False
elif opt in ('-o', '--only-notifications'):
print "only displaying notifications"
use_tray = False
display_app = False
else: else:
usage() usage()
sys.exit(2) sys.exit(2)
@@ -788,14 +818,14 @@ def main(argv):
setup_dbus() setup_dbus()
atexit.register(on_exit) atexit.register(on_exit)
if not use_tray or not ICON_AVAIL: if display_app and not use_tray or not ICON_AVAIL:
the_gui = gui.appGui(standalone=True) the_gui = gui.appGui(standalone=True)
mainloop = gobject.MainLoop() mainloop = gobject.MainLoop()
mainloop.run() mainloop.run()
sys.exit(0) sys.exit(0)
# Set up the tray icon GUI and backend # Set up the tray icon GUI and backend
tray_icon = TrayIcon(animate) tray_icon = TrayIcon(animate, displaytray=display_app)
# Check to see if wired profile chooser was called before icon # Check to see if wired profile chooser was called before icon
# was launched (typically happens on startup or daemon restart). # was launched (typically happens on startup or daemon restart).

View File

@@ -309,7 +309,13 @@ class WicdDaemon(dbus.service.Object):
if self.GetSignalDisplayType() == 1: if self.GetSignalDisplayType() == 1:
return (signal + " dBm") return (signal + " dBm")
else: else:
return (signal + "%") try:
if int(signal) == 101:
return '??%'
else:
return (signal + "%")
except ValueError:
return (signal + "%")
@dbus.service.method('org.wicd.daemon') @dbus.service.method('org.wicd.daemon')
def SetSuspend(self, val): def SetSuspend(self, val):
@@ -1049,14 +1055,14 @@ class WirelessDaemon(dbus.service.Object):
return value return value
@dbus.service.method('org.wicd.daemon.wireless') @dbus.service.method('org.wicd.daemon.wireless')
def SetWirelessProperty(self, networkid, property, value): def SetWirelessProperty(self, netid, prop, value):
""" Sets property to value in network specified. """ """ Sets property to value in network specified. """
# We don't write script settings here. # We don't write script settings here.
if (property.strip()).endswith("script"): if (prop.strip()).endswith("script"):
print "Setting script properties through the daemon is not" \ print "Setting script properties through the daemon is not" \
+ " permitted." + " permitted."
return False return False
self.LastScan[networkid][property] = misc.Noneify(value) self.LastScan[netid][prop] = misc.to_unicode(misc.Noneify(value))
@dbus.service.method('org.wicd.daemon.wireless') @dbus.service.method('org.wicd.daemon.wireless')
def DetectWirelessInterface(self): def DetectWirelessInterface(self):
@@ -1134,8 +1140,10 @@ class WirelessDaemon(dbus.service.Object):
# is done. # is done.
self.wifi.before_script = self.GetWirelessProperty(id, 'beforescript') self.wifi.before_script = self.GetWirelessProperty(id, 'beforescript')
self.wifi.after_script = self.GetWirelessProperty(id, 'afterscript') self.wifi.after_script = self.GetWirelessProperty(id, 'afterscript')
self.wifi.disconnect_script = self.GetWirelessProperty(id, self.wifi.pre_disconnect_script = self.GetWirelessProperty(id,
'disconnectscript') 'predisconnectscript')
self.wifi.post_disconnect_script = self.GetWirelessProperty(id,
'postdisconnectscript')
print 'Connecting to wireless network ' + self.LastScan[id]['essid'] print 'Connecting to wireless network ' + self.LastScan[id]['essid']
self.daemon.wired_bus.wired.Disconnect() self.daemon.wired_bus.wired.Disconnect()
self.daemon.SetForcedDisconnect(False) self.daemon.SetForcedDisconnect(False)
@@ -1222,12 +1230,14 @@ class WirelessDaemon(dbus.service.Object):
write_script_ent(bssid_key, "beforescript") write_script_ent(bssid_key, "beforescript")
write_script_ent(bssid_key, "afterscript") write_script_ent(bssid_key, "afterscript")
write_script_ent(bssid_key, "disconnectscript") write_script_ent(bssid_key, "predisconnectscript")
write_script_ent(bssid_key, "postdisconnectscript")
if cur_network["use_settings_globally"]: if cur_network["use_settings_globally"]:
write_script_ent(essid_key, "beforescript") write_script_ent(essid_key, "beforescript")
write_script_ent(essid_key, "afterscript") write_script_ent(essid_key, "afterscript")
write_script_ent(essid_key, "disconnectscript") write_script_ent(essid_key, "predisconnectscript")
write_script_ent(essid_key, "postdisconnectscript")
self.config.write() self.config.write()
@@ -1363,7 +1373,7 @@ class WiredDaemon(dbus.service.Object):
print "Setting script properties through the daemon" \ print "Setting script properties through the daemon" \
+ " is not permitted." + " is not permitted."
return False return False
self.WiredNetwork[property] = misc.Noneify(value) self.WiredNetwork[property] = misc.to_unicode(misc.Noneify(value))
return True return True
else: else:
print 'SetWiredProperty: WiredNetwork does not exist' print 'SetWiredProperty: WiredNetwork does not exist'
@@ -1421,7 +1431,8 @@ class WiredDaemon(dbus.service.Object):
""" Connects to a wired network. """ """ Connects to a wired network. """
self.wired.before_script = self.GetWiredProperty("beforescript") self.wired.before_script = self.GetWiredProperty("beforescript")
self.wired.after_script = self.GetWiredProperty("afterscript") self.wired.after_script = self.GetWiredProperty("afterscript")
self.wired.disconnect_script = self.GetWiredProperty("disconnectscript") self.wired.pre_disconnect_script = self.GetWiredProperty("predisconnectscript")
self.wired.post_disconnect_script = self.GetWiredProperty("postdisconnectscript")
self.daemon.wireless_bus.wifi.Disconnect() self.daemon.wireless_bus.wifi.Disconnect()
self.daemon.SetForcedDisconnect(False) self.daemon.SetForcedDisconnect(False)
self.UnsetWiredLastUsed() self.UnsetWiredLastUsed()
@@ -1439,7 +1450,8 @@ class WiredDaemon(dbus.service.Object):
for option in ["ip", "broadcast", "netmask","gateway", "search_domain", for option in ["ip", "broadcast", "netmask","gateway", "search_domain",
"dns_domain", "dns1", "dns2", "dns3", "beforescript", "dns_domain", "dns1", "dns2", "dns3", "beforescript",
"afterscript", "disconnectscript"]: "afterscript", "predisconnectscript",
"postdisconnectscript"]:
self.config.set(profilename, option, None) self.config.set(profilename, option, None)
self.config.set(profilename, "default", default) self.config.set(profilename, "default", default)
self.config.write() self.config.write()
@@ -1507,7 +1519,8 @@ class WiredDaemon(dbus.service.Object):
write_script_ent(profilename, "beforescript") write_script_ent(profilename, "beforescript")
write_script_ent(profilename, "afterscript") write_script_ent(profilename, "afterscript")
write_script_ent(profilename, "disconnectscript") write_script_ent(profilename, "predisconnectscript")
write_script_ent(profilename, "postdisconnectscript")
self.config.write() self.config.write()
return "100: Profile Written" return "100: Profile Written"
@@ -1671,9 +1684,17 @@ def main(argv):
output = ManagedStdio(logpath) output = ManagedStdio(logpath)
if os.path.exists(logpath): if os.path.exists(logpath):
try: try:
os.chmod(logpath, 0600) os.chmod(logpath, int(wpath.log_perms,8))
except: except:
print 'unable to chmod log file to 0600' print 'unable to chmod log file to %s' % wpath.log_perms
try:
if wpath.log_group:
import grp
group = grp.getgrnam(wpath.log_group)
os.chown(logpath, 0, group[2])
except:
print 'unable to chown log file to %s' % group[2]
if redirect_stdout: sys.stdout = output if redirect_stdout: sys.stdout = output
if redirect_stderr: sys.stderr = output if redirect_stderr: sys.stderr = output

View File

@@ -171,7 +171,8 @@ def neediface(default_response):
""" """
def wrapper(func): def wrapper(func):
def newfunc(self, *args, **kwargs): def newfunc(self, *args, **kwargs):
if not self.iface: if not self.iface or \
not os.path.exists('/sys/class/net/%s' % self.iface):
return default_response return default_response
return func(self, *args, **kwargs) return func(self, *args, **kwargs)
newfunc.__dict__ = func.__dict__ newfunc.__dict__ = func.__dict__
@@ -250,6 +251,9 @@ class BaseInterface(object):
cmd = self.dhclient_cmd cmd = self.dhclient_cmd
if self.dhclient_needs_verbose: if self.dhclient_needs_verbose:
cmd += ' -v' cmd += ' -v'
elif self.udhcpc_cmd and cl in [misc.UDHCPC, misc.AUTO]:
client = "udhcpc"
cmd = self.udhcpc_cmd
else: else:
client = None client = None
cmd = "" cmd = ""
@@ -257,20 +261,25 @@ class BaseInterface(object):
client_dict = { client_dict = {
"dhclient" : "dhclient" :
{'connect' : r"%s %s", {'connect' : r"%(cmd)s %(iface)s",
'release' : r"%s -r %s", 'release' : r"%(cmd)s -r %(iface)s",
'id' : misc.DHCLIENT, 'id' : misc.DHCLIENT,
}, },
"pump" : "pump" :
{ 'connect' : r"%s -i %s", { 'connect' : r"%(cmd)s -i %(iface)s",
'release' : r"%s -r -i %s", 'release' : r"%(cmd)s -r -i %(iface)s",
'id' : misc.PUMP, 'id' : misc.PUMP,
}, },
"dhcpcd" : "dhcpcd" :
{'connect' : r"%s %s", {'connect' : r"%(cmd)s %(iface)s",
'release' : r"%s -k %s", 'release' : r"%(cmd)s -k %(iface)s",
'id' : misc.DHCPCD, 'id' : misc.DHCPCD,
}, },
"udhcpc":
{'connect' : r"%(cmd)s -n -i %(iface)s",
'release' : r"killall -SIGUSR2 %(cmd)s",
'id' : misc.UDHCPC,
},
} }
(client_name, cmd) = get_client_name(self.DHCP_CLIENT) (client_name, cmd) = get_client_name(self.DHCP_CLIENT)
if not client_name or not cmd: if not client_name or not cmd:
@@ -278,9 +287,9 @@ class BaseInterface(object):
return "" return ""
if flavor == "connect": if flavor == "connect":
return client_dict[client_name]['connect'] % (cmd, self.iface) return client_dict[client_name]['connect'] % {"cmd":cmd, "iface":self.iface}
elif flavor == "release": elif flavor == "release":
return client_dict[client_name]['release'] % (cmd, self.iface) return client_dict[client_name]['release'] % {"cmd":cmd, "iface":self.iface}
else: else:
return client_dict[client_name]['id'] return client_dict[client_name]['id']
@@ -327,6 +336,7 @@ class BaseInterface(object):
self.dhclient_needs_verbose = False self.dhclient_needs_verbose = False
self.dhcpcd_cmd = self._find_program_path("dhcpcd") self.dhcpcd_cmd = self._find_program_path("dhcpcd")
self.pump_cmd = self._find_program_path("pump") self.pump_cmd = self._find_program_path("pump")
self.udhcpc_cmd = self._find_program_path("udhcpc")
def CheckWiredTools(self): def CheckWiredTools(self):
""" Check for the existence of ethtool and mii-tool. """ """ Check for the existence of ethtool and mii-tool. """
@@ -431,7 +441,7 @@ class BaseInterface(object):
if line == '': # Empty string means dhclient is done. if line == '': # Empty string means dhclient is done.
dhclient_complete = True dhclient_complete = True
else: else:
print line.strip('\n') print misc.to_unicode(line.strip('\n'))
if line.startswith('bound'): if line.startswith('bound'):
dhclient_success = True dhclient_success = True
dhclient_complete = True dhclient_complete = True
@@ -458,7 +468,7 @@ class BaseInterface(object):
elif line.strip().lower().startswith('Operation failed.'): elif line.strip().lower().startswith('Operation failed.'):
pump_success = False pump_success = False
pump_complete = True pump_complete = True
print line print misc.to_unicode(line)
return self._check_dhcp_result(pump_success) return self._check_dhcp_result(pump_success)
@@ -482,10 +492,34 @@ class BaseInterface(object):
dhcpcd_complete = True dhcpcd_complete = True
elif line == '': elif line == '':
dhcpcd_complete = True dhcpcd_complete = True
print line print misc.to_unicode(line)
return self._check_dhcp_result(dhcpcd_success) return self._check_dhcp_result(dhcpcd_success)
def _parse_udhcpc(self, pipe):
""" Determines if obtaining an IP using udhcpc succeeded.
Keyword arguments:
pipe -- stdout pipe to the dhcpcd process.
Returns:
'success' if successful, an error code string otherwise.
"""
udhcpc_complete = False
udhcpc_success = True
while not udhcpc_complete:
line = pipe.readline()
if line.endswith("failing"):
udhcpc_success = False
udhcpc_complete = True
elif line == '':
udhcpc_complete = True
print line
return self._check_dhcp_result(udhcpc_success)
def _check_dhcp_result(self, success): def _check_dhcp_result(self, success):
""" Print and return the correct DHCP connection result. """ Print and return the correct DHCP connection result.
@@ -524,6 +558,8 @@ class BaseInterface(object):
return self._parse_pump(pipe) return self._parse_pump(pipe)
elif DHCP_CLIENT == misc.DHCPCD: elif DHCP_CLIENT == misc.DHCPCD:
return self._parse_dhcpcd(pipe) return self._parse_dhcpcd(pipe)
elif DHCP_CLIENT == misc.UDHCPC:
return self._parse_udhcpc(pipe)
else: else:
print 'ERROR no dhclient found!' print 'ERROR no dhclient found!'
@@ -1106,15 +1142,21 @@ class BaseWirelessInterface(BaseInterface):
# An array for the access points # An array for the access points
access_points = [] access_points = []
access_points = {}
for cell in networks: for cell in networks:
# Only use sections where there is an ESSID. # Only use sections where there is an ESSID.
if 'ESSID:' in cell: if 'ESSID:' in cell:
# Add this network to the list of networks # Add this network to the list of networks
entry = self._ParseAccessPoint(cell, ralink_info) entry = self._ParseAccessPoint(cell, ralink_info)
if entry is not None: if entry is not None:
access_points.append(entry) # Normally we only get duplicate bssids with hidden
# networks. If we hit this, we only want the entry
# with the real essid to be in the network list.
if (entry['bssid'] not in access_points
or not entry['hidden']):
access_points[entry['bssid']] = entry
return access_points return access_points.values()
def _ParseAccessPoint(self, cell, ralink_info): def _ParseAccessPoint(self, cell, ralink_info):
""" Parse a single cell from the output of iwlist. """ Parse a single cell from the output of iwlist.
@@ -1325,7 +1367,14 @@ class BaseWirelessInterface(BaseInterface):
(strength, max_strength) = (None, None) (strength, max_strength) = (None, None)
if strength in ['', None]: if strength in ['', None]:
[(strength, max_strength)] = altstrength_pattern.findall(output) try:
[(strength, max_strength)] = altstrength_pattern.findall(output)
except ValueError:
# if the pattern was unable to match anything
# we'll return 101, which will allow us to stay
# connected even though we don't know the strength
# it also allows us to tell if
return 101
if strength not in ['', None] and max_strength: if strength not in ['', None] and max_strength:
return (100 * int(strength) // int(max_strength)) return (100 * int(strength) // int(max_strength))
elif strength not in ["", None]: elif strength not in ["", None]: