From 0f3beeb00e7a42cc2f44ef0392b8a3a7566a17d7 Mon Sep 17 00:00:00 2001 From: Nicolas Iooss Date: Wed, 20 Sep 2017 08:56:54 +0200 Subject: [PATCH] gui: port to Python 3 by migrating to PyGI PyGTK has been deprecated in favor of PyGI+GTK and thus has never been ported to python3. Using pygi-convert.sh from https://git.gnome.org/browse/pygobject/tree/pygi-convert.sh helps migrating most of the API but gnome-python. The glade file has been converted to GtkBuilder using gtk-builder-convert system-config-selinux.glade system-config-selinux.ui and some fixes in order to provide an application window (object GnomeApp disappeared, GtkVBox is deprecated, etc.). The associated Python code also needed some modifications in order to migrate to GtkBuilder. The result has been tested on Arch Linux with Python 3.6. There are some bugs in the GUI itself, for which patches will be sent afterwards. Signed-off-by: Nicolas Iooss --- gui/Makefile | 2 +- gui/booleansPage.py | 56 +- gui/domainsPage.py | 25 +- gui/fcontextPage.py | 33 +- gui/loginsPage.py | 28 +- gui/modulesPage.py | 41 +- gui/polgengui.py | 118 +- gui/portsPage.py | 41 +- gui/semanagePage.py | 52 +- gui/statusPage.py | 36 +- gui/system-config-selinux.glade | 3005 ------------------------------- gui/system-config-selinux.py | 69 +- gui/system-config-selinux.ui | 2043 +++++++++++++++++++++ gui/usersPage.py | 24 +- 14 files changed, 2281 insertions(+), 3292 deletions(-) delete mode 100644 gui/system-config-selinux.glade create mode 100644 gui/system-config-selinux.ui diff --git a/gui/Makefile b/gui/Makefile index 4fc2c1a133..ac844b6b91 100644 --- a/gui/Makefile +++ b/gui/Makefile @@ -17,8 +17,8 @@ polgen.glade \ portsPage.py \ semanagePage.py \ statusPage.py \ -system-config-selinux.glade \ system-config-selinux.png \ +system-config-selinux.ui \ usersPage.py all: $(TARGETS) system-config-selinux.py polgengui.py diff --git a/gui/booleansPage.py b/gui/booleansPage.py index a5d04bf5b9..7849bea26a 100644 --- a/gui/booleansPage.py +++ b/gui/booleansPage.py @@ -18,13 +18,8 @@ # You should have received a copy of the GNU General Public License # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -import string -import gtk -import gtk.glade -import os -import gobject import sys -import tempfile +from gi.repository import Gdk, GObject, Gtk import seobject import semanagePage @@ -61,8 +56,6 @@ import __builtin__ __builtin__.__dict__['_'] = unicode -from glob import fnmatch - class Modifier: @@ -94,56 +87,53 @@ class booleansPage: def __init__(self, xml, doDebug=None): self.xml = xml - self.window = self.xml.get_widget("mainWindow").get_root_window() + self.window = self.xml.get_object("mainWindow").get_root_window() self.local = False self.types = [] self.selinuxsupport = True self.typechanged = False self.doDebug = doDebug - self.busy_cursor = gtk.gdk.Cursor(gtk.gdk.WATCH) - self.ready_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) + self.busy_cursor = Gdk.Cursor.new(Gdk.CursorType.WATCH) + self.ready_cursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) # Bring in widgets from glade file. - self.typeHBox = xml.get_widget("typeHBox") - self.booleanSW = xml.get_widget("booleanSW") - self.booleansFilter = xml.get_widget("booleansFilter") + self.booleansFilter = xml.get_object("booleansFilter") self.booleansFilter.connect("focus_out_event", self.filter_changed) self.booleansFilter.connect("activate", self.filter_changed) + self.booleansFilter.connect("changed", self.filter_changed) - self.booleansView = xml.get_widget("booleansView") - self.typeLabel = xml.get_widget("typeLabel") - self.modifySeparator = xml.get_widget("modifySeparator") + self.booleansView = xml.get_object("booleansView") - self.revertButton = xml.get_widget("booleanRevertButton") + self.revertButton = xml.get_object("booleanRevertButton") self.revertButton.set_sensitive(self.local) self.revertButton.connect("clicked", self.on_revert_clicked) - listStore = gtk.ListStore(gobject.TYPE_STRING) - cell = gtk.CellRendererText() + listStore = Gtk.ListStore(GObject.TYPE_STRING) + cell = Gtk.CellRendererText() - self.store = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) - self.store.set_sort_column_id(1, gtk.SORT_ASCENDING) + self.store = Gtk.ListStore(GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) + self.store.set_sort_column_id(1, Gtk.SortType.ASCENDING) self.booleansView.set_model(self.store) - checkbox = gtk.CellRendererToggle() + checkbox = Gtk.CellRendererToggle() checkbox.connect("toggled", self.boolean_toggled) - col = gtk.TreeViewColumn('Active', checkbox, active=ACTIVE) + col = Gtk.TreeViewColumn('Active', checkbox, active=ACTIVE) col.set_clickable(True) col.set_sort_column_id(ACTIVE) self.booleansView.append_column(col) - col = gtk.TreeViewColumn("Module", gtk.CellRendererText(), text=MODULE) + col = Gtk.TreeViewColumn("Module", Gtk.CellRendererText(), text=MODULE) col.set_sort_column_id(MODULE) col.set_resizable(True) self.booleansView.append_column(col) - col = gtk.TreeViewColumn("Description", gtk.CellRendererText(), text=DESC) - col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + col = Gtk.TreeViewColumn("Description", Gtk.CellRendererText(), text=DESC) + col.set_sizing(Gtk.TreeViewColumnSizing.FIXED) col.set_fixed_width(400) col.set_sort_column_id(DESC) col.set_resizable(True) self.booleansView.append_column(col) - col = gtk.TreeViewColumn("Name", gtk.CellRendererText(), text=BOOLEAN) + col = Gtk.TreeViewColumn("Name", Gtk.CellRendererText(), text=BOOLEAN) col.set_sort_column_id(BOOLEAN) col.set_resizable(True) self.booleansView.set_search_equal_func(self.__search) @@ -152,10 +142,10 @@ def __init__(self, xml, doDebug=None): self.load(self.filter) def error(self, message): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, - gtk.BUTTONS_CLOSE, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, message) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() dlg.run() dlg.destroy() @@ -178,11 +168,11 @@ def ready(self): def deleteDialog(self): store, iter = self.booleansView.get_selection().get_selected() - if iter == None: + if iter is None: return boolean = store.get_value(iter, BOOLEAN) # change cursor - if boolean == None: + if boolean is None: return try: self.wait() diff --git a/gui/domainsPage.py b/gui/domainsPage.py index 66f882a4e1..bad5140d8c 100644 --- a/gui/domainsPage.py +++ b/gui/domainsPage.py @@ -16,19 +16,14 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade import os try: from subprocess import getstatusoutput except ImportError: from commands import getstatusoutput -import gobject import sys -import seobject -import selinux +from gi.repository import GObject, Gtk import sepolicy from semanagePage import * @@ -58,26 +53,26 @@ class domainsPage(semanagePage): def __init__(self, xml): semanagePage.__init__(self, xml, "domains", _("Process Domain")) - self.domain_filter = xml.get_widget("domainsFilterEntry") + self.domain_filter = xml.get_object("domainsFilterEntry") self.domain_filter.connect("focus_out_event", self.filter_changed) self.domain_filter.connect("activate", self.filter_changed) - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) self.view.set_model(self.store) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Domain Name"), gtk.CellRendererText(), text=0) + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Domain Name"), Gtk.CellRendererText(), text=0) col.set_sort_column_id(0) col.set_resizable(True) self.view.append_column(col) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Mode"), gtk.CellRendererText(), text=1) + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Mode"), Gtk.CellRendererText(), text=1) col.set_sort_column_id(1) col.set_resizable(True) self.view.append_column(col) self.view.get_selection().connect("changed", self.itemSelected) - self.permissive_button = xml.get_widget("permissiveButton") - self.enforcing_button = xml.get_widget("enforcingButton") + self.permissive_button = xml.get_object("permissiveButton") + self.enforcing_button = xml.get_object("enforcingButton") self.domains = sepolicy.get_all_entrypoint_domains() self.load() @@ -112,7 +107,7 @@ def load(self, filter=""): def itemSelected(self, selection): store, iter = selection.get_selected() - if iter == None: + if iter is None: return p = store.get_value(iter, 1) == _("Permissive") self.permissive_button.set_sensitive(not p) diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py index 2e26666e90..a6577ef75f 100644 --- a/gui/fcontextPage.py +++ b/gui/fcontextPage.py @@ -16,10 +16,7 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import gtk -import gtk.glade -import os -import gobject +from gi.repository import GObject, Gtk import seobject try: from subprocess import getstatusoutput @@ -73,40 +70,40 @@ class fcontextPage(semanagePage): def __init__(self, xml): semanagePage.__init__(self, xml, "fcontext", _("File Labeling")) - self.fcontextFilter = xml.get_widget("fcontextFilterEntry") + self.fcontextFilter = xml.get_object("fcontextFilterEntry") self.fcontextFilter.connect("focus_out_event", self.filter_changed) self.fcontextFilter.connect("activate", self.filter_changed) - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) - self.view = xml.get_widget("fcontextView") + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) + self.view = xml.get_object("fcontextView") self.view.set_model(self.store) self.view.set_search_equal_func(self.search) - col = gtk.TreeViewColumn(_("File\nSpecification"), gtk.CellRendererText(), text=SPEC_COL) - col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + col = Gtk.TreeViewColumn(_("File\nSpecification"), Gtk.CellRendererText(), text=SPEC_COL) + col.set_sizing(Gtk.TreeViewColumnSizing.FIXED) col.set_fixed_width(250) col.set_sort_column_id(SPEC_COL) col.set_resizable(True) self.view.append_column(col) - col = gtk.TreeViewColumn(_("Selinux\nFile Type"), gtk.CellRendererText(), text=TYPE_COL) + col = Gtk.TreeViewColumn(_("Selinux\nFile Type"), Gtk.CellRendererText(), text=TYPE_COL) - col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + col.set_sizing(Gtk.TreeViewColumnSizing.FIXED) col.set_fixed_width(250) col.set_sort_column_id(TYPE_COL) col.set_resizable(True) self.view.append_column(col) - col = gtk.TreeViewColumn(_("File\nType"), gtk.CellRendererText(), text=2) + col = Gtk.TreeViewColumn(_("File\nType"), Gtk.CellRendererText(), text=2) col.set_sort_column_id(FTYPE_COL) col.set_resizable(True) self.view.append_column(col) - self.store.set_sort_column_id(SPEC_COL, gtk.SORT_ASCENDING) + self.store.set_sort_column_id(SPEC_COL, Gtk.SortType.ASCENDING) self.load() - self.fcontextEntry = xml.get_widget("fcontextEntry") - self.fcontextFileTypeCombo = xml.get_widget("fcontextFileTypeCombo") - self.fcontextTypeEntry = xml.get_widget("fcontextTypeEntry") - self.fcontextMLSEntry = xml.get_widget("fcontextMLSEntry") + self.fcontextEntry = xml.get_object("fcontextEntry") + self.fcontextFileTypeCombo = xml.get_object("fcontextFileTypeCombo") + self.fcontextTypeEntry = xml.get_object("fcontextTypeEntry") + self.fcontextMLSEntry = xml.get_object("fcontextMLSEntry") def match(self, fcon_dict, k, filter): try: @@ -192,7 +189,7 @@ def add(self): mls = self.fcontextMLSEntry.get_text().strip() list_model = self.fcontextFileTypeCombo.get_model() it = self.fcontextFileTypeCombo.get_active_iter() - ftype = list_model.get_value(it,0) + ftype = list_model.get_value(it, 0) self.wait() (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec)) self.ready() diff --git a/gui/loginsPage.py b/gui/loginsPage.py index 1f35a57bc7..b67eb8bc42 100644 --- a/gui/loginsPage.py +++ b/gui/loginsPage.py @@ -16,17 +16,13 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade -import os -import gobject import sys try: from subprocess import getstatusoutput except ImportError: from commands import getstatusoutput +from gi.repository import GObject, Gtk import seobject from semanagePage import * @@ -57,23 +53,23 @@ class loginsPage(semanagePage): def __init__(self, xml): self.firstTime = False semanagePage.__init__(self, xml, "logins", _("User Mapping")) - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) self.view.set_model(self.store) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Login\nName"), gtk.CellRendererText(), text=0) + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Login\nName"), Gtk.CellRendererText(), text=0) col.set_sort_column_id(0) col.set_resizable(True) self.view.append_column(col) - col = gtk.TreeViewColumn(_("SELinux\nUser"), gtk.CellRendererText(), text=1) + col = Gtk.TreeViewColumn(_("SELinux\nUser"), Gtk.CellRendererText(), text=1) col.set_resizable(True) self.view.append_column(col) - col = gtk.TreeViewColumn(_("MLS/\nMCS Range"), gtk.CellRendererText(), text=2) + col = Gtk.TreeViewColumn(_("MLS/\nMCS Range"), Gtk.CellRendererText(), text=2) col.set_resizable(True) self.view.append_column(col) self.load() - self.loginsNameEntry = xml.get_widget("loginsNameEntry") - self.loginsSelinuxUserCombo = xml.get_widget("loginsSelinuxUserCombo") - self.loginsMLSEntry = xml.get_widget("loginsMLSEntry") + self.loginsNameEntry = xml.get_object("loginsNameEntry") + self.loginsSelinuxUserCombo = xml.get_object("loginsSelinuxUserCombo") + self.loginsMLSEntry = xml.get_object("loginsMLSEntry") def load(self, filter=""): self.filter = filter @@ -91,12 +87,12 @@ def load(self, filter=""): self.view.get_selection().select_path((0,)) def __dialogSetup(self): - if self.firstTime == True: + if self.firstTime: return self.firstTime = True - liststore = gtk.ListStore(gobject.TYPE_STRING) + liststore = Gtk.ListStore(GObject.TYPE_STRING) self.loginsSelinuxUserCombo.set_model(liststore) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.loginsSelinuxUserCombo.pack_start(cell, True) self.loginsSelinuxUserCombo.add_attribute(cell, 'text', 0) diff --git a/gui/modulesPage.py b/gui/modulesPage.py index 3767896686..c7fde9ea1e 100644 --- a/gui/modulesPage.py +++ b/gui/modulesPage.py @@ -16,21 +16,16 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade -import os +import sys +from subprocess import Popen, PIPE try: from subprocess import getstatusoutput except ImportError: from commands import getstatusoutput -import gobject -import sys -import seobject +from gi.repository import GObject, Gtk import selinux from semanagePage import * -from subprocess import Popen, PIPE ## ## I18N @@ -58,23 +53,23 @@ class modulesPage(semanagePage): def __init__(self, xml): semanagePage.__init__(self, xml, "modules", _("Policy Module")) - self.module_filter = xml.get_widget("modulesFilterEntry") + self.module_filter = xml.get_object("modulesFilterEntry") self.module_filter.connect("focus_out_event", self.filter_changed) self.module_filter.connect("activate", self.filter_changed) self.audit_enabled = False - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) self.view.set_model(self.store) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Module Name"), gtk.CellRendererText(), text=0) + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Module Name"), Gtk.CellRendererText(), text=0) col.set_sort_column_id(0) col.set_resizable(True) self.view.append_column(col) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Version"), gtk.CellRendererText(), text=1) - self.enable_audit_button = xml.get_widget("enableAuditButton") + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Version"), Gtk.CellRendererText(), text=1) + self.enable_audit_button = xml.get_object("enableAuditButton") self.enable_audit_button.connect("clicked", self.enable_audit) - self.new_button = xml.get_widget("newModuleButton") + self.new_button = xml.get_object("newModuleButton") self.new_button.connect("clicked", self.new_module) col.set_sort_column_id(1) col.set_resizable(True) @@ -170,20 +165,20 @@ def propertiesDialog(self): return def addDialog(self): - dialog = gtk.FileChooserDialog(_("Load Policy Module"), + dialog = Gtk.FileChooserDialog(_("Load Policy Module"), None, - gtk.FILE_CHOOSER_ACTION_OPEN, - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - gtk.STOCK_OPEN, gtk.RESPONSE_OK)) - dialog.set_default_response(gtk.RESPONSE_OK) + Gtk.FileChooserAction.OPEN, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) + dialog.set_default_response(Gtk.ResponseType.OK) - filter = gtk.FileFilter() + filter = Gtk.FileFilter() filter.set_name("Policy Files") filter.add_pattern("*.pp") dialog.add_filter(filter) response = dialog.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: self.add(dialog.get_filename()) dialog.destroy() diff --git a/gui/polgengui.py b/gui/polgengui.py index 7460cce291..af6b822b86 100644 --- a/gui/polgengui.py +++ b/gui/polgengui.py @@ -22,11 +22,11 @@ # import signal import string -import gtk -import gtk.glade +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk import os -import gobject -import gnome +from gi.repository import GObject import sys try: import sepolicy @@ -79,8 +79,6 @@ def get_all_modules(): import __builtin__ __builtin__.__dict__['_'] = unicode -gnome.program_init("SELinux Policy Generation Tool", "5") - version = "1.0" sys.path.append('/usr/share/system-config-selinux') @@ -95,10 +93,12 @@ def foreach(model, path, iter, selected): ## ## Pull in the Glade file ## +xml = Gtk.Builder() +xml.set_translation_domain(PROGNAME) if os.access("polgen.glade", os.F_OK): - xml = gtk.glade.XML("polgen.glade", domain=PROGNAME) + xml.add_from_file("polgen.glade") else: - xml = gtk.glade.XML("/usr/share/system-config-selinux/polgen.glade", domain=PROGNAME) + xml.add_from_file("/usr/share/system-config-selinux/polgen.glade") FILE = 1 DIR = 2 @@ -277,27 +277,27 @@ def __init__(self): b.connect("clicked", self.network_all_clicked) self.boolean_treeview = self.xml.get_widget("boolean_treeview") - self.boolean_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + self.boolean_store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) self.boolean_treeview.set_model(self.boolean_store) - self.boolean_store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Name"), gtk.CellRendererText(), text=0) + self.boolean_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Name"), Gtk.CellRendererText(), text=0) self.boolean_treeview.append_column(col) - col = gtk.TreeViewColumn(_("Description"), gtk.CellRendererText(), text=1) + col = Gtk.TreeViewColumn(_("Description"), Gtk.CellRendererText(), text=1) self.boolean_treeview.append_column(col) self.role_treeview = self.xml.get_widget("role_treeview") - self.role_store = gtk.ListStore(gobject.TYPE_STRING) + self.role_store = Gtk.ListStore(GObject.TYPE_STRING) self.role_treeview.set_model(self.role_store) - self.role_treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - self.role_store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Role"), gtk.CellRendererText(), text=0) + self.role_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) + self.role_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Role"), Gtk.CellRendererText(), text=0) self.role_treeview.append_column(col) self.existing_user_treeview = self.xml.get_widget("existing_user_treeview") - self.existing_user_store = gtk.ListStore(gobject.TYPE_STRING) + self.existing_user_store = Gtk.ListStore(GObject.TYPE_STRING) self.existing_user_treeview.set_model(self.existing_user_store) - self.existing_user_store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Existing_User"), gtk.CellRendererText(), text=0) + self.existing_user_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Existing_User"), Gtk.CellRendererText(), text=0) self.existing_user_treeview.append_column(col) for i in self.all_roles: @@ -307,19 +307,19 @@ def __init__(self): self.in_tcp_reserved_checkbutton = xml.get_widget("in_tcp_reserved_checkbutton") self.transition_treeview = self.xml.get_widget("transition_treeview") - self.transition_store = gtk.ListStore(gobject.TYPE_STRING) + self.transition_store = Gtk.ListStore(GObject.TYPE_STRING) self.transition_treeview.set_model(self.transition_store) - self.transition_treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - self.transition_store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Application"), gtk.CellRendererText(), text=0) + self.transition_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) + self.transition_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Application"), Gtk.CellRendererText(), text=0) self.transition_treeview.append_column(col) self.user_transition_treeview = self.xml.get_widget("user_transition_treeview") - self.user_transition_store = gtk.ListStore(gobject.TYPE_STRING) + self.user_transition_store = Gtk.ListStore(GObject.TYPE_STRING) self.user_transition_treeview.set_model(self.user_transition_store) - self.user_transition_treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - self.user_transition_store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Application"), gtk.CellRendererText(), text=0) + self.user_transition_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) + self.user_transition_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Application"), Gtk.CellRendererText(), text=0) self.user_transition_treeview.append_column(col) for i in self.all_users: @@ -329,11 +329,11 @@ def __init__(self): self.existing_user_store.set_value(iter, 0, i[:-2]) self.admin_treeview = self.xml.get_widget("admin_treeview") - self.admin_store = gtk.ListStore(gobject.TYPE_STRING) + self.admin_store = Gtk.ListStore(GObject.TYPE_STRING) self.admin_treeview.set_model(self.admin_store) - self.admin_treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - self.admin_store.set_sort_column_id(0, gtk.SORT_ASCENDING) - col = gtk.TreeViewColumn(_("Application"), gtk.CellRendererText(), text=0) + self.admin_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) + self.admin_store.set_sort_column_id(0, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Application"), Gtk.CellRendererText(), text=0) self.admin_treeview.append_column(col) try: @@ -383,17 +383,17 @@ def forward(self, arg): if self.pages[type][self.current_page] == self.FINISH_PAGE: self.generate_policy() - self.xml.get_widget("cancel_button").set_label(gtk.STOCK_CLOSE) + self.xml.get_widget("cancel_button").set_label(Gtk.STOCK_CLOSE) else: self.current_page = self.current_page + 1 self.notebook.set_current_page(self.pages[type][self.current_page]) if self.pages[type][self.current_page] == self.FINISH_PAGE: - self.forward_button.set_label(gtk.STOCK_APPLY) + self.forward_button.set_label(Gtk.STOCK_APPLY) def back(self, arg): type = self.get_type() if self.pages[type][self.current_page] == self.FINISH_PAGE: - self.forward_button.set_label(gtk.STOCK_GO_FORWARD) + self.forward_button.set_label(Gtk.STOCK_GO_FORWARD) self.current_page = self.current_page - 1 self.notebook.set_current_page(self.pages[type][self.current_page]) @@ -406,30 +406,30 @@ def network_all_clicked(self, button): b.set_sensitive(not active) def verify(self, message, title=""): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, - gtk.BUTTONS_YES_NO, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, + Gtk.ButtonsType.YES_NO, message) dlg.set_title(title) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() rc = dlg.run() dlg.destroy() return rc def info(self, message): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, - gtk.BUTTONS_OK, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, + Gtk.ButtonsType.OK, message) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() dlg.run() dlg.destroy() def error(self, message): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, - gtk.BUTTONS_CLOSE, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, message) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() dlg.run() dlg.destroy() @@ -550,7 +550,7 @@ def add_boolean(self, type): self.boolean_description_entry.set_text("") rc = self.boolean_dialog.run() self.boolean_dialog.hide() - if rc == gtk.RESPONSE_CANCEL: + if rc == Gtk.ResponseType.CANCEL: return iter = self.boolean_store.append() self.boolean_store.set_value(iter, 0, self.boolean_name_entry.get_text()) @@ -559,7 +559,7 @@ def add_boolean(self, type): def __add(self, type): rc = self.file_dialog.run() self.file_dialog.hide() - if rc == gtk.RESPONSE_CANCEL: + if rc == Gtk.ResponseType.CANCEL: return for i in self.file_dialog.get_filenames(): iter = self.store.append() @@ -569,29 +569,29 @@ def __add(self, type): def exec_select(self, args): self.file_dialog.set_select_multiple(0) self.file_dialog.set_title(_("Select executable file to be confined.")) - self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_OPEN) + self.file_dialog.set_action(Gtk.FileChooserAction.OPEN) self.file_dialog.set_current_folder("/usr/sbin") rc = self.file_dialog.run() self.file_dialog.hide() - if rc == gtk.RESPONSE_CANCEL: + if rc == Gtk.ResponseType.CANCEL: return self.exec_entry.set_text(self.file_dialog.get_filename()) def init_script_select(self, args): self.file_dialog.set_select_multiple(0) self.file_dialog.set_title(_("Select init script file to be confined.")) - self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_OPEN) + self.file_dialog.set_action(Gtk.FileChooserAction.OPEN) self.file_dialog.set_current_folder("/etc/rc.d/init.d") rc = self.file_dialog.run() self.file_dialog.hide() - if rc == gtk.RESPONSE_CANCEL: + if rc == Gtk.ResponseType.CANCEL: return self.init_script_entry.set_text(self.file_dialog.get_filename()) def add(self, args): self.file_dialog.set_title(_("Select file(s) that confined application creates or writes")) self.file_dialog.set_current_folder("/") - self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_OPEN) + self.file_dialog.set_action(Gtk.FileChooserAction.OPEN) self.file_dialog.set_select_multiple(1) self.__add(FILE) @@ -599,7 +599,7 @@ def add_dir(self, args): self.file_dialog.set_title(_("Select directory(s) that the confined application owns and writes into")) self.file_dialog.set_current_folder("/") self.file_dialog.set_select_multiple(1) - self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) + self.file_dialog.set_action(Gtk.FileChooserAction.SELECT_FOLDER) self.__add(DIR) def on_about_clicked(self, args): @@ -608,7 +608,7 @@ def on_about_clicked(self, args): dlg.hide() def quit(self, args): - gtk.main_quit() + Gtk.main_quit() def setupScreen(self): # Bring in widgets from glade file. @@ -650,20 +650,20 @@ def setupScreen(self): self.view = self.xml.get_widget("write_treeview") self.file_dialog = self.xml.get_widget("filechooserdialog") - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT) + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_INT) self.view.set_model(self.store) - col = gtk.TreeViewColumn("", gtk.CellRendererText(), text=0) + col = Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=0) col.set_resizable(True) self.view.append_column(col) self.view.get_selection().select_path((0,)) def output_button_clicked(self, *args): self.file_dialog.set_title(_("Select directory to generate policy files in")) - self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) + self.file_dialog.set_action(Gtk.FileChooserAction.SELECT_FOLDER) self.file_dialog.set_select_multiple(0) rc = self.file_dialog.run() self.file_dialog.hide() - if rc == gtk.RESPONSE_CANCEL: + if rc == Gtk.ResponseType.CANCEL: return self.output_entry.set_text(self.file_dialog.get_filename()) @@ -675,11 +675,11 @@ def on_focus_out_event(self, entry, third): name = entry.get_text() if self.name != name: if name in self.all_types: - if self.verify(_("Type %s_t already defined in current policy.\nDo you want to continue?") % name, _("Verify Name")) == gtk.RESPONSE_NO: + if self.verify(_("Type %s_t already defined in current policy.\nDo you want to continue?") % name, _("Verify Name")) == Gtk.ResponseType.NO: entry.set_text("") return False if name in self.all_modules: - if self.verify(_("Module %s already loaded in current policy.\nDo you want to continue?") % name, _("Verify Name")) == gtk.RESPONSE_NO: + if self.verify(_("Module %s already loaded in current policy.\nDo you want to continue?") % name, _("Verify Name")) == Gtk.ResponseType.NO: entry.set_text("") return False @@ -770,7 +770,7 @@ def stand_alone(self): self.mainWindow.connect("destroy", self.quit) self.mainWindow.show_all() - gtk.main() + Gtk.main() if __name__ == "__main__": signal.signal(signal.SIGINT, signal.SIG_DFL) diff --git a/gui/portsPage.py b/gui/portsPage.py index b8fdaad3e9..30f58383bc 100644 --- a/gui/portsPage.py +++ b/gui/portsPage.py @@ -16,12 +16,8 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade -import os -import gobject import sys +from gi.repository import GObject, Gtk import seobject TYPE_COL = 0 @@ -62,18 +58,19 @@ class portsPage(semanagePage): def __init__(self, xml): semanagePage.__init__(self, xml, "ports", _("Network Port")) - xml.signal_connect("on_group_clicked", self.on_group_clicked) + group_listview = xml.get_object("listViewButton") + group_listview.connect("clicked", self.on_group_clicked) self.group = False - self.ports_filter = xml.get_widget("portsFilterEntry") + self.ports_filter = xml.get_object("portsFilterEntry") self.ports_filter.connect("focus_out_event", self.filter_changed) self.ports_filter.connect("activate", self.filter_changed) - self.ports_name_entry = xml.get_widget("portsNameEntry") - self.ports_protocol_combo = xml.get_widget("portsProtocolCombo") - self.ports_number_entry = xml.get_widget("portsNumberEntry") - self.ports_mls_entry = xml.get_widget("portsMLSEntry") - self.ports_add_button = xml.get_widget("portsAddButton") - self.ports_properties_button = xml.get_widget("portsPropertiesButton") - self.ports_delete_button = xml.get_widget("portsDeleteButton") + self.ports_name_entry = xml.get_object("portsNameEntry") + self.ports_protocol_combo = xml.get_object("portsProtocolCombo") + self.ports_number_entry = xml.get_object("portsNumberEntry") + self.ports_mls_entry = xml.get_object("portsMLSEntry") + self.ports_add_button = xml.get_object("portsAddButton") + self.ports_properties_button = xml.get_object("portsPropertiesButton") + self.ports_delete_button = xml.get_object("portsDeleteButton") liststore = self.ports_protocol_combo.get_model() iter = liststore.get_iter_first() self.ports_protocol_combo.set_active_iter(iter) @@ -90,28 +87,28 @@ def filter_changed(self, *arg): self.group_load(filter) def init_store(self): - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) self.view.set_model(self.store) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.view.set_search_equal_func(self.search) - col = gtk.TreeViewColumn(_("SELinux Port\nType"), gtk.CellRendererText(), text=TYPE_COL) + col = Gtk.TreeViewColumn(_("SELinux Port\nType"), Gtk.CellRendererText(), text=TYPE_COL) col.set_sort_column_id(TYPE_COL) col.set_resizable(True) self.view.append_column(col) - self.store.set_sort_column_id(TYPE_COL, gtk.SORT_ASCENDING) + self.store.set_sort_column_id(TYPE_COL, Gtk.SortType.ASCENDING) - col = gtk.TreeViewColumn(_("Protocol"), gtk.CellRendererText(), text=PROTOCOL_COL) + col = Gtk.TreeViewColumn(_("Protocol"), Gtk.CellRendererText(), text=PROTOCOL_COL) col.set_sort_column_id(PROTOCOL_COL) col.set_resizable(True) self.view.append_column(col) - self.mls_col = gtk.TreeViewColumn(_("MLS/MCS\nLevel"), gtk.CellRendererText(), text=MLS_COL) + self.mls_col = Gtk.TreeViewColumn(_("MLS/MCS\nLevel"), Gtk.CellRendererText(), text=MLS_COL) self.mls_col.set_resizable(True) self.mls_col.set_sort_column_id(MLS_COL) self.view.append_column(self.mls_col) - col = gtk.TreeViewColumn(_("Port"), gtk.CellRendererText(), text=PORT_COL) + col = Gtk.TreeViewColumn(_("Port"), Gtk.CellRendererText(), text=PORT_COL) col.set_sort_column_id(PORT_COL) col.set_resizable(True) self.view.append_column(col) @@ -139,7 +136,7 @@ def load(self, filter=""): continue iter = self.store.append() if k[0] == k[1]: - self.store.set_value(iter, PORT_COL, k[0]) + self.store.set_value(iter, PORT_COL, str(k[0])) else: rec = "%s-%s" % k[:2] self.store.set_value(iter, PORT_COL, rec) diff --git a/gui/semanagePage.py b/gui/semanagePage.py index 27367f333e..560ec077f0 100644 --- a/gui/semanagePage.py +++ b/gui/semanagePage.py @@ -16,13 +16,8 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade -import os -import gobject import sys -import seobject +from gi.repository import Gdk, Gtk ## ## I18N @@ -47,24 +42,25 @@ def idle_func(): - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() class semanagePage: def __init__(self, xml, name, description): self.xml = xml - self.window = self.xml.get_widget("mainWindow").get_root_window() - self.busy_cursor = gtk.gdk.Cursor(gtk.gdk.WATCH) - self.ready_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) + self.window = self.xml.get_object("mainWindow").get_root_window() + self.busy_cursor = Gdk.Cursor.new(Gdk.CursorType.WATCH) + self.ready_cursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) self.local = False - self.view = xml.get_widget("%sView" % name) - self.dialog = xml.get_widget("%sDialog" % name) - self.filter_entry = xml.get_widget("%sFilterEntry" % name) + self.view = xml.get_object("%sView" % name) + self.dialog = xml.get_object("%sDialog" % name) + self.filter_entry = xml.get_object("%sFilterEntry" % name) self.filter_entry.connect("focus_out_event", self.filter_changed) self.filter_entry.connect("activate", self.filter_changed) + self.filter_entry.connect("changed", self.filter_changed) self.view.connect("row_activated", self.rowActivated) self.view.get_selection().connect("changed", self.itemSelected) @@ -81,7 +77,7 @@ def ready(self): def get_description(self): return self.description - def itemSelected(self, args): + def itemSelected(self, selection): return def filter_changed(self, *arg): @@ -110,28 +106,28 @@ def rowActivated(self, view, row, Column): self.propertiesDialog() def verify(self, message, title=""): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, - gtk.BUTTONS_YES_NO, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, + Gtk.ButtonsType.YES_NO, message) dlg.set_title(title) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() rc = dlg.run() dlg.destroy() return rc def error(self, message): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, - gtk.BUTTONS_CLOSE, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, message) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() dlg.run() dlg.destroy() def deleteDialog(self): store, it = self.view.get_selection().get_selected() - if (it is not None) and (self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(it, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES): + if (it is not None) and (self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(it, 0))), _("Delete %s" % self.description)) == Gtk.ResponseType.YES): self.delete() def use_menus(self): @@ -140,11 +136,11 @@ def use_menus(self): def addDialog(self): self.dialogClear() self.dialog.set_title(_("Add %s" % self.description)) - self.dialog.set_position(gtk.WIN_POS_MOUSE) + self.dialog.set_position(Gtk.WindowPosition.MOUSE) - while self.dialog.run() == gtk.RESPONSE_OK: + while self.dialog.run() == Gtk.ResponseType.OK: try: - if self.add() == False: + if not self.add(): continue break except ValueError as e: @@ -154,10 +150,10 @@ def addDialog(self): def propertiesDialog(self): self.dialogInit() self.dialog.set_title(_("Modify %s" % self.description)) - self.dialog.set_position(gtk.WIN_POS_MOUSE) - while self.dialog.run() == gtk.RESPONSE_OK: + self.dialog.set_position(Gtk.WindowPosition.MOUSE) + while self.dialog.run() == Gtk.ResponseType.OK: try: - if self.modify() == False: + if not self.modify(): continue break except ValueError as e: diff --git a/gui/statusPage.py b/gui/statusPage.py index 23d0d0f612..766854b19c 100644 --- a/gui/statusPage.py +++ b/gui/statusPage.py @@ -16,23 +16,14 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade import os -import gobject import sys -import tempfile +from gi.repository import Gtk import selinux INSTALLPATH = '/usr/share/system-config-selinux' sys.path.append(INSTALLPATH) -try: - from subprocess import getstatusoutput -except ImportError: - from commands import getstatusoutput - ENFORCING = 1 PERMISSIVE = 0 DISABLED = -1 @@ -71,12 +62,11 @@ def __init__(self, xml): self.type = selinux.selinux_getpolicytype() # Bring in widgets from glade file. - self.typeHBox = xml.get_widget("typeHBox") - self.selinuxTypeOptionMenu = xml.get_widget("selinuxTypeOptionMenu") - self.typeLabel = xml.get_widget("typeLabel") - self.enabledOptionMenu = xml.get_widget("enabledOptionMenu") - self.currentOptionMenu = xml.get_widget("currentOptionMenu") - self.relabel_checkbutton = xml.get_widget("relabelCheckbutton") + self.selinuxTypeOptionMenu = xml.get_object("selinuxTypeOptionMenu") + self.typeLabel = xml.get_object("typeLabel") + self.enabledOptionMenu = xml.get_object("enabledOptionMenu") + self.currentOptionMenu = xml.get_object("currentOptionMenu") + self.relabel_checkbutton = xml.get_object("relabelCheckbutton") self.relabel_checkbutton.set_active(self.is_relabel()) self.relabel_checkbutton.connect("toggled", self.on_relabel_toggle) if self.get_current_mode() == ENFORCING or self.get_current_mode() == PERMISSIVE: @@ -90,7 +80,7 @@ def __init__(self, xml): self.currentOptionMenu.set_active(0) self.currentOptionMenu.set_sensitive(False) - if self.read_selinux_config() == None: + if self.read_selinux_config() is None: self.selinuxsupport = False else: self.enabledOptionMenu.connect("changed", self.enabled_changed) @@ -131,10 +121,10 @@ def on_relabel_toggle(self, button): os.unlink(RELABELFILE) def verify(self, message): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, - gtk.BUTTONS_YES_NO, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, + Gtk.ButtonsType.YES_NO, message) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() rc = dlg.run() dlg.destroy() @@ -144,7 +134,7 @@ def typemenu_changed(self, menu): type = self.get_type() enabled = self.enabledOptionMenu.get_active() if self.initialtype != type: - if self.verify(_("Changing the policy type will cause a relabel of the entire file system on the next boot. Relabeling takes a long time depending on the size of the file system. Do you wish to continue?")) == gtk.RESPONSE_NO: + if self.verify(_("Changing the policy type will cause a relabel of the entire file system on the next boot. Relabeling takes a long time depending on the size of the file system. Do you wish to continue?")) == Gtk.ResponseType.NO: menu.set_active(self.typeHistory) return None @@ -158,12 +148,12 @@ def enabled_changed(self, combo): type = self.get_type() if self.initEnabled != DISABLED and enabled == DISABLED: - if self.verify(_("Changing to SELinux disabled requires a reboot. It is not recommended. If you later decide to turn SELinux back on, the system will be required to relabel. If you just want to see if SELinux is causing a problem on your system, you can go to permissive mode which will only log errors and not enforce SELinux policy. Permissive mode does not require a reboot Do you wish to continue?")) == gtk.RESPONSE_NO: + if self.verify(_("Changing to SELinux disabled requires a reboot. It is not recommended. If you later decide to turn SELinux back on, the system will be required to relabel. If you just want to see if SELinux is causing a problem on your system, you can go to permissive mode which will only log errors and not enforce SELinux policy. Permissive mode does not require a reboot Do you wish to continue?")) == Gtk.ResponseType.NO: combo.set_active(self.enabled) return None if self.initEnabled == DISABLED and enabled < 2: - if self.verify(_("Changing to SELinux enabled will cause a relabel of the entire file system on the next boot. Relabeling takes a long time depending on the size of the file system. Do you wish to continue?")) == gtk.RESPONSE_NO: + if self.verify(_("Changing to SELinux enabled will cause a relabel of the entire file system on the next boot. Relabeling takes a long time depending on the size of the file system. Do you wish to continue?")) == Gtk.ResponseType.NO: combo.set_active(self.enabled) return None self.relabel_checkbutton.set_active(True) diff --git a/gui/system-config-selinux.glade b/gui/system-config-selinux.glade deleted file mode 100644 index 4547b3fd66..0000000000 --- a/gui/system-config-selinux.glade +++ /dev/null @@ -1,3005 +0,0 @@ - - - - - - - - - 5 - False - system-config-selinux - Copyright (c)2006 Red Hat, Inc. -Copyright (c) 2006 Dan Walsh <dwalsh@redhat.com> - False - Daniel Walsh <dwalsh@redhat.com> - - translator-credits - system-config-selinux.png - - - - Add SELinux Login Mapping - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - 3 - 2 - False - 4 - 6 - - - - True - Login Name - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - SELinux User - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - MLS/MCS Range - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - False - True - - - 1 - 2 - 1 - 2 - fill - fill - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - 5 - True - True - - - - - 0 - True - True - - - - - - - - Add SELinux Network Ports - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - 4 - 2 - False - 4 - 6 - - - - True - Port Number - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Protocol - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - SELinux Type - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - tcp -udp - False - True - - - 1 - 2 - 1 - 2 - fill - fill - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - MLS/MCS -Level - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 3 - 4 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 3 - 4 - - - - - - 5 - True - True - - - - - 0 - True - True - - - - - - - - Add SELinux Login Mapping - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - 4 - 2 - False - 4 - 6 - - - - True - File Specification - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - File Type - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - SELinux Type - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - all files -regular file -directory -character device -block device -socket file -symbolic link -named pipe - - False - True - - - 1 - 2 - 1 - 2 - fill - fill - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - MLS - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 3 - 4 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 3 - 4 - - - - - - 5 - True - True - - - - - 0 - True - True - - - - - - - - Add SELinux User - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - 3 - 2 - False - 4 - 6 - - - - True - SELinux User - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - MLS/MCS Range - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - SELinux Roles - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - 5 - True - True - - - - - 0 - True - True - - - - - - - - 800 - 500 - SELinux Administration - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - system-config-selinux.png - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - True - - - - True - GTK_SHADOW_NONE - - - - True - GTK_PACK_DIRECTION_LTR - GTK_PACK_DIRECTION_LTR - - - - True - GNOMEUIINFO_MENU_FILE_TREE - - - - - - - True - Add - True - - - - - - True - gtk-add - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Properties - True - - - - - - True - gtk-properties - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Delete - True - - - - - - True - gtk-delete - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - GNOMEUIINFO_MENU_EXIT_ITEM - - - - - - - - - - - True - GNOMEUIINFO_MENU_HELP_TREE - - - - - - - True - GNOMEUIINFO_MENU_ABOUT_ITEM - - - - - - - - - - - - BONOBO_DOCK_TOP - 0 - 0 - 0 - BONOBO_DOCK_ITEM_BEH_EXCLUSIVE|BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL|BONOBO_DOCK_ITEM_BEH_LOCKED - - - - - - True - True - - - - 5 - True - 0 - 0.5 - GTK_SHADOW_NONE - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - True - Select Management Object - True - False - False - False - True - False - False - False - - - - - - - - True - <b>Select:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - False - True - - - - - - True - False - True - GTK_POS_TOP - False - False - - - - True - False - 0 - - - - True - 4 - 2 - False - 5 - 5 - - - - True - System Default Enforcing Mode - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Disabled -Permissive -Enforcing - - False - True - - - 1 - 2 - 0 - 1 - fill - - - - - - True - Current Enforcing Mode - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - - False - True - - - 1 - 2 - 1 - 2 - fill - fill - - - - - - True - System Default Policy Type: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - - False - True - - - 1 - 2 - 2 - 3 - fill - fill - - - - - - True - Select if you wish to relabel then entire file system on next reboot. Relabeling can take a very long time, depending on the size of the system. If you are changing policy types or going from disabled to enforcing, a relabel is required. - True - GTK_RELIEF_NORMAL - True - False - False - True - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-refresh - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - Relabel on next reboot. - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - 0 - 2 - 3 - 4 - fill - fill - - - - - 0 - True - True - - - - - False - True - - - - - - True - label37 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Revert boolean setting to system default - gtk-revert-to-saved - True - True - False - - - - False - True - - - - - - True - Toggle between Customized and All Booleans - Customized - True - gtk-find - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 10 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - Boolean - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label50 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Add File Context - gtk-add - True - True - False - - - - False - True - - - - - - True - Modify File Context - gtk-properties - True - True - False - - - - False - True - - - - - - True - Delete File Context - gtk-delete - True - True - False - - - - False - True - - - - - - True - Toggle between all and customized file context - Customized - True - gtk-find - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 0 - False - False - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - File Labeling - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label38 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Add SELinux User Mapping - gtk-add - True - True - False - - - - False - True - - - - - - True - Modify SELinux User Mapping - gtk-properties - True - True - False - - - - False - True - - - - - - True - Delete SELinux User Mapping - gtk-delete - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 5 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - User Mapping - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label39 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Add User - gtk-add - True - True - False - - - - False - True - - - - - - True - Modify User - gtk-properties - True - True - False - - - - False - True - - - - - - True - Delete User - gtk-delete - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 5 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - SELinux User - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label41 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - False - True - - - - True - Add Network Port - gtk-add - True - True - False - - - - False - True - - - - - - True - Edit Network Port - gtk-properties - True - True - False - - - - False - True - - - - - - True - Delete Network Port - gtk-delete - True - True - False - - - - False - True - - - - - - True - True - True - False - - - - 32 - True - - - - - False - False - - - - - - True - Toggle between Customized and All Ports - Group View - True - gtk-indent - True - True - False - - - - False - True - - - - - - True - Toggle between Customized and All Ports - Customized - True - gtk-find - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 5 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - Network Port - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label42 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Generate new policy module - gtk-new - True - True - False - - - - False - True - - - - - - True - Load policy module - gtk-add - True - True - False - - - - False - True - - - - - - True - Remove loadable policy module - gtk-remove - True - True - False - - - - False - True - - - - - - True - True - True - False - - - - 10 - True - - - - - False - False - - - - - - True - Enable/Disable additional audit rules, that are normally not reported in the log files. - Enable Audit - True - gtk-zoom-in - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 5 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - Policy Module - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label44 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - Change process mode to permissive. - Permissive - True - gtk-dialog-warning - True - True - False - - - - False - True - - - - - - True - Change process mode to enforcing - Enforcing - True - gtk-dialog-error - True - True - False - - - - False - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - Filter - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 10 - False - False - - - - - - True - True - True - True - 0 - - True - - False - - - - 0 - True - True - - - - - 5 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - Process Domain - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - label59 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - True - True - - - - - - - 0 - True - True - - - - - - True - True - True - - - 0 - True - True - - - - - diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py index ed41e981ef..ce7c74b133 100644 --- a/gui/system-config-selinux.py +++ b/gui/system-config-selinux.py @@ -20,20 +20,19 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # +import os import signal -import string import sys +import gi +gi.require_version('Gtk', '3.0') try: - import gtk + from gi.repository import Gtk except RuntimeError as e: print("system-config-selinux:", e) print("This is a graphical application and requires DISPLAY to be set.") sys.exit(1) -import gtk.glade -import os -import gobject -import gnome +from gi.repository import GObject import statusPage import booleansPage import loginsPage @@ -64,8 +63,6 @@ import __builtin__ __builtin__.__dict__['_'] = unicode -gnome.program_init("SELinux Management Tool", "5") - version = "1.0" sys.path.append('/usr/share/system-config-selinux') @@ -74,10 +71,12 @@ ## ## Pull in the Glade file ## -if os.access("system-config-selinux.glade", os.F_OK): - xml = gtk.glade.XML("system-config-selinux.glade", domain=PROGNAME) +xml = Gtk.Builder() +xml.set_translation_domain(PROGNAME) +if os.access("system-config-selinux.ui", os.F_OK): + xml.add_from_file("system-config-selinux.ui") else: - xml = gtk.glade.XML("/usr/share/system-config-selinux/system-config-selinux.glade", domain=PROGNAME) + xml.add_from_file("/usr/share/system-config-selinux/system-config-selinux.ui") class childWindow: @@ -85,11 +84,16 @@ class childWindow: def __init__(self): self.tabs = [] self.xml = xml - xml.signal_connect("on_quit_activate", self.destroy) - xml.signal_connect("on_delete_clicked", self.delete) - xml.signal_connect("on_add_clicked", self.add) - xml.signal_connect("on_properties_clicked", self.properties) - xml.signal_connect("on_local_clicked", self.on_local_clicked) + xml.connect_signals({ + "on_quit_activate": self.destroy, + "on_delete_clicked": self.delete, + "on_add_clicked": self.add, + "on_properties_clicked": self.properties, + "on_local_clicked": self.on_local_clicked, + "on_policy_activate": self.policy, + "on_logging_activate": self.logging, + "on_about_activate": self.on_about_activate, + }) self.add_page(statusPage.statusPage(xml)) if selinux.is_selinux_enabled() > 0: try: @@ -103,20 +107,15 @@ def __init__(self): except ValueError as e: self.error(e.message) - xml.signal_connect("on_quit_activate", self.destroy) - xml.signal_connect("on_policy_activate", self.policy) - xml.signal_connect("on_logging_activate", self.logging) - xml.signal_connect("on_about_activate", self.on_about_activate) - - self.add_menu = xml.get_widget("add_menu_item") - self.properties_menu = xml.get_widget("properties_menu_item") - self.delete_menu = xml.get_widget("delete_menu_item") + self.add_menu = xml.get_object("add_menu_item") + self.properties_menu = xml.get_object("properties_menu_item") + self.delete_menu = xml.get_object("delete_menu_item") def error(self, message): - dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, - gtk.BUTTONS_CLOSE, + dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, message) - dlg.set_position(gtk.WIN_POS_MOUSE) + dlg.set_position(Gtk.WindowPosition.MOUSE) dlg.show_all() dlg.run() dlg.destroy() @@ -143,12 +142,12 @@ def on_local_clicked(self, button): self.tabs[self.notebook.get_current_page()].on_local_clicked(button) def on_about_activate(self, args): - dlg = xml.get_widget("aboutWindow") + dlg = xml.get_object("aboutWindow") dlg.run() dlg.hide() def destroy(self, args): - gtk.main_quit() + Gtk.main_quit() def use_menus(self, use_menus): self.add_menu.set_sensitive(use_menus) @@ -166,13 +165,13 @@ def itemSelected(self, selection): def setupScreen(self): # Bring in widgets from glade file. - self.mainWindow = self.xml.get_widget("mainWindow") - self.notebook = self.xml.get_widget("notebook") - self.view = self.xml.get_widget("selectView") + self.mainWindow = self.xml.get_object("mainWindow") + self.notebook = self.xml.get_object("notebook") + self.view = self.xml.get_object("selectView") self.view.get_selection().connect("changed", self.itemSelected) - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.view.set_model(self.store) - col = gtk.TreeViewColumn("", gtk.CellRendererText(), text=0) + col = Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=0) col.set_resizable(True) self.view.append_column(col) @@ -189,7 +188,7 @@ def stand_alone(self): self.mainWindow.connect("destroy", self.destroy) self.mainWindow.show_all() - gtk.main() + Gtk.main() if __name__ == "__main__": signal.signal(signal.SIGINT, signal.SIG_DFL) diff --git a/gui/system-config-selinux.ui b/gui/system-config-selinux.ui new file mode 100644 index 0000000000..c3f261a10d --- /dev/null +++ b/gui/system-config-selinux.ui @@ -0,0 +1,2043 @@ + + + + + + + system-config-selinux + False + 5 + normal + Copyright (c)2006 Red Hat, Inc. +Copyright (c) 2006 Dan Walsh <dwalsh@redhat.com> + Daniel Walsh <dwalsh@redhat.com> + + translator-credits + system-config-selinux.png + + + False + + + False + + + False + False + 0 + + + + + + + + + + True + False + gtk-add + + + True + False + gtk-properties + + + True + False + gtk-delete + + + False + Add SELinux Login Mapping + dialog + + + True + False + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + False + True + + + True + True + 1 + + + + + False + True + end + 0 + + + + + True + False + vertical + + + True + False + 4 + 6 + + + True + False + Login Name + + + 0 + 0 + + + + + True + False + SELinux User + + + 0 + 1 + + + + + True + False + MLS/MCS Range + + + 0 + 2 + + + + + True + True + * + + + 1 + 0 + + + + + True + False + + + 1 + 1 + + + + + True + True + * + + + 1 + 2 + + + + + True + True + 5 + 0 + + + + + True + True + 1 + + + + + + cancelbutton1 + okbutton1 + + + + + + + + + + + + + tcp + + + udp + + + + + False + Add SELinux Network Ports + dialog + + + True + False + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + False + True + + + True + True + 1 + + + + + False + True + end + 0 + + + + + True + False + vertical + + + True + False + 4 + 6 + + + True + False + Port Number + + + 0 + 0 + + + + + True + False + Protocol + + + 0 + 1 + + + + + True + False + SELinux Type + + + 0 + 2 + + + + + True + True + * + + + 1 + 0 + + + + + True + False + model1 + + + + 0 + + + + + 1 + 1 + + + + + True + True + * + + + 1 + 2 + + + + + True + False + MLS/MCS +Level + + + 0 + 3 + + + + + True + True + * + + + 1 + 3 + + + + + True + True + 5 + 0 + + + + + True + True + 1 + + + + + + button1 + button2 + + + + + + + + + + + + + all files + + + regular file + + + directory + + + character device + + + block device + + + socket file + + + symbolic link + + + named pipe + + + + + False + Add SELinux Login Mapping + dialog + + + True + False + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + False + True + + + True + True + 1 + + + + + False + True + end + 0 + + + + + True + False + vertical + + + True + False + 4 + 6 + + + True + False + File Specification + + + 0 + 0 + + + + + True + False + File Type + + + 0 + 1 + + + + + True + False + SELinux Type + + + 0 + 2 + + + + + True + True + * + + + 1 + 0 + + + + + True + False + model2 + + + + 0 + + + + + 1 + 1 + + + + + True + True + * + + + 1 + 2 + + + + + True + False + MLS + + + 0 + 3 + + + + + True + True + * + + + 1 + 3 + + + + + True + True + 5 + 0 + + + + + True + True + 1 + + + + + + button5 + button6 + + + + + + + + + + + + + Disabled + + + Permissive + + + Enforcing + + + + + False + SELinux Administration + 800 + 500 + system-config-selinux.png + + + True + False + vertical + + + True + False + + + True + False + _File + True + + + True + False + + + _Add + True + False + True + image13 + False + + + + + + + _Properties + True + False + True + image14 + False + + + + + + + _Delete + True + False + True + image15 + False + + + + + + gtk-quit + True + False + True + True + + + + + + + + + + True + False + _Help + True + + + True + False + + + gtk-about + True + False + True + True + + + + + + + + + + False + True + 0 + + + + + True + True + + + True + False + 5 + 0 + none + + + True + False + 12 + + + True + True + Select Management Object + False + + + + + + + + + + True + False + <b>Select:</b> + True + + + + + True + False + + + + + True + False + False + + + True + False + vertical + + + True + False + 5 + 5 + + + True + False + System Default Enforcing Mode + + + 0 + 0 + + + + + True + False + True + model3 + + + + 0 + + + + + 1 + 0 + + + + + True + False + Current Enforcing Mode + + + 0 + 1 + + + + + True + False + True + + + 1 + 1 + + + + + True + False + System Default Policy Type: + + + 0 + 2 + + + + + True + False + True + + + 1 + 2 + + + + + True + True + False + Select if you wish to relabel then entire file system on next reboot. Relabeling can take a very long time, depending on the size of the system. If you are changing policy types or going from disabled to enforcing, a relabel is required. + False + True + + + True + False + True + 0 + 0 + + + True + False + True + 2 + + + True + False + gtk-refresh + + + False + False + 0 + + + + + True + False + Relabel on next reboot. + True + + + False + False + 1 + + + + + + + + + 0 + 3 + 2 + + + + + True + True + end + 0 + + + + + + + True + False + vertical + + + True + False + both + + + True + False + Revert boolean setting to system default + gtk-revert-to-saved + + + + False + True + + + + + True + False + Toggle between Customized and All Booleans + Customized + True + gtk-find + + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + True + 10 + 1 + + + + + True + True + always + always + + + True + True + Boolean + + + + + + + + True + True + 2 + + + + + 1 + + + + + True + False + vertical + + + True + False + both + + + True + False + Add File Context + gtk-add + + + + False + True + + + + + True + False + Modify File Context + gtk-properties + + + + False + True + + + + + True + False + Delete File Context + gtk-delete + + + + False + True + + + + + True + False + Toggle between all and customized file context + Customized + True + gtk-find + + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + False + 1 + + + + + True + True + always + always + + + True + True + File Labeling + + + + + + + + True + True + 2 + + + + + 2 + + + + + True + False + vertical + + + True + False + both + + + True + False + Add SELinux User Mapping + gtk-add + + + + False + True + + + + + True + False + Modify SELinux User Mapping + gtk-properties + + + + False + True + + + + + True + False + Delete SELinux User Mapping + gtk-delete + + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + True + 5 + 1 + + + + + True + True + always + always + + + True + True + User Mapping + + + + + + + + True + True + 2 + + + + + 3 + + + + + True + False + vertical + + + True + False + both + + + True + False + Add User + gtk-add + + + + False + True + + + + + True + False + Modify User + gtk-properties + + + + False + True + + + + + True + False + Delete User + gtk-delete + + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + True + 5 + 1 + + + + + True + True + always + always + + + True + True + SELinux User + + + + + + + + True + True + 2 + + + + + 4 + + + + + True + False + vertical + + + True + False + both + + + True + False + Add Network Port + gtk-add + + + + False + True + + + + + True + False + Edit Network Port + gtk-properties + + + + False + True + + + + + True + False + Delete Network Port + gtk-delete + + + + False + True + + + + + True + False + + + 32 + True + False + vertical + + + + + False + False + + + + + True + False + Toggle between Customized and All Ports + Group View + True + gtk-indent + + + False + True + + + + + True + False + Toggle between Customized and All Ports + Customized + True + gtk-find + + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + True + 5 + 1 + + + + + True + True + always + always + + + True + True + Network Port + + + + + + + + True + True + 2 + + + + + 5 + + + + + True + False + vertical + + + True + False + both + + + True + False + Generate new policy module + gtk-new + + + False + True + + + + + True + False + Load policy module + gtk-add + + + + False + True + + + + + True + False + Remove loadable policy module + gtk-remove + + + + False + True + + + + + True + False + + + 10 + True + False + vertical + + + + + False + False + + + + + True + False + Enable/Disable additional audit rules, that are normally not reported in the log files. + Enable Audit + True + gtk-zoom-in + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + True + 5 + 1 + + + + + True + True + always + always + + + True + True + Policy Module + + + + + + + + True + True + 2 + + + + + 6 + + + + + True + False + vertical + + + True + False + both + + + True + False + Change process mode to permissive. + Permissive + True + gtk-dialog-warning + + + + False + True + + + + + True + False + Change process mode to enforcing + Enforcing + True + gtk-dialog-error + + + + False + True + + + + + False + False + 0 + + + + + True + False + + + True + False + Filter + + + False + False + 10 + 0 + + + + + True + True + + + + True + True + 1 + + + + + False + True + 5 + 1 + + + + + True + True + always + always + + + True + True + Process Domain + + + + + + + + True + True + 2 + + + + + 7 + + + + + True + True + + + + + True + True + 1 + + + + + True + False + 10 + 10 + 10 + 10 + 6 + 6 + vertical + 2 + + + False + False + 2 + + + + + + + + + + False + Add SELinux User + dialog + + + True + False + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + False + True + + + True + True + 1 + + + + + False + True + end + 0 + + + + + True + False + vertical + + + True + False + 4 + 6 + + + True + False + SELinux User + + + 0 + 0 + + + + + True + False + MLS/MCS Range + + + 0 + 1 + + + + + True + True + * + + + 1 + 1 + + + + + True + False + SELinux Roles + + + 0 + 2 + + + + + True + True + * + + + 1 + 2 + + + + + True + True + * + + + 1 + 0 + + + + + True + True + 5 + 0 + + + + + True + True + 1 + + + + + + button7 + button8 + + + + + + diff --git a/gui/usersPage.py b/gui/usersPage.py index 75b0547370..9d09bda217 100644 --- a/gui/usersPage.py +++ b/gui/usersPage.py @@ -16,17 +16,13 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## Author: Dan Walsh -import string -import gtk -import gtk.glade -import os -import gobject import sys try: from subprocess import getstatusoutput except ImportError: from commands import getstatusoutput +from gi.repository import GObject, Gtk import seobject from semanagePage import * @@ -57,27 +53,27 @@ class usersPage(semanagePage): def __init__(self, xml): semanagePage.__init__(self, xml, "users", _("SELinux User")) - self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) self.view.set_model(self.store) - self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING) - col = gtk.TreeViewColumn(_("SELinux\nUser"), gtk.CellRendererText(), text=0) + col = Gtk.TreeViewColumn(_("SELinux\nUser"), Gtk.CellRendererText(), text=0) col.set_sort_column_id(0) col.set_resizable(True) self.view.append_column(col) - col = gtk.TreeViewColumn(_("MLS/\nMCS Range"), gtk.CellRendererText(), text=1) + col = Gtk.TreeViewColumn(_("MLS/\nMCS Range"), Gtk.CellRendererText(), text=1) col.set_resizable(True) self.view.append_column(col) - col = gtk.TreeViewColumn(_("SELinux Roles"), gtk.CellRendererText(), text=2) + col = Gtk.TreeViewColumn(_("SELinux Roles"), Gtk.CellRendererText(), text=2) col.set_resizable(True) self.view.append_column(col) self.load() - self.selinuxUserEntry = xml.get_widget("selinuxUserEntry") - self.mlsRangeEntry = xml.get_widget("mlsRangeEntry") - self.selinuxRolesEntry = xml.get_widget("selinuxRolesEntry") + self.selinuxUserEntry = xml.get_object("selinuxUserEntry") + self.mlsRangeEntry = xml.get_object("mlsRangeEntry") + self.selinuxRolesEntry = xml.get_object("selinuxRolesEntry") def load(self, filter=""): self.filter = filter @@ -96,7 +92,7 @@ def load(self, filter=""): self.view.get_selection().select_path((0,)) def delete(self): - if semanagePage.delete(self) == gtk.RESPONSE_NO: + if semanagePage.delete(self) == Gtk.ResponseType.NO: return None def dialogInit(self):