|
Packit Service |
9fb14c |
## domainsPage.py - show selinux domains
|
|
Packit Service |
9fb14c |
## Copyright (C) 2009 Red Hat, Inc.
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
## This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
9fb14c |
## it under the terms of the GNU General Public License as published by
|
|
Packit Service |
9fb14c |
## the Free Software Foundation; either version 2 of the License, or
|
|
Packit Service |
9fb14c |
## (at your option) any later version.
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
## This program is distributed in the hope that it will be useful,
|
|
Packit Service |
9fb14c |
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
9fb14c |
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit Service |
9fb14c |
## GNU General Public License for more details.
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
## You should have received a copy of the GNU General Public License
|
|
Packit Service |
9fb14c |
## along with this program; if not, write to the Free Software
|
|
Packit Service |
9fb14c |
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
## Author: Dan Walsh
|
|
Packit Service |
9fb14c |
import os
|
|
Packit Service |
9fb14c |
try:
|
|
Packit Service |
9fb14c |
from subprocess import getstatusoutput
|
|
Packit Service |
9fb14c |
except ImportError:
|
|
Packit Service |
9fb14c |
from commands import getstatusoutput
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
import sys
|
|
Packit Service |
9fb14c |
from gi.repository import GObject, Gtk
|
|
Packit Service |
9fb14c |
import sepolicy
|
|
Packit Service |
9fb14c |
from semanagePage import *
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
##
|
|
Packit Service |
9fb14c |
## I18N
|
|
Packit Service |
9fb14c |
##
|
|
Packit Service |
9fb14c |
PROGNAME = "selinux-gui"
|
|
Packit Service |
9fb14c |
try:
|
|
Packit Service |
9fb14c |
import gettext
|
|
Packit Service |
9fb14c |
kwargs = {}
|
|
Packit Service |
9fb14c |
if sys.version_info < (3,):
|
|
Packit Service |
9fb14c |
kwargs['unicode'] = True
|
|
Packit Service |
9fb14c |
gettext.install(PROGNAME,
|
|
Packit Service |
9fb14c |
localedir="/usr/share/locale",
|
|
Packit Service |
9fb14c |
codeset='utf-8',
|
|
Packit Service |
9fb14c |
**kwargs)
|
|
Packit Service |
9fb14c |
except:
|
|
Packit Service |
9fb14c |
try:
|
|
Packit Service |
9fb14c |
import builtins
|
|
Packit Service |
9fb14c |
builtins.__dict__['_'] = str
|
|
Packit Service |
9fb14c |
except ImportError:
|
|
Packit Service |
9fb14c |
import __builtin__
|
|
Packit Service |
9fb14c |
__builtin__.__dict__['_'] = unicode
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
class domainsPage(semanagePage):
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def __init__(self, xml):
|
|
Packit Service |
9fb14c |
semanagePage.__init__(self, xml, "domains", _("Process Domain"))
|
|
Packit Service |
9fb14c |
self.domain_filter = xml.get_object("domainsFilterEntry")
|
|
Packit Service |
9fb14c |
self.domain_filter.connect("focus_out_event", self.filter_changed)
|
|
Packit Service |
9fb14c |
self.domain_filter.connect("activate", self.filter_changed)
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING)
|
|
Packit Service |
9fb14c |
self.view.set_model(self.store)
|
|
Packit Service |
9fb14c |
self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
|
|
Packit Service |
9fb14c |
col = Gtk.TreeViewColumn(_("Domain Name"), Gtk.CellRendererText(), text=0)
|
|
Packit Service |
9fb14c |
col.set_sort_column_id(0)
|
|
Packit Service |
9fb14c |
col.set_resizable(True)
|
|
Packit Service |
9fb14c |
self.view.append_column(col)
|
|
Packit Service |
9fb14c |
self.store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
|
|
Packit Service |
9fb14c |
col = Gtk.TreeViewColumn(_("Mode"), Gtk.CellRendererText(), text=1)
|
|
Packit Service |
9fb14c |
col.set_sort_column_id(1)
|
|
Packit Service |
9fb14c |
col.set_resizable(True)
|
|
Packit Service |
9fb14c |
self.view.append_column(col)
|
|
Packit Service |
9fb14c |
self.view.get_selection().connect("changed", self.itemSelected)
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
self.permissive_button = xml.get_object("permissiveButton")
|
|
Packit Service |
9fb14c |
self.enforcing_button = xml.get_object("enforcingButton")
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
self.domains = sepolicy.get_all_entrypoint_domains()
|
|
Packit Service |
9fb14c |
self.load()
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def get_modules(self):
|
|
Packit Service |
9fb14c |
modules = []
|
|
Packit Service |
9fb14c |
fd = os.popen("semodule -l")
|
|
Packit Service |
9fb14c |
mods = fd.readlines()
|
|
Packit Service |
9fb14c |
fd.close()
|
|
Packit Service |
9fb14c |
for l in mods:
|
|
Packit Service |
9fb14c |
modules.append(l.split()[0])
|
|
Packit Service |
9fb14c |
return modules
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def load(self, filter=""):
|
|
Packit Service |
9fb14c |
self.filter = filter
|
|
Packit Service |
9fb14c |
self.store.clear()
|
|
Packit Service |
9fb14c |
try:
|
|
Packit Service |
9fb14c |
modules = self.get_modules()
|
|
Packit Service |
9fb14c |
for domain in self.domains:
|
|
Packit Service |
9fb14c |
if not self.match(domain, filter):
|
|
Packit Service |
9fb14c |
continue
|
|
Packit Service |
9fb14c |
iter = self.store.append()
|
|
Packit Service |
9fb14c |
self.store.set_value(iter, 0, domain)
|
|
Packit Service |
9fb14c |
t = "permissive_%s_t" % domain
|
|
Packit Service |
9fb14c |
if t in modules:
|
|
Packit Service |
9fb14c |
self.store.set_value(iter, 1, _("Permissive"))
|
|
Packit Service |
9fb14c |
else:
|
|
Packit Service |
9fb14c |
self.store.set_value(iter, 1, "")
|
|
Packit Service |
9fb14c |
except:
|
|
Packit Service |
9fb14c |
pass
|
|
Packit Service |
9fb14c |
self.view.get_selection().select_path((0,))
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def itemSelected(self, selection):
|
|
Packit Service |
9fb14c |
store, iter = selection.get_selected()
|
|
Packit Service |
9fb14c |
if iter is None:
|
|
Packit Service |
9fb14c |
return
|
|
Packit Service |
9fb14c |
p = store.get_value(iter, 1) == _("Permissive")
|
|
Packit Service |
9fb14c |
self.permissive_button.set_sensitive(not p)
|
|
Packit Service |
9fb14c |
self.enforcing_button.set_sensitive(p)
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def deleteDialog(self):
|
|
Packit Service |
9fb14c |
# Do nothing
|
|
Packit Service |
9fb14c |
return self.delete()
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def delete(self):
|
|
Packit Service |
9fb14c |
selection = self.view.get_selection()
|
|
Packit Service |
9fb14c |
store, iter = selection.get_selected()
|
|
Packit Service |
9fb14c |
domain = store.get_value(iter, 0)
|
|
Packit Service |
9fb14c |
try:
|
|
Packit Service |
9fb14c |
self.wait()
|
|
Packit Service |
9fb14c |
status, output = getstatusoutput("semanage permissive -d %s_t" % domain)
|
|
Packit Service |
9fb14c |
self.ready()
|
|
Packit Service |
9fb14c |
if status != 0:
|
|
Packit Service |
9fb14c |
self.error(output)
|
|
Packit Service |
9fb14c |
else:
|
|
Packit Service |
9fb14c |
domain = store.set_value(iter, 1, "")
|
|
Packit Service |
9fb14c |
self.itemSelected(selection)
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
except ValueError as e:
|
|
Packit Service |
9fb14c |
self.error(e.args[0])
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def propertiesDialog(self):
|
|
Packit Service |
9fb14c |
# Do nothing
|
|
Packit Service |
9fb14c |
return
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def addDialog(self):
|
|
Packit Service |
9fb14c |
# Do nothing
|
|
Packit Service |
9fb14c |
return self.add()
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
def add(self):
|
|
Packit Service |
9fb14c |
selection = self.view.get_selection()
|
|
Packit Service |
9fb14c |
store, iter = selection.get_selected()
|
|
Packit Service |
9fb14c |
domain = store.get_value(iter, 0)
|
|
Packit Service |
9fb14c |
try:
|
|
Packit Service |
9fb14c |
self.wait()
|
|
Packit Service |
9fb14c |
status, output = getstatusoutput("semanage permissive -a %s_t" % domain)
|
|
Packit Service |
9fb14c |
self.ready()
|
|
Packit Service |
9fb14c |
if status != 0:
|
|
Packit Service |
9fb14c |
self.error(output)
|
|
Packit Service |
9fb14c |
else:
|
|
Packit Service |
9fb14c |
domain = store.set_value(iter, 1, _("Permissive"))
|
|
Packit Service |
9fb14c |
self.itemSelected(selection)
|
|
Packit Service |
9fb14c |
|
|
Packit Service |
9fb14c |
except ValueError as e:
|
|
Packit Service |
9fb14c |
self.error(e.args[0])
|