mirror of
https://github.com/gryf/wicd.git
synced 2025-12-19 20:38:00 +01:00
Scripts now can only be setup with root access and always run as root, instead of trying to run as the current user.
Possibly fixed problems with scripts not running when they should and/or leaving zombies. Slightly reworked the GUI to make the new script system look nicer. Removed the ability to set script information through built in daemon functions, it now has to be done by directly editing configuration files (which require root access to read/write).
This commit is contained in:
163
configscript.py
Executable file
163
configscript.py
Executable file
@@ -0,0 +1,163 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""Configure the scripts for a particular network
|
||||||
|
|
||||||
|
Script for configuring the scripts for a network passed in as a
|
||||||
|
command line argument. This needs to run a separate process because
|
||||||
|
editing scripts requires root access, and the GUI/Tray are typically
|
||||||
|
run as the current user.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007 Adam Blackburn
|
||||||
|
# Copyright (C) 2007 Dan O'Reilly
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License Version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import gtk
|
||||||
|
import ConfigParser
|
||||||
|
import dbus
|
||||||
|
import dbus.service
|
||||||
|
import pygtk
|
||||||
|
import gtk.glade
|
||||||
|
|
||||||
|
import wpath
|
||||||
|
import misc
|
||||||
|
|
||||||
|
_ = misc.get_gettext()
|
||||||
|
|
||||||
|
language = {}
|
||||||
|
language['configure_scripts'] = "Configure Scripts"
|
||||||
|
language['before_script'] = "Pre-connection Script"
|
||||||
|
language['after_script'] = "Post-connection Script"
|
||||||
|
language['disconnect_script'] = "Disconnection Script"
|
||||||
|
|
||||||
|
bus = dbus.SystemBus()
|
||||||
|
|
||||||
|
# Connect to the daemon
|
||||||
|
try:
|
||||||
|
print 'Attempting to connect tray to daemon...'
|
||||||
|
proxy_obj = bus.get_object('org.wicd.daemon', '/org/wicd/daemon')
|
||||||
|
print 'Success.'
|
||||||
|
except Exception:
|
||||||
|
print 'Daemon not running...'
|
||||||
|
misc.PromptToStartDaemon()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
wireless = dbus.Interface(proxy_obj, 'org.wicd.daemon.wireless')
|
||||||
|
wired = dbus.Interface(proxy_obj, 'org.wicd.daemon.wired')
|
||||||
|
config = dbus.Interface(proxy_obj, 'org.wicd.daemon.config')
|
||||||
|
|
||||||
|
wireless_conf = wpath.etc + 'wireless-settings.conf'
|
||||||
|
wired_conf = wpath.etc + 'wired-settings.conf'
|
||||||
|
|
||||||
|
|
||||||
|
def none_to_blank(text):
|
||||||
|
"""if text is None, 'None', or '' then return '', otherwise return str(text)"""
|
||||||
|
if text == None or text == "None" or text == "":
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
return str(text)
|
||||||
|
|
||||||
|
def blank_to_none(text):
|
||||||
|
"""Convert an empty or null string to 'None'"""
|
||||||
|
if text == "" or text == None:
|
||||||
|
return "None"
|
||||||
|
else:
|
||||||
|
return str(text)
|
||||||
|
|
||||||
|
def get_script_info(network, network_type):
|
||||||
|
"""Reads script info from disk and load it into the configuration dialog"""
|
||||||
|
info = {}
|
||||||
|
con = ConfigParser.ConfigParser()
|
||||||
|
if network_type == "wired":
|
||||||
|
con.read(wired_conf)
|
||||||
|
if con.has_section(network):
|
||||||
|
info["pre_entry"] = con.get(network, "beforescript")
|
||||||
|
info["post_entry"] = con.get(network, "afterscript")
|
||||||
|
info["disconnect_entry"] = con.get(network, "disconnectscript")
|
||||||
|
else:
|
||||||
|
bssid = wireless.GetWirelessProperty(int(network), "bssid")
|
||||||
|
con.read(wireless_conf)
|
||||||
|
if con.has_section(bssid):
|
||||||
|
info["pre_entry"] = con.get(bssid, "beforescript")
|
||||||
|
info["post_entry"] = con.get(bssid, "afterscript")
|
||||||
|
info["disconnect_entry"] = con.get(bssid, "disconnectscript")
|
||||||
|
|
||||||
|
return info
|
||||||
|
|
||||||
|
def write_scripts(network, network_type, script_info):
|
||||||
|
"""Writes script info to disk and loads it into the daemon"""
|
||||||
|
con = ConfigParser.ConfigParser()
|
||||||
|
if network_type == "wired":
|
||||||
|
con.read(wired_conf)
|
||||||
|
if con.has_section(network):
|
||||||
|
con.set(network, "beforescript", script_info["pre_entry"])
|
||||||
|
con.set(network, "afterscript", script_info["post_entry"])
|
||||||
|
con.set(network, "disconnectscript", script_info["disconnect_entry"])
|
||||||
|
con.write(open(wired_conf, "w"))
|
||||||
|
config.ReadWiredNetworkProfile(network)
|
||||||
|
else:
|
||||||
|
bssid = wireless.GetWirelessProperty(int(network), "bssid")
|
||||||
|
con.read(wireless_conf)
|
||||||
|
if con.has_section(bssid):
|
||||||
|
con.set(bssid, "beforescript", script_info["pre_entry"])
|
||||||
|
con.set(bssid, "afterscript", script_info["post_entry"])
|
||||||
|
con.set(bssid, "disconnectscript", script_info["disconnect_entry"])
|
||||||
|
con.write(open(wireless_conf, "w"))
|
||||||
|
config.ReadWirelessNetworkProfile(int(network))
|
||||||
|
config.SaveWirelessNetworkProfile(int(network))
|
||||||
|
|
||||||
|
def main (argv):
|
||||||
|
"""Runs the script configuration dialog."""
|
||||||
|
if len(argv) < 2:
|
||||||
|
print 'Network id to configure is missing, aborting.'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
network = argv[1]
|
||||||
|
network_type = argv[2]
|
||||||
|
|
||||||
|
script_info = get_script_info(network, network_type)
|
||||||
|
|
||||||
|
gladefile = wpath.etc + "wicd.glade"
|
||||||
|
wTree = gtk.glade.XML(gladefile)
|
||||||
|
dialog = wTree.get_widget("configure_script_dialog")
|
||||||
|
wTree.get_widget("pre_label").set_label(language['before_script'] + ":")
|
||||||
|
wTree.get_widget("post_label").set_label(language['after_script'] + ":")
|
||||||
|
wTree.get_widget("disconnect_label").set_label(language['disconnect_script'] + ":")
|
||||||
|
wTree.get_widget("window1").hide()
|
||||||
|
|
||||||
|
pre_entry = wTree.get_widget("pre_entry")
|
||||||
|
post_entry = wTree.get_widget("post_entry")
|
||||||
|
disconnect_entry = wTree.get_widget("disconnect_entry")
|
||||||
|
|
||||||
|
pre_entry.set_text(none_to_blank(script_info["pre_entry"]))
|
||||||
|
post_entry.set_text(none_to_blank(script_info["post_entry"]))
|
||||||
|
disconnect_entry.set_text(none_to_blank(script_info["disconnect_entry"]))
|
||||||
|
|
||||||
|
dialog.show_all()
|
||||||
|
|
||||||
|
result = dialog.run()
|
||||||
|
if result == 1:
|
||||||
|
script_info["pre_entry"] = blank_to_none(pre_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())
|
||||||
|
write_scripts(network, network_type, script_info)
|
||||||
|
dialog.destroy()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(sys.argv)
|
||||||
300
daemon.py
300
daemon.py
@@ -467,30 +467,6 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
self.wired.Disconnect()
|
self.wired.Disconnect()
|
||||||
#end function DisconnectWireless
|
#end function DisconnectWireless
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wireless')
|
|
||||||
def SetWirelessBeforeScript(self,networkid,script):
|
|
||||||
if script == '':
|
|
||||||
script = None
|
|
||||||
self.SetWirelessProperty(networkid,"beforescript",script)
|
|
||||||
self.wifi.before_script = script
|
|
||||||
#end function SetWirelessBeforeScript
|
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wireless')
|
|
||||||
def SetWirelessDisconnectScript(self,networkid,script):
|
|
||||||
if script == '':
|
|
||||||
script = None
|
|
||||||
self.SetWirelessProperty(networkid,"disconnectscript",script)
|
|
||||||
self.wifi.disconnect_script = script
|
|
||||||
#end function SetWirelessDisconnectScript
|
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wireless')
|
|
||||||
def SetWirelessAfterScript(self,networkid,script):
|
|
||||||
if script == '':
|
|
||||||
script = None
|
|
||||||
self.SetWirelessProperty(networkid,"afterscript",script)
|
|
||||||
self.wifi.after_script = script
|
|
||||||
#end function SetWirelessAfterScript
|
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wireless')
|
@dbus.service.method('org.wicd.daemon.wireless')
|
||||||
def GetNumberOfNetworks(self):
|
def GetNumberOfNetworks(self):
|
||||||
'''returns number of networks'''
|
'''returns number of networks'''
|
||||||
@@ -528,7 +504,7 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
''' Retrieves wireless property from the network specified '''
|
''' Retrieves wireless property from the network specified '''
|
||||||
value = self.LastScan[networkid].get(property)
|
value = self.LastScan[networkid].get(property)
|
||||||
try:
|
try:
|
||||||
value = value.encode('utf-8')
|
value = misc.to_unicode(value)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
if self.debug_mode == 1:
|
if self.debug_mode == 1:
|
||||||
@@ -542,6 +518,10 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
''' Sets property to value in network specified '''
|
''' Sets property to value in network specified '''
|
||||||
#simple - set the value of the item in our current data
|
#simple - set the value of the item in our current data
|
||||||
#to the value the client asked for
|
#to the value the client asked for
|
||||||
|
if (property.strip()).endswith("script"):
|
||||||
|
print "Setting script properties through the daemon \
|
||||||
|
is not permitted."
|
||||||
|
return False
|
||||||
print 'setting wireless network',networkid,'property',property,'to value',value
|
print 'setting wireless network',networkid,'property',property,'to value',value
|
||||||
self.LastScan[networkid][property] = misc.Noneify(value)
|
self.LastScan[networkid][property] = misc.Noneify(value)
|
||||||
#end function SetProperty
|
#end function SetProperty
|
||||||
@@ -710,33 +690,6 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
return False
|
return False
|
||||||
#end function CheckIfWiredConnecting
|
#end function CheckIfWiredConnecting
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wired')
|
|
||||||
def SetWiredBeforeScript(self,script):
|
|
||||||
'''sets pre-connection script to run for a wired connection'''
|
|
||||||
if script == '':
|
|
||||||
script = None
|
|
||||||
self.SetWiredProperty("beforescript",script)
|
|
||||||
self.wired.before_script = script
|
|
||||||
#end function SetWiredBeforeScript
|
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wired')
|
|
||||||
def SetWiredDisconnectScript(self,script):
|
|
||||||
'''sets script to run on connection disconnect'''
|
|
||||||
if script == '':
|
|
||||||
script = None
|
|
||||||
self.SetWiredProperty("disconnectscript",script)
|
|
||||||
self.wired.disconnect_script = script
|
|
||||||
#end function SetWirelessDisconnectScript
|
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wired')
|
|
||||||
def SetWiredAfterScript(self,script):
|
|
||||||
'''sets post-connection script to run for a wired connection'''
|
|
||||||
if script == '':
|
|
||||||
script = None
|
|
||||||
self.SetWiredProperty("afterscript",script)
|
|
||||||
self.wired.after_script = script
|
|
||||||
#end function SetWiredAfterScript
|
|
||||||
|
|
||||||
@dbus.service.method('org.wicd.daemon.wired')
|
@dbus.service.method('org.wicd.daemon.wired')
|
||||||
def SetWiredAutoConnectMethod(self,method):
|
def SetWiredAutoConnectMethod(self,method):
|
||||||
'''sets which method the user wants to autoconnect to wired networks'''
|
'''sets which method the user wants to autoconnect to wired networks'''
|
||||||
@@ -769,6 +722,10 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
@dbus.service.method('org.wicd.daemon.wired')
|
@dbus.service.method('org.wicd.daemon.wired')
|
||||||
def SetWiredProperty(self,property,value):
|
def SetWiredProperty(self,property,value):
|
||||||
if self.WiredNetwork:
|
if self.WiredNetwork:
|
||||||
|
if (property.strip()).endswith("script"):
|
||||||
|
print "Setting script properties through the daemon \
|
||||||
|
is not permitted."
|
||||||
|
return False
|
||||||
self.WiredNetwork[property] = misc.Noneify(value)
|
self.WiredNetwork[property] = misc.Noneify(value)
|
||||||
if self.debug_mode == 1:
|
if self.debug_mode == 1:
|
||||||
print 'set',property,'to',misc.Noneify(value)
|
print 'set',property,'to',misc.Noneify(value)
|
||||||
@@ -938,7 +895,7 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
def SaveWiredNetworkProfile(self,profilename):
|
def SaveWiredNetworkProfile(self,profilename):
|
||||||
''' Writes a wired network profile to disk '''
|
''' Writes a wired network profile to disk '''
|
||||||
#should include: profilename,ip,netmask,gateway,dns1,dns2
|
#should include: profilename,ip,netmask,gateway,dns1,dns2
|
||||||
profilename = profilename.encode('utf-8')
|
profilename = misc.to_unicode(profilename)
|
||||||
print "setting profile for " + str(profilename)
|
print "setting profile for " + str(profilename)
|
||||||
config = ConfigParser.ConfigParser()
|
config = ConfigParser.ConfigParser()
|
||||||
config.read(self.wired_conf)
|
config.read(self.wired_conf)
|
||||||
@@ -955,7 +912,7 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
def ReadWiredNetworkProfile(self,profilename):
|
def ReadWiredNetworkProfile(self,profilename):
|
||||||
''' Reads a wired network profile in as the currently active profile '''
|
''' Reads a wired network profile in as the currently active profile '''
|
||||||
profile = {}
|
profile = {}
|
||||||
profilename = profilename.encode('utf-8')
|
profilename = misc.to_unicode(profilename)
|
||||||
config = ConfigParser.ConfigParser()
|
config = ConfigParser.ConfigParser()
|
||||||
config.read(self.wired_conf)
|
config.read(self.wired_conf)
|
||||||
if config.has_section(profilename) == True:
|
if config.has_section(profilename) == True:
|
||||||
@@ -999,6 +956,9 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
@dbus.service.method('org.wicd.daemon.config')
|
@dbus.service.method('org.wicd.daemon.config')
|
||||||
def SaveWirelessNetworkProperty(self,id,option):
|
def SaveWirelessNetworkProperty(self,id,option):
|
||||||
''' Writes a particular wireless property to disk '''
|
''' Writes a particular wireless property to disk '''
|
||||||
|
if (option.strip()).endswith("script"):
|
||||||
|
print 'you cannot save script information to disk through the daemon.'
|
||||||
|
return
|
||||||
print "setting network option " + str(option) + " to " + str(self.LastScan[id][option])
|
print "setting network option " + str(option) + " to " + str(self.LastScan[id][option])
|
||||||
config = ConfigParser.ConfigParser()
|
config = ConfigParser.ConfigParser()
|
||||||
config.read(self.wireless_conf)
|
config.read(self.wireless_conf)
|
||||||
@@ -1015,27 +975,13 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
print self.LastScan[id]["bssid"]
|
print self.LastScan[id]["bssid"]
|
||||||
if config.has_section(self.LastScan[id]["bssid"]):
|
if config.has_section(self.LastScan[id]["bssid"]):
|
||||||
self.LastScan[id]["has_profile"] = True
|
self.LastScan[id]["has_profile"] = True
|
||||||
if config.has_option(self.LastScan[id]["bssid"], "beforescript"):
|
|
||||||
self.LastScan[id]["beforescript"] = misc.Noneify(config.get(self.LastScan[id]["bssid"], "beforescript"))
|
|
||||||
else:
|
|
||||||
self.LastScan[id]["beforescript"] = None
|
|
||||||
if config.has_option(self.LastScan[id]["bssid"], "afterscript"):
|
|
||||||
self.LastScan[id]["afterscript"] = misc.Noneify(config.get(self.LastScan[id]["bssid"],
|
|
||||||
"afterscript"))
|
|
||||||
else:
|
|
||||||
self.LastScan[id]["afterscript"] = None
|
|
||||||
if config.has_option(self.LastScan[id]["bssid"], "disconnectscript"):
|
|
||||||
self.LastScan[id]["disconnectscript"] = misc.Noneify(config.get(self.LastScan[id]["bssid"],
|
|
||||||
"disconnectscript"))
|
|
||||||
else:
|
|
||||||
self.LastScan[id]["disconnectscript"] = None
|
|
||||||
|
|
||||||
#read the essid because we be needing to name those hidden
|
# Read the essid because we be needing to name those hidden
|
||||||
#wireless networks now - but only read it if it is hidden
|
# wireless networks now - but only read it if it is hidden.
|
||||||
if self.LastScan[id]["hidden"] == True:
|
if self.LastScan[id]["hidden"] == True:
|
||||||
self.LastScan[id]["essid"] = misc.Noneify(config.get(self.LastScan[id]["bssid"], "essid"))
|
self.LastScan[id]["essid"] = misc.Noneify(config.get(self.LastScan[id]["bssid"], "essid"))
|
||||||
for x in config.options(self.LastScan[id]["bssid"]):
|
for x in config.options(self.LastScan[id]["bssid"]):
|
||||||
if self.LastScan[id].has_key(x) == False:
|
if self.LastScan[id].has_key(x) == False or x.endswith("script"):
|
||||||
self.LastScan[id][x] = misc.Noneify(config.get(self.LastScan[id]["bssid"], x))
|
self.LastScan[id][x] = misc.Noneify(config.get(self.LastScan[id]["bssid"], x))
|
||||||
return "100: Loaded Profile"
|
return "100: Loaded Profile"
|
||||||
else:
|
else:
|
||||||
@@ -1266,112 +1212,6 @@ class ConnectionWizard(dbus.service.Object):
|
|||||||
#end function ReadConfig
|
#end function ReadConfig
|
||||||
|
|
||||||
|
|
||||||
def usage():
|
|
||||||
print """
|
|
||||||
wicd 1.33
|
|
||||||
wireless (and wired) connection daemon.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
\t-s\t--no-scan\tDon't auto-scan/auto-connect.
|
|
||||||
\t-f\t--no-daemon\tDon't daemonize (run in foreground).
|
|
||||||
\t-e\t--no-stderr\tDon't redirect stderr.
|
|
||||||
\t-o\t--no-stdout\tDon't redirect stdout.
|
|
||||||
\t-h\t--help\t\tPrint this help.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def daemonize():
|
|
||||||
""" Disconnect from the controlling terminal.
|
|
||||||
|
|
||||||
Fork twice, once to disconnect ourselves from the parent terminal and a
|
|
||||||
second time to prevent any files we open from becoming our controlling
|
|
||||||
terminal.
|
|
||||||
|
|
||||||
For more info see http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
|
|
||||||
|
|
||||||
"""
|
|
||||||
# Fork the first time to disconnect from the parent terminal and
|
|
||||||
# exit the parent process.
|
|
||||||
try:
|
|
||||||
pid = os.fork()
|
|
||||||
if pid > 0:
|
|
||||||
sys.exit(0)
|
|
||||||
except OSError, e:
|
|
||||||
print >> sys.stderr, "Fork #1 failed: %d (%s)" % (e.errno, e.strerror)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Decouple from parent environment to stop us from being a zombie.
|
|
||||||
os.setsid()
|
|
||||||
os.umask(0)
|
|
||||||
|
|
||||||
# Fork the second time to prevent us from opening a file that will
|
|
||||||
# become our controlling terminal.
|
|
||||||
try:
|
|
||||||
pid = os.fork()
|
|
||||||
if pid > 0:
|
|
||||||
print "wicd daemon: pid " + str(pid)
|
|
||||||
sys.exit(0)
|
|
||||||
except OSError, e:
|
|
||||||
print >> sys.stderr, "Fork #2 failed: %d (%s)" % (e.errno, e.strerror)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def main(argv):
|
|
||||||
""" The main daemon program.
|
|
||||||
|
|
||||||
Keyword arguments:
|
|
||||||
argv -- The arguments passed to the script.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
do_daemonize = True
|
|
||||||
redirect_stderr = True
|
|
||||||
redirect_stdout = True
|
|
||||||
auto_scan = True
|
|
||||||
|
|
||||||
try:
|
|
||||||
opts, args = getopt.getopt(sys.argv[1:], 'feos',
|
|
||||||
['help', 'no-daemon', 'no-stderr', 'no-stdout', 'no-scan'])
|
|
||||||
except getopt.GetoptError:
|
|
||||||
# Print help information and exit
|
|
||||||
usage()
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
for o, a in opts:
|
|
||||||
if o in ('-h', '--help'):
|
|
||||||
usage()
|
|
||||||
sys.exit()
|
|
||||||
if o in ('-e', '--no-stderr'):
|
|
||||||
redirect_stderr = False
|
|
||||||
if o in ('-o', '--no-stdout'):
|
|
||||||
redirect_stdout = False
|
|
||||||
if o in ('-f', '--no-daemon'):
|
|
||||||
do_daemonize = False
|
|
||||||
if o in ('-s', '--no-scan'):
|
|
||||||
auto_scan = False
|
|
||||||
|
|
||||||
if do_daemonize: daemonize()
|
|
||||||
|
|
||||||
if redirect_stderr or redirect_stdout: output = LogWriter()
|
|
||||||
if redirect_stdout: sys.stdout = output
|
|
||||||
if redirect_stderr: sys.stderr = output
|
|
||||||
|
|
||||||
print '---------------------------'
|
|
||||||
print 'wicd initializing...'
|
|
||||||
print '---------------------------'
|
|
||||||
|
|
||||||
# Open the DBUS session
|
|
||||||
session_bus = dbus.SystemBus()
|
|
||||||
bus_name = dbus.service.BusName('org.wicd.daemon', bus=session_bus)
|
|
||||||
object = ConnectionWizard(bus_name, auto_connect=auto_scan)
|
|
||||||
connection_status = ConnectionStatus(object)
|
|
||||||
|
|
||||||
gobject.timeout_add(3000, connection_status.update_connection_status)
|
|
||||||
|
|
||||||
# Enter the main loop
|
|
||||||
mainloop = gobject.MainLoop()
|
|
||||||
mainloop.run()
|
|
||||||
|
|
||||||
class ConnectionStatus():
|
class ConnectionStatus():
|
||||||
def __init__(self, connection):
|
def __init__(self, connection):
|
||||||
"""Initialize variables needed for the connection status methods."""
|
"""Initialize variables needed for the connection status methods."""
|
||||||
@@ -1515,5 +1355,111 @@ class ConnectionStatus():
|
|||||||
conn.AutoConnect(True)
|
conn.AutoConnect(True)
|
||||||
|
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print """
|
||||||
|
wicd 1.33
|
||||||
|
wireless (and wired) connection daemon.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
\t-s\t--no-scan\tDon't auto-scan/auto-connect.
|
||||||
|
\t-f\t--no-daemon\tDon't daemonize (run in foreground).
|
||||||
|
\t-e\t--no-stderr\tDon't redirect stderr.
|
||||||
|
\t-o\t--no-stdout\tDon't redirect stdout.
|
||||||
|
\t-h\t--help\t\tPrint this help.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def daemonize():
|
||||||
|
""" Disconnect from the controlling terminal.
|
||||||
|
|
||||||
|
Fork twice, once to disconnect ourselves from the parent terminal and a
|
||||||
|
second time to prevent any files we open from becoming our controlling
|
||||||
|
terminal.
|
||||||
|
|
||||||
|
For more info see http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Fork the first time to disconnect from the parent terminal and
|
||||||
|
# exit the parent process.
|
||||||
|
try:
|
||||||
|
pid = os.fork()
|
||||||
|
if pid > 0:
|
||||||
|
sys.exit(0)
|
||||||
|
except OSError, e:
|
||||||
|
print >> sys.stderr, "Fork #1 failed: %d (%s)" % (e.errno, e.strerror)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Decouple from parent environment to stop us from being a zombie.
|
||||||
|
os.setsid()
|
||||||
|
os.umask(0)
|
||||||
|
|
||||||
|
# Fork the second time to prevent us from opening a file that will
|
||||||
|
# become our controlling terminal.
|
||||||
|
try:
|
||||||
|
pid = os.fork()
|
||||||
|
if pid > 0:
|
||||||
|
print "wicd daemon: pid " + str(pid)
|
||||||
|
sys.exit(0)
|
||||||
|
except OSError, e:
|
||||||
|
print >> sys.stderr, "Fork #2 failed: %d (%s)" % (e.errno, e.strerror)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
""" The main daemon program.
|
||||||
|
|
||||||
|
Keyword arguments:
|
||||||
|
argv -- The arguments passed to the script.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
do_daemonize = True
|
||||||
|
redirect_stderr = True
|
||||||
|
redirect_stdout = True
|
||||||
|
auto_scan = True
|
||||||
|
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(sys.argv[1:], 'feos',
|
||||||
|
['help', 'no-daemon', 'no-stderr', 'no-stdout', 'no-scan'])
|
||||||
|
except getopt.GetoptError:
|
||||||
|
# Print help information and exit
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
for o, a in opts:
|
||||||
|
if o in ('-h', '--help'):
|
||||||
|
usage()
|
||||||
|
sys.exit()
|
||||||
|
if o in ('-e', '--no-stderr'):
|
||||||
|
redirect_stderr = False
|
||||||
|
if o in ('-o', '--no-stdout'):
|
||||||
|
redirect_stdout = False
|
||||||
|
if o in ('-f', '--no-daemon'):
|
||||||
|
do_daemonize = False
|
||||||
|
if o in ('-s', '--no-scan'):
|
||||||
|
auto_scan = False
|
||||||
|
|
||||||
|
if do_daemonize: daemonize()
|
||||||
|
|
||||||
|
if redirect_stderr or redirect_stdout: output = LogWriter()
|
||||||
|
if redirect_stdout: sys.stdout = output
|
||||||
|
if redirect_stderr: sys.stderr = output
|
||||||
|
|
||||||
|
print '---------------------------'
|
||||||
|
print 'wicd initializing...'
|
||||||
|
print '---------------------------'
|
||||||
|
|
||||||
|
# Open the DBUS session
|
||||||
|
session_bus = dbus.SystemBus()
|
||||||
|
bus_name = dbus.service.BusName('org.wicd.daemon', bus=session_bus)
|
||||||
|
object = ConnectionWizard(bus_name, auto_connect=auto_scan)
|
||||||
|
connection_status = ConnectionStatus(object)
|
||||||
|
|
||||||
|
gobject.timeout_add(3000, connection_status.update_connection_status)
|
||||||
|
|
||||||
|
# Enter the main loop
|
||||||
|
mainloop = gobject.MainLoop()
|
||||||
|
mainloop.run()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main(sys.argv)
|
main(sys.argv)
|
||||||
|
|||||||
84
gui.py
84
gui.py
@@ -117,11 +117,9 @@ language['use_static_dns'] = _('Use Static DNS')
|
|||||||
language['use_encryption'] = _('Use Encryption')
|
language['use_encryption'] = _('Use Encryption')
|
||||||
language['advanced_settings'] = _('Advanced Settings')
|
language['advanced_settings'] = _('Advanced Settings')
|
||||||
language['wired_network'] = _('Wired Network')
|
language['wired_network'] = _('Wired Network')
|
||||||
language['wired_network_instructions'] = _('To connect to a wired network, you \
|
language['wired_network_instructions'] = _('To connect to a wired network, you'
|
||||||
must create a network profile. To \
|
' must create a network profile. To create a network profile, type a name that'
|
||||||
create a network profile, type a \
|
' describes this network, and press Add.')
|
||||||
name that describes this network, \
|
|
||||||
and press Add.')
|
|
||||||
language['automatic_connect'] = _('Automatically connect to this network')
|
language['automatic_connect'] = _('Automatically connect to this network')
|
||||||
language['secured'] = _('Secured')
|
language['secured'] = _('Secured')
|
||||||
language['unsecured'] = _('Unsecured')
|
language['unsecured'] = _('Unsecured')
|
||||||
@@ -166,6 +164,7 @@ language['choose_wired_profile'] = _('Select or create a wired profile to connec
|
|||||||
language['wired_network_found'] = _('Wired connection detected')
|
language['wired_network_found'] = _('Wired connection detected')
|
||||||
language['stop_showing_chooser'] = _('Stop Showing Autoconnect pop-up temporarily')
|
language['stop_showing_chooser'] = _('Stop Showing Autoconnect pop-up temporarily')
|
||||||
language['display_type_dialog'] = _('Use dBm to measure signal strength')
|
language['display_type_dialog'] = _('Use dBm to measure signal strength')
|
||||||
|
language['scripts'] = _('Scripts')
|
||||||
|
|
||||||
language['0'] = _('0')
|
language['0'] = _('0')
|
||||||
language['1'] = _('1')
|
language['1'] = _('1')
|
||||||
@@ -200,11 +199,11 @@ language['done'] = _('Done connecting...')
|
|||||||
|
|
||||||
class LinkButton(gtk.EventBox):
|
class LinkButton(gtk.EventBox):
|
||||||
label = None
|
label = None
|
||||||
def __init__(self):
|
def __init__(self, txt):
|
||||||
gtk.EventBox.__init__(self)
|
gtk.EventBox.__init__(self)
|
||||||
self.connect("realize",self.__setHandCursor) #set the hand cursor when the box is initalized
|
self.connect("realize",self.__setHandCursor) #set the hand cursor when the box is initalized
|
||||||
label = gtk.Label()
|
label = gtk.Label()
|
||||||
label.set_markup(" <span color=\"blue\">" + language['connect'] + "</span>")
|
label.set_markup("[ <span color=\"blue\">" + txt + "</span> ]")
|
||||||
label.set_alignment(0,.5)
|
label.set_alignment(0,.5)
|
||||||
label.show()
|
label.show()
|
||||||
self.add(label)
|
self.add(label)
|
||||||
@@ -324,12 +323,13 @@ class PrettyNetworkEntry(gtk.HBox):
|
|||||||
self.expander.higherLevel = self # Do this so that the expander can access the stuff inside me
|
self.expander.higherLevel = self # Do this so that the expander can access the stuff inside me
|
||||||
self.tempVBox = gtk.VBox(False,1)
|
self.tempVBox = gtk.VBox(False,1)
|
||||||
self.tempVBox.show()
|
self.tempVBox.show()
|
||||||
self.connectButton = LinkButton()
|
self.connectButton = LinkButton(language["connect"])
|
||||||
self.connectButton.show()
|
self.connectButton.show()
|
||||||
self.tempVBox.pack_start(self.expander,fill=False,expand=False)
|
self.tempVBox.pack_start(self.expander,fill=False,expand=False)
|
||||||
self.tempVBox.pack_start(self.connectButton,fill=False,expand=False)
|
self.tempVBox.pack_start(self.connectButton,fill=False,expand=False)
|
||||||
self.pack_end(self.tempVBox)
|
self.pack_end(self.tempVBox)
|
||||||
|
|
||||||
|
|
||||||
class PrettyWiredNetworkEntry(PrettyNetworkEntry):
|
class PrettyWiredNetworkEntry(PrettyNetworkEntry):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
PrettyNetworkEntry.__init__(self,WiredNetworkEntry())
|
PrettyNetworkEntry.__init__(self,WiredNetworkEntry())
|
||||||
@@ -424,24 +424,13 @@ class NetworkEntry(gtk.Expander):
|
|||||||
self.txtDNS1 = LabelEntry(language['dns'] + ' ' + language['1'])
|
self.txtDNS1 = LabelEntry(language['dns'] + ' ' + language['1'])
|
||||||
self.txtDNS2 = LabelEntry(language['dns'] + ' ' + language['2'])
|
self.txtDNS2 = LabelEntry(language['dns'] + ' ' + language['2'])
|
||||||
self.txtDNS3 = LabelEntry(language['dns'] + ' ' + language['3'])
|
self.txtDNS3 = LabelEntry(language['dns'] + ' ' + language['3'])
|
||||||
#dns_addresses = daemon.GetGlobalDNSAddresses()
|
self.scriptButton = LinkButton(language['scripts'])
|
||||||
#self.txtDNS1.set_text(dns_addresses[0])
|
|
||||||
#self.txtDNS2.set_text(dns_addresses[1])
|
|
||||||
#self.txtDNS3.set_text(dns_addresses[2])
|
|
||||||
self.txtBeforeScript = LabelEntry(language['before_script'])
|
|
||||||
self.txtAfterScript = LabelEntry(language['after_script'])
|
|
||||||
self.txtDisconnectScript = LabelEntry(language['disconnect_script'])
|
|
||||||
self.txtBeforeScript.label.set_size_request(200,-1)
|
|
||||||
self.txtAfterScript.label.set_size_request(200,-1)
|
|
||||||
self.txtDisconnectScript.label.set_size_request(200,-1)
|
|
||||||
self.checkboxStaticIP = gtk.CheckButton(language['use_static_ip'])
|
self.checkboxStaticIP = gtk.CheckButton(language['use_static_ip'])
|
||||||
self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns'])
|
self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns'])
|
||||||
self.checkboxGlobalDNS = gtk.CheckButton(language['use_global_dns'])
|
self.checkboxGlobalDNS = gtk.CheckButton(language['use_global_dns'])
|
||||||
self.expanderAdvanced = gtk.Expander(language['advanced_settings'])
|
self.expanderAdvanced = gtk.Expander(language['advanced_settings'])
|
||||||
self.expanderScripts = gtk.Expander(language['script_settings'])
|
|
||||||
self.vboxTop = gtk.VBox(False,0)
|
self.vboxTop = gtk.VBox(False,0)
|
||||||
self.vboxAdvanced = gtk.VBox(False,0)
|
self.vboxAdvanced = gtk.VBox(False,0)
|
||||||
self.vboxScripts = gtk.VBox(False,0)
|
|
||||||
self.hboxDNS = gtk.HBox(False,0)
|
self.hboxDNS = gtk.HBox(False,0)
|
||||||
self.hboxDNS.pack_start(self.checkboxStaticDNS)
|
self.hboxDNS.pack_start(self.checkboxStaticDNS)
|
||||||
self.hboxDNS.pack_start(self.checkboxGlobalDNS)
|
self.hboxDNS.pack_start(self.checkboxGlobalDNS)
|
||||||
@@ -453,13 +442,8 @@ class NetworkEntry(gtk.Expander):
|
|||||||
self.vboxAdvanced.pack_start(self.txtDNS1,fill=False,expand=False)
|
self.vboxAdvanced.pack_start(self.txtDNS1,fill=False,expand=False)
|
||||||
self.vboxAdvanced.pack_start(self.txtDNS2,fill=False,expand=False)
|
self.vboxAdvanced.pack_start(self.txtDNS2,fill=False,expand=False)
|
||||||
self.vboxAdvanced.pack_start(self.txtDNS3,fill=False,expand=False)
|
self.vboxAdvanced.pack_start(self.txtDNS3,fill=False,expand=False)
|
||||||
self.vboxScripts.pack_start(self.txtBeforeScript,fill=False,expand=False)
|
self.vboxTop.pack_start(self.expanderAdvanced, fill=False, expand=False)
|
||||||
self.vboxScripts.pack_start(self.txtAfterScript,fill=False,expand=False)
|
|
||||||
self.vboxScripts.pack_start(self.txtDisconnectScript,fill=False,expand=False)
|
|
||||||
self.vboxTop.pack_end(self.expanderScripts,fill=False,expand=False)
|
|
||||||
self.vboxTop.pack_end(self.expanderAdvanced,fill=False,expand=False)
|
|
||||||
self.expanderAdvanced.add(self.vboxAdvanced)
|
self.expanderAdvanced.add(self.vboxAdvanced)
|
||||||
self.expanderScripts.add(self.vboxScripts)
|
|
||||||
# Connect the events to the actions
|
# Connect the events to the actions
|
||||||
self.checkboxStaticIP.connect("toggled",self.toggleIPCheckbox)
|
self.checkboxStaticIP.connect("toggled",self.toggleIPCheckbox)
|
||||||
self.checkboxStaticDNS.connect("toggled",self.toggleDNSCheckbox)
|
self.checkboxStaticDNS.connect("toggled",self.toggleDNSCheckbox)
|
||||||
@@ -567,22 +551,22 @@ class WiredNetworkEntry(NetworkEntry):
|
|||||||
self.profileHelp = gtk.Label(language['wired_network_instructions'])
|
self.profileHelp = gtk.Label(language['wired_network_instructions'])
|
||||||
self.checkboxDefaultProfile = gtk.CheckButton(language['default_wired'])
|
self.checkboxDefaultProfile = gtk.CheckButton(language['default_wired'])
|
||||||
|
|
||||||
self.profileHelp.set_width_chars(5) #the default is a tad too long
|
|
||||||
self.profileHelp.set_padding(10,10)
|
|
||||||
self.profileHelp.set_justify(gtk.JUSTIFY_LEFT)
|
self.profileHelp.set_justify(gtk.JUSTIFY_LEFT)
|
||||||
self.profileHelp.set_line_wrap(True)
|
self.profileHelp.set_line_wrap(True)
|
||||||
|
|
||||||
self.vboxTop.pack_start(self.profileHelp,fill=False,expand=False)
|
self.vboxTop.pack_start(self.profileHelp,fill=True,expand=True)
|
||||||
self.hboxTemp.pack_start(self.comboProfileNames,fill=True,expand=True)
|
self.hboxTemp.pack_start(self.comboProfileNames,fill=True,expand=True)
|
||||||
self.hboxTemp.pack_start(self.buttonAdd,fill=False,expand=False)
|
self.hboxTemp.pack_start(self.buttonAdd,fill=False,expand=False)
|
||||||
self.hboxTemp.pack_start(self.buttonDelete,fill=False,expand=False)
|
self.hboxTemp.pack_start(self.buttonDelete,fill=False,expand=False)
|
||||||
hboxDef.pack_start(self.checkboxDefaultProfile,fill=False,expand=False)
|
hboxDef.pack_start(self.checkboxDefaultProfile,fill=False,expand=False)
|
||||||
|
|
||||||
self.buttonAdd.connect("clicked",self.addProfile) #hook up our buttons
|
self.buttonAdd.connect("clicked",self.addProfile)
|
||||||
self.buttonDelete.connect("clicked",self.removeProfile)
|
self.buttonDelete.connect("clicked",self.removeProfile)
|
||||||
self.comboProfileNames.connect("changed",self.changeProfile)
|
self.comboProfileNames.connect("changed",self.changeProfile)
|
||||||
|
self.scriptButton.connect("button-press-event", self.editScripts)
|
||||||
self.vboxTop.pack_start(self.hboxTemp)
|
self.vboxTop.pack_start(self.hboxTemp)
|
||||||
self.vboxTop.pack_start(hboxDef)
|
self.vboxTop.pack_start(hboxDef)
|
||||||
|
self.vboxTop.pack_start(self.scriptButton)
|
||||||
|
|
||||||
if stringToBoolean(wired.GetWiredProperty("default")) == True:
|
if stringToBoolean(wired.GetWiredProperty("default")) == True:
|
||||||
self.checkboxDefaultProfile.set_active(True)
|
self.checkboxDefaultProfile.set_active(True)
|
||||||
@@ -594,7 +578,7 @@ class WiredNetworkEntry(NetworkEntry):
|
|||||||
self.profileHelp.hide()
|
self.profileHelp.hide()
|
||||||
if self.profileList != None:
|
if self.profileList != None:
|
||||||
prof = config.GetDefaultWiredNetwork()
|
prof = config.GetDefaultWiredNetwork()
|
||||||
if prof != None: #make sure the default profile gets displayed
|
if prof != None: # Make sure the default profile gets displayed.
|
||||||
i=0
|
i=0
|
||||||
while self.comboProfileNames.get_active_text() != prof:
|
while self.comboProfileNames.get_active_text() != prof:
|
||||||
self.comboProfileNames.set_active(i)
|
self.comboProfileNames.set_active(i)
|
||||||
@@ -609,6 +593,11 @@ class WiredNetworkEntry(NetworkEntry):
|
|||||||
self.set_expanded(True)
|
self.set_expanded(True)
|
||||||
self.profileHelp.show()
|
self.profileHelp.show()
|
||||||
|
|
||||||
|
def editScripts(self, widget=None, event=None):
|
||||||
|
profile = self.comboProfileNames.get_active_text()
|
||||||
|
os.spawnlpe(os.P_WAIT, "gksudo", "gksudo", "./configscript.py",
|
||||||
|
profile, "wired", os.environ)
|
||||||
|
|
||||||
def checkEnable(self):
|
def checkEnable(self):
|
||||||
profileList = config.GetWiredProfileList()
|
profileList = config.GetWiredProfileList()
|
||||||
if profileList == None:
|
if profileList == None:
|
||||||
@@ -674,10 +663,6 @@ class WiredNetworkEntry(NetworkEntry):
|
|||||||
self.txtDNS2.set_text(noneToBlankString(wired.GetWiredProperty("dns2")))
|
self.txtDNS2.set_text(noneToBlankString(wired.GetWiredProperty("dns2")))
|
||||||
self.txtDNS3.set_text(noneToBlankString(wired.GetWiredProperty("dns3")))
|
self.txtDNS3.set_text(noneToBlankString(wired.GetWiredProperty("dns3")))
|
||||||
|
|
||||||
self.txtBeforeScript.set_text(noneToBlankString(wired.GetWiredProperty("beforescript")))
|
|
||||||
self.txtAfterScript.set_text(noneToBlankString(wired.GetWiredProperty("afterscript")))
|
|
||||||
self.txtDisconnectScript.set_text(noneToBlankString(wired.GetWiredProperty("disconnectscript")))
|
|
||||||
|
|
||||||
self.checkboxDefaultProfile.set_active(stringToBoolean(wired.GetWiredProperty("default")))
|
self.checkboxDefaultProfile.set_active(stringToBoolean(wired.GetWiredProperty("default")))
|
||||||
|
|
||||||
self.resetStaticCheckboxes()
|
self.resetStaticCheckboxes()
|
||||||
@@ -715,6 +700,7 @@ class WirelessNetworkEntry(NetworkEntry):
|
|||||||
|
|
||||||
self.vboxTop.pack_start(self.checkboxAutoConnect,fill=False,expand=False)
|
self.vboxTop.pack_start(self.checkboxAutoConnect,fill=False,expand=False)
|
||||||
self.vboxTop.pack_start(self.hboxStatus,fill=True,expand=False)
|
self.vboxTop.pack_start(self.hboxStatus,fill=True,expand=False)
|
||||||
|
self.vboxTop.pack_start(self.scriptButton)
|
||||||
|
|
||||||
self.vboxAdvanced.pack_start(self.checkboxEncryption,fill=False,expand=False)
|
self.vboxAdvanced.pack_start(self.checkboxEncryption,fill=False,expand=False)
|
||||||
|
|
||||||
@@ -734,10 +720,6 @@ class WirelessNetworkEntry(NetworkEntry):
|
|||||||
if wireless.GetWirelessProperty(networkID,'dns3') != None:
|
if wireless.GetWirelessProperty(networkID,'dns3') != None:
|
||||||
self.txtDNS3.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns3")))
|
self.txtDNS3.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"dns3")))
|
||||||
|
|
||||||
self.txtBeforeScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"beforescript")))
|
|
||||||
self.txtAfterScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"afterscript")))
|
|
||||||
self.txtDisconnectScript.set_text(noneToBlankString(wireless.GetWirelessProperty(networkID,"disconnectscript")))
|
|
||||||
|
|
||||||
self.resetStaticCheckboxes()
|
self.resetStaticCheckboxes()
|
||||||
encryptionTypes = misc.LoadEncryptionMethods()
|
encryptionTypes = misc.LoadEncryptionMethods()
|
||||||
|
|
||||||
@@ -769,10 +751,16 @@ class WirelessNetworkEntry(NetworkEntry):
|
|||||||
self.vboxAdvanced.pack_start(self.comboEncryption)
|
self.vboxAdvanced.pack_start(self.comboEncryption)
|
||||||
self.vboxAdvanced.pack_start(self.vboxEncryptionInformation)
|
self.vboxAdvanced.pack_start(self.vboxEncryptionInformation)
|
||||||
self.changeEncryptionMethod()
|
self.changeEncryptionMethod()
|
||||||
|
self.scriptButton.connect("button-press-event", self.editScripts)
|
||||||
self.checkboxEncryption.connect("toggled",self.toggleEncryption)
|
self.checkboxEncryption.connect("toggled",self.toggleEncryption)
|
||||||
self.comboEncryption.connect("changed",self.changeEncryptionMethod)
|
self.comboEncryption.connect("changed",self.changeEncryptionMethod)
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
||||||
|
def editScripts(self, widget=None, event=None):
|
||||||
|
result = os.spawnlpe(os.P_WAIT, "gksudo", "gksudo", "./configscript.py",
|
||||||
|
str(self.networkID), "wireless", os.environ)
|
||||||
|
print result
|
||||||
|
|
||||||
def updateAutoConnect(self,widget):
|
def updateAutoConnect(self,widget):
|
||||||
wireless.SetWirelessProperty(self.networkID,"automatic",
|
wireless.SetWirelessProperty(self.networkID,"automatic",
|
||||||
self.checkboxAutoConnect.get_active())
|
self.checkboxAutoConnect.get_active())
|
||||||
@@ -1298,14 +1286,6 @@ class appGui:
|
|||||||
print "no encryption specified..."
|
print "no encryption specified..."
|
||||||
wireless.SetWirelessProperty(networkid,"enctype",noneToString(None))
|
wireless.SetWirelessProperty(networkid,"enctype",noneToString(None))
|
||||||
|
|
||||||
# Script info
|
|
||||||
before_script = networkentry.expander.txtBeforeScript.get_text()
|
|
||||||
after_script = networkentry.expander.txtAfterScript.get_text()
|
|
||||||
disconnect_script = networkentry.expander.txtDisconnectScript.get_text()
|
|
||||||
wireless.SetWirelessBeforeScript(networkid,before_script)
|
|
||||||
wireless.SetWirelessAfterScript(networkid,after_script)
|
|
||||||
wireless.SetWirelessDisconnectScript(networkid,disconnect_script)
|
|
||||||
|
|
||||||
# if it exists. maybe kept as a value in the network entry? Not sure...
|
# if it exists. maybe kept as a value in the network entry? Not sure...
|
||||||
print "connecting to wireless network..."
|
print "connecting to wireless network..."
|
||||||
config.SaveWirelessNetworkProfile(networkid)
|
config.SaveWirelessNetworkProfile(networkid)
|
||||||
@@ -1333,14 +1313,6 @@ class appGui:
|
|||||||
wired.SetWiredProperty("dns2",'')
|
wired.SetWiredProperty("dns2",'')
|
||||||
wired.SetWiredProperty("dns3",'')
|
wired.SetWiredProperty("dns3",'')
|
||||||
|
|
||||||
# Script Info
|
|
||||||
before_script = networkentry.expander.txtBeforeScript.get_text()
|
|
||||||
after_script = networkentry.expander.txtAfterScript.get_text()
|
|
||||||
disconnect_script = networkentry.expander.txtDisconnectScript.get_text()
|
|
||||||
wired.SetWiredBeforeScript(before_script)
|
|
||||||
wired.SetWiredAfterScript(after_script)
|
|
||||||
wired.SetWiredDisconnectScript(disconnect_script)
|
|
||||||
|
|
||||||
config.SaveWiredNetworkProfile(networkentry.expander.comboProfileNames.get_active_text())
|
config.SaveWiredNetworkProfile(networkentry.expander.comboProfileNames.get_active_text())
|
||||||
wired.ConnectWired()
|
wired.ConnectWired()
|
||||||
|
|
||||||
@@ -1354,7 +1326,7 @@ class appGui:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def show_win(self):
|
def show_win(self):
|
||||||
self.window.show_all()
|
self.window.show()
|
||||||
# hide the status bar, as it might be confusing if it
|
# hide the status bar, as it might be confusing if it
|
||||||
# pops up randomly :)
|
# pops up randomly :)
|
||||||
self.status_area.hide_all()
|
self.status_area.hide_all()
|
||||||
|
|||||||
1
misc.py
1
misc.py
@@ -217,6 +217,7 @@ def get_gettext():
|
|||||||
|
|
||||||
|
|
||||||
def to_unicode(x):
|
def to_unicode(x):
|
||||||
|
""" Attempts to convert a string to unicode """
|
||||||
try: # This may never fail, but let's be safe
|
try: # This may never fail, but let's be safe
|
||||||
default_encoding = locale.getpreferredencoding()
|
default_encoding = locale.getpreferredencoding()
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
##
|
|
||||||
#Simple script that converts command line args to a string and executes it in usermode
|
|
||||||
##
|
|
||||||
import os,sys,misc
|
|
||||||
|
|
||||||
print 'executing script in user mode'
|
|
||||||
os.setuid(1000)
|
|
||||||
command = ''
|
|
||||||
for stuff in sys.argv[1:]:
|
|
||||||
command = command + ' ' + stuff
|
|
||||||
print 'command = ',command
|
|
||||||
pid = os.fork()
|
|
||||||
print 'hey'
|
|
||||||
if not pid:
|
|
||||||
misc.Run(command)
|
|
||||||
26
wnettools.py
26
wnettools.py
@@ -36,23 +36,23 @@ import wpath
|
|||||||
|
|
||||||
# Compile the regex patterns that will be used to search the output of iwlist
|
# Compile the regex patterns that will be used to search the output of iwlist
|
||||||
# scan for info these are well tested, should work on most cards
|
# scan for info these are well tested, should work on most cards
|
||||||
essid_pattern = re.compile('.*ESSID:"(.*?)"\n', re.DOTALL | re.I | re.M | re.S)
|
essid_pattern = re.compile('.*ESSID:"(.*?)"\n', re.I | re.M | re.S)
|
||||||
ap_mac_pattern = re.compile('.*Address: (.*?)\n',re.DOTALL | re.I | re.M | re.S)
|
ap_mac_pattern = re.compile('.*Address: (.*?)\n', re.I | re.M | re.S)
|
||||||
channel_pattern = re.compile('.*Channel:? ?(\d\d?)',re.DOTALL | re.I | re.M | re.S)
|
channel_pattern = re.compile('.*Channel:? ?(\d\d?)', re.I | re.M | re.S)
|
||||||
strength_pattern = re.compile('.*Quality:?=? ?(\d+)\s*/?\s*(\d*)',re.DOTALL | re.I | re.M | re.S)
|
strength_pattern = re.compile('.*Quality:?=? ?(\d+)\s*/?\s*(\d*)', re.I | re.M | re.S)
|
||||||
# These next two look a lot a like, altstrength is for Signal level = xx/100,
|
# These next two look a lot a like, altstrength is for Signal level = xx/100,
|
||||||
# which is just an alternate way of displaying link quality, signaldbm is
|
# which is just an alternate way of displaying link quality, signaldbm is
|
||||||
# for displaying actual signal strength (-xx dBm).
|
# for displaying actual signal strength (-xx dBm).
|
||||||
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d\d*)',re.DOTALL | re.I | re.M | re.S)
|
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d\d*)', re.I | re.M | re.S)
|
||||||
signaldbm_pattern = re.compile('.*Signal level:?=? ?(-\d\d*)',re.DOTALL | re.I | re.M | re.S)
|
signaldbm_pattern = re.compile('.*Signal level:?=? ?(-\d\d*)', re.I | re.M | re.S)
|
||||||
mode_pattern = re.compile('.*Mode:(.*?)\n',re.DOTALL | re.I | re.M | re.S)
|
mode_pattern = re.compile('.*Mode:(.*?)\n', re.I | re.M | re.S)
|
||||||
freq_pattern = re.compile('.*Frequency:(.*?)\n',re.DOTALL | re.I | re.M | re.S)
|
freq_pattern = re.compile('.*Frequency:(.*?)\n', re.I | re.M | re.S)
|
||||||
ip_pattern = re.compile(r'inet [Aa]d?dr[^.]*:([^.]*\.[^.]*\.[^.]*\.[0-9]*)',re.S)
|
ip_pattern = re.compile(r'inet [Aa]d?dr[^.]*:([^.]*\.[^.]*\.[^.]*\.[0-9]*)',re.S)
|
||||||
|
|
||||||
wep_pattern = re.compile('.*Encryption key:(.*?)\n',re.DOTALL | re.I | re.M | re.S)
|
wep_pattern = re.compile('.*Encryption key:(.*?)\n', re.I | re.M | re.S)
|
||||||
altwpa_pattern = re.compile('(wpa_ie)',re.DOTALL | re.I | re.M | re.S)
|
altwpa_pattern = re.compile('(wpa_ie)', re.I | re.M | re.S)
|
||||||
wpa1_pattern = re.compile('(WPA Version 1)',re.DOTALL | re.I | re.M | re.S)
|
wpa1_pattern = re.compile('(WPA Version 1)', re.I | re.M | re.S)
|
||||||
wpa2_pattern = re.compile('(WPA2)',re.DOTALL | re.I | re.M | re.S)
|
wpa2_pattern = re.compile('(WPA2)', re.I | re.M | re.S)
|
||||||
|
|
||||||
|
|
||||||
def SetDNS(dns1=None, dns2=None, dns3=None):
|
def SetDNS(dns1=None, dns2=None, dns3=None):
|
||||||
@@ -261,7 +261,7 @@ class WirelessInterface(Interface):
|
|||||||
|
|
||||||
# Split the networks apart, using Cell as our split point
|
# Split the networks apart, using Cell as our split point
|
||||||
# this way we can look at only one network at a time.
|
# this way we can look at only one network at a time.
|
||||||
# the spaces around ' Cell ' are to minimize the chance that someone
|
# The spaces around ' Cell ' are to minimize the chance that someone
|
||||||
# has an essid named Cell...
|
# has an essid named Cell...
|
||||||
networks = results.split( ' Cell ' )
|
networks = results.split( ' Cell ' )
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user