Home | History | Annotate | Download | only in gui
      1 ## domainsPage.py - show selinux domains
      2 ## Copyright (C) 2009 Red Hat, Inc.
      3 
      4 ## This program is free software; you can redistribute it and/or modify
      5 ## it under the terms of the GNU General Public License as published by
      6 ## the Free Software Foundation; either version 2 of the License, or
      7 ## (at your option) any later version.
      8 
      9 ## This program is distributed in the hope that it will be useful,
     10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 ## GNU General Public License for more details.
     13 
     14 ## You should have received a copy of the GNU General Public License
     15 ## along with this program; if not, write to the Free Software
     16 ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     17 
     18 ## Author: Dan Walsh
     19 import string
     20 import gtk
     21 import gtk.glade
     22 import os
     23 import commands
     24 import gobject
     25 import sys
     26 import seobject
     27 import selinux
     28 from semanagePage import *
     29 from sepolicy import get_all_entrypoint_domains
     30 
     31 ##
     32 ## I18N
     33 ##
     34 PROGNAME = "policycoreutils"
     35 import gettext
     36 gettext.bindtextdomain(PROGNAME, "/usr/share/locale")
     37 gettext.textdomain(PROGNAME)
     38 try:
     39     gettext.install(PROGNAME,
     40                     localedir="/usr/share/locale",
     41                     unicode=False,
     42                     codeset='utf-8')
     43 except IOError:
     44     import __builtin__
     45     __builtin__.__dict__['_'] = unicode
     46 
     47 
     48 class domainsPage(semanagePage):
     49 
     50     def __init__(self, xml):
     51         semanagePage.__init__(self, xml, "domains", _("Process Domain"))
     52         self.domain_filter = xml.get_widget("domainsFilterEntry")
     53         self.domain_filter.connect("focus_out_event", self.filter_changed)
     54         self.domain_filter.connect("activate", self.filter_changed)
     55 
     56         self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
     57         self.view.set_model(self.store)
     58         self.store.set_sort_column_id(0, gtk.SORT_ASCENDING)
     59         col = gtk.TreeViewColumn(_("Domain Name"), gtk.CellRendererText(), text=0)
     60         col.set_sort_column_id(0)
     61         col.set_resizable(True)
     62         self.view.append_column(col)
     63         self.store.set_sort_column_id(0, gtk.SORT_ASCENDING)
     64         col = gtk.TreeViewColumn(_("Mode"), gtk.CellRendererText(), text=1)
     65         col.set_sort_column_id(1)
     66         col.set_resizable(True)
     67         self.view.append_column(col)
     68         self.view.get_selection().connect("changed", self.itemSelected)
     69 
     70         self.permissive_button = xml.get_widget("permissiveButton")
     71         self.enforcing_button = xml.get_widget("enforcingButton")
     72 
     73         self.domains = get_all_entrypoint_domains()
     74         self.load()
     75 
     76     def get_modules(self):
     77         modules = []
     78         fd = os.popen("semodule -l")
     79         mods = fd.readlines()
     80         fd.close()
     81         for l in mods:
     82             modules.append(l.split()[0])
     83         return modules
     84 
     85     def load(self, filter=""):
     86         self.filter = filter
     87         self.store.clear()
     88         try:
     89             modules = self.get_modules()
     90             for domain in self.domains:
     91                 if not self.match(domain, filter):
     92                     continue
     93                 iter = self.store.append()
     94                 self.store.set_value(iter, 0, domain)
     95                 t = "permissive_%s_t" % domain
     96                 if t in modules:
     97                     self.store.set_value(iter, 1, _("Permissive"))
     98                 else:
     99                     self.store.set_value(iter, 1, "")
    100         except:
    101             pass
    102         self.view.get_selection().select_path((0,))
    103 
    104     def itemSelected(self, selection):
    105         store, iter = selection.get_selected()
    106         if iter == None:
    107             return
    108         p = store.get_value(iter, 1) == _("Permissive")
    109         self.permissive_button.set_sensitive(not p)
    110         self.enforcing_button.set_sensitive(p)
    111 
    112     def deleteDialog(self):
    113         # Do nothing
    114         return self.delete()
    115 
    116     def delete(self):
    117         selection = self.view.get_selection()
    118         store, iter = selection.get_selected()
    119         domain = store.get_value(iter, 0)
    120         try:
    121             self.wait()
    122             status, output = commands.getstatusoutput("semanage permissive -d %s_t" % domain)
    123             self.ready()
    124             if status != 0:
    125                 self.error(output)
    126             else:
    127                 domain = store.set_value(iter, 1, "")
    128                 self.itemSelected(selection)
    129 
    130         except ValueError, e:
    131             self.error(e.args[0])
    132 
    133     def propertiesDialog(self):
    134         # Do nothing
    135         return
    136 
    137     def addDialog(self):
    138         # Do nothing
    139         return self.add()
    140 
    141     def add(self):
    142         selection = self.view.get_selection()
    143         store, iter = selection.get_selected()
    144         domain = store.get_value(iter, 0)
    145         try:
    146             self.wait()
    147             status, output = commands.getstatusoutput("semanage permissive -a %s_t" % domain)
    148             self.ready()
    149             if status != 0:
    150                 self.error(output)
    151             else:
    152                 domain = store.set_value(iter, 1, _("Permissive"))
    153                 self.itemSelected(selection)
    154 
    155         except ValueError, e:
    156             self.error(e.args[0])
    157