From f35df462e0ad1434d650f03d215cbe573f6f79fc Mon Sep 17 00:00:00 2001 From: Dan Walsh Date: Wed, 4 Jul 2012 07:41:05 -0400 Subject: [PATCH] Update to upstream - policycoreutils * restorecond: wrong options should exit with non-zero error code * restorecond: Add -h option to get usage command * resorecond: user: fix fd leak * mcstrans: add -f to run in foreground * semanage: fix man page range and level defaults * semanage: bash completion for modules should include -a,-m, -d * semanage: manpage update for -e * semanage: dontaudit off should work * semanage: locallist option does not take an argument * sepolgen: Make use of setools optional within sepolgen - sepolgen * Make use of setools optional within sepolgen * We need to support files that have a + in them --- policycoreutils-rhat.patch | 11050 +++++++++++++------------------ policycoreutils-sepolgen.patch | 53 - policycoreutils.spec | 23 +- sources | 4 +- 4 files changed, 4600 insertions(+), 6530 deletions(-) diff --git a/policycoreutils-rhat.patch b/policycoreutils-rhat.patch index c11300c..e5d73a4 100644 --- a/policycoreutils-rhat.patch +++ b/policycoreutils-rhat.patch @@ -45,7 +45,7 @@ index ef4bec3..9b313ec 100644 return None diff --git a/policycoreutils/gui/Makefile b/policycoreutils/gui/Makefile new file mode 100644 -index 0000000..53efa84 +index 0000000..153da2d --- /dev/null +++ b/policycoreutils/gui/Makefile @@ -0,0 +1,38 @@ @@ -70,7 +70,7 @@ index 0000000..53efa84 +usersPage.py \ +selinux.tbl + -+all: $(TARGETS) system-config-selinux.py polgengui.py templates polgen.py ++all: $(TARGETS) system-config-selinux.py polgengui.py templates polgen.py + +install: all + -mkdir -p $(SHAREDIR)/templates @@ -89,10 +89,10 @@ index 0000000..53efa84 +relabel: diff --git a/policycoreutils/gui/booleansPage.py b/policycoreutils/gui/booleansPage.py new file mode 100644 -index 0000000..1216255 +index 0000000..eee954d --- /dev/null +++ b/policycoreutils/gui/booleansPage.py -@@ -0,0 +1,258 @@ +@@ -0,0 +1,250 @@ +# +# booleansPage.py - GUI for Booleans page in system-config-securitylevel +# @@ -133,7 +133,7 @@ index 0000000..1216255 + +## +## I18N -+## ++## +PROGNAME="policycoreutils" + +import gettext @@ -175,7 +175,6 @@ index 0000000..1216255 +class booleansPage: + def __init__(self, xml, doDebug=None): + self.xml = xml -+ xml.signal_connect("on_lockdown_clicked", self.on_lockdown_clicked) + self.window = self.xml.get_widget("mainWindow").get_root_window() + self.local = False + self.types=[] @@ -191,7 +190,7 @@ index 0000000..1216255 + self.booleansFilter = xml.get_widget("booleansFilter") + self.booleansFilter.connect("focus_out_event", self.filter_changed) + self.booleansFilter.connect("activate", self.filter_changed) -+ ++ + self.booleansView = xml.get_widget("booleansView") + self.typeLabel = xml.get_widget("typeLabel") + self.modifySeparator = xml.get_widget("modifySeparator") @@ -203,7 +202,7 @@ index 0000000..1216255 + 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.set_sort_column_id(1, gtk.SORT_ASCENDING) + self.booleansView.set_model(self.store) + + checkbox = gtk.CellRendererToggle() @@ -232,7 +231,7 @@ index 0000000..1216255 + self.booleansView.append_column(col) + self.filter="" + self.load(self.filter) -+ ++ + def error(self, message): + dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, + gtk.BUTTONS_CLOSE, @@ -253,11 +252,11 @@ index 0000000..1216255 + def wait(self): + self.window.set_cursor(self.busy_cursor) + semanagePage.idle_func() -+ ++ + def ready(self): + self.window.set_cursor(self.ready_cursor) + semanagePage.idle_func() -+ ++ + def deleteDialog(self): + store, iter = self.booleansView.get_selection().get_selected() + if iter == None: @@ -269,7 +268,7 @@ index 0000000..1216255 + try: + self.wait() + (rc, out) = commands.getstatusoutput("semanage boolean -d %s" % boolean) -+ ++ + self.ready() + if rc != 0: + return self.error(out) @@ -282,10 +281,10 @@ index 0000000..1216255 + if filter != self.filter: + self.load(filter) + self.filter=filter -+ ++ + def use_menus(self): + return False -+ ++ + def get_description(self): + return _("Boolean") + @@ -333,12 +332,6 @@ index 0000000..1216255 + self.load(self.filter) + self.ready() + -+ def on_lockdown_clicked(self, button): -+ try: -+ os.spawnl(os.P_NOWAIT, "/usr/share/system-config-selinux/lockdown.py") -+ except ValueError, e: -+ self.error(e.args[0]) -+ + def on_local_clicked(self, button): + self.local = not self.local + self.revertButton.set_sensitive(self.local) @@ -350,10 +343,9 @@ index 0000000..1216255 + + self.load(self.filter) + return True -+ diff --git a/policycoreutils/gui/domainsPage.py b/policycoreutils/gui/domainsPage.py new file mode 100644 -index 0000000..3eeebca +index 0000000..03451b6 --- /dev/null +++ b/policycoreutils/gui/domainsPage.py @@ -0,0 +1,154 @@ @@ -389,7 +381,7 @@ index 0000000..3eeebca + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -412,7 +404,7 @@ index 0000000..3eeebca + + 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) ++ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Domain Name"), gtk.CellRendererText(), text = 0) + col.set_sort_column_id(0) + col.set_resizable(True) @@ -429,7 +421,7 @@ index 0000000..3eeebca + + self.domains=polgen.get_all_domains() + self.load() -+ ++ + def get_modules(self): + modules=[] + fd=os.popen("semodule -l") @@ -440,7 +432,7 @@ index 0000000..3eeebca + return modules + + def load(self, filter=""): -+ self.filter=filter ++ self.filter=filter + self.store.clear() + try: + modules=self.get_modules() @@ -449,7 +441,7 @@ index 0000000..3eeebca + continue + iter = self.store.append() + self.store.set_value(iter, 0, domain) -+ t = "permissive_%s_t" % domain ++ t = "permissive_%s_t" % domain + if t in modules: + self.store.set_value(iter, 1, _("Permissive")) + else: @@ -457,7 +449,7 @@ index 0000000..3eeebca + except: + pass + self.view.get_selection().select_path ((0,)) -+ ++ + def itemSelected(self, selection): + store, iter = selection.get_selected() + if iter == None: @@ -469,7 +461,7 @@ index 0000000..3eeebca + def deleteDialog(self): + # Do nothing + return self.delete() -+ ++ + def delete(self): + selection = self.view.get_selection() + store, iter = selection.get_selected() @@ -483,18 +475,18 @@ index 0000000..3eeebca + else: + domain = store.set_value(iter, 1, "") + self.itemSelected(selection) -+ ++ + except ValueError, e: + self.error(e.args[0]) + + def propertiesDialog(self): + # Do nothing + return -+ ++ + def addDialog(self): + # Do nothing + return self.add() -+ ++ + def add(self): + selection = self.view.get_selection() + store, iter = selection.get_selected() @@ -508,12 +500,12 @@ index 0000000..3eeebca + else: + domain = store.set_value(iter, 1, _("Permissive")) + self.itemSelected(selection) -+ ++ + except ValueError, e: + self.error(e.args[0]) diff --git a/policycoreutils/gui/fcontextPage.py b/policycoreutils/gui/fcontextPage.py new file mode 100644 -index 0000000..d0889b2 +index 0000000..131f1c2 --- /dev/null +++ b/policycoreutils/gui/fcontextPage.py @@ -0,0 +1,223 @@ @@ -556,13 +548,13 @@ index 0000000..d0889b2 + self.mls = con[1] + else: + self.mls = "s0" -+ ++ + def __str__(self): + return self.scontext + +## +## I18N -+## ++## +PROGNAME="policycoreutils" + +import gettext @@ -593,7 +585,7 @@ index 0000000..d0889b2 + col = gtk.TreeViewColumn(_("File\nSpecification"), gtk.CellRendererText(), text=SPEC_COL) + col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + col.set_fixed_width(250) -+ ++ + col.set_sort_column_id(SPEC_COL) + col.set_resizable(True) + self.view.append_column(col) @@ -609,7 +601,7 @@ index 0000000..d0889b2 + 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.SORT_ASCENDING) + self.load() + self.fcontextEntry = xml.get_widget("fcontextEntry") + self.fcontextFileTypeCombo = xml.get_widget("fcontextFileTypeCombo") @@ -639,7 +631,7 @@ index 0000000..d0889b2 + return False + + def load(self, filter=""): -+ self.filter=filter ++ self.filter=filter + self.fcontext=seobject.fcontextRecords() + self.store.clear() + fcon_dict=self.fcontext.get_all(self.local) @@ -657,7 +649,7 @@ index 0000000..d0889b2 + rec="<>" + self.store.set_value(iter, TYPE_COL, rec) + self.view.get_selection().select_path ((0,)) -+ ++ + def filter_changed(self, *arg): + filter = arg[0].get_text() + if filter != self.filter: @@ -679,14 +671,14 @@ index 0000000..d0889b2 + if iter != None: + self.fcontextFileTypeCombo.set_active_iter(iter) + self.fcontextFileTypeCombo.set_sensitive(False) -+ ++ + def dialogClear(self): + self.fcontextEntry.set_text("") + self.fcontextEntry.set_sensitive(True) + self.fcontextFileTypeCombo.set_sensitive(True) + self.fcontextTypeEntry.set_text("") + self.fcontextMLSEntry.set_text("s0") -+ ++ + def delete(self): + store, iter = self.view.get_selection().get_selected() + try: @@ -695,7 +687,7 @@ index 0000000..d0889b2 + self.wait() + (rc, out) = commands.getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (ftype, fspec)) + self.ready() -+ ++ + if rc != 0: + return self.error(out) + store.remove(iter) @@ -716,12 +708,12 @@ index 0000000..d0889b2 + if rc != 0: + self.error(out) + return False -+ ++ + iter=self.store.append() + self.store.set_value(iter, SPEC_COL, fspec) + self.store.set_value(iter, FTYPE_COL, ftype) + self.store.set_value(iter, TYPE_COL, "%s:%s" % (type, mls)) -+ ++ + def modify(self): + fspec=self.fcontextEntry.get_text().strip() + type=self.fcontextTypeEntry.get_text().strip() @@ -742,10 +734,10 @@ index 0000000..d0889b2 + self.store.set_value(iter, TYPE_COL, "%s:%s" % (type, mls)) diff --git a/policycoreutils/gui/html_util.py b/policycoreutils/gui/html_util.py new file mode 100644 -index 0000000..d41643c +index 0000000..68eed76 --- /dev/null +++ b/policycoreutils/gui/html_util.py -@@ -0,0 +1,164 @@ +@@ -0,0 +1,163 @@ +# Authors: John Dennis +# +# Copyright (C) 2007 Red Hat, Inc. @@ -828,7 +820,7 @@ index 0000000..d41643c + atbreak = 1 + self.col = col + self.atbreak = data[-1] in string.whitespace -+ ++ +class HTMLParserAnchor(htmllib.HTMLParser): + + def __init__(self, formatter, verbose=0): @@ -909,1171 +901,12 @@ index 0000000..d41643c + + doc += tail + return doc -+ -diff --git a/policycoreutils/gui/lockdown.glade b/policycoreutils/gui/lockdown.glade -new file mode 100644 -index 0000000..714da60 ---- /dev/null -+++ b/policycoreutils/gui/lockdown.glade -@@ -0,0 +1,771 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ 5 -+ False -+ system-config-selinux -+ Copyright (c)2006 Red Hat, Inc. -+Copyright (c) 2006 Dan Walsh <dwalsh@redhat.com> -+ False -+ Daniel Walsh <dwalsh@redhat.com> -+ -+ translator-credits -+ system-config-selinux.png -+ -+ -+ -+ 800 -+ 400 -+ SELinux Boolean Lockdown -+ GTK_WINDOW_TOPLEVEL -+ GTK_WIN_POS_NONE -+ False -+ True -+ False -+ system-config-selinux.png -+ True -+ False -+ False -+ GDK_WINDOW_TYPE_HINT_NORMAL -+ GDK_GRAVITY_NORTH_WEST -+ True -+ False -+ True -+ -+ -+ -+ True -+ True -+ -+ -+ -+ True -+ GTK_SHADOW_NONE -+ -+ -+ -+ True -+ GTK_PACK_DIRECTION_LTR -+ GTK_PACK_DIRECTION_LTR -+ -+ -+ -+ True -+ GNOMEUIINFO_MENU_FILE_TREE -+ -+ -+ -+ -+ -+ -+ True -+ _Forward -+ True -+ -+ -+ -+ -+ -+ True -+ gtk-media-next -+ 1 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ True -+ _Previous -+ True -+ -+ -+ -+ -+ -+ True -+ gtk-media-previous -+ 1 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ True -+ -+ -+ -+ -+ -+ True -+ Save As -+ True -+ -+ -+ -+ -+ -+ True -+ gtk-save-as -+ 1 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ True -+ Apply -+ True -+ -+ -+ -+ -+ -+ True -+ gtk-apply -+ 1 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ True -+ GNOMEUIINFO_MENU_EXIT_ITEM -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ True -+ GNOMEUIINFO_MENU_HELP_TREE -+ -+ -+ -+ -+ -+ -+ True -+ GNOMEUIINFO_MENU_ABOUT_ITEM -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ BONOBO_DOCK_TOP -+ 0 -+ 0 -+ 0 -+ BONOBO_DOCK_ITEM_BEH_EXCLUSIVE|BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL|BONOBO_DOCK_ITEM_BEH_LOCKED -+ -+ -+ -+ -+ -+ True -+ True -+ 0 -+ -+ -+ -+ 5 -+ True -+ 0 -+ 0.5 -+ GTK_SHADOW_NONE -+ -+ -+ -+ True -+ 0.5 -+ 0.5 -+ 1 -+ 1 -+ 0 -+ 0 -+ 12 -+ 0 -+ -+ -+ -+ True -+ True -+ GTK_POLICY_ALWAYS -+ GTK_POLICY_ALWAYS -+ GTK_SHADOW_NONE -+ GTK_CORNER_TOP_LEFT -+ -+ -+ -+ 300 -+ True -+ Select Management Object -+ True -+ False -+ False -+ False -+ True -+ False -+ False -+ False -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ True -+ <b>Select:</b> -+ False -+ True -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ label_item -+ -+ -+ -+ -+ False -+ False -+ -+ -+ -+ -+ -+ False -+ 0 -+ -+ -+ -+ True -+ False -+ 0 -+ -+ -+ -+ True -+ True -+ GTK_POLICY_ALWAYS -+ GTK_POLICY_ALWAYS -+ GTK_SHADOW_NONE -+ GTK_CORNER_TOP_LEFT -+ -+ -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ True -+ GTK_BUTTONBOX_END -+ 0 -+ -+ -+ -+ True -+ True -+ True -+ gtk-apply -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ gtk-save-as -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ GTK_PACK_END -+ -+ -+ -+ -+ -+ True -+ 0 -+ -+ -+ -+ True -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ -+ -+ -+ True -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ True -+ False -+ 2 -+ -+ -+ -+ True -+ gtk-yes -+ 4 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ Enable -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ enable_radiobutton -+ -+ -+ -+ True -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ True -+ False -+ 2 -+ -+ -+ -+ True -+ gtk-no -+ 4 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ Disable -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ enable_radiobutton -+ -+ -+ -+ True -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ True -+ False -+ 2 -+ -+ -+ -+ True -+ gtk-undo -+ 4 -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ Default -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ 11 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ GTK_BUTTONBOX_END -+ 0 -+ -+ -+ -+ True -+ True -+ True -+ gtk-quit -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ gtk-media-previous -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ gtk-media-forward -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ True -+ True -+ -+ -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ 5 -+ Select file name to save boolean settings. -+ GTK_FILE_CHOOSER_ACTION_SAVE -+ True -+ False -+ False -+ False -+ Save Boolean Configuration File -+ GTK_WINDOW_TOPLEVEL -+ GTK_WIN_POS_MOUSE -+ False -+ True -+ False -+ True -+ False -+ False -+ GDK_WINDOW_TYPE_HINT_DIALOG -+ GDK_GRAVITY_NORTH_WEST -+ True -+ False -+ -+ -+ -+ True -+ False -+ 2 -+ -+ -+ -+ True -+ GTK_BUTTONBOX_END -+ -+ -+ -+ True -+ True -+ True -+ gtk-cancel -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -6 -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ True -+ gtk-save -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -5 -+ -+ -+ -+ -+ 0 -+ False -+ True -+ GTK_PACK_END -+ -+ -+ -+ -+ -+ -+ -diff --git a/policycoreutils/gui/lockdown.py b/policycoreutils/gui/lockdown.py -new file mode 100644 -index 0000000..3c29327 ---- /dev/null -+++ b/policycoreutils/gui/lockdown.py -@@ -0,0 +1,375 @@ -+#!/usr/bin/python -+# -+# lockdown.py - GUI for Booleans page in system-config-securitylevel -+# -+# Dan Walsh -+# -+# Copyright 2008 Red Hat, Inc. -+# -+# This program is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 2 of the License, or -+# (at your option) any later version. -+# -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+# -+import signal -+import string -+import gtk -+import gtk.glade -+import os -+import gobject -+import gnome -+import sys -+import selinux -+import seobject -+import webkit -+import commands -+import tempfile -+ -+from html_util import * -+ -+gnome.program_init("SELinux Boolean Lockdown Tool", "5") -+ -+INSTALLPATH='/usr/share/system-config-selinux' -+sys.path.append(INSTALLPATH) -+ -+## -+## I18N -+## -+PROGNAME="policycoreutils" -+ -+import gettext -+gettext.bindtextdomain(PROGNAME, "/usr/share/locale") -+gettext.textdomain(PROGNAME) -+try: -+ gettext.install(PROGNAME, -+ localedir="/usr/share/locale", -+ unicode=False, -+ codeset = 'utf-8') -+except IOError: -+ import __builtin__ -+ __builtin__.__dict__['_'] = unicode -+ -+from glob import fnmatch -+ -+STATUS=(_("Disable"), _("Enable"), _("Default")) -+DISABLE = 0 -+ENABLE = 1 -+DEFAULT = 2 -+ -+def idle_func(): -+ while gtk.events_pending(): -+ gtk.main_iteration() -+ -+def td_fmt(val): -+ return '%s' % val -+ -+tr_fmt = '%s\n' -+ -+p_fmt = '

%s\n' -+ -+## -+## Pull in the Glade file -+## -+if os.access("system-config-selinux.glade", os.F_OK): -+ xml = gtk.glade.XML ("lockdown.glade", domain=PROGNAME) -+else: -+ xml = gtk.glade.XML ("/usr/share/system-config-selinux/lockdown.glade", domain=PROGNAME) -+BOOLEAN = 0 -+class booleanWindow: -+ def __init__(self): -+ self.tabs=[] -+ self.xml = xml -+ xml.signal_connect("on_cancel_clicked", self.cancel) -+ xml.signal_connect("on_forward_clicked", self.forward) -+ xml.signal_connect("on_previous_clicked", self.previous) -+ xml.signal_connect("on_save_clicked", self.save) -+ xml.signal_connect("on_apply_clicked", self.apply) -+ self.xml = xml -+ self.mainWindow = self.xml.get_widget("mainWindow") -+ self.forwardbutton = self.xml.get_widget("forwardButton") -+ 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.radiobox = self.xml.get_widget("radiobox") -+ self.savebox = self.xml.get_widget("savebox") -+ self.file_dialog = self.xml.get_widget("filechooserdialog") -+ self.vbox = self.xml.get_widget("vbox") -+ self.enable_radiobutton = self.xml.get_widget("enable_radiobutton") -+ self.enable_radiobutton.connect("toggled", self.toggled) -+ self.disable_radiobutton = self.xml.get_widget("disable_radiobutton") -+ self.disable_radiobutton.connect("toggled", self.toggled) -+ self.default_radiobutton = self.xml.get_widget("default_radiobutton") -+ self.default_radiobutton.connect("toggled", self.toggled) -+ self.html_scrolledwindow = self.xml.get_widget("html_scrolledwindow") -+ self.view = xml.get_widget("booleanView") -+ self.view.get_selection().connect("changed", self.itemSelected) -+ -+ self.store = gtk.TreeStore(gobject.TYPE_STRING) -+ self.view.set_model(self.store) -+ -+ col = gtk.TreeViewColumn("Boolean", gtk.CellRendererText(), text=BOOLEAN) -+ col.set_sort_column_id(BOOLEAN) -+ col.set_resizable(True) -+ self.view.append_column(col) -+ -+ self.html_view = self.create_htmlview(self.html_scrolledwindow) -+ self.load() -+ self.view.get_selection().select_path ((0,)) -+ -+ def create_htmlview(self, container): -+ view = webkit.WebView() -+ container.add(view) -+ return (view) -+ -+ def wait(self): -+ self.window.set_cursor(self.busy_cursor) -+ idle_func() -+ -+ def ready(self): -+ self.window.set_cursor(self.ready_cursor) -+ idle_func() -+ -+ def load(self): -+ self.store.clear() -+ self.booleans = seobject.booleanRecords() -+ booleansList = self.booleans.get_all(0) -+ self.booldict = {} -+ for name in booleansList: -+ cat = self.booleans.get_category(name) -+ if cat not in self.booldict: -+ self.booldict[cat] = {} -+ -+ rec = booleansList[name] -+ self.booldict[cat][name]= [rec[2], self.booleans.get_desc(name)] -+ -+ cats = self.booldict.keys() -+ cats.sort() -+ -+ citer = self.store.append(None) -+ self.store.set_value(citer, BOOLEAN, "Begin") -+ for cat in cats: -+ citer = self.store.append(None) -+ self.store.set_value(citer, BOOLEAN, cat) -+ bools = self.booldict[cat].keys() -+ for bool in bools: -+ biter = self.store.append(citer) -+ self.store.set_value(biter, BOOLEAN, bool) -+ biter = self.store.append(citer) -+ self.store.set_value(biter, BOOLEAN, "Finish") -+ citer = self.store.append(None) -+ self.store.set_value(citer, BOOLEAN, "Finish") -+ -+ def on_about_activate(self, args): -+ dlg = xml.get_widget ("aboutWindow") -+ dlg.run () -+ dlg.hide () -+ -+ def cancel(self, args): -+ gtk.main_quit() -+ -+ def error(self, message): -+ dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, -+ gtk.BUTTONS_CLOSE, -+ message) -+ dlg.set_position(gtk.WIN_POS_MOUSE) -+ dlg.show_all() -+ dlg.run() -+ dlg.destroy() -+ -+ def __out(self): -+ out = '' -+ for c in self.booldict.keys(): -+ for b in self.booldict[c]: -+ out += "%s=%s\n" % (b, self.booldict[c][b][0]) -+ return out -+ -+ def save(self, args): -+ self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_SAVE) -+ rc = self.file_dialog.run() -+ self.file_dialog.hide() -+ if rc == gtk.RESPONSE_OK: -+ try: -+ fd = open(self.file_dialog.get_filename(), "w") -+ fd.write(self.__out()) -+ fd.close() -+ -+ except IOError, e: -+ self.error(e) -+ -+ def apply(self, args): -+ fd = tempfile.NamedTemporaryFile(dir = "/var/lib/selinux") -+ fd.write(self.__out()) -+ fd.flush() -+ self.wait() -+ rc, err = commands.getstatusoutput("semanage boolean -m -F %s" % fd.name) -+ self.ready() -+ fd.close() -+ if rc != 0: -+ self.error(err) -+ -+ def forward(self, args): -+ selection = self.view.get_selection() -+ store, iter = selection.get_selected() -+ if self.store.iter_has_child(iter): -+ store, rows = selection.get_selected_rows() -+ self.view.expand_to_path(rows[0]) -+ niter = self.store.iter_nth_child(iter, 0) -+ else: -+ niter = store.iter_next(iter) -+ -+ if niter == None: -+ piter = self.store.iter_parent(iter) -+ if piter == None: -+ return -+ niter = store.iter_next(piter) -+ -+ if niter != None: -+ selection.select_iter(niter) -+ store, rows = selection.get_selected_rows() -+ self.view.scroll_to_cell(rows[0]) -+ else: -+ print "Finish" -+ -+ def toggled(self, button): -+ if button.get_active() == False: -+ return -+ if self.cat == None: -+ return -+ if self.disable_radiobutton == button: -+ self.booldict[self.cat][self.name][0] = DISABLE -+ if self.enable_radiobutton == button: -+ self.booldict[self.cat][self.name][0] = ENABLE -+ if self.default_radiobutton == button: -+ self.booldict[self.cat][self.name][0] = DEFAULT -+ -+ def previous(self, args): -+ selection = self.view.get_selection() -+ store, iter = selection.get_selected() -+ store, rows = selection.get_selected_rows() -+ row = rows[0] -+ if len(row) == 1 or self.store.iter_has_child(iter): -+ if row[0] == 0: -+ return -+ nrow = row[0] - 1 -+ iter = self.store.get_iter((nrow,)) -+ if self.store.iter_has_child(iter): -+ self.view.expand_to_path((nrow,)) -+ n = store.iter_n_children(iter) -1 -+ piter = store.iter_nth_child(iter, n) -+ else: -+ piter = iter -+ else: -+ if row[1] == 0: -+ piter = self.store.iter_parent(iter) -+ else: -+ r0 = row[0] -+ r1 = row[1] - 1 -+ piter = self.store.get_iter((r0,r1)) -+ if piter != None: -+ selection.select_iter(piter) -+ store, rows = selection.get_selected_rows() -+ self.view.scroll_to_cell(rows[0]) -+ else: -+ print "Finish" -+ -+ def html_cat(self, cat): -+ html = "" -+ row = td_fmt(_("Boolean")) + td_fmt(_("Description")) + td_fmt(_("Status")) -+ html += tr_fmt % row -+ -+ for b in self.booldict[cat]: -+ row = td_fmt(b) + td_fmt(self.booleans.get_desc(b)) + td_fmt(STATUS[self.booldict[cat][b][0]]) -+ html += tr_fmt % row -+ return html -+ -+ def html_table(self, title, body): -+ html = self.html_head(title) -+ html += '\n' -+ html += body -+ html += '
' -+ return html -+ -+ def html_head(self, val): -+ # Wrap entire alert in one table -+ # 1st table: primary Information -+ -+ html = '%s\n\n\n' % val -+ return html -+ -+ def html_all(self): -+ html = "" -+ cats = self.booldict.keys() -+ cats.sort() -+ for cat in cats: -+ html += self.html_table((_("Category: %s
") % cat), self.html_cat(cat)) -+ return html -+ -+ def itemSelected(self, selection): -+ store, iter = selection.get_selected() -+ if iter == None: -+ return -+ -+ piter = self.store.iter_parent(iter) -+ if piter != None: -+ self.cat = store.get_value(piter, BOOLEAN) -+ else: -+ self.cat = None -+ -+ self.name = store.get_value(iter, BOOLEAN) -+ -+ html = '' -+ -+ self.radiobox.hide() -+ self.savebox.hide() -+ -+ if self.name == _("Begin"): -+ html += self.html_head(_("Welcome to the SELinux Lockdown Tool.

This tool can be used to lockdown SELinux booleans.The tool will generate a configuration file which can be used to lockdown this system or other SELinux systems.
")) -+ html += self.html_all() -+ else: -+ if self.name == _("Finish"): -+ if self.cat != None: -+ html += self.html_head(_("Category %s booleans completed

") % self.cat) -+ html += self.html_table(_("Current settings:

"), self.html_cat(self.cat)) -+ else: -+ html += self.html_head(_("Finish:

")) -+ html += self.html_all() -+ self.savebox.show() -+ else: -+ if self.store.iter_has_child(iter): -+ html += self.html_table(_("Category: %s

Current Settings

") % self.name, self.html_cat(self.name)) -+ else: -+ self.radiobox.show() -+ html += self.html_table(_("Boolean: %s

") % self.name, tr_fmt % td_fmt(self.booleans.get_desc(self.name))) -+ if self.booldict[self.cat][self.name][0] == ENABLE: -+ self.enable_radiobutton.set_active(True) -+ if self.booldict[self.cat][self.name][0] == DISABLE: -+ self.disable_radiobutton.set_active(True) -+ if self.booldict[self.cat][self.name][0] == DEFAULT: -+ self.default_radiobutton.set_active(True) -+ html_doc= html_document(html) -+ -+ self.html_view.load_html_string(html, "") -+ -+ def stand_alone(self): -+ desktopName = _("Lockdown SELinux Booleans") -+ -+ self.mainWindow.connect("destroy", self.cancel) -+ -+ self.mainWindow.show_all() -+ self.radiobox.hide() -+ self.savebox.hide() -+ gtk.main() -+ -+if __name__ == "__main__": -+ signal.signal (signal.SIGINT, signal.SIG_DFL) -+ -+ app = booleanWindow() -+ app.stand_alone() diff --git a/policycoreutils/gui/loginsPage.py b/policycoreutils/gui/loginsPage.py new file mode 100644 -index 0000000..b41fc1c +index 0000000..ec29fd9 --- /dev/null +++ b/policycoreutils/gui/loginsPage.py -@@ -0,0 +1,185 @@ +@@ -0,0 +1,184 @@ +## loginsPage.py - show selinux mappings +## Copyright (C) 2006 Red Hat, Inc. + @@ -2104,7 +937,7 @@ index 0000000..b41fc1c + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -2124,7 +957,7 @@ index 0000000..b41fc1c + semanagePage.__init__(self, xml, "logins", _("User Mapping")) + 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) ++ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Login\nName"), gtk.CellRendererText(), text = 0) + col.set_sort_column_id(0) + col.set_resizable(True) @@ -2139,9 +972,9 @@ index 0000000..b41fc1c + self.loginsNameEntry = xml.get_widget("loginsNameEntry") + self.loginsSelinuxUserCombo = xml.get_widget("loginsSelinuxUserCombo") + self.loginsMLSEntry = xml.get_widget("loginsMLSEntry") -+ ++ + def load(self, filter = ""): -+ self.filter=filter ++ self.filter=filter + self.login = seobject.loginRecords() + dict = self.login.get_all(0) + keys = dict.keys() @@ -2166,7 +999,7 @@ index 0000000..b41fc1c + cell = gtk.CellRendererText() + self.loginsSelinuxUserCombo.pack_start(cell, True) + self.loginsSelinuxUserCombo.add_attribute(cell, 'text', 0) -+ ++ + selusers = seobject.seluserRecords().get_all(0) + keys = selusers.keys() + keys.sort() @@ -2178,13 +1011,13 @@ index 0000000..b41fc1c + while liststore.get_value(iter,0) != "user_u": + iter = liststore.iter_next(iter) + self.loginsSelinuxUserCombo.set_active_iter(iter) -+ ++ + def dialogInit(self): + self.__dialogSetup() + store, iter = self.view.get_selection().get_selected() + self.loginsNameEntry.set_text(store.get_value(iter, 0)) + self.loginsNameEntry.set_sensitive(False) -+ ++ + self.loginsMLSEntry.set_text(store.get_value(iter, 2)) + seuser = store.get_value(iter, 1) + liststore = self.loginsSelinuxUserCombo.get_model() @@ -2193,21 +1026,21 @@ index 0000000..b41fc1c + iter = liststore.iter_next(iter) + if iter != None: + self.loginsSelinuxUserCombo.set_active_iter(iter) -+ -+ ++ ++ + def dialogClear(self): + self.__dialogSetup() + self.loginsNameEntry.set_text("") + self.loginsNameEntry.set_sensitive(True) + self.loginsMLSEntry.set_text("s0") -+ ++ + def delete(self): + store, iter = self.view.get_selection().get_selected() + try: + login=store.get_value(iter, 0) + if login == "root" or login == "__default__": + raise ValueError(_("Login '%s' is required") % login) -+ ++ + self.wait() + (rc, out) = commands.getstatusoutput("semanage login -d %s" % login) + self.ready() @@ -2233,12 +1066,12 @@ index 0000000..b41fc1c + if rc != 0: + self.error(out) + return False -+ ++ + iter = self.store.append() + self.store.set_value(iter, 0, target) + self.store.set_value(iter, 1, seuser) + self.store.set_value(iter, 2, seobject.translate(serange)) -+ ++ + def modify(self): + target=self.loginsNameEntry.get_text().strip() + serange=self.loginsMLSEntry.get_text().strip() @@ -2253,18 +1086,17 @@ index 0000000..b41fc1c + if rc != 0: + self.error(out) + return False -+ ++ + store, iter = self.view.get_selection().get_selected() + self.store.set_value(iter, 0, target) + self.store.set_value(iter, 1, seuser) + self.store.set_value(iter, 2, seobject.translate(serange)) -+ diff --git a/policycoreutils/gui/mappingsPage.py b/policycoreutils/gui/mappingsPage.py new file mode 100644 -index 0000000..3e4c2a2 +index 0000000..fd0ea75 --- /dev/null +++ b/policycoreutils/gui/mappingsPage.py -@@ -0,0 +1,56 @@ +@@ -0,0 +1,55 @@ +## mappingsPage.py - show selinux mappings +## Copyright (C) 2006 Red Hat, Inc. + @@ -2293,7 +1125,7 @@ index 0000000..3e4c2a2 + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -2312,7 +1144,7 @@ index 0000000..3e4c2a2 + self.xml = xml + self.view = xml.get_widget("mappingsView") + self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) -+ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) ++ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + self.view.set_model(self.store) + self.login = loginRecords() + dict = self.login.get_all(0) @@ -2320,10 +1152,9 @@ index 0000000..3e4c2a2 + keys.sort() + for k in keys: + print "%-25s %-25s %-25s" % (k, dict[k][0], translate(dict[k][1])) -+ diff --git a/policycoreutils/gui/modulesPage.py b/policycoreutils/gui/modulesPage.py new file mode 100644 -index 0000000..82f31b6 +index 0000000..ee40fd3 --- /dev/null +++ b/policycoreutils/gui/modulesPage.py @@ -0,0 +1,190 @@ @@ -2358,7 +1189,7 @@ index 0000000..82f31b6 + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -2382,7 +1213,7 @@ index 0000000..82f31b6 + + 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) ++ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Module Name"), gtk.CellRendererText(), text = 0) + col.set_sort_column_id(0) + col.set_resizable(True) @@ -2400,7 +1231,7 @@ index 0000000..82f31b6 + status, self.policy_type = selinux.selinux_getpolicytype() + + self.load() -+ ++ + def sort_int(self, treemodel, iter1, iter2, user_data): + try: + p1 = int(treemodel.get_value(iter1,1)) @@ -2414,7 +1245,7 @@ index 0000000..82f31b6 + return 0 + + def load(self, filter=""): -+ self.filter=filter ++ self.filter=filter + self.store.clear() + try: + fd=os.popen("semodule -l") @@ -2430,7 +1261,7 @@ index 0000000..82f31b6 + except: + pass + self.view.get_selection().select_path ((0,)) -+ ++ + + def new_module(self, args): + try: @@ -2450,12 +1281,12 @@ index 0000000..82f31b6 + else: + store.remove(iter) + self.view.get_selection().select_path ((0,)) -+ ++ + except ValueError, e: + self.error(e.args[0]) + + def enable_audit(self, button): -+ self.audit_enabled = not self.audit_enabled ++ self.audit_enabled = not self.audit_enabled + try: + self.wait() + if self.audit_enabled: @@ -2486,7 +1317,7 @@ index 0000000..82f31b6 + def propertiesDialog(self): + # Do nothing + return -+ ++ + def addDialog(self): + dialog = gtk.FileChooserDialog(_("Load Policy Module"), + None, @@ -2514,7 +1345,7 @@ index 0000000..82f31b6 + self.error(output) + else: + self.load() -+ ++ + except ValueError, e: + self.error(e.args[0]) diff --git a/policycoreutils/gui/polgen.glade b/policycoreutils/gui/polgen.glade @@ -5957,13 +4788,13 @@ index 0000000..55bad9d + diff --git a/policycoreutils/gui/polgen.py b/policycoreutils/gui/polgen.py new file mode 100644 -index 0000000..2a7c61e +index 0000000..51fb8d7 --- /dev/null +++ b/policycoreutils/gui/polgen.py @@ -0,0 +1,1372 @@ +#!/usr/bin/python -Es +# -+# Copyright (C) 2007-2012 Red Hat ++# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# +# policygentool is a tool for the initial generation of SELinux policy @@ -5980,10 +4811,10 @@ index 0000000..2a7c61e +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software -+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA +# -+# ++# +import os, sys, stat +import re +import commands @@ -6008,7 +4839,7 @@ index 0000000..2a7c61e + +## +## I18N -+## ++## +PROGNAME="policycoreutils" + +import gettext @@ -6069,7 +4900,7 @@ index 0000000..2a7c61e + types=get_all_types() + types.sort() + for i in types: -+ m = re.findall("(.*)%s" % "_exec_t$", i) ++ m = re.findall("(.*)%s" % "_exec_t$", i) + if len(m) > 0: + if len(re.findall("(.*)%s" % "_initrc$", m[0])) == 0 and m[0] not in all_domains: + all_domains.append(m[0]) @@ -6115,10 +4946,10 @@ index 0000000..2a7c61e +RUSER = 10 +EUSER = 11 + -+poltype={} ++poltype={} +poltype[DAEMON] = _("Standard Init Daemon") +poltype[DBUS] = _("DBUS System Daemon") -+poltype[INETD] = _("Internet Services Daemon") ++poltype[INETD] = _("Internet Services Daemon") +poltype[CGI] = _("Web Application/Script (CGI)") +poltype[USER] = _("User Application") +poltype[SANDBOX] = _("Sandbox") @@ -6147,10 +4978,10 @@ index 0000000..2a7c61e + else: + begin = int (r[0]) + end = int (r[1]) -+ ++ + if begin > end: + raise ValueError -+ ++ + for p in range(begin, end + 1): + if p < 1 or p > max_port: + raise ValueError @@ -6160,7 +4991,7 @@ index 0000000..2a7c61e + raise ValueError(_("Ports must be numbers or ranges of numbers from 1 to %d " % max_port )) + +class policy: -+ ++ + def __init__(self, name, type): + self.ports = [] + try: @@ -6170,7 +5001,7 @@ index 0000000..2a7c61e + except RuntimeError, e: + print "Can not get port types", e + -+ self.symbols = {} ++ self.symbols = {} + self.symbols["openlog"] = "set_use_kerberos(True)" + self.symbols["openlog"] = "set_use_kerb_rcache(True)" + self.symbols["openlog"] = "set_use_syslog(True)" @@ -6254,7 +5085,7 @@ index 0000000..2a7c61e + self.symbols["audit_write"] = "add_capability('audit_write')" + self.symbols["audit_control"] = "add_capability('audit_control')" + self.symbols["setfcap"] = "add_capability('setfcap')" -+ ++ + self.DEFAULT_DIRS = {} + self.DEFAULT_DIRS["/etc"] = ["etc_rw", [], etc_rw]; + self.DEFAULT_DIRS["/tmp"] = ["tmp", [], tmp]; @@ -6347,25 +5178,25 @@ index 0000000..2a7c61e + + def use_in_udp(self): + return self.__isnetset(self.in_udp) -+ ++ + def use_out_udp(self): + return self.__isnetset(self.out_udp) -+ ++ + def use_udp(self): + return self.use_in_udp() or self.use_out_udp() + + def use_in_tcp(self): + return self.__isnetset(self.in_tcp) -+ ++ + def use_out_tcp(self): + return self.__isnetset(self.out_tcp) -+ ++ + def use_tcp(self): + return self.use_in_tcp() or self.use_out_tcp() + + def use_network(self): + return self.use_tcp() or self.use_udp() -+ ++ + def find_port(self, port, protocol="tcp"): + for begin,end,p in self.ports.keys(): + if port >= begin and port <= end and protocol == p: @@ -6399,51 +5230,51 @@ index 0000000..2a7c61e + def set_use_resolve(self, val): + if val != True and val != False: + raise ValueError(_("use_resolve must be a boolean value ")) -+ ++ + self.use_resolve = val -+ ++ + def set_use_syslog(self, val): + if val != True and val != False: + raise ValueError(_("use_syslog must be a boolean value ")) -+ ++ + self.use_syslog = val -+ ++ + def set_use_kerberos(self, val): + if val != True and val != False: + raise ValueError(_("use_kerberos must be a boolean value ")) -+ ++ + self.use_kerberos = val -+ ++ + def set_manage_krb5_rcache(self, val): + if val != True and val != False: + raise ValueError(_("manage_krb5_rcache must be a boolean value ")) -+ ++ + self.manage_krb5_rcache = val -+ ++ + def set_use_pam(self, val): + self.use_pam = val == True -+ ++ + def set_use_dbus(self, val): + self.use_dbus = val == True -+ ++ + def set_use_audit(self, val): + self.use_audit = val == True -+ ++ + def set_use_etc(self, val): + self.use_etc = val == True -+ ++ + def set_use_localization(self, val): + self.use_localization = val == True -+ ++ + def set_use_fd(self, val): + self.use_fd = val == True -+ ++ + def set_use_terminal(self, val): + self.use_terminal = val == True -+ ++ + def set_use_mail(self, val): + self.use_mail = val == True -+ ++ + def set_use_tmp(self, val): + if self.type in USERS: + raise ValueError(_("USER Types automatically get a tmp type")) @@ -6452,7 +5283,7 @@ index 0000000..2a7c61e + self.DEFAULT_DIRS["/tmp"][1].append("/tmp"); + else: + self.DEFAULT_DIRS["/tmp"][1]=[] -+ ++ + def set_use_uid(self, val): + self.use_uid = val == True + @@ -6541,7 +5372,7 @@ index 0000000..2a7c61e +allow %s_t %s_t:%s_socket name_%s; +""" % (port_name, self.name, port_name, protocol, action) + return line -+ ++ + def generate_network_types(self): + for i in self.in_tcp[PORTS]: + rec = self.find_port(int(i), "tcp") @@ -6564,7 +5395,7 @@ index 0000000..2a7c61e +# line = "corenet_tcp_connect_%s(%s_t)\n" % (port_name, self.name) + if line not in self.found_tcp_ports: + self.found_tcp_ports.append(line) -+ ++ + for i in self.in_udp[PORTS]: + rec = self.find_port(int(i),"udp") + if rec == None: @@ -6575,11 +5406,11 @@ index 0000000..2a7c61e +# line = "corenet_udp_bind_%s(%s_t)\n" % (port_name, self.name) + if line not in self.found_udp_ports: + self.found_udp_ports.append(line) -+ ++ + if self.need_udp_type == True or self.need_tcp_type == True: + return re.sub("TEMPLATETYPE", self.name, network.te_port_types) + return "" -+ ++ + def __find_path(self, file): + for d in self.DEFAULT_DIRS: + if file.find(d) == 0: @@ -6587,7 +5418,7 @@ index 0000000..2a7c61e + return self.DEFAULT_DIRS[d] + self.DEFAULT_DIRS["rw"][1].append(file) + return self.DEFAULT_DIRS["rw"] -+ ++ + def add_capability(self, capability): + if capability not in self.capabilities: + self.capabilities.append(capability) @@ -6604,7 +5435,7 @@ index 0000000..2a7c61e + + def add_dir(self, file): + self.dirs[file] = self.__find_path(file) -+ ++ + def generate_capabilities(self): + newte = "" + self.capabilities.sort() @@ -6626,7 +5457,7 @@ index 0000000..2a7c61e + newte = "\n" + + newte += re.sub("TEMPLATETYPE", self.name, network.te_network) -+ ++ + if self.use_tcp(): + newte += "\n" + newte += re.sub("TEMPLATETYPE", self.name, network.te_tcp) @@ -6647,7 +5478,7 @@ index 0000000..2a7c61e + newte += re.sub("TEMPLATETYPE", self.name, network.te_in_reserved_ports_tcp) + if self.in_tcp[UNRESERVED]: + newte += re.sub("TEMPLATETYPE", self.name, network.te_in_unreserved_ports_tcp) -+ ++ + if self.out_tcp[ALL]: + newte += re.sub("TEMPLATETYPE", self.name, network.te_out_all_ports_tcp) + if self.out_tcp[RESERVED]: @@ -6676,7 +5507,7 @@ index 0000000..2a7c61e + for i in self.found_udp_ports: + newte += i + return newte -+ ++ + def generate_transition_rules(self): + newte = "" + for app in self.transition_domains: @@ -6694,7 +5525,7 @@ index 0000000..2a7c61e + newte = "" + if self.type == RUSER: + newte += re.sub("TEMPLATETYPE", self.name, user.te_admin_rules) -+ ++ + for app in self.admin_domains: + tmp = re.sub("TEMPLATETYPE", self.name, user.te_admin_domain_rules) + newte += re.sub("APPLICATION", app, tmp) @@ -6709,7 +5540,7 @@ index 0000000..2a7c61e + + for u in self.transition_users: + role = u.split("_u")[0] -+ ++ + if (role + "_r") in all_roles: + tmp = re.sub("TEMPLATETYPE", self.name, user.te_admin_trans_rules) + newte += re.sub("USER", role, tmp) @@ -6728,8 +5559,8 @@ index 0000000..2a7c61e + return newif + newif = re.sub("TEMPLATETYPE", self.name, executable.if_sandbox_rules) + return newif -+ -+ ++ ++ + def generate_admin_if(self): + newif = "" + newtypes = "" @@ -6749,54 +5580,54 @@ index 0000000..2a7c61e + ret += newif + ret += re.sub("TEMPLATETYPE", self.name, executable.if_end_admin) + return ret -+ ++ + return "" -+ ++ + def generate_cgi_types(self): + return re.sub("TEMPLATETYPE", self.file_name, executable.te_cgi_types) -+ ++ + def generate_sandbox_types(self): + return re.sub("TEMPLATETYPE", self.file_name, executable.te_sandbox_types) -+ ++ + def generate_userapp_types(self): + return re.sub("TEMPLATETYPE", self.name, executable.te_userapp_types) -+ ++ + def generate_inetd_types(self): + return re.sub("TEMPLATETYPE", self.name, executable.te_inetd_types) -+ ++ + def generate_dbusd_types(self): + return re.sub("TEMPLATETYPE", self.name, executable.te_dbusd_types) -+ ++ + def generate_min_login_user_types(self): + return re.sub("TEMPLATETYPE", self.name, user.te_min_login_user_types) -+ ++ + def generate_login_user_types(self): + return re.sub("TEMPLATETYPE", self.name, user.te_login_user_types) -+ ++ + def generate_admin_user_types(self): + return re.sub("TEMPLATETYPE", self.name, user.te_admin_user_types) + + def generate_existing_user_types(self): + return re.sub("TEMPLATETYPE", self.name, user.te_existing_user_types) -+ ++ + def generate_x_login_user_types(self): + return re.sub("TEMPLATETYPE", self.name, user.te_x_login_user_types) -+ ++ + def generate_root_user_types(self): + return re.sub("TEMPLATETYPE", self.name, user.te_root_user_types) -+ ++ + def generate_daemon_types(self): + newte = re.sub("TEMPLATETYPE", self.name, executable.te_daemon_types) + if self.initscript != "": + newte += re.sub("TEMPLATETYPE", self.name, executable.te_initscript_types) + return newte -+ ++ + def generate_tmp_types(self): + if self.use_tmp: + return re.sub("TEMPLATETYPE", self.name, tmp.te_types) + else: + return "" -+ ++ + def generate_booleans(self): + newte = "" + for b in self.booleans: @@ -6820,45 +5651,45 @@ index 0000000..2a7c61e + newif = re.sub("TEMPLATETYPE", self.name, executable.te_daemon_rules) + + return newif -+ ++ + def generate_login_user_rules(self): + return re.sub("TEMPLATETYPE", self.name, user.te_login_user_rules) -+ ++ + def generate_existing_user_rules(self): + return re.sub("TEMPLATETYPE", self.name, user.te_existing_user_rules) -+ ++ + def generate_x_login_user_rules(self): + return re.sub("TEMPLATETYPE", self.name, user.te_x_login_user_rules) -+ ++ + def generate_root_user_rules(self): + newte =re.sub("TEMPLATETYPE", self.name, user.te_root_user_rules) + return newte -+ ++ + def generate_userapp_rules(self): + return re.sub("TEMPLATETYPE", self.name, executable.te_userapp_rules) -+ ++ + def generate_inetd_rules(self): + return re.sub("TEMPLATETYPE", self.name, executable.te_inetd_rules) -+ ++ + def generate_dbusd_rules(self): + return re.sub("TEMPLATETYPE", self.name, executable.te_dbusd_rules) -+ ++ + def generate_tmp_rules(self): + if self.use_tmp: + return re.sub("TEMPLATETYPE", self.name, tmp.te_rules) + else: + return "" -+ ++ + def generate_cgi_rules(self): + newte = "" + newte += re.sub("TEMPLATETYPE", self.name, executable.te_cgi_rules) + return newte -+ ++ + def generate_sandbox_rules(self): + newte = "" + newte += re.sub("TEMPLATETYPE", self.name, executable.te_sandbox_rules) + return newte -+ ++ + def generate_user_if(self): + newif ="" + if self.use_terminal or self.type == USER: @@ -6867,7 +5698,7 @@ index 0000000..2a7c61e + if self.type in ( TUSER, XUSER, AUSER, LUSER): + newif += re.sub("TEMPLATETYPE", self.name, executable.if_role_change_rules) + return newif -+ ++ + def generate_if(self): + newif = "" + newif += re.sub("TEMPLATETYPE", self.name, executable.if_heading_rules) @@ -6875,7 +5706,7 @@ index 0000000..2a7c61e + newif += re.sub("TEMPLATETYPE", self.name, executable.if_program_rules) + if self.initscript != "": + newif += re.sub("TEMPLATETYPE", self.name, executable.if_initscript_rules) -+ ++ + for d in self.DEFAULT_KEYS: + if len(self.DEFAULT_DIRS[d][1]) > 0: + newif += re.sub("TEMPLATETYPE", self.name, self.DEFAULT_DIRS[d][2].if_rules) @@ -6887,15 +5718,15 @@ index 0000000..2a7c61e + newif += self.generate_dbus_if() + newif += self.generate_admin_if() + newif += self.generate_sandbox_if() -+ ++ + return newif + + def generate_default_types(self): + return self.DEFAULT_TYPES[self.type][0]() -+ ++ + def generate_default_rules(self): + return self.DEFAULT_TYPES[self.type][1]() -+ ++ + def generate_roles_rules(self): + newte = "" + if self.type in ( TUSER, XUSER, AUSER, LUSER, EUSER): @@ -6907,12 +5738,12 @@ index 0000000..2a7c61e + tmp = re.sub("TEMPLATETYPE", self.name, user.te_roles_rules) + newte += re.sub("ROLE", role, tmp) + return newte -+ ++ + def generate_te(self): + newte = self.generate_default_types() + for d in self.DEFAULT_KEYS: + if len(self.DEFAULT_DIRS[d][1]) > 0: -+ # CGI scripts already have a rw_t ++ # CGI scripts already have a rw_t + if self.type != CGI or d != "rw": + newte += re.sub("TEMPLATETYPE", self.name, self.DEFAULT_DIRS[d][2].te_types) + @@ -6943,21 +5774,21 @@ index 0000000..2a7c61e + newte += self.generate_fd_rules() + newte += self.generate_etc_rules() + newte += self.generate_pam_rules() -+ newte += self.generate_uid_rules() -+ newte += self.generate_audit_rules() -+ newte += self.generate_syslog_rules() ++ newte += self.generate_uid_rules() ++ newte += self.generate_audit_rules() ++ newte += self.generate_syslog_rules() + newte += self.generate_localization_rules() -+ newte += self.generate_resolve_rules() ++ newte += self.generate_resolve_rules() + newte += self.generate_roles_rules() -+ newte += self.generate_mail_rules() ++ newte += self.generate_mail_rules() + newte += self.generate_transition_rules() + newte += self.generate_admin_rules() + newte += self.generate_dbus_rules() + newte += self.generate_kerberos_rules() -+ newte += self.generate_manage_krb5_rcache_rules() ++ newte += self.generate_manage_krb5_rcache_rules() + + return newte -+ ++ + def generate_fc(self): + newfc = "" + fclist = [] @@ -6989,7 +5820,7 @@ index 0000000..2a7c61e + fclist.sort() + newfc="\n".join(fclist) + return newfc -+ ++ + def generate_user_sh(self): + newsh = "" + if self.type not in ( TUSER, XUSER, AUSER, LUSER, EUSER): @@ -7016,9 +5847,9 @@ index 0000000..2a7c61e + else: + newsh += re.sub("TEMPLATETYPE", self.name, script.x_login_user_default_context) + -+ ++ + return newsh -+ ++ + def generate_sh(self): + temp = re.sub("TEMPLATETYPE", self.file_name, script.compile) + if self.type == EUSER: @@ -7047,9 +5878,9 @@ index 0000000..2a7c61e + newsh += re.sub("TEMPLATETYPE", self.name, t1) + + newsh += self.generate_user_sh() -+ ++ + return newsh -+ ++ + def write_te(self, out_dir): + if self.type == EUSER: + tefile = "%s/my%s.te" % (out_dir, self.file_name) @@ -7184,7 +6015,7 @@ index 0000000..2a7c61e + mypolicy.set_admin_roles(["mydbadm"]) + mypolicy.add_boolean("allow_mytuser_setuid", "Allow mytuser users to run setuid applications") + print mypolicy.generate(tmpdir) -+ ++ + mypolicy = policy("mycgi", CGI) + mypolicy.set_program("/var/www/cgi-bin/cgi") + mypolicy.set_in_tcp(1, 0, 0, "512, 55000-55000") @@ -7237,7 +6068,7 @@ index 0000000..2a7c61e + mypolicy.set_in_udp(0, 0, 1, "1513") + mypolicy.set_transition_domains(["mozilla"]) + print mypolicy.generate(tmpdir) -+ ++ + mypolicy = policy("myuser", USER) + mypolicy.set_program("/usr/bin/myuser") + mypolicy.set_in_tcp(1, 0, 0, "513") @@ -7250,7 +6081,7 @@ index 0000000..2a7c61e + mypolicy.set_out_tcp(0,"8000") + mypolicy.set_transition_users(["unconfined_u", "staff_u"]) + print mypolicy.generate(tmpdir) -+ ++ + mypolicy = policy("mysandbox", SANDBOX) + mypolicy.set_out_udp(0, "993") + print mypolicy.generate("/tmp") @@ -7264,7 +6095,7 @@ index 0000000..2a7c61e + sys.exit(os.WEXITSTATUS(rc)) + +import os, sys, getopt, socket, random, fcntl -+ ++ +def usage(msg): + print _(""" +%s @@ -7276,13 +6107,13 @@ index 0000000..2a7c61e + for i in keys: + print "\t%s\t%s" % (i, poltype[i]) + sys.exit(-1) -+ ++ +if __name__ == '__main__': + setype = DAEMON + name = None + try: -+ gopts, cmds = getopt.getopt(sys.argv[1:], "ht:mn:", -+ ["type=", ++ gopts, cmds = getopt.getopt(sys.argv[1:], "ht:mn:", ++ ["type=", + "mount", + "test", + "name=", @@ -7299,17 +6130,17 @@ index 0000000..2a7c61e + + if o == "-m" or o == "--mount": + mount_ind = True -+ ++ + if o == "-n" or o == "--name": + name = a -+ ++ + if o == "-h" or o == "--help": + usage("") + + if o == "--test": + test() + sys.exit(0) -+ ++ + except getopt.error, error: + usage(_("Options Error %s ") % error.msg) + @@ -7335,7 +6166,7 @@ index 0000000..2a7c61e + usage(e) diff --git a/policycoreutils/gui/polgengui.py b/policycoreutils/gui/polgengui.py new file mode 100644 -index 0000000..cba0611 +index 0000000..0460a33 --- /dev/null +++ b/policycoreutils/gui/polgengui.py @@ -0,0 +1,750 @@ @@ -7345,7 +6176,7 @@ index 0000000..cba0611 +# +# Dan Walsh +# -+# Copyright (C) 2007-2011 Red Hat ++# Copyright (C) 2007-2011 Red Hat +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -7375,7 +6206,7 @@ index 0000000..cba0611 + +## +## I18N -+## ++## +PROGNAME="policycoreutils" + +import gettext @@ -7551,7 +6382,7 @@ index 0000000..cba0611 + for i in polgen.APPLICATIONS: + self.pages[i] = [ self.SELECT_TYPE_PAGE, self.APP_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.COMMON_APPS_PAGE, self.FILES_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE] + self.pages[polgen.USER] = [ self.SELECT_TYPE_PAGE, self.APP_PAGE, self.USER_TRANSITION_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.COMMON_APPS_PAGE, self.FILES_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE ] -+ ++ + self.current_page = 0 + self.back_button.set_sensitive(0) + @@ -7588,7 +6419,7 @@ index 0000000..cba0611 + self.boolean_treeview = self.xml.get_widget("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) ++ self.boolean_store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Name"), gtk.CellRendererText(), text = 0) + self.boolean_treeview.append_column(col) + col = gtk.TreeViewColumn(_("Description"), gtk.CellRendererText(), text = 1) @@ -7598,14 +6429,14 @@ index 0000000..cba0611 + 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) ++ self.role_store.set_sort_column_id(0, gtk.SORT_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.set_model(self.existing_user_store) -+ self.existing_user_store.set_sort_column_id(0, gtk.SORT_ASCENDING) ++ self.existing_user_store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Existing_User"), gtk.CellRendererText(), text = 0) + self.existing_user_treeview.append_column(col) + @@ -7619,7 +6450,7 @@ index 0000000..cba0611 + 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) ++ self.transition_store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Application"), gtk.CellRendererText(), text = 0) + self.transition_treeview.append_column(col) + @@ -7627,7 +6458,7 @@ index 0000000..cba0611 + 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) ++ self.user_transition_store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Application"), gtk.CellRendererText(), text = 0) + self.user_transition_treeview.append_column(col) + @@ -7641,24 +6472,24 @@ index 0000000..cba0611 + 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) ++ self.admin_store.set_sort_column_id(0, gtk.SORT_ASCENDING) + col = gtk.TreeViewColumn(_("Application"), gtk.CellRendererText(), text = 0) + self.admin_treeview.append_column(col) + + for i in polgen.methods: -+ m = re.findall("(.*)%s" % polgen.USER_TRANSITION_INTERFACE, i) ++ m = re.findall("(.*)%s" % polgen.USER_TRANSITION_INTERFACE, i) + if len(m) > 0: + if "%s_exec_t" % m[0] in self.all_types: + iter = self.transition_store.append() + self.transition_store.set_value(iter, 0, m[0]) + continue + -+ m = re.findall("(.*)%s" % polgen.ADMIN_TRANSITION_INTERFACE, i) ++ m = re.findall("(.*)%s" % polgen.ADMIN_TRANSITION_INTERFACE, i) + if len(m) > 0: + iter = self.admin_store.append() + self.admin_store.set_value(iter, 0, m[0]) + continue -+ ++ + def confine_application(self): + return self.get_type() in polgen.APPLICATIONS + @@ -7701,22 +6532,22 @@ index 0000000..cba0611 + 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) -+ ++ + 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.current_page = self.current_page - 1 ++ 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.START_PAGE: + self.back_button.set_sensitive(0) -+ ++ + def network_all_clicked(self, button): + active = button.get_active() + for b in self.network_buttons[button]: + b.set_sensitive(not active) -+ ++ + def verify(self, message, title="" ): + dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, + gtk.BUTTONS_YES_NO, @@ -7822,7 +6653,7 @@ index 0000000..cba0611 + selected = [] + self.transition_treeview.get_selection().selected_foreach(foreach, selected) + my_policy.set_transition_domains(selected) -+ ++ + selected = [] + self.role_treeview.get_selection().selected_foreach(foreach, selected) + my_policy.set_admin_roles(selected) @@ -7831,7 +6662,7 @@ index 0000000..cba0611 + my_policy.set_in_udp(self.in_udp_all_checkbutton.get_active(), self.in_udp_reserved_checkbutton.get_active(), self.in_udp_unreserved_checkbutton.get_active(), self.in_udp_entry.get_text()) + my_policy.set_out_tcp(self.out_tcp_all_checkbutton.get_active(), self.out_tcp_entry.get_text()) + my_policy.set_out_udp(self.out_udp_all_checkbutton.get_active(), self.out_udp_entry.get_text()) -+ ++ + iter= self.store.get_iter_first() + while(iter): + if self.store.get_value(iter, 1) == FILE: @@ -7839,12 +6670,12 @@ index 0000000..cba0611 + else: + my_policy.add_dir(self.store.get_value(iter, 0)) + iter= self.store.iter_next(iter) -+ ++ + self.info(my_policy.generate(outputdir)) + return False + except ValueError, e: + self.error(e.message) -+ ++ + def delete(self, args): + store, iter = self.view.get_selection().get_selected() + if iter != None: @@ -7867,7 +6698,7 @@ index 0000000..cba0611 + iter = self.boolean_store.append() + self.boolean_store.set_value(iter, 0, self.boolean_name_entry.get_text()) + self.boolean_store.set_value(iter, 1, self.boolean_description_entry.get_text()) -+ ++ + def __add(self,type): + rc = self.file_dialog.run() + self.file_dialog.hide() @@ -7877,7 +6708,7 @@ index 0000000..cba0611 + iter = self.store.append() + self.store.set_value(iter, 0, i) + self.store.set_value(iter, 1, type) -+ ++ + def exec_select(self, args): + self.file_dialog.set_select_multiple(0) + self.file_dialog.set_title(_("Select executable file to be confined.")) @@ -7913,7 +6744,7 @@ index 0000000..cba0611 + self.file_dialog.set_select_multiple(1) + self.file_dialog.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) + self.__add(DIR) -+ ++ + def on_about_clicked(self, args): + dlg = xml.get_widget ("about_dialog") + dlg.run () @@ -7937,7 +6768,7 @@ index 0000000..cba0611 + self.output_entry = self.xml.get_widget("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") @@ -7978,11 +6809,11 @@ index 0000000..cba0611 + if rc == gtk.RESPONSE_CANCEL: + return + self.output_entry.set_text(self.file_dialog.get_filename()) -+ ++ + def on_name_entry_changed(self, entry, text, size, position): + if text.find(" ") >= 0: + entry.emit_stop_by_name("insert_text") -+ ++ + def on_focus_out_event(self, entry, third): + name = entry.get_text() + if self.name != name: @@ -7998,7 +6829,7 @@ index 0000000..cba0611 + file = "/etc/rc.d/init.d/" + name + if os.path.isfile(file) and self.init_script_entry.get_text() == "": + self.init_script_entry.set_text(file) -+ ++ + file = "/usr/sbin/" + name + if os.path.isfile(file) and self.exec_entry.get_text() == "": + self.exec_entry.set_text(file) @@ -8013,7 +6844,7 @@ index 0000000..cba0611 + except ValueError, e: + self.error(e.message) + return True -+ ++ + def on_out_net_page_next(self, *args): + try: + polgen.verify_ports(self.out_tcp_entry.get_text()) @@ -8021,7 +6852,7 @@ index 0000000..cba0611 + except ValueError, e: + self.error(e.message) + return True -+ ++ + def on_select_type_page_next(self, *args): + self.exec_entry.set_sensitive(self.confine_application()) + self.exec_button.set_sensitive(self.confine_application()) @@ -8033,13 +6864,13 @@ index 0000000..cba0611 + if iter != None: + self.error(_("You must select a user")) + return True -+ ++ + def on_name_page_next(self, *args): + name=self.name_entry.get_text() + if not name.isalnum(): + self.error(_("You must add a name made up of letters and numbers and containing no spaces.")) + return True -+ ++ + for i in self.label_dict: + text = '%s' % (self.label_dict[i] % ("'" + name + "'")) + i.set_markup(text) @@ -8061,7 +6892,7 @@ index 0000000..cba0611 + iter = self.store.append() + self.store.set_value(iter, 0, f) + self.store.set_value(iter, 1, FILE) -+ ++ + for f in policy.dirs.keys(): + iter = self.store.append() + self.store.set_value(iter, 0, f) @@ -8091,10 +6922,10 @@ index 0000000..cba0611 + app.stand_alone() diff --git a/policycoreutils/gui/portsPage.py b/policycoreutils/gui/portsPage.py new file mode 100644 -index 0000000..d5daffb +index 0000000..bfb4e36 --- /dev/null +++ b/policycoreutils/gui/portsPage.py -@@ -0,0 +1,259 @@ +@@ -0,0 +1,258 @@ +## portsPage.py - show selinux mappings +## Copyright (C) 2006 Red Hat, Inc. + @@ -8125,7 +6956,7 @@ index 0000000..d5daffb + +## +## I18N -+## ++## +PROGNAME = "policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -8172,11 +7003,11 @@ index 0000000..d5daffb + self.load(filter) + else: + 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.view.set_model(self.store) -+ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) ++ self.store.set_sort_column_id(0, gtk.SORT_ASCENDING) + + self.view.set_search_equal_func(self.search) + col = gtk.TreeViewColumn(_("SELinux Port\nType"), gtk.CellRendererText(), text = TYPE_COL) @@ -8214,7 +7045,7 @@ index 0000000..d5daffb + return 0 + + def load(self,filter = ""): -+ self.filter=filter ++ self.filter=filter + self.port = seobject.portRecords() + dict = self.port.get_all(self.local) + keys = dict.keys() @@ -8233,9 +7064,9 @@ index 0000000..d5daffb + self.store.set_value(iter, PROTOCOL_COL, k[2]) + self.store.set_value(iter, MLS_COL, dict[k][1]) + self.view.get_selection().select_path ((0,)) -+ ++ + def group_load(self, filter = ""): -+ self.filter=filter ++ self.filter=filter + self.port = seobject.portRecords() + dict = self.port.get_all_by_type(self.local) + keys = dict.keys() @@ -8255,7 +7086,7 @@ index 0000000..d5daffb + def propertiesDialog(self): + if self.edit: + semanagePage.propertiesDialog(self) -+ ++ + def dialogInit(self): + store, iter = self.view.get_selection().get_selected() + self.ports_number_entry.set_text(store.get_value(iter, PORT_COL)) @@ -8270,20 +7101,20 @@ index 0000000..d5daffb + iter = liststore.iter_next(iter) + if iter != None: + self.ports_protocol_combo.set_active_iter(iter) -+ ++ + def dialogClear(self): + self.ports_number_entry.set_text("") + self.ports_number_entry.set_sensitive(True) + self.ports_protocol_combo.set_sensitive(True) + self.ports_name_entry.set_text("") + self.ports_mls_entry.set_text("s0") -+ ++ + def delete(self): + store, iter = self.view.get_selection().get_selected() + port = store.get_value(iter, PORT_COL) + protocol = store.get_value(iter, 1) + try: -+ self.wait() ++ self.wait() + (rc, out) = commands.getstatusoutput("semanage port -d -p %s %s" % (protocol, port)) + self.ready() + if rc != 0: @@ -8318,7 +7149,7 @@ index 0000000..d5daffb + self.store.set_value(iter, PORT_COL, port_number) + self.store.set_value(iter, PROTOCOL_COL, protocol) + self.store.set_value(iter, MLS_COL, mls) -+ ++ + def modify(self): + target = self.ports_name_entry.get_text().strip() + mls = self.ports_mls_entry.get_text().strip() @@ -8353,13 +7184,12 @@ index 0000000..d5daffb + self.load(self.filter) + + return True -+ diff --git a/policycoreutils/gui/selinux.tbl b/policycoreutils/gui/selinux.tbl new file mode 100644 -index 0000000..ed5ca6a +index 0000000..07ccf6e --- /dev/null +++ b/policycoreutils/gui/selinux.tbl -@@ -0,0 +1,234 @@ +@@ -0,0 +1,233 @@ +acct_disable_trans _("SELinux Service Protection") _("Disable SELinux protection for acct daemon") +allow_daemons_dump_core _("Admin") _("Allow all daemons to write corefiles to /") +allow_daemons_use_tty _("Admin") _("Allow all daemons the ability to use unallocated ttys") @@ -8593,13 +7423,12 @@ index 0000000..ed5ca6a +ypxfr_disable_trans _("NIS") _("Disable SELinux protection for NIS Transfer Daemon") +webadm_manage_user_files _("HTTPD Service") _("Allow SELinux webadm user to manage unprivileged users home directories") +webadm_read_user_files _("HTTPD Service") _("Allow SELinux webadm user to read unprivileged users home directories") -+ diff --git a/policycoreutils/gui/semanagePage.py b/policycoreutils/gui/semanagePage.py new file mode 100644 -index 0000000..110c654 +index 0000000..3a0e478 --- /dev/null +++ b/policycoreutils/gui/semanagePage.py -@@ -0,0 +1,168 @@ +@@ -0,0 +1,167 @@ +## semanagePage.py - show selinux mappings +## Copyright (C) 2006 Red Hat, Inc. + @@ -8628,7 +7457,7 @@ index 0000000..110c654 + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -8645,7 +7474,7 @@ index 0000000..110c654 +def idle_func(): + while gtk.events_pending(): + gtk.main_iteration() -+ ++ +class semanagePage: + def __init__(self, xml, name, description): + self.xml = xml @@ -8667,14 +7496,14 @@ index 0000000..110c654 + def wait(self): + self.window.set_cursor(self.busy_cursor) + idle_func() -+ ++ + def ready(self): + self.window.set_cursor(self.ready_cursor) + idle_func() -+ ++ + def get_description(self): -+ return self.description -+ ++ return self.description ++ + def itemSelected(self, args): + return + @@ -8682,7 +7511,7 @@ index 0000000..110c654 + filter = arg[0].get_text() + if filter != self.filter: + self.load(filter) -+ ++ + def search(self, model, col, key, i): + sort_col = self.store.get_sort_column_id()[0] + val = model.get_value(i,sort_col) @@ -8727,10 +7556,10 @@ index 0000000..110c654 + store, iter = self.view.get_selection().get_selected() + if self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(iter, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES: + self.delete() -+ ++ + def use_menus(self): + return True -+ ++ + def addDialog(self): + self.dialogClear() + self.dialog.set_title(_("Add %s" % self.description)) @@ -8757,7 +7586,7 @@ index 0000000..110c654 + except ValueError, e: + self.error(e.args[0]) + self.dialog.hide() -+ ++ + def on_local_clicked(self, button): + self.local = not self.local + if self.local: @@ -8767,13 +7596,12 @@ index 0000000..110c654 + + self.load(self.filter) + return True -+ diff --git a/policycoreutils/gui/statusPage.py b/policycoreutils/gui/statusPage.py new file mode 100644 -index 0000000..fd6ef4f +index 0000000..e561de1 --- /dev/null +++ b/policycoreutils/gui/statusPage.py -@@ -0,0 +1,190 @@ +@@ -0,0 +1,188 @@ +# statusPage.py - show selinux status +## Copyright (C) 2006-2009 Red Hat, Inc. + @@ -8814,7 +7642,7 @@ index 0000000..fd6ef4f + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -8862,10 +7690,10 @@ index 0000000..fd6ef4f + self.selinuxTypeOptionMenu.connect("changed", self.typemenu_changed) + + self.typeLabel.set_mnemonic_widget(self.selinuxTypeOptionMenu) -+ ++ + def use_menus(self): + return False -+ ++ + def get_description(self): + return _("Status") + @@ -8914,7 +7742,7 @@ index 0000000..fd6ef4f + + self.write_selinux_config(modearray[enabled], type ) + self.typeHistory = menu.get_active() -+ ++ + def enabled_changed(self, combo): + enabled = combo.get_active() + type = self.get_type() @@ -8962,8 +7790,6 @@ index 0000000..fd6ef4f + + def get_type(self): + return self.types[self.selinuxTypeOptionMenu.get_active()] -+ -+ diff --git a/policycoreutils/gui/system-config-selinux.glade b/policycoreutils/gui/system-config-selinux.glade new file mode 100644 index 0000000..05a697e @@ -11977,7 +10803,7 @@ index 0000000..05a697e + diff --git a/policycoreutils/gui/system-config-selinux.py b/policycoreutils/gui/system-config-selinux.py new file mode 100644 -index 0000000..f080dd9 +index 0000000..85e8b7f --- /dev/null +++ b/policycoreutils/gui/system-config-selinux.py @@ -0,0 +1,187 @@ @@ -12022,7 +10848,7 @@ index 0000000..f080dd9 +import selinux +## +## I18N -+## ++## +PROGNAME="policycoreutils" + +import gettext @@ -12095,12 +10921,12 @@ index 0000000..f080dd9 + + def add_page(self, page): + self.tabs.append(page) -+ ++ + def policy(self, args): + os.spawnl(os.P_NOWAIT, "/usr/share/system-config-selinux/semanagegui.py") + def logging(self, args): + os.spawnl(os.P_NOWAIT, "/usr/bin/seaudit") -+ ++ + def delete(self, args): + self.tabs[self.notebook.get_current_page()].deleteDialog() + @@ -12134,7 +10960,7 @@ index 0000000..f080dd9 + else: + self.notebook.set_current_page(0) + self.use_menus(self.tabs[0].use_menus()) -+ ++ + + def setupScreen(self): + # Bring in widgets from glade file. @@ -12170,10 +10996,10 @@ index 0000000..f080dd9 + app.stand_alone() diff --git a/policycoreutils/gui/templates/__init__.py b/policycoreutils/gui/templates/__init__.py new file mode 100644 -index 0000000..683666f +index 0000000..156a0bd --- /dev/null +++ b/policycoreutils/gui/templates/__init__.py -@@ -0,0 +1,18 @@ +@@ -0,0 +1,17 @@ +# +# Copyright (C) 2007-2012 Red Hat +# @@ -12191,13 +11017,12 @@ index 0000000..683666f +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# -+ diff --git a/policycoreutils/gui/templates/boolean.py b/policycoreutils/gui/templates/boolean.py new file mode 100644 -index 0000000..f7af4d8 +index 0000000..f57d927 --- /dev/null +++ b/policycoreutils/gui/templates/boolean.py -@@ -0,0 +1,40 @@ +@@ -0,0 +1,39 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -12237,13 +11062,12 @@ index 0000000..f7af4d8 +#FALSE +') +""" -+ diff --git a/policycoreutils/gui/templates/etc_rw.py b/policycoreutils/gui/templates/etc_rw.py new file mode 100644 -index 0000000..1cea8b1 +index 0000000..dcf445e --- /dev/null +++ b/policycoreutils/gui/templates/etc_rw.py -@@ -0,0 +1,138 @@ +@@ -0,0 +1,139 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -12275,12 +11099,13 @@ index 0000000..1cea8b1 +te_rules=""" +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_etc_rw_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_etc_rw_t) -+files_etc_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, { dir file }) ++manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_etc_rw_t) ++files_etc_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, { dir file lnk_file }) +""" + +te_stream_rules=""" -+allow TEMPLATETYPE_t TEMPLATETYPE_etc_rw_t:sock_file manage_sock_file_perms; -+files_pid_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, sock_file) ++manage_sock_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_etc_rw_t) ++files_etc_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t, sock_file) +""" + +########################### Interface File ############################# @@ -12319,8 +11144,8 @@ index 0000000..1cea8b1 + type TEMPLATETYPE_etc_rw_t; + ') + -+ allow $1 TEMPLATETYPE_etc_rw_t:file read_file_perms; + allow $1 TEMPLATETYPE_etc_rw_t:dir list_dir_perms; ++ read_files_pattern($1, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_etc_rw_t) + files_search_etc($1) +') + @@ -12361,7 +11186,7 @@ index 0000000..1cea8b1 + type TEMPLATETYPE_t, TEMPLATETYPE_etc_rw_t; + ') + -+ files_search_pids($1) ++ files_search_etc($1) + stream_connect_pattern($1, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_etc_rw_t, TEMPLATETYPE_t) +') +""" @@ -12384,7 +11209,7 @@ index 0000000..1cea8b1 +""" diff --git a/policycoreutils/gui/templates/executable.py b/policycoreutils/gui/templates/executable.py new file mode 100644 -index 0000000..5b39d77 +index 0000000..51444a5 --- /dev/null +++ b/policycoreutils/gui/templates/executable.py @@ -0,0 +1,445 @@ @@ -12671,7 +11496,7 @@ index 0000000..5b39d77 + TEMPLATETYPE_domtrans($2) + + ps_process_pattern($2, TEMPLATETYPE_t) -+ allow $2 TEMPLATETYPE_t:process signal; ++ allow $2 TEMPLATETYPE_t:process { signull signal sigkill }; +') +""" + @@ -12835,10 +11660,10 @@ index 0000000..5b39d77 +""" diff --git a/policycoreutils/gui/templates/network.py b/policycoreutils/gui/templates/network.py new file mode 100644 -index 0000000..6a3d445 +index 0000000..679d0a5 --- /dev/null +++ b/policycoreutils/gui/templates/network.py -@@ -0,0 +1,102 @@ +@@ -0,0 +1,101 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -12940,13 +11765,12 @@ index 0000000..6a3d445 +te_in_unreserved_ports_udp="""\ +corenet_udp_bind_all_unreserved_ports(TEMPLATETYPE_t) +""" -+ diff --git a/policycoreutils/gui/templates/rw.py b/policycoreutils/gui/templates/rw.py new file mode 100644 -index 0000000..5dfc42f +index 0000000..143f56a --- /dev/null +++ b/policycoreutils/gui/templates/rw.py -@@ -0,0 +1,129 @@ +@@ -0,0 +1,154 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -12978,6 +11802,7 @@ index 0000000..5dfc42f +te_rules=""" +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_rw_t, TEMPLATETYPE_rw_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_rw_t, TEMPLATETYPE_rw_t) ++manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_rw_t, TEMPLATETYPE_rw_t) +""" + +########################### Interface File ############################# @@ -13016,7 +11841,7 @@ index 0000000..5dfc42f + type TEMPLATETYPE_rw_t; + ') + -+ allow $1 TEMPLATETYPE_rw_t:file read_file_perms; ++ read_files_pattern($1, TEMPLATETYPE_rw_t, TEMPLATETYPE_rw_t) + allow $1 TEMPLATETYPE_rw_t:dir list_dir_perms; + files_search_rw($1) +') @@ -13060,6 +11885,30 @@ index 0000000..5dfc42f + +""" + ++te_stream_rules=""" ++manage_sock_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_rw_t, TEMPLATETYPE_rw_t) ++""" ++ ++if_stream_rules="""\ ++######################################## ++##

++## Connect to TEMPLATETYPE over a unix stream socket. ++## ++## ++## ++## Domain allowed access. ++## ++## ++# ++interface(`TEMPLATETYPE_stream_connect',` ++ gen_require(` ++ type TEMPLATETYPE_t, TEMPLATETYPE_rw_t; ++ ') ++ ++ stream_connect_pattern($1, TEMPLATETYPE_rw_t, TEMPLATETYPE_rw_t, TEMPLATETYPE_t) ++') ++""" ++ +if_admin_types=""" + type TEMPLATETYPE_rw_t;""" + @@ -13210,10 +12059,10 @@ index 0000000..79240ec +""" diff --git a/policycoreutils/gui/templates/semodule.py b/policycoreutils/gui/templates/semodule.py new file mode 100644 -index 0000000..194fb2c +index 0000000..f77e50e --- /dev/null +++ b/policycoreutils/gui/templates/semodule.py -@@ -0,0 +1,41 @@ +@@ -0,0 +1,40 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -13231,10 +12080,10 @@ index 0000000..194fb2c +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software -+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA +# -+# ++# + +########################### tmp Template File ############################# +compile=""" @@ -13254,13 +12103,12 @@ index 0000000..194fb2c +udp_ports=""" +semanage ports -a -t TEMPLATETYPE_port_t -p udp PORTNUM +""" -+ diff --git a/policycoreutils/gui/templates/tmp.py b/policycoreutils/gui/templates/tmp.py new file mode 100644 -index 0000000..33d4340 +index 0000000..c000a75 --- /dev/null +++ b/policycoreutils/gui/templates/tmp.py -@@ -0,0 +1,128 @@ +@@ -0,0 +1,129 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -13292,12 +12140,13 @@ index 0000000..33d4340 +te_rules=""" +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, TEMPLATETYPE_tmp_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, TEMPLATETYPE_tmp_t) -+files_tmp_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, { dir file }) ++manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, TEMPLATETYPE_tmp_t) ++files_tmp_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, { dir file lnk_file }) +""" + +te_stream_rules=""" -+allow TEMPLATETYPE_t TEMPLATETYPE_tmp_t:sock_file manage_sock_file_perms; -+files_pid_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, sock_file) ++manage_sock_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, TEMPLATETYPE_tmp_t) ++files_tmp_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_tmp_t, sock_file) +""" + +if_rules=""" @@ -13336,7 +12185,7 @@ index 0000000..33d4340 + ') + + files_search_tmp($1) -+ allow $1 TEMPLATETYPE_tmp_t:file read_file_perms; ++ read_files_pattern($1, TEMPLATETYPE_tmp_t, TEMPLATETYPE_tmp_t) +') + +######################################## @@ -13679,10 +12528,10 @@ index 0000000..398c6f2 +""" diff --git a/policycoreutils/gui/templates/var_cache.py b/policycoreutils/gui/templates/var_cache.py new file mode 100644 -index 0000000..8efc1d9 +index 0000000..3789723 --- /dev/null +++ b/policycoreutils/gui/templates/var_cache.py -@@ -0,0 +1,132 @@ +@@ -0,0 +1,157 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -13715,7 +12564,12 @@ index 0000000..8efc1d9 +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, TEMPLATETYPE_cache_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, TEMPLATETYPE_cache_t) +manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, TEMPLATETYPE_cache_t) -+files_var_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, { dir file }) ++files_var_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, { dir file lnk_file }) ++""" ++ ++te_stream_rules="""\ ++manage_sock_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, TEMPLATETYPE_cache_t) ++files_var_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_cache_t, sock_file) +""" + +########################### Interface File ############################# @@ -13799,6 +12653,26 @@ index 0000000..8efc1d9 + +""" + ++if_stream_rules=""" ++######################################## ++## ++## Connect to TEMPLATETYPE over a unix stream socket. ++## ++## ++## ++## Domain allowed access. ++## ++## ++# ++interface(`TEMPLATETYPE_stream_connect',` ++ gen_require(` ++ type TEMPLATETYPE_t, TEMPLATETYPE_cache_t; ++ ') ++ ++ stream_connect_pattern($1, TEMPLATETYPE_cache_t, TEMPLATETYPE_cache_t) ++') ++""" ++ +if_admin_types=""" + type TEMPLATETYPE_cache_t;""" + @@ -13817,10 +12691,10 @@ index 0000000..8efc1d9 +""" diff --git a/policycoreutils/gui/templates/var_lib.py b/policycoreutils/gui/templates/var_lib.py new file mode 100644 -index 0000000..8bde8c6 +index 0000000..148c13e --- /dev/null +++ b/policycoreutils/gui/templates/var_lib.py -@@ -0,0 +1,160 @@ +@@ -0,0 +1,161 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -13852,11 +12726,12 @@ index 0000000..8bde8c6 +te_rules=""" +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, TEMPLATETYPE_var_lib_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, TEMPLATETYPE_var_lib_t) -+files_var_lib_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, { dir file }) ++manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, TEMPLATETYPE_var_lib_t) ++files_var_lib_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, { dir file lnk_file }) +""" + +te_stream_rules="""\ -+allow TEMPLATETYPE_t TEMPLATETYPE_var_lib_t:sock_file manage_sock_file_perms; ++manage_sock_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, TEMPLATETYPE_var_lib_t) +files_var_lib_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_var_lib_t, sock_file) +""" + @@ -13983,10 +12858,10 @@ index 0000000..8bde8c6 +""" diff --git a/policycoreutils/gui/templates/var_log.py b/policycoreutils/gui/templates/var_log.py new file mode 100644 -index 0000000..b57b93d +index 0000000..371dd7e --- /dev/null +++ b/policycoreutils/gui/templates/var_log.py -@@ -0,0 +1,114 @@ +@@ -0,0 +1,115 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -14019,7 +12894,8 @@ index 0000000..b57b93d +te_rules=""" +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_log_t, TEMPLATETYPE_log_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_log_t, TEMPLATETYPE_log_t) -+logging_log_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_log_t, { dir file }) ++manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_log_t, TEMPLATETYPE_log_t) ++logging_log_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_log_t, { dir file lnk_file }) +""" + +########################### Interface File ############################# @@ -14103,10 +12979,10 @@ index 0000000..b57b93d +""" diff --git a/policycoreutils/gui/templates/var_run.py b/policycoreutils/gui/templates/var_run.py new file mode 100644 -index 0000000..916f44c +index 0000000..563eebb --- /dev/null +++ b/policycoreutils/gui/templates/var_run.py -@@ -0,0 +1,101 @@ +@@ -0,0 +1,102 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -14138,11 +13014,12 @@ index 0000000..916f44c +te_rules=""" +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, TEMPLATETYPE_var_run_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, TEMPLATETYPE_var_run_t) -+files_pid_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, { dir file }) ++manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, TEMPLATETYPE_var_run_t) ++files_pid_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, { dir file lnk_file }) +""" + +te_stream_rules=""" -+allow TEMPLATETYPE_t TEMPLATETYPE_var_run_t:sock_file manage_sock_file_perms; ++manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, TEMPLATETYPE_var_run_t) +files_pid_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_var_run_t, sock_file) +""" + @@ -14163,7 +13040,7 @@ index 0000000..916f44c + ') + + files_search_pids($1) -+ allow $1 TEMPLATETYPE_var_run_t:file read_file_perms; ++ read_files_pattern($1, TEMPLATETYPE_var_run_t, TEMPLATETYPE_var_run_t) +') + +""" @@ -14210,10 +13087,10 @@ index 0000000..916f44c +""" diff --git a/policycoreutils/gui/templates/var_spool.py b/policycoreutils/gui/templates/var_spool.py new file mode 100644 -index 0000000..8055a9e +index 0000000..dccb5f1 --- /dev/null +++ b/policycoreutils/gui/templates/var_spool.py -@@ -0,0 +1,131 @@ +@@ -0,0 +1,156 @@ +# Copyright (C) 2007-2012 Red Hat +# see file 'COPYING' for use and warranty information +# @@ -14246,7 +13123,12 @@ index 0000000..8055a9e +manage_dirs_pattern(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, TEMPLATETYPE_spool_t) +manage_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, TEMPLATETYPE_spool_t) +manage_lnk_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, TEMPLATETYPE_spool_t) -+files_spool_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, { dir file }) ++files_spool_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, { dir file lnk_file }) ++""" ++ ++te_stream_rules="""\ ++manage_sock_files_pattern(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, TEMPLATETYPE_spool_t) ++files_spool_filetrans(TEMPLATETYPE_t, TEMPLATETYPE_spool_t, sock_file) +""" + +########################### Interface File ############################# @@ -14329,6 +13211,26 @@ index 0000000..8055a9e + +""" + ++if_stream_rules=""" ++######################################## ++## ++## Connect to TEMPLATETYPE over a unix stream socket. ++## ++## ++## ++## Domain allowed access. ++## ++## ++# ++interface(`TEMPLATETYPE_stream_connect',` ++ gen_require(` ++ type TEMPLATETYPE_t, TEMPLATETYPE_spool_t; ++ ') ++ ++ stream_connect_pattern($1, TEMPLATETYPE_spool_t, TEMPLATETYPE_spool_t) ++') ++""" ++ +if_admin_types=""" + type TEMPLATETYPE_spool_t;""" + @@ -14347,10 +13249,10 @@ index 0000000..8055a9e +""" diff --git a/policycoreutils/gui/usersPage.py b/policycoreutils/gui/usersPage.py new file mode 100644 -index 0000000..17c99df +index 0000000..93804ac --- /dev/null +++ b/policycoreutils/gui/usersPage.py -@@ -0,0 +1,150 @@ +@@ -0,0 +1,149 @@ +## usersPage.py - show selinux mappings +## Copyright (C) 2006,2007,2008 Red Hat, Inc. + @@ -14381,7 +13283,7 @@ index 0000000..17c99df + +## +## I18N -+## ++## +PROGNAME="policycoreutils" +import gettext +gettext.bindtextdomain(PROGNAME, "/usr/share/locale") @@ -14398,7 +13300,7 @@ index 0000000..17c99df + + 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.SORT_ASCENDING) + + col = gtk.TreeViewColumn(_("SELinux\nUser"), gtk.CellRendererText(), text = 0) + col.set_sort_column_id(0) @@ -14419,7 +13321,7 @@ index 0000000..17c99df + self.selinuxRolesEntry = xml.get_widget("selinuxRolesEntry") + + def load(self, filter = ""): -+ self.filter=filter ++ self.filter=filter + self.user = seobject.seluserRecords() + dict = self.user.get_all() + keys = dict.keys() @@ -14429,7 +13331,7 @@ index 0000000..17c99df + range = seobject.translate(dict[k][2]) + if not (self.match(k, filter) or self.match(dict[k][0], filter) or self.match(range, filter) or self.match(dict[k][3], filter)): + continue -+ ++ + iter = self.store.append() + self.store.set_value(iter, 0, k) + self.store.set_value(iter, 1, range) @@ -14446,13 +13348,13 @@ index 0000000..17c99df + self.selinuxUserEntry.set_sensitive(False) + self.mlsRangeEntry.set_text(store.get_value(iter, 1)) + self.selinuxRolesEntry.set_text(store.get_value(iter, 2)) -+ ++ + def dialogClear(self): + self.selinuxUserEntry.set_text("") + self.selinuxUserEntry.set_sensitive(True) + self.mlsRangeEntry.set_text("s0") + self.selinuxRolesEntry.set_text("") -+ ++ + def add(self): + user = self.selinuxUserEntry.get_text() + range = self.mlsRangeEntry.get_text() @@ -14468,7 +13370,7 @@ index 0000000..17c99df + self.store.set_value(iter, 0, user) + self.store.set_value(iter, 1, range) + self.store.set_value(iter, 2, roles) -+ ++ + def modify(self): + user = self.selinuxUserEntry.get_text() + range = self.mlsRangeEntry.get_text() @@ -14489,7 +13391,7 @@ index 0000000..17c99df + user=store.get_value(iter, 0) + if user == "root" or user == "user_u": + raise ValueError(_("SELinux user '%s' is required") % user) -+ ++ + self.wait() + (rc, out) = commands.getstatusoutput("semanage user -d %s" % user) + self.ready() @@ -14500,107 +13402,6 @@ index 0000000..17c99df + self.view.get_selection().select_path ((0,)) + except ValueError, e: + self.error(e.args[0]) -+ -diff --git a/policycoreutils/load_policy/Makefile b/policycoreutils/load_policy/Makefile -index 5da2e0d..0e9d66f 100644 ---- a/policycoreutils/load_policy/Makefile -+++ b/policycoreutils/load_policy/Makefile -@@ -19,7 +19,7 @@ install: all - test -d $(MANDIR)/man8 || install -m 755 -d $(MANDIR)/man8 - install -m 644 load_policy.8 $(MANDIR)/man8/ - -mkdir -p $(USRSBINDIR) -- -ln -sf /sbin/load_policy $(USRSBINDIR)/load_policy -+ -ln -s /sbin/load_policy $(USRSBINDIR)/load_policy - - clean: - -rm -f $(TARGETS) *.o -diff --git a/policycoreutils/mcstrans/man/man8/mcstransd.8 b/policycoreutils/mcstrans/man/man8/mcstransd.8 -index 4c63965..718fd85 100644 ---- a/policycoreutils/mcstrans/man/man8/mcstransd.8 -+++ b/policycoreutils/mcstrans/man/man8/mcstransd.8 -@@ -3,7 +3,7 @@ - mcstransd \- MCS (Multiple Category System) daemon. Translates SELinux MCS/MLS labels to human readable form. - - .SH "SYNOPSIS" --.B mcstransd -+.B mcstransd [-f] [-h] - .P - - .SH "DESCRIPTION" -@@ -12,6 +12,13 @@ This manual page describes the - program. - .P - This daemon reads /etc/selinux/{SELINUXTYPE}/setrans.conf configuration file, and communicates with libselinux via a socket in /var/run/setrans. -+.SH "OPTIONS" -+.TP -+-f -+Run mcstransd in the foreground. Do not run as a daemon. -+.TP -+-h -+Output a short summary of available command line options\&. - - .SH "AUTHOR" - This man page was written by Dan Walsh . -diff --git a/policycoreutils/mcstrans/src/mcstransd.c b/policycoreutils/mcstrans/src/mcstransd.c -index 26d9be8..a65076d 100644 ---- a/policycoreutils/mcstrans/src/mcstransd.c -+++ b/policycoreutils/mcstrans/src/mcstransd.c -@@ -1,5 +1,4 @@ - /* Copyright (c) 2006 Trusted Computer Solutions, Inc. */ -- - #include - #include - #include -@@ -13,6 +12,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -556,9 +556,31 @@ void dropprivs(void) - cap_free(new_caps); - } - -+static void usage(char *program) -+{ -+ printf("%s [-f] [-h] \n", program); -+} -+ - int --main(int UNUSED(argc), char *argv[]) -+main(int argc, char *argv[]) - { -+ int opt; -+ int do_fork = 1; -+ while ((opt = getopt(argc, argv, "hf")) > 0) { -+ switch (opt) { -+ case 'f': -+ do_fork = 0; -+ break; -+ case 'h': -+ usage(argv[0]); -+ exit(0); -+ break; -+ case '?': -+ usage(argv[0]); -+ exit(-1); -+ } -+ } -+ - #ifndef DEBUG - /* Make sure we are root */ - if (getuid() != 0) { -@@ -576,7 +598,7 @@ main(int UNUSED(argc), char *argv[]) - dropprivs(); - - /* run in the background as a daemon */ -- if (daemon(0, 0)) { -+ if (do_fork && daemon(0, 0)) { - syslog(LOG_ERR, "daemon() failed: %m"); - cleanup_exit(1); - } diff --git a/policycoreutils/newrole/newrole.c b/policycoreutils/newrole/newrole.c index 42f08d0..989817b 100644 --- a/policycoreutils/newrole/newrole.c @@ -14637,10 +13438,23 @@ index 42f08d0..989817b 100644 return -1; diff --git a/policycoreutils/po/Makefile b/policycoreutils/po/Makefile -index a52e4b0..1b8c8c0 100644 +index a52e4b0..5278a6e 100644 --- a/policycoreutils/po/Makefile +++ b/policycoreutils/po/Makefile -@@ -45,7 +45,34 @@ POTFILES = \ +@@ -15,9 +15,10 @@ INSTALL_DIR = /usr/bin/install -d + INSTALL_NLS_DIR = $(DESTDIR)/usr/share/locale + + # PO catalog handling +-MSGMERGE = msgmerge -v ++MSGMERGE = msgmerge ++MSGMERGE_FLAGS = -q + XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) +-MSGFMT = msgfmt --statistics --verbose ++MSGFMT = msgfmt + + # What do we need to do + POFILES = $(wildcard *.po) +@@ -45,7 +46,34 @@ POTFILES = \ ../restorecond/stringslist.h \ ../restorecond/restorecond.c \ ../restorecond/utmpwatcher.c \ @@ -14676,6 +13490,15 @@ index a52e4b0..1b8c8c0 100644 #default:: clean +@@ -64,7 +92,7 @@ update-po: Makefile $(POTFILE) refresh-po + refresh-po: Makefile + for cat in $(POFILES); do \ + lang=`basename $$cat .po`; \ +- if $(MSGMERGE) $$lang.po $(POTFILE) > $$lang.pot ; then \ ++ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ + mv -f $$lang.pot $$lang.po ; \ + echo "$(MSGMERGE) of $$lang succeeded" ; \ + else \ diff --git a/policycoreutils/po/POTFILES b/policycoreutils/po/POTFILES index 7d9ad7d..667e394 100644 --- a/policycoreutils/po/POTFILES @@ -14770,7 +13593,7 @@ index 0cbf0a9..aab1a4e 100644 gui/templates/executable.py gui/templates/__init__.py diff --git a/policycoreutils/po/af.po b/policycoreutils/po/af.po -index afeaa9f..edb1026 100644 +index afeaa9f..a4478db 100644 --- a/policycoreutils/po/af.po +++ b/policycoreutils/po/af.po @@ -8,7 +8,7 @@ msgid "" @@ -14778,7 +13601,7 @@ index afeaa9f..edb1026 100644 "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15846,15 +14669,15 @@ index afeaa9f..edb1026 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -17927,7 +16750,7 @@ index afeaa9f..edb1026 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/am.po b/policycoreutils/po/am.po -index afeaa9f..edb1026 100644 +index afeaa9f..a4478db 100644 --- a/policycoreutils/po/am.po +++ b/policycoreutils/po/am.po @@ -8,7 +8,7 @@ msgid "" @@ -17935,7 +16758,7 @@ index afeaa9f..edb1026 100644 "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19003,15 +17826,15 @@ index afeaa9f..edb1026 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -21084,7 +19907,7 @@ index afeaa9f..edb1026 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/ar.po b/policycoreutils/po/ar.po -index afeaa9f..0ba98f2 100644 +index afeaa9f..b908f48 100644 --- a/policycoreutils/po/ar.po +++ b/policycoreutils/po/ar.po @@ -1,21 +1,27 @@ @@ -21110,7 +19933,7 @@ index afeaa9f..0ba98f2 100644 -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Arabic \n" @@ -22826,15 +21649,15 @@ index afeaa9f..0ba98f2 100644 msgid "Options Error %s " +msgstr "خطأ في الخيارات %s " + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -24907,7 +23730,7 @@ index afeaa9f..0ba98f2 100644 +msgid "SELinux user '%s' is required" msgstr "" diff --git a/policycoreutils/po/as.po b/policycoreutils/po/as.po -index ca9950d..d78941a 100644 +index ca9950d..b14b757 100644 --- a/policycoreutils/po/as.po +++ b/policycoreutils/po/as.po @@ -1,24 +1,25 @@ @@ -24932,7 +23755,7 @@ index ca9950d..d78941a 100644 -"Last-Translator: Amitakhya Phukan \n" -"Language-Team: Assamese\n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Assamese (http://www.transifex.net/projects/p/fedora/language/" @@ -26258,19 +25081,19 @@ index ca9950d..d78941a 100644 - -#~ msgid "Level" -#~ msgstr "স্তৰ" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" -#~ msgid "Translation" -#~ msgstr "অনুবাদ" -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" -#~ msgid "Translations can not contain spaces '%s' " -#~ msgstr "অনুবাদত শূণ্যস্থান ব্যৱহাৰ কৰা নাযাব '%s' " -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -29485,7 +28308,7 @@ index ca9950d..d78941a 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/be.po b/policycoreutils/po/be.po -index afeaa9f..edb1026 100644 +index afeaa9f..a4478db 100644 --- a/policycoreutils/po/be.po +++ b/policycoreutils/po/be.po @@ -8,7 +8,7 @@ msgid "" @@ -29493,7 +28316,7 @@ index afeaa9f..edb1026 100644 "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -30561,15 +29384,15 @@ index afeaa9f..edb1026 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -32642,7 +31465,7 @@ index afeaa9f..edb1026 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/bg.po b/policycoreutils/po/bg.po -index 6d4a7cd..7c677ba 100644 +index 6d4a7cd..be5b031 100644 --- a/policycoreutils/po/bg.po +++ b/policycoreutils/po/bg.po @@ -1,21 +1,24 @@ @@ -32666,7 +31489,7 @@ index 6d4a7cd..7c677ba 100644 -"PO-Revision-Date: 2008-03-10 21:37+0100\n" -"Last-Translator: Alexander Todorov \n" -"Language-Team: Bulgarian \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-19 14:28+0000\n" +"Last-Translator: Valentin Laskov \n" +"Language-Team: Bulgarian \n" @@ -34255,15 +33078,15 @@ index 6d4a7cd..7c677ba 100644 -#~ msgid "" -#~ "Unable to open %s: translations not supported on non-MLS machines: %s" -#~ msgstr "Не може да се отвори %s: не се поддържат преводи на машини без MLS" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "Булева" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "всички" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -38258,7 +37081,7 @@ index 6d4a7cd..7c677ba 100644 +msgid "SELinux user '%s' is required" +msgstr "Изисква се SELinux потребител '%s'" diff --git a/policycoreutils/po/bn.po b/policycoreutils/po/bn.po -index afeaa9f..d0c8c59 100644 +index afeaa9f..a8b7065 100644 --- a/policycoreutils/po/bn.po +++ b/policycoreutils/po/bn.po @@ -1,21 +1,21 @@ @@ -38276,7 +37099,7 @@ index afeaa9f..d0c8c59 100644 "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-03-30 18:14+0000\n" "Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" @@ -39354,15 +38177,15 @@ index afeaa9f..d0c8c59 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -41435,7 +40258,7 @@ index afeaa9f..d0c8c59 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/bn_IN.po b/policycoreutils/po/bn_IN.po -index a791a3d..5746653 100644 +index a791a3d..d902482 100644 --- a/policycoreutils/po/bn_IN.po +++ b/policycoreutils/po/bn_IN.po @@ -1,26 +1,24 @@ @@ -41461,7 +40284,7 @@ index a791a3d..5746653 100644 -"Last-Translator: Runa Bhattacharjee \n" -"Language-Team: Bengali INDIA \n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Bengali (India) \n" @@ -42623,19 +41446,19 @@ index a791a3d..5746653 100644 -#~ msgid "" -#~ "Unable to open %s: translations not supported on non-MLS machines: %s" -#~ msgstr "%s খুলতে ব্যর্থ: MLS-বিহীন মেশিনে অনুবাদ সমর্থন করা হয় না: %s" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" -#~ msgid "Level" -#~ msgstr "স্তর" -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" -#~ msgid "Translation" -#~ msgstr "অনুবাদ" -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -45974,7 +44797,7 @@ index a791a3d..5746653 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/bs.po b/policycoreutils/po/bs.po -index 6430d38..2b489ba 100644 +index 6430d38..21cec15 100644 --- a/policycoreutils/po/bs.po +++ b/policycoreutils/po/bs.po @@ -1,20 +1,24 @@ @@ -45994,7 +44817,7 @@ index 6430d38..2b489ba 100644 -"PO-Revision-Date: 2007-01-23 16:51+0100\n" -"Last-Translator: Adnan Hodzic \n" -"Language-Team: Bosnian \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Bosnian (http://www.transifex.net/projects/p/fedora/language/" @@ -47198,15 +46021,15 @@ index 6430d38..2b489ba 100644 -#~ "Unable to open %s: translations not supported on non-MLS machines: %s" -#~ msgstr "" -#~ "Otvaranje %s nije moguće: Prijevodi nisu podržani na ne-MLS računalima" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -49403,7 +48226,7 @@ index 6430d38..2b489ba 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/ca.po b/policycoreutils/po/ca.po -index c676726..5f90f47 100644 +index c676726..00765c6 100644 --- a/policycoreutils/po/ca.po +++ b/policycoreutils/po/ca.po @@ -1,35 +1,24 @@ @@ -49442,7 +48265,7 @@ index c676726..5f90f47 100644 -"PO-Revision-Date: 2006-12-03 01:04+0100\n" -"Last-Translator: Xavier Conde Rueda \n" -"Language-Team: Catalan \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Catalan \n" @@ -50739,15 +49562,15 @@ index c676726..5f90f47 100644 -#~ msgstr "" -#~ "No s'ha pogut obrir %s: les traduccions no estan suportades a màquines " -#~ "sense MLS" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -52958,7 +51781,7 @@ index c676726..5f90f47 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/cs.po b/policycoreutils/po/cs.po -index 64bc3b6..13d0628 100644 +index 64bc3b6..be69117 100644 --- a/policycoreutils/po/cs.po +++ b/policycoreutils/po/cs.po @@ -1,25 +1,26 @@ @@ -52984,7 +51807,7 @@ index 64bc3b6..13d0628 100644 -"PO-Revision-Date: 2008-03-03 05:55+0100\n" -"Last-Translator: Miloslav Trmač \n" -"Language-Team: Czech \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Czech (http://www.transifex.net/projects/p/fedora/language/" @@ -54324,21 +53147,21 @@ index 64bc3b6..13d0628 100644 -#, fuzzy -#~ msgid "Level" -#~ msgstr "RAID Level:" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" -#, fuzzy -#~ msgid "Translation" -#~ msgstr "Virtualizace" -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" -#, fuzzy -#~ msgid "Translations can not contain spaces '%s' " -#~ msgstr "Instalace nemůže pokračovat." -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -61846,7 +60669,7 @@ index 64bc3b6..13d0628 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/cy.po b/policycoreutils/po/cy.po -index afeaa9f..edb1026 100644 +index afeaa9f..a4478db 100644 --- a/policycoreutils/po/cy.po +++ b/policycoreutils/po/cy.po @@ -8,7 +8,7 @@ msgid "" @@ -61854,7 +60677,7 @@ index afeaa9f..edb1026 100644 "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -62922,15 +61745,15 @@ index afeaa9f..edb1026 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -65003,7 +63826,7 @@ index afeaa9f..edb1026 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/da.po b/policycoreutils/po/da.po -index 7dc47b5..5598c00 100644 +index 7dc47b5..e94670d 100644 --- a/policycoreutils/po/da.po +++ b/policycoreutils/po/da.po @@ -1,25 +1,25 @@ @@ -65031,7 +63854,7 @@ index 7dc47b5..5598c00 100644 -"Last-Translator: Keld Simonsen \n" -"Language-Team: \n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Danish \n" @@ -66634,15 +65457,15 @@ index 7dc47b5..5598c00 100644 -msgstr "Flagfejl %s " +msgstr "Tilvalgsfejl %s " + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -68845,7 +67668,7 @@ index 7dc47b5..5598c00 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/de.po b/policycoreutils/po/de.po -index 617cac8..b6c94e2 100644 +index 617cac8..0576123 100644 --- a/policycoreutils/po/de.po +++ b/policycoreutils/po/de.po @@ -1,29 +1,30 @@ @@ -68880,7 +67703,7 @@ index 617cac8..b6c94e2 100644 -"PO-Revision-Date: 2008-09-11 10:30+1000\n" -"Last-Translator: Daniela Kugelmann \n" -"Language-Team: German \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-13 08:22+0000\n" +"Last-Translator: Roman Spirgi \n" +"Language-Team: German \n" @@ -70300,19 +69123,19 @@ index 617cac8..b6c94e2 100644 -#~ msgid "Translations can not contain spaces '%s' " -#~ msgstr "Übersetzungen können keine Leerfelder enthalten '%s'" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "Boolean" -#~ msgid "Invalid Level '%s' " -#~ msgstr "Ungültiges Level '%s'" -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "Alle" -#~ msgid "%s already defined in translations" -#~ msgstr "%s ist bereits in Übersetzungen festgelegt" -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -73814,7 +72637,7 @@ index 617cac8..b6c94e2 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/el.po b/policycoreutils/po/el.po -index a86ac32..f96b850 100644 +index a86ac32..5883991 100644 --- a/policycoreutils/po/el.po +++ b/policycoreutils/po/el.po @@ -1,23 +1,25 @@ @@ -73838,7 +72661,7 @@ index a86ac32..f96b850 100644 -"PO-Revision-Date: 2006-09-18 14:49+0100\n" -"Last-Translator: Dimitris Glezos \n" -"Language-Team: Greek \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Greek \n" @@ -75735,15 +74558,15 @@ index a86ac32..f96b850 100644 -#~ msgstr "Σφάλμα πιστοποίησης: %s" +msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -77816,7 +76639,7 @@ index a86ac32..f96b850 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/en_GB.po b/policycoreutils/po/en_GB.po -index 14bb4ad..8e5871b 100644 +index 14bb4ad..ffb15bc 100644 --- a/policycoreutils/po/en_GB.po +++ b/policycoreutils/po/en_GB.po @@ -1,20 +1,25 @@ @@ -77841,7 +76664,7 @@ index 14bb4ad..8e5871b 100644 -"Last-Translator: Abigail Brady \n" -"Language-Team: \n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: English (United Kingdom) (http://www.transifex.net/projects/p/" @@ -79116,15 +77939,15 @@ index 14bb4ad..8e5871b 100644 -#~ msgid "" -#~ "Unable to open %s: translations not supported on non-MLS machines: %s" -#~ msgstr "Unable to open %s: translations not supported on non-MLS machines" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -81321,7 +80144,7 @@ index 14bb4ad..8e5871b 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/es.po b/policycoreutils/po/es.po -index e1fdcd9..7da54ca 100644 +index e1fdcd9..64b0111 100644 --- a/policycoreutils/po/es.po +++ b/policycoreutils/po/es.po @@ -1,23 +1,24 @@ @@ -81346,7 +80169,7 @@ index e1fdcd9..7da54ca 100644 -"PO-Revision-Date: 2008-09-03 08:55-0300\n" -"Last-Translator: Domingo Becker \n" -"Language-Team: Spanish \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-02 20:30+0000\n" +"Last-Translator: dwalsh \n" +"Language-Team: Spanish (Castilian) \n" @@ -82584,19 +81407,19 @@ index e1fdcd9..7da54ca 100644 -#~ "Unable to open %s: translations not supported on non-MLS machines: %s" -#~ msgstr "" -#~ "No se pudo abrir %s: traducciones no soportadas en máquinas no MLS: %s" -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" -#~ msgid "Level" -#~ msgstr "Nivel" -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" -#~ msgid "Translation" -#~ msgstr "Traducción" -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -86169,7 +84992,7 @@ index e1fdcd9..7da54ca 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/eu_ES.po b/policycoreutils/po/eu_ES.po -index afeaa9f..edb1026 100644 +index afeaa9f..a4478db 100644 --- a/policycoreutils/po/eu_ES.po +++ b/policycoreutils/po/eu_ES.po @@ -8,7 +8,7 @@ msgid "" @@ -86177,7 +85000,7 @@ index afeaa9f..edb1026 100644 "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -87245,15 +86068,15 @@ index afeaa9f..edb1026 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -89326,7 +88149,7 @@ index afeaa9f..edb1026 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/fa.po b/policycoreutils/po/fa.po -index afeaa9f..edb1026 100644 +index afeaa9f..a4478db 100644 --- a/policycoreutils/po/fa.po +++ b/policycoreutils/po/fa.po @@ -8,7 +8,7 @@ msgid "" @@ -89334,7 +88157,7 @@ index afeaa9f..edb1026 100644 "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-27 10:49-0400\n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -90402,15 +89225,15 @@ index afeaa9f..edb1026 100644 msgid "Options Error %s " msgstr "" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -92483,7 +91306,7 @@ index afeaa9f..edb1026 100644 +msgid "SELinux user '%s' is required" +msgstr "" diff --git a/policycoreutils/po/fi.po b/policycoreutils/po/fi.po -index afeaa9f..e22fdda 100644 +index afeaa9f..d157817 100644 --- a/policycoreutils/po/fi.po +++ b/policycoreutils/po/fi.po @@ -1,21 +1,24 @@ @@ -92506,7 +91329,7 @@ index afeaa9f..e22fdda 100644 -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" ++"POT-Creation-Date: 2012-05-25 07:28-0400\n" +"PO-Revision-Date: 2012-04-24 04:25+0000\n" +"Last-Translator: Juhani Numminen \n" +"Language-Team: Finnish (http://www.transifex.net/projects/p/fedora/language/" @@ -94232,15 +93055,15 @@ index afeaa9f..e22fdda 100644 msgid "Options Error %s " +msgstr "Valitsinvirhe %s" + -+#: ../gui/booleansPage.py:186 ../gui/system-config-selinux.glade:1706 ++#: ../gui/booleansPage.py:195 ../gui/system-config-selinux.glade:1706 +msgid "Boolean" +msgstr "Totuusarvo" + -+#: ../gui/booleansPage.py:241 ../gui/semanagePage.py:162 ++#: ../gui/booleansPage.py:252 ../gui/semanagePage.py:162 +msgid "all" +msgstr "kaikki" + -+#: ../gui/booleansPage.py:243 ../gui/semanagePage.py:164 ++#: ../gui/booleansPage.py:254 ../gui/semanagePage.py:164 +#: ../gui/system-config-selinux.glade:1615 +#: ../gui/system-config-selinux.glade:1820 +#: ../gui/system-config-selinux.glade:2437 @@ -96313,20 +95136,21 @@ index afeaa9f..e22fdda 100644 +msgid "SELinux user '%s' is required" msgstr "" diff --git a/policycoreutils/po/fr.po b/policycoreutils/po/fr.po -index cea8f18..50ac667 100644 +index cea8f18..204e5fb 100644 --- a/policycoreutils/po/fr.po +++ b/policycoreutils/po/fr.po -@@ -1,23 +1,27 @@ +@@ -1,33 +1,35 @@ -# translation of policycoreutils.HEAD.fr_modifié(1).po to french -# Thomas Canniot , 2006. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. -+# ++# +# Translators: # Alain PORTAL , 2007. +# Charles-Antoine Couret , 2009. # Gauthier Ancelin , 2007. ++# Jérôme Fenal , 2012. # Matthieu Rondeau , 2008. -# translation of Policy Core Utils. -# Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. @@ -96342,20 +95166,39 @@ index cea8f18..50ac667 100644 -"Last-Translator: Matthieu Rondeau \n" -"Language-Team: french \n" -"Language: \n" -+"POT-Creation-Date: 2012-05-17 16:58-0400\n" -+"PO-Revision-Date: 2012-04-02 20:30+0000\n" -+"Last-Translator: dwalsh \n" ++"POT-Creation-Date: 2012-04-02 16:29-0400\n" ++"PO-Revision-Date: 2012-06-09 13:32+0000\n" ++"Last-Translator: Jérôme Fenal \n" +"Language-Team: French \n" -+"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.4\n" ++"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" #: ../run_init/run_init.c:67 msgid "" -@@ -53,7 +57,7 @@ msgstr "" + "USAGE: run_init