diff --git selinux-gui-2.7/Makefile selinux-gui-2.7/Makefile index 4fc2c1a..ff0fd00 100644 --- selinux-gui-2.7/Makefile +++ selinux-gui-2.7/Makefile @@ -11,14 +11,13 @@ domainsPage.py \ fcontextPage.py \ html_util.py \ loginsPage.py \ -mappingsPage.py \ modulesPage.py \ -polgen.glade \ +polgen.ui \ 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 selinux-gui-2.7/booleansPage.py selinux-gui-2.7/booleansPage.py index a5d04bf..7849bea 100644 --- selinux-gui-2.7/booleansPage.py +++ selinux-gui-2.7/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 @@ except: 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 @@ class booleansPage: 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 @@ class booleansPage: 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 selinux-gui-2.7/domainsPage.py selinux-gui-2.7/domainsPage.py index 66f882a..bad5140 100644 --- selinux-gui-2.7/domainsPage.py +++ selinux-gui-2.7/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 @@ class domainsPage(semanagePage): 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 selinux-gui-2.7/fcontextPage.py selinux-gui-2.7/fcontextPage.py index 2e26666..a6577ef 100644 --- selinux-gui-2.7/fcontextPage.py +++ selinux-gui-2.7/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 @@ class fcontextPage(semanagePage): 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 selinux-gui-2.7/loginsPage.py selinux-gui-2.7/loginsPage.py index 1f35a57..b67eb8b 100644 --- selinux-gui-2.7/loginsPage.py +++ selinux-gui-2.7/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 @@ class loginsPage(semanagePage): 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 selinux-gui-2.7/modulesPage.py selinux-gui-2.7/modulesPage.py index 3767896..34c5d9e 100644 --- selinux-gui-2.7/modulesPage.py +++ selinux-gui-2.7/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,27 +53,33 @@ 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, + 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(_("Priority"), 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) self.view.append_column(col) + self.store.set_sort_column_id(2, Gtk.SortType.ASCENDING) + col = Gtk.TreeViewColumn(_("Kind"), Gtk.CellRendererText(), text=2) + col.set_sort_column_id(2) + col.set_resizable(True) + self.view.append_column(col) self.store.set_sort_func(1, self.sort_int, "") status, self.policy_type = selinux.selinux_getpolicytype() @@ -100,16 +101,17 @@ class modulesPage(semanagePage): self.filter = filter self.store.clear() try: - fd = Popen("semodule -l", shell=True, stdout=PIPE).stdout + fd = Popen("semodule -lfull", shell=True, stdout=PIPE).stdout l = fd.readlines() fd.close() for i in l: - module, ver, newline = i.split('\t') - if not (self.match(module, filter) or self.match(ver, filter)): + priority, module, kind = i.decode('utf-8').split() + if not (self.match(module, filter) or self.match(priority, filter)): continue iter = self.store.append() self.store.set_value(iter, 0, module.strip()) - self.store.set_value(iter, 1, ver.strip()) + self.store.set_value(iter, 1, priority.strip()) + self.store.set_value(iter, 2, kind.strip()) except: pass self.view.get_selection().select_path((0,)) @@ -170,20 +172,20 @@ class modulesPage(semanagePage): 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 selinux-gui-2.7/polgen.ui selinux-gui-2.7/polgen.ui new file mode 100644 index 0000000..aa4c70a --- /dev/null +++ selinux-gui-2.7/polgen.ui @@ -0,0 +1,2417 @@ + + + + + + False + 5 + normal + Red Hat 2007 + www.redhat.com + GPL + Daniel Walsh <dwalsh@redhat.com> + translator-credits + + + False + + + False + + + False + True + end + 0 + + + + + + + False + 12 + Add Booleans Dialog + mouse + 400 + dialog + + + True + False + 6 + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + False + False + 0 + + + + + gtk-add + True + True + True + False + True + + + False + False + 1 + + + + + False + True + end + 0 + + + + + True + False + 2 + 2 + 12 + 6 + + + True + False + 0 + Boolean Name + + + GTK_FILL + + + + + + True + False + 0 + Description + + + 1 + 2 + GTK_FILL + + + + + + True + True + + False + False + True + True + + + 1 + 2 + + + + + + True + True + + False + False + True + True + + + 1 + 2 + 1 + 2 + + + + + + True + True + 1 + + + + + + cancelbutton1 + okbutton1 + + + + False + 5 + mouse + dialog + True + True + + + True + False + 24 + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + False + False + 0 + + + + + gtk-add + True + True + True + True + False + True + + + False + False + 1 + + + + + False + True + end + 0 + + + + + + button5 + button6 + + + + True + False + SELinux Policy Generation Tool + + + True + False + 18 + + + True + False + left + False + + + True + False + + + True + False + 0 + <b>Select the policy type for the application or user role you want to confine:</b> + True + + + False + False + 5 + 0 + + + + + True + False + + + True + False + + + True + False + 12 + + + True + False + 6 + + + True + False + 0 + <b>Applications</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + 6 + + + Standard Init Daemon + True + True + False + Standard Init Daemon are daemons started on boot via init scripts. Usually requires a script in /etc/rc.d/init.d + True + True + + + False + False + 0 + + + + + DBUS System Daemon + True + True + False + Standard Init Daemon are daemons started on boot via init scripts. Usually requires a script in /etc/rc.d/init.d + True + True + init_radiobutton + + + False + False + 1 + + + + + Internet Services Daemon (inetd) + True + True + False + Internet Services Daemon are daemons started by xinetd + True + True + init_radiobutton + + + False + False + 2 + + + + + Web Application/Script (CGI) + True + True + False + Web Applications/Script (CGI) CGI scripts started by the web server (apache) + True + True + init_radiobutton + + + False + False + 3 + + + + + User Application + True + True + False + User Application are any application that you would like to confine that is started by a user + True + True + init_radiobutton + + + False + False + 4 + + + + + Sandbox + True + True + False + User Application are any application that you would like to confine that is started by a user + True + True + init_radiobutton + + + False + False + 5 + + + + + False + False + 1 + + + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + 6 + + + True + False + 0 + <b>Login Users</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + 6 + + + Existing User Roles + True + True + False + Modify an existing login user record. + True + True + init_radiobutton + + + False + False + 0 + + + + + Minimal Terminal User Role + True + True + False + This user will login to a machine only via a terminal or remote login. By default this user will have no setuid, no networking, no su, no sudo. + True + True + init_radiobutton + + + False + False + 1 + + + + + Minimal X Windows User Role + True + True + False + This user can login to a machine via X or terminal. By default this user will have no setuid, no networking, no sudo, no su + True + True + init_radiobutton + + + False + False + 2 + + + + + User Role + True + True + False + User with full networking, no setuid applications without transition, no sudo, no su. + True + True + init_radiobutton + + + False + False + 3 + + + + + Admin User Role + True + True + False + User with full networking, no setuid applications without transition, no su, can sudo to Root Administration Roles + True + True + init_radiobutton + + + False + False + 4 + + + + + True + False + 1 + + + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + 6 + + + True + False + 0 + <b>Root Users</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + + + Root Admin User Role + True + True + False + Select Root Administrator User Role, if this user will be used to administer the machine while running as root. This user will not be able to login to the system directly. + True + True + init_radiobutton + + + False + False + 0 + + + + + False + False + 1 + + + + + True + True + 1 + + + + + True + True + 2 + + + + + True + True + 0 + + + + + True + True + 0 + + + + + True + True + 1 + + + + + + + True + False + Main Tab + + + False + + + + + True + False + + + True + False + 0 + <b>Enter name of application or user role:</b> + True + + + False + False + 5 + 0 + + + + + True + False + 3 + 3 + 12 + 6 + + + True + False + 0 + Name + + + GTK_FILL + + + + + + True + True + Enter complete path for executable to be confined. + + False + False + True + True + + + 1 + 2 + 1 + 2 + + + + + + ... + True + True + False + True + + + + 2 + 3 + 1 + 2 + GTK_FILL + + + + + + True + True + Enter unique name for the confined application or user role. + + False + False + True + True + + + 1 + 3 + + + + + + True + False + 0 + Executable + + + 1 + 2 + GTK_FILL + + + + + + True + False + 0 + Init script + + + 2 + 3 + GTK_FILL + + + + + + True + True + Enter complete path to init script used to start the confined application. + + False + False + True + True + + + 1 + 2 + 2 + 3 + + + + + + ... + True + True + False + True + + + + 2 + 3 + 2 + 3 + GTK_FILL + + + + + + True + True + 1 + + + + + + + True + False + Name Tab + + + 1 + False + + + + + True + False + + + True + False + 0 + <b>Select existing role to modify:</b> + True + + + False + False + 5 + 0 + + + + + True + True + automatic + automatic + in + + + True + True + Select the user roles that will transiton to the %s domain. + False + + + + + True + True + 1 + + + + + + + True + False + role tab + + + 2 + False + + + + + True + False + + + True + False + 0 + <b>Select roles that %s will transition to:</b> + True + + + False + False + 5 + 0 + + + + + True + True + + + True + True + Select applications domains that %s will transition to. + False + + + + + True + True + 1 + + + + + + + True + False + transition +role tab + + + 3 + False + + + + + True + False + + + True + False + 0 + <b>Select the user_roles that will transition to %s:</b> + True + + + False + False + 5 + 0 + + + + + True + True + + + True + True + Select the user roles that will transiton to this applications domains. + False + + + + + True + True + 1 + + + + + + + True + False + User Tab + + + 4 + False + + + + + True + False + + + True + False + 0 + <b>Select domains that %s will administer:</b> + True + + + False + False + 5 + 0 + + + + + True + True + + + True + True + Select the domains that you would like this user administer. + False + + + + + True + True + 1 + + + + + + + True + False + Admin Tab + + + 5 + False + + + + + True + False + + + True + False + 0 + <b>Select additional roles for %s:</b> + True + + + False + False + 5 + 0 + + + + + True + True + + + True + True + Select the domains that you would like this user administer. + False + + + + + True + True + 1 + + + + + + + True + False + Roles Tab + + + 6 + False + + + + + True + False + + + True + False + 0 + <b>Enter network ports that %s binds on:</b> + True + + + False + False + 5 + 0 + + + + + True + False + 6 + + + True + False + 0 + <b>TCP Ports</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + 6 + + + True + False + 12 + + + All + True + True + False + Allows %s to bind to any udp port + True + True + + + False + False + 10 + 0 + + + + + 600-1024 + True + True + False + Allow %s to call bindresvport with 0. Binding to port 600-1024 + True + True + + + False + False + 10 + 1 + + + + + Unreserved Ports (>1024) + True + True + False + Enter a comma separated list of udp ports or ranges of ports that %s binds to. Example: 612, 650-660 + True + True + + + False + False + 10 + 2 + + + + + True + True + 0 + + + + + True + False + 12 + + + True + False + 0 + Select Ports + + + False + False + 5 + 0 + + + + + True + True + Allows %s to bind to any udp ports > 1024 + + False + False + True + True + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + False + 6 + + + True + False + 0 + <b>UDP Ports</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + 6 + + + True + False + 12 + + + All + True + True + False + Allows %s to bind to any udp port + True + True + + + False + False + 10 + 0 + + + + + 600-1024 + True + True + False + Allow %s to call bindresvport with 0. Binding to port 600-1024 + True + True + + + False + False + 10 + 1 + + + + + Unreserved Ports (>1024) + True + True + False + Enter a comma separated list of udp ports or ranges of ports that %s binds to. Example: 612, 650-660 + True + True + + + False + False + 10 + 2 + + + + + True + True + 0 + + + + + True + False + 12 + + + True + False + 0 + Select Ports + + + False + False + 5 + 0 + + + + + True + True + Allows %s to bind to any udp ports > 1024 + + False + False + True + True + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 2 + + + + + + + True + False + Network +Bind tab + + + 7 + False + + + + + True + False + + + True + False + 0 + <b>Select network ports that %s connects to:</b> + True + + + False + False + 5 + 0 + + + + + True + False + 6 + + + True + False + 0 + <b>TCP Ports</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + 12 + + + All + True + True + False + Allows %s to connect to any tcp port + True + True + + + False + False + 10 + 0 + + + + + True + False + 0 + Select Ports + + + False + False + 5 + 1 + + + + + True + True + Enter a comma separated list of tcp ports or ranges of ports that %s connects to. Example: 612, 650-660 + + False + False + True + True + + + True + True + 2 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + False + 6 + + + True + False + 0 + <b>UDP Ports</b> + True + + + False + False + 0 + + + + + True + False + + + True + False + + + + False + False + 0 + + + + + True + False + 12 + + + All + True + True + False + Allows %s to connect to any udp port + True + True + + + False + False + 10 + 0 + + + + + True + False + 0 + Select Ports + + + False + False + 5 + 1 + + + + + True + True + Enter a comma separated list of udp ports or ranges of ports that %s connects to. Example: 612, 650-660 + + False + False + True + True + + + True + True + 2 + + + + + True + True + 1 + + + + + True + True + 1 + + + + + True + True + 2 + + + + + + + True + False + Network +Connect Tab + + + 8 + False + + + + + True + False + + + True + False + 0 + <b>Select common application traits for %s:</b> + True + + + False + False + 5 + 0 + + + + + True + False + 6 + + + Writes syslog messages + True + True + False + True + True + + + False + False + 0 + + + + + Create/Manipulate temporary files in /tmp + True + True + False + True + True + + + False + False + 1 + + + + + Uses Pam for authentication + True + True + False + True + True + + + False + False + 2 + + + + + Uses nsswitch or getpw* calls + True + True + False + True + True + + + False + False + 3 + + + + + Uses dbus + True + True + False + True + True + + + False + False + 4 + + + + + Sends audit messages + True + True + False + True + True + + + False + False + 5 + + + + + Interacts with the terminal + True + True + False + True + True + + + False + False + 6 + + + + + Sends email + True + True + False + True + True + + + False + False + 7 + + + + + True + True + 1 + + + + + + + True + False + Common +Tab + + + 9 + False + + + + + True + False + + + True + False + 0 + <b>Add files/directories that %s manages</b> + True + + + False + False + 5 + 0 + + + + + True + False + 12 + + + True + False + 6 + + + True + True + False + + + + True + False + 0 + 0 + + + True + False + 2 + + + True + False + gtk-add + + + False + False + 0 + + + + + True + False + Add File + True + + + False + False + 1 + + + + + + + + + False + False + 0 + + + + + True + True + False + + + + True + False + 0 + 0 + + + True + False + 2 + + + True + False + gtk-add + + + False + False + 0 + + + + + True + False + Add Directory + True + + + False + False + 1 + + + + + + + + + False + False + 1 + + + + + gtk-delete + True + True + False + True + + + + + False + False + 2 + + + + + False + False + 4 + 0 + + + + + True + True + automatic + automatic + in + + + True + True + Files/Directories which the %s "manages". Pid Files, Log Files, /var/lib Files ... + False + + + + + True + True + 1 + + + + + True + True + 1 + + + + + + + True + False + Add Tab + + + 10 + False + + + + + True + False + + + True + False + 0 + <b>Add booleans from the %s policy:</b> + True + + + False + False + 5 + 0 + + + + + True + False + 12 + + + True + False + 6 + + + True + True + False + + + + True + False + 0 + 0 + + + True + False + 2 + + + True + False + gtk-add + + + False + False + 0 + + + + + True + False + Add Boolean + True + + + False + False + 1 + + + + + + + + + False + False + 0 + + + + + gtk-delete + True + True + False + True + + + + + False + False + 1 + + + + + False + True + 4 + 0 + + + + + True + True + automatic + automatic + in + + + True + True + Add/Remove booleans used by the %s domain + + + + + True + True + 1 + + + + + True + True + 1 + + + + + + + True + False + + + 11 + False + + + + + True + False + + + True + False + 0 + <b>Which directory you will generate the %s policy?</b> + True + + + False + False + 0 + + + + + True + False + 12 + + + True + False + Policy Directory + + + False + False + 5 + 0 + + + + + True + True + + False + False + True + True + + + True + True + 1 + + + + + ... + True + True + False + True + + + False + False + 2 + + + + + False + False + 12 + 1 + + + + + + + True + False + + + 12 + False + + + + + True + True + 0 + + + + + True + False + end + + + gtk-cancel + True + True + True + False + True + + + False + False + 0 + + + + + gtk-go-back + True + True + True + False + True + + + False + False + 1 + + + + + gtk-go-forward + True + True + True + False + True + + + False + False + 2 + + + + + False + False + 5 + 1 + + + + + + diff --git selinux-gui-2.7/polgengui.py selinux-gui-2.7/polgengui.py index 7460cce..cd73ea6 100644 --- selinux-gui-2.7/polgengui.py +++ selinux-gui-2.7/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 @@ -34,7 +34,9 @@ except ValueError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) +import sepolicy.generate import sepolicy.interface + try: from subprocess import getstatusoutput except ImportError: @@ -79,8 +81,6 @@ except: 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 +95,12 @@ def foreach(model, path, iter, selected): ## ## Pull in the Glade file ## -if os.access("polgen.glade", os.F_OK): - xml = gtk.glade.XML("polgen.glade", domain=PROGNAME) +xml = Gtk.Builder() +xml.set_translation_domain(PROGNAME) +if os.access("polgen.ui", os.F_OK): + xml.add_from_file("polgen.ui") else: - xml = gtk.glade.XML("/usr/share/system-config-selinux/polgen.glade", domain=PROGNAME) + xml.add_from_file("/usr/share/system-config-selinux/polgen.ui") FILE = 1 DIR = 2 @@ -123,82 +125,82 @@ class childWindow: def __init__(self): self.xml = xml - self.notebook = xml.get_widget("notebook") + self.notebook = xml.get_object("notebook") self.label_dict = {} self.tooltip_dict = {} - label = xml.get_widget("select_label") + label = xml.get_object("select_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_user_roles_label") + label = xml.get_object("select_user_roles_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_dir_label") + label = xml.get_object("select_dir_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_domain_admin_label") + label = xml.get_object("select_domain_admin_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_in_label") + label = xml.get_object("select_in_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_out_label") + label = xml.get_object("select_out_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_common_label") + label = xml.get_object("select_common_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_manages_label") + label = xml.get_object("select_manages_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("select_booleans_label") + label = xml.get_object("select_booleans_label") self.label_dict[label] = label.get_text() - label = xml.get_widget("existing_user_treeview") + label = xml.get_object("existing_user_treeview") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("transition_treeview") + label = xml.get_object("transition_treeview") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_tcp_all_checkbutton") + label = xml.get_object("in_tcp_all_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_tcp_reserved_checkbutton") + label = xml.get_object("in_tcp_reserved_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_tcp_unreserved_checkbutton") + label = xml.get_object("in_tcp_unreserved_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_tcp_entry") + label = xml.get_object("in_tcp_entry") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_udp_all_checkbutton") + label = xml.get_object("in_udp_all_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_udp_reserved_checkbutton") + label = xml.get_object("in_udp_reserved_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_udp_unreserved_checkbutton") + label = xml.get_object("in_udp_unreserved_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("in_udp_entry") + label = xml.get_object("in_udp_entry") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("out_tcp_entry") + label = xml.get_object("out_tcp_entry") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("out_udp_entry") + label = xml.get_object("out_udp_entry") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("out_tcp_all_checkbutton") + label = xml.get_object("out_tcp_all_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("out_udp_all_checkbutton") + label = xml.get_object("out_udp_all_checkbutton") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("boolean_treeview") + label = xml.get_object("boolean_treeview") self.tooltip_dict[label] = label.get_tooltip_text() - label = xml.get_widget("write_treeview") + label = xml.get_object("write_treeview") self.tooltip_dict[label] = label.get_tooltip_text() try: @@ -214,23 +216,26 @@ class childWindow: self.error(str(e)) self.name = "" - xml.signal_connect("on_delete_clicked", self.delete) - xml.signal_connect("on_delete_boolean_clicked", self.delete_boolean) - xml.signal_connect("on_exec_select_clicked", self.exec_select) - xml.signal_connect("on_init_script_select_clicked", self.init_script_select) - xml.signal_connect("on_add_clicked", self.add) - xml.signal_connect("on_add_boolean_clicked", self.add_boolean) - xml.signal_connect("on_add_dir_clicked", self.add_dir) - xml.signal_connect("on_about_clicked", self.on_about_clicked) - xml.get_widget("cancel_button").connect("clicked", self.quit) - self.forward_button = xml.get_widget("forward_button") + handlers = { + "on_delete_clicked": self.delete, + "on_delete_boolean_clicked": self.delete_boolean, + "on_exec_select_clicked": self.exec_select, + "on_init_script_select_clicked": self.init_script_select, + "on_add_clicked": self.add, + "on_add_boolean_clicked": self.add_boolean, + "on_add_dir_clicked": self.add_dir, + "on_about_clicked": self.on_about_clicked + } + xml.connect_signals(handlers) + xml.get_object("cancel_button").connect("clicked", self.quit) + self.forward_button = xml.get_object("forward_button") self.forward_button.connect("clicked", self.forward) - self.back_button = xml.get_widget("back_button") + self.back_button = xml.get_object("back_button") self.back_button.connect("clicked", self.back) - self.boolean_dialog = xml.get_widget("boolean_dialog") - self.boolean_name_entry = xml.get_widget("boolean_name_entry") - self.boolean_description_entry = xml.get_widget("boolean_description_entry") + self.boolean_dialog = xml.get_object("boolean_dialog") + self.boolean_name_entry = xml.get_object("boolean_name_entry") + self.boolean_description_entry = xml.get_object("boolean_description_entry") self.pages = {} for i in sepolicy.generate.USERS: @@ -249,77 +254,77 @@ class childWindow: self.network_buttons = {} - self.in_tcp_all_checkbutton = xml.get_widget("in_tcp_all_checkbutton") - self.in_tcp_reserved_checkbutton = xml.get_widget("in_tcp_reserved_checkbutton") - self.in_tcp_unreserved_checkbutton = xml.get_widget("in_tcp_unreserved_checkbutton") - self.in_tcp_entry = self.xml.get_widget("in_tcp_entry") + self.in_tcp_all_checkbutton = xml.get_object("in_tcp_all_checkbutton") + self.in_tcp_reserved_checkbutton = xml.get_object("in_tcp_reserved_checkbutton") + self.in_tcp_unreserved_checkbutton = xml.get_object("in_tcp_unreserved_checkbutton") + self.in_tcp_entry = self.xml.get_object("in_tcp_entry") self.network_buttons[self.in_tcp_all_checkbutton] = [self.in_tcp_reserved_checkbutton, self.in_tcp_unreserved_checkbutton, self.in_tcp_entry] - self.out_tcp_all_checkbutton = xml.get_widget("out_tcp_all_checkbutton") - self.out_tcp_reserved_checkbutton = xml.get_widget("out_tcp_reserved_checkbutton") - self.out_tcp_unreserved_checkbutton = xml.get_widget("out_tcp_unreserved_checkbutton") - self.out_tcp_entry = self.xml.get_widget("out_tcp_entry") + self.out_tcp_all_checkbutton = xml.get_object("out_tcp_all_checkbutton") + self.out_tcp_reserved_checkbutton = xml.get_object("out_tcp_reserved_checkbutton") + self.out_tcp_unreserved_checkbutton = xml.get_object("out_tcp_unreserved_checkbutton") + self.out_tcp_entry = self.xml.get_object("out_tcp_entry") self.network_buttons[self.out_tcp_all_checkbutton] = [self.out_tcp_entry] - self.in_udp_all_checkbutton = xml.get_widget("in_udp_all_checkbutton") - self.in_udp_reserved_checkbutton = xml.get_widget("in_udp_reserved_checkbutton") - self.in_udp_unreserved_checkbutton = xml.get_widget("in_udp_unreserved_checkbutton") - self.in_udp_entry = self.xml.get_widget("in_udp_entry") + self.in_udp_all_checkbutton = xml.get_object("in_udp_all_checkbutton") + self.in_udp_reserved_checkbutton = xml.get_object("in_udp_reserved_checkbutton") + self.in_udp_unreserved_checkbutton = xml.get_object("in_udp_unreserved_checkbutton") + self.in_udp_entry = self.xml.get_object("in_udp_entry") self.network_buttons[self.in_udp_all_checkbutton] = [self.in_udp_reserved_checkbutton, self.in_udp_unreserved_checkbutton, self.in_udp_entry] - self.out_udp_all_checkbutton = xml.get_widget("out_udp_all_checkbutton") - self.out_udp_entry = self.xml.get_widget("out_udp_entry") + self.out_udp_all_checkbutton = xml.get_object("out_udp_all_checkbutton") + self.out_udp_entry = self.xml.get_object("out_udp_entry") self.network_buttons[self.out_udp_all_checkbutton] = [self.out_udp_entry] for b in self.network_buttons.keys(): 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_treeview = self.xml.get_object("boolean_treeview") + 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_treeview = self.xml.get_object("role_treeview") + 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_treeview = self.xml.get_object("existing_user_treeview") + 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: iter = self.role_store.append() self.role_store.set_value(iter, 0, i[:-2]) - self.in_tcp_reserved_checkbutton = xml.get_widget("in_tcp_reserved_checkbutton") + self.in_tcp_reserved_checkbutton = xml.get_object("in_tcp_reserved_checkbutton") - self.transition_treeview = self.xml.get_widget("transition_treeview") - self.transition_store = gtk.ListStore(gobject.TYPE_STRING) + self.transition_treeview = self.xml.get_object("transition_treeview") + 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_treeview = self.xml.get_object("user_transition_treeview") + 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: @@ -328,12 +333,12 @@ class childWindow: iter = self.existing_user_store.append() 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_treeview = self.xml.get_object("admin_treeview") + 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 +388,17 @@ class childWindow: 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_object("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 +411,30 @@ class childWindow: 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 +555,7 @@ class childWindow: 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 +564,7 @@ class childWindow: 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 +574,29 @@ class childWindow: 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,71 +604,71 @@ class childWindow: 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): - dlg = xml.get_widget("about_dialog") + dlg = xml.get_object("about_dialog") dlg.run() dlg.hide() def quit(self, args): - gtk.main_quit() + Gtk.main_quit() def setupScreen(self): # Bring in widgets from glade file. - self.mainWindow = self.xml.get_widget("main_window") - self.druid = self.xml.get_widget("druid") + self.mainWindow = self.xml.get_object("main_window") + self.druid = self.xml.get_object("druid") self.type = 0 - self.name_entry = self.xml.get_widget("name_entry") + self.name_entry = self.xml.get_object("name_entry") self.name_entry.connect("insert_text", self.on_name_entry_changed) self.name_entry.connect("focus_out_event", self.on_focus_out_event) - self.exec_entry = self.xml.get_widget("exec_entry") - self.exec_button = self.xml.get_widget("exec_button") - self.init_script_entry = self.xml.get_widget("init_script_entry") - self.init_script_button = self.xml.get_widget("init_script_button") - self.output_entry = self.xml.get_widget("output_entry") + self.exec_entry = self.xml.get_object("exec_entry") + self.exec_button = self.xml.get_object("exec_button") + self.init_script_entry = self.xml.get_object("init_script_entry") + self.init_script_button = self.xml.get_object("init_script_button") + self.output_entry = self.xml.get_object("output_entry") self.output_entry.set_text(os.getcwd()) - self.xml.get_widget("output_button").connect("clicked", self.output_button_clicked) - - self.xwindows_user_radiobutton = self.xml.get_widget("xwindows_user_radiobutton") - self.terminal_user_radiobutton = self.xml.get_widget("terminal_user_radiobutton") - self.root_user_radiobutton = self.xml.get_widget("root_user_radiobutton") - self.login_user_radiobutton = self.xml.get_widget("login_user_radiobutton") - self.admin_user_radiobutton = self.xml.get_widget("admin_user_radiobutton") - self.existing_user_radiobutton = self.xml.get_widget("existing_user_radiobutton") - - self.user_radiobutton = self.xml.get_widget("user_radiobutton") - self.init_radiobutton = self.xml.get_widget("init_radiobutton") - self.inetd_radiobutton = self.xml.get_widget("inetd_radiobutton") - self.dbus_radiobutton = self.xml.get_widget("dbus_radiobutton") - self.cgi_radiobutton = self.xml.get_widget("cgi_radiobutton") - self.sandbox_radiobutton = self.xml.get_widget("sandbox_radiobutton") - self.tmp_checkbutton = self.xml.get_widget("tmp_checkbutton") - self.uid_checkbutton = self.xml.get_widget("uid_checkbutton") - self.pam_checkbutton = self.xml.get_widget("pam_checkbutton") - self.dbus_checkbutton = self.xml.get_widget("dbus_checkbutton") - self.audit_checkbutton = self.xml.get_widget("audit_checkbutton") - self.terminal_checkbutton = self.xml.get_widget("terminal_checkbutton") - self.mail_checkbutton = self.xml.get_widget("mail_checkbutton") - self.syslog_checkbutton = self.xml.get_widget("syslog_checkbutton") - 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.xml.get_object("output_button").connect("clicked", self.output_button_clicked) + + self.xwindows_user_radiobutton = self.xml.get_object("xwindows_user_radiobutton") + self.terminal_user_radiobutton = self.xml.get_object("terminal_user_radiobutton") + self.root_user_radiobutton = self.xml.get_object("root_user_radiobutton") + self.login_user_radiobutton = self.xml.get_object("login_user_radiobutton") + self.admin_user_radiobutton = self.xml.get_object("admin_user_radiobutton") + self.existing_user_radiobutton = self.xml.get_object("existing_user_radiobutton") + + self.user_radiobutton = self.xml.get_object("user_radiobutton") + self.init_radiobutton = self.xml.get_object("init_radiobutton") + self.inetd_radiobutton = self.xml.get_object("inetd_radiobutton") + self.dbus_radiobutton = self.xml.get_object("dbus_radiobutton") + self.cgi_radiobutton = self.xml.get_object("cgi_radiobutton") + self.sandbox_radiobutton = self.xml.get_object("sandbox_radiobutton") + self.tmp_checkbutton = self.xml.get_object("tmp_checkbutton") + self.uid_checkbutton = self.xml.get_object("uid_checkbutton") + self.pam_checkbutton = self.xml.get_object("pam_checkbutton") + self.dbus_checkbutton = self.xml.get_object("dbus_checkbutton") + self.audit_checkbutton = self.xml.get_object("audit_checkbutton") + self.terminal_checkbutton = self.xml.get_object("terminal_checkbutton") + self.mail_checkbutton = self.xml.get_object("mail_checkbutton") + self.syslog_checkbutton = self.xml.get_object("syslog_checkbutton") + self.view = self.xml.get_object("write_treeview") + self.file_dialog = self.xml.get_object("filechooserdialog") + + 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 +680,11 @@ class childWindow: 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 @@ -696,16 +701,16 @@ class childWindow: def on_in_net_page_next(self, *args): try: - generate.verify_ports(self.in_tcp_entry.get_text()) - generate.verify_ports(self.in_udp_entry.get_text()) + sepolicy.generate.verify_ports(self.in_tcp_entry.get_text()) + sepolicy.generate.verify_ports(self.in_udp_entry.get_text()) except ValueError as e: self.error(e.message) return True def on_out_net_page_next(self, *args): try: - generate.verify_ports(self.out_tcp_entry.get_text()) - generate.verify_ports(self.out_udp_entry.get_text()) + sepolicy.generate.verify_ports(self.out_tcp_entry.get_text()) + sepolicy.generate.verify_ports(self.out_udp_entry.get_text()) except ValueError as e: self.error(e.message) return True @@ -741,7 +746,7 @@ class childWindow: if exe == "": self.error(_("You must enter a executable")) return True - policy = generate.policy(name, self.get_type()) + policy = sepolicy.generate.policy(name, self.get_type()) policy.set_program(exe) policy.gen_writeable() policy.gen_symbols() @@ -770,7 +775,7 @@ class childWindow: 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 selinux-gui-2.7/portsPage.py selinux-gui-2.7/portsPage.py index b8fdaad..03179c5 100644 --- selinux-gui-2.7/portsPage.py +++ selinux-gui-2.7/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 @@ -40,6 +36,12 @@ from semanagePage import * ## I18N ## PROGNAME = "policycoreutils" + +TYPE_COL = 0 +PROTOCOL_COL = 1 +MLS_COL = 2 +PORT_COL = 3 + try: import gettext kwargs = {} @@ -62,18 +64,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 +93,28 @@ class portsPage(semanagePage): 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 +142,7 @@ class portsPage(semanagePage): 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 selinux-gui-2.7/semanagePage.py selinux-gui-2.7/semanagePage.py index 27367f3..560ec07 100644 --- selinux-gui-2.7/semanagePage.py +++ selinux-gui-2.7/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 @@ except: 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 @@ class semanagePage: 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 @@ class semanagePage: 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 @@ class semanagePage: 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 @@ class semanagePage: 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 selinux-gui-2.7/statusPage.py selinux-gui-2.7/statusPage.py index 23d0d0f..766854b 100644 --- selinux-gui-2.7/statusPage.py +++ selinux-gui-2.7/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 @@ class statusPage: 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 @@ class statusPage: 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 @@ class statusPage: 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 @@ class statusPage: 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 @@ class statusPage: 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 selinux-gui-2.7/system-config-selinux.py selinux-gui-2.7/system-config-selinux.py index ed41e98..ce7c74b 100644 --- selinux-gui-2.7/system-config-selinux.py +++ selinux-gui-2.7/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 @@ except: 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 @@ sys.path.append('/usr/share/system-config-selinux') ## ## 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 @@ class childWindow: 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 @@ class childWindow: 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 @@ class childWindow: 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 @@ class childWindow: 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 selinux-gui-2.7/system-config-selinux.ui selinux-gui-2.7/system-config-selinux.ui new file mode 100644 index 0000000..7cc1cc5 --- /dev/null +++ selinux-gui-2.7/system-config-selinux.ui @@ -0,0 +1,2024 @@ + + + + + + + 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 + + + + + + + + + + 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 selinux-gui-2.7/usersPage.py selinux-gui-2.7/usersPage.py index 75b0547..26794ed 100644 --- selinux-gui-2.7/usersPage.py +++ selinux-gui-2.7/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 @@ -95,10 +91,6 @@ class usersPage(semanagePage): self.store.set_value(iter, 2, dict[k][3]) self.view.get_selection().select_path((0,)) - def delete(self): - if semanagePage.delete(self) == gtk.RESPONSE_NO: - return None - def dialogInit(self): store, iter = self.view.get_selection().get_selected() self.selinuxUserEntry.set_text(store.get_value(iter, 0))