1
0
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:
imdano
2007-12-29 11:56:47 +00:00
parent 7d7b943ee7
commit 53fc40349d
6 changed files with 328 additions and 262 deletions

163
configscript.py Executable file
View 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
View File

@@ -467,30 +467,6 @@ class ConnectionWizard(dbus.service.Object):
self.wired.Disconnect()
#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')
def GetNumberOfNetworks(self):
'''returns number of networks'''
@@ -528,7 +504,7 @@ class ConnectionWizard(dbus.service.Object):
''' Retrieves wireless property from the network specified '''
value = self.LastScan[networkid].get(property)
try:
value = value.encode('utf-8')
value = misc.to_unicode(value)
except:
pass
if self.debug_mode == 1:
@@ -542,6 +518,10 @@ class ConnectionWizard(dbus.service.Object):
''' Sets property to value in network specified '''
#simple - set the value of the item in our current data
#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
self.LastScan[networkid][property] = misc.Noneify(value)
#end function SetProperty
@@ -710,33 +690,6 @@ class ConnectionWizard(dbus.service.Object):
return False
#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')
def SetWiredAutoConnectMethod(self,method):
'''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')
def SetWiredProperty(self,property,value):
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)
if self.debug_mode == 1:
print 'set',property,'to',misc.Noneify(value)
@@ -938,7 +895,7 @@ class ConnectionWizard(dbus.service.Object):
def SaveWiredNetworkProfile(self,profilename):
''' Writes a wired network profile to disk '''
#should include: profilename,ip,netmask,gateway,dns1,dns2
profilename = profilename.encode('utf-8')
profilename = misc.to_unicode(profilename)
print "setting profile for " + str(profilename)
config = ConfigParser.ConfigParser()
config.read(self.wired_conf)
@@ -955,7 +912,7 @@ class ConnectionWizard(dbus.service.Object):
def ReadWiredNetworkProfile(self,profilename):
''' Reads a wired network profile in as the currently active profile '''
profile = {}
profilename = profilename.encode('utf-8')
profilename = misc.to_unicode(profilename)
config = ConfigParser.ConfigParser()
config.read(self.wired_conf)
if config.has_section(profilename) == True:
@@ -999,6 +956,9 @@ class ConnectionWizard(dbus.service.Object):
@dbus.service.method('org.wicd.daemon.config')
def SaveWirelessNetworkProperty(self,id,option):
''' 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])
config = ConfigParser.ConfigParser()
config.read(self.wireless_conf)
@@ -1015,27 +975,13 @@ class ConnectionWizard(dbus.service.Object):
print self.LastScan[id]["bssid"]
if config.has_section(self.LastScan[id]["bssid"]):
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
#wireless networks now - but only read it if it is hidden
# Read the essid because we be needing to name those hidden
# wireless networks now - but only read it if it is hidden.
if self.LastScan[id]["hidden"] == True:
self.LastScan[id]["essid"] = misc.Noneify(config.get(self.LastScan[id]["bssid"], "essid"))
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))
return "100: Loaded Profile"
else:
@@ -1266,112 +1212,6 @@ class ConnectionWizard(dbus.service.Object):
#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():
def __init__(self, connection):
"""Initialize variables needed for the connection status methods."""
@@ -1515,5 +1355,111 @@ class ConnectionStatus():
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__':
main(sys.argv)

84
gui.py
View File

@@ -117,11 +117,9 @@ language['use_static_dns'] = _('Use Static DNS')
language['use_encryption'] = _('Use Encryption')
language['advanced_settings'] = _('Advanced Settings')
language['wired_network'] = _('Wired Network')
language['wired_network_instructions'] = _('To connect to a wired network, you \
must create a network profile. To \
create a network profile, type a \
name that describes this network, \
and press Add.')
language['wired_network_instructions'] = _('To connect to a wired network, you'
' must create a network profile. To create a network profile, type a name that'
' describes this network, and press Add.')
language['automatic_connect'] = _('Automatically connect to this network')
language['secured'] = _('Secured')
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['stop_showing_chooser'] = _('Stop Showing Autoconnect pop-up temporarily')
language['display_type_dialog'] = _('Use dBm to measure signal strength')
language['scripts'] = _('Scripts')
language['0'] = _('0')
language['1'] = _('1')
@@ -200,11 +199,11 @@ language['done'] = _('Done connecting...')
class LinkButton(gtk.EventBox):
label = None
def __init__(self):
def __init__(self, txt):
gtk.EventBox.__init__(self)
self.connect("realize",self.__setHandCursor) #set the hand cursor when the box is initalized
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.show()
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.tempVBox = gtk.VBox(False,1)
self.tempVBox.show()
self.connectButton = LinkButton()
self.connectButton = LinkButton(language["connect"])
self.connectButton.show()
self.tempVBox.pack_start(self.expander,fill=False,expand=False)
self.tempVBox.pack_start(self.connectButton,fill=False,expand=False)
self.pack_end(self.tempVBox)
class PrettyWiredNetworkEntry(PrettyNetworkEntry):
def __init__(self):
PrettyNetworkEntry.__init__(self,WiredNetworkEntry())
@@ -424,24 +424,13 @@ class NetworkEntry(gtk.Expander):
self.txtDNS1 = LabelEntry(language['dns'] + ' ' + language['1'])
self.txtDNS2 = LabelEntry(language['dns'] + ' ' + language['2'])
self.txtDNS3 = LabelEntry(language['dns'] + ' ' + language['3'])
#dns_addresses = daemon.GetGlobalDNSAddresses()
#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.scriptButton = LinkButton(language['scripts'])
self.checkboxStaticIP = gtk.CheckButton(language['use_static_ip'])
self.checkboxStaticDNS = gtk.CheckButton(language['use_static_dns'])
self.checkboxGlobalDNS = gtk.CheckButton(language['use_global_dns'])
self.expanderAdvanced = gtk.Expander(language['advanced_settings'])
self.expanderScripts = gtk.Expander(language['script_settings'])
self.vboxTop = gtk.VBox(False,0)
self.vboxAdvanced = gtk.VBox(False,0)
self.vboxScripts = gtk.VBox(False,0)
self.hboxDNS = gtk.HBox(False,0)
self.hboxDNS.pack_start(self.checkboxStaticDNS)
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.txtDNS2,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.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.vboxTop.pack_start(self.expanderAdvanced, fill=False, expand=False)
self.expanderAdvanced.add(self.vboxAdvanced)
self.expanderScripts.add(self.vboxScripts)
# Connect the events to the actions
self.checkboxStaticIP.connect("toggled",self.toggleIPCheckbox)
self.checkboxStaticDNS.connect("toggled",self.toggleDNSCheckbox)
@@ -567,22 +551,22 @@ class WiredNetworkEntry(NetworkEntry):
self.profileHelp = gtk.Label(language['wired_network_instructions'])
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_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.buttonAdd,fill=False,expand=False)
self.hboxTemp.pack_start(self.buttonDelete,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.comboProfileNames.connect("changed",self.changeProfile)
self.scriptButton.connect("button-press-event", self.editScripts)
self.vboxTop.pack_start(self.hboxTemp)
self.vboxTop.pack_start(hboxDef)
self.vboxTop.pack_start(self.scriptButton)
if stringToBoolean(wired.GetWiredProperty("default")) == True:
self.checkboxDefaultProfile.set_active(True)
@@ -594,7 +578,7 @@ class WiredNetworkEntry(NetworkEntry):
self.profileHelp.hide()
if self.profileList != None:
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
while self.comboProfileNames.get_active_text() != prof:
self.comboProfileNames.set_active(i)
@@ -609,6 +593,11 @@ class WiredNetworkEntry(NetworkEntry):
self.set_expanded(True)
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):
profileList = config.GetWiredProfileList()
if profileList == None:
@@ -674,10 +663,6 @@ class WiredNetworkEntry(NetworkEntry):
self.txtDNS2.set_text(noneToBlankString(wired.GetWiredProperty("dns2")))
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.resetStaticCheckboxes()
@@ -715,6 +700,7 @@ class WirelessNetworkEntry(NetworkEntry):
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.scriptButton)
self.vboxAdvanced.pack_start(self.checkboxEncryption,fill=False,expand=False)
@@ -734,10 +720,6 @@ class WirelessNetworkEntry(NetworkEntry):
if wireless.GetWirelessProperty(networkID,'dns3') != None:
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()
encryptionTypes = misc.LoadEncryptionMethods()
@@ -769,10 +751,16 @@ class WirelessNetworkEntry(NetworkEntry):
self.vboxAdvanced.pack_start(self.comboEncryption)
self.vboxAdvanced.pack_start(self.vboxEncryptionInformation)
self.changeEncryptionMethod()
self.scriptButton.connect("button-press-event", self.editScripts)
self.checkboxEncryption.connect("toggled",self.toggleEncryption)
self.comboEncryption.connect("changed",self.changeEncryptionMethod)
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):
wireless.SetWirelessProperty(self.networkID,"automatic",
self.checkboxAutoConnect.get_active())
@@ -1298,14 +1286,6 @@ class appGui:
print "no encryption specified..."
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...
print "connecting to wireless network..."
config.SaveWirelessNetworkProfile(networkid)
@@ -1333,14 +1313,6 @@ class appGui:
wired.SetWiredProperty("dns2",'')
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())
wired.ConnectWired()
@@ -1354,7 +1326,7 @@ class appGui:
return True
def show_win(self):
self.window.show_all()
self.window.show()
# hide the status bar, as it might be confusing if it
# pops up randomly :)
self.status_area.hide_all()

View File

@@ -217,6 +217,7 @@ def get_gettext():
def to_unicode(x):
""" Attempts to convert a string to unicode """
try: # This may never fail, but let's be safe
default_encoding = locale.getpreferredencoding()
except:

View File

@@ -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)

View File

@@ -36,23 +36,23 @@ import wpath
# 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
essid_pattern = re.compile('.*ESSID:"(.*?)"\n', re.DOTALL | re.I | re.M | re.S)
ap_mac_pattern = re.compile('.*Address: (.*?)\n',re.DOTALL | re.I | re.M | re.S)
channel_pattern = re.compile('.*Channel:? ?(\d\d?)',re.DOTALL | re.I | re.M | re.S)
strength_pattern = re.compile('.*Quality:?=? ?(\d+)\s*/?\s*(\d*)',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.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.I | re.M | re.S)
# 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
# for displaying actual signal strength (-xx dBm).
altstrength_pattern = re.compile('.*Signal level:?=? ?(\d\d*)',re.DOTALL | re.I | re.M | re.S)
signaldbm_pattern = re.compile('.*Signal level:?=? ?(-\d\d*)',re.DOTALL | re.I | re.M | re.S)
mode_pattern = re.compile('.*Mode:(.*?)\n',re.DOTALL | re.I | re.M | re.S)
freq_pattern = re.compile('.*Frequency:(.*?)\n',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.I | re.M | re.S)
mode_pattern = re.compile('.*Mode:(.*?)\n', 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)
wep_pattern = re.compile('.*Encryption key:(.*?)\n',re.DOTALL | re.I | re.M | re.S)
altwpa_pattern = re.compile('(wpa_ie)',re.DOTALL | re.I | re.M | re.S)
wpa1_pattern = re.compile('(WPA Version 1)',re.DOTALL | re.I | re.M | re.S)
wpa2_pattern = re.compile('(WPA2)',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.I | re.M | re.S)
wpa1_pattern = re.compile('(WPA Version 1)', 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):
@@ -261,7 +261,7 @@ class WirelessInterface(Interface):
# Split the networks apart, using Cell as our split point
# 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...
networks = results.split( ' Cell ' )