mirror of
https://github.com/gryf/wicd.git
synced 2025-12-18 12:00:24 +01:00
176 lines
6.0 KiB
Python
176 lines
6.0 KiB
Python
#!/usr/bin/env python3
|
|
"""configscript -- 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-2009 Adam Blackburn
|
|
# Copyright (C) 2007-2009 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 sys
|
|
import os
|
|
import gtk
|
|
|
|
from wicd import wpath
|
|
from wicd.translations import _
|
|
from wicd import dbusmanager
|
|
from wicd.configmanager import ConfigManager
|
|
|
|
dbus = dbusmanager.DBusManager()
|
|
dbus.connect_to_dbus()
|
|
|
|
wireless = dbus.get_interface("wireless")
|
|
wired = dbus.get_interface("wired")
|
|
|
|
wireless_conf = wpath.etc + 'wireless-settings.conf'
|
|
wired_conf = wpath.etc + 'wired-settings.conf'
|
|
|
|
|
|
def none_to_blank(text):
|
|
"""Converts special string cases to a blank string.
|
|
|
|
If text is None, 'None', or '' then this method will
|
|
return '', otherwise it will just return str(text).
|
|
|
|
"""
|
|
if text in (None, "None", ""):
|
|
return ""
|
|
else:
|
|
return str(text)
|
|
|
|
|
|
def blank_to_none(text):
|
|
"""Convert an empty or null string to 'None'."""
|
|
if text in ("", None):
|
|
return "None"
|
|
else:
|
|
return str(text)
|
|
|
|
|
|
def get_script_info(network, network_type):
|
|
"""
|
|
Read script info from disk and load it into the configuration dialog
|
|
"""
|
|
info = {}
|
|
if network_type == "wired":
|
|
con = ConfigManager(wired_conf)
|
|
section = network
|
|
else:
|
|
bssid = wireless.GetWirelessProperty(int(network), "bssid")
|
|
con = ConfigManager(wireless_conf)
|
|
section = bssid
|
|
|
|
if con.has_section(section):
|
|
info["pre_entry"] = con.get(section, "beforescript", None)
|
|
info["post_entry"] = con.get(section, "afterscript", None)
|
|
info["pre_disconnect_entry"] = con.get(section,
|
|
"predisconnectscript", None)
|
|
info["post_disconnect_entry"] = con.get(section,
|
|
"postdisconnectscript", None)
|
|
return info
|
|
|
|
|
|
def write_scripts(network, network_type, script_info):
|
|
"""Writes script info to disk and loads it into the daemon."""
|
|
if network_type == "wired":
|
|
con = ConfigManager(wired_conf)
|
|
con.set(network, "beforescript", script_info["pre_entry"])
|
|
con.set(network, "afterscript", script_info["post_entry"])
|
|
con.set(network, "predisconnectscript",
|
|
script_info["pre_disconnect_entry"])
|
|
con.set(network, "postdisconnectscript",
|
|
script_info["post_disconnect_entry"])
|
|
con.write()
|
|
wired.ReloadConfig()
|
|
wired.ReadWiredNetworkProfile(network)
|
|
wired.SaveWiredNetworkProfile(network)
|
|
else:
|
|
bssid = wireless.GetWirelessProperty(int(network), "bssid")
|
|
con = ConfigManager(wireless_conf)
|
|
con.set(bssid, "beforescript", script_info["pre_entry"])
|
|
con.set(bssid, "afterscript", script_info["post_entry"])
|
|
con.set(bssid, "predisconnectscript",
|
|
script_info["pre_disconnect_entry"])
|
|
con.set(bssid, "postdisconnectscript",
|
|
script_info["post_disconnect_entry"])
|
|
con.write()
|
|
wireless.ReloadConfig()
|
|
wireless.ReadWirelessNetworkProfile(int(network))
|
|
wireless.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 = os.path.join(wpath.gtk, "wicd.ui")
|
|
wTree = gtk.Builder()
|
|
wTree.set_translation_domain('wicd')
|
|
wTree.add_from_file(gladefile)
|
|
dialog = wTree.get_object("configure_script_dialog")
|
|
wTree.get_object("pre_label").set_label(_('Pre-connection Script') + ":")
|
|
wTree.get_object("post_label").set_label(_('Post-connection Script') + ":")
|
|
wTree.get_object("pre_disconnect_label").\
|
|
set_label(_('Pre-disconnection Script') + ":")
|
|
wTree.get_object("post_disconnect_label").\
|
|
set_label(_('Post-disconnection Script') + ":")
|
|
wTree.get_object("window1").hide()
|
|
|
|
pre_entry = wTree.get_object("pre_entry")
|
|
post_entry = wTree.get_object("post_entry")
|
|
pre_disconnect_entry = wTree.get_object("pre_disconnect_entry")
|
|
post_disconnect_entry = wTree.get_object("post_disconnect_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")))
|
|
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()
|
|
|
|
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["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)
|
|
dialog.destroy()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if os.getuid() != 0:
|
|
print("Root privileges are required to configure scripts. Exiting.")
|
|
sys.exit(0)
|
|
main(sys.argv)
|