Blame gui/domainsPage.py

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