[policycoreutils] Update to upstream

Daniel J Walsh dwalsh at fedoraproject.org
Thu Oct 31 18:27:36 UTC 2013


commit 6e2e7ad1d8c424c98ac9a77dc8df9159eaa29925
Author: Dan Walsh <dwalsh at redhat.com>
Date:   Thu Oct 31 14:27:38 2013 -0400

    Update to upstream
    
    	* Properly build the swig exception file from Laurent Bigonville.
    	* Fix man pages from Laurent Bigonville.
    	* Support overriding PATH and INITDIR in Makefile from Laurent Bigonville.
    	* Fix LDFLAGS usage from Laurent Bigonville.
    	* Fix init_policy warning from Laurent Bigonville.
    	* Fix semanage logging from Laurent Bigonville.
    	* Open newrole stdin as read/write from Sven Vermeulen.
    	* Fix sepolicy transition from Sven Vermeulen.
    	* Support overriding CFLAGS from Simon Ruderich.
    	* Create correct man directory for run_init from Russell Coker.
    	* restorecon GLOB_BRACE change from Michal Trunecka.
    	* Extend audit2why to report additional constraint information.
    	* Catch IOError errors within audit2allow from Dan Walsh.
    	* semanage export/import fixes from Dan Walsh.
    	* Improve setfiles progress reporting from Dan Walsh.
    	* Document setfiles -o option in usage from Dan Walsh.
    	* Change setfiles to always return -1 on failure from Dan Walsh.
    	* Improve setsebool error r eporting from Dan Walsh.
    	* Major overhaul of gui from Dan Walsh.
    	* Fix sepolicy handling of non-MLS policy from Dan Walsh.
    	* Support returning type aliases from Dan Walsh.
    	* Add sepolicy tests from Dan Walsh.
    	* Add org.selinux.config.policy from Dan Walsh.
    	* Improve range and user input checking by semanage from Dan Walsh.
    	* Prevent source or target arguments that end with / for substitutions from Dan Walsh.
    	* Allow use of <<none>> for semanage fcontext from Dan Walsh.
            * Report customized user levels from Dan Walsh.
    	* Support deleteall for restoring disabled modules from Dan Walsh.
    	* Improve semanage error reporting from Dan Walsh.
    	* Only list disabled modules for module locallist from Dan Walsh.
    	* Fix logging from Dan Walsh.
    	* Define new constants for file type character codes from Dan Walsh.
    	* Improve bash completions from Dan Walsh.
    	* Convert semanage to argparse from Dan Walsh (originally by Dave Quigley).
    	* Add semanage tests from Dan Walsh.
    	* Split semanage man pages from Dan Walsh.
    	* Move bash completion scripts from Dan Walsh.
    	* Replace genhomedircon script with a link to semodule from Dan Walsh.
    	* Fix fixfiles from Dan Walsh.
    	* Add support for systemd service for restorecon from Dan Walsh.
    	* Spelling corrections from Dan Walsh.
    	* Improve sandbox support for home dir symlinks and file caps from Dan Walsh.
    	* Switch sandbox to openbox window manager from Dan Walsh.
    	* Coalesce audit2why and audit2allow from Dan Walsh.
    	* Change audit2allow to append to output file from Dan Walsh.
    	* Update translations from Dan Walsh.
    	* Change audit2why to use selinux_current_policy_path from Dan Walsh.

 policycoreutils-rhat.patch | 1335 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 1122 insertions(+), 213 deletions(-)
---
diff --git a/policycoreutils-rhat.patch b/policycoreutils-rhat.patch
index bbdca42..8badd32 100644
--- a/policycoreutils-rhat.patch
+++ b/policycoreutils-rhat.patch
@@ -1,8 +1,158 @@
+diff --git a/policycoreutils/Makefile b/policycoreutils/Makefile
+index 83ebd45..bea9814 100644
+--- a/policycoreutils/Makefile
++++ b/policycoreutils/Makefile
+@@ -1,4 +1,4 @@
+-SUBDIRS = sepolicy setfiles semanage load_policy newrole run_init sandbox secon audit2allow sestatus semodule_package semodule semodule_link semodule_expand semodule_deps sepolgen-ifgen setsebool scripts po man gui
++SUBDIRS = sepolicy setfiles semanage load_policy newrole run_init sandbox secon audit2allow sestatus semodule_package semodule semodule_link semodule_expand semodule_deps sepolgen-ifgen setsebool scripts po man gui semanage/default_encoding 
+ 
+ INOTIFYH = $(shell ls /usr/include/sys/inotify.h 2>/dev/null)
+ 
+diff --git a/policycoreutils/audit2allow/Makefile b/policycoreutils/audit2allow/Makefile
+index fc290ea..f838b13 100644
+--- a/policycoreutils/audit2allow/Makefile
++++ b/policycoreutils/audit2allow/Makefile
+@@ -4,12 +4,16 @@ BINDIR ?= $(PREFIX)/bin
+ LIBDIR ?= $(PREFIX)/lib
+ MANDIR ?= $(PREFIX)/share/man
+ LOCALEDIR ?= /usr/share/locale
++PYTHON ?= /usr/bin/python
+ 
+ all: audit2why
+ 
+ audit2why:
+ 	ln -sf audit2allow audit2why
+ 
++test: all
++	@$(PYTHON) test_audit2allow.py -v
++
+ install: all
+ 	-mkdir -p $(BINDIR)
+ 	install -m 755 audit2allow $(BINDIR)
+diff --git a/policycoreutils/audit2allow/test.log b/policycoreutils/audit2allow/test.log
+new file mode 100644
+index 0000000..8d23541
+--- /dev/null
++++ b/policycoreutils/audit2allow/test.log
+@@ -0,0 +1,36 @@
++node=bill.example.com type=AVC_PATH msg=audit(1166045975.667:1128):  path="/usr/lib/libGL.so.1.2"
++type=AVC msg=audit(1166045975.667:1129): avc: denied { write } for comm=local dev=dm-0 name=root.lock pid=10581 scontext=system_u:system_r:postfix_local_t:s0 tclass=file tcontext=system_u:object_r:mail_spool_t:s0
++node=bob.example.com type=PATH msg=audit(1166111074.191:74): item=0 name="/etc/auto.net" inode=16483485 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:automount_lock_t:s0 type=CWD msg=audit(1166111074.191:74):  cwd="/"
++node=bob.example.com type=SYSCALL msg=audit(1166111074.191:74): arch=40000003 syscall=33 success=no exit=-13 a0=92c5288 a1=1 a2=154d50 a3=92c5120 items=1 ppid=13935 pid=13944 auid=3267 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) comm="automount" exe="/usr/sbin/automount" subj=system_u:system_r:automount_t:s0 key=(null)
++node=bob.example.com type=AVC msg=audit(1166111074.191:74): avc:  denied  { execute } for  pid=13944 comm="automount" name="auto.net" dev=dm-0 ino=16483485 scontext=system_u:system_r:automount_t:s0 tcontext=system_u:object_r:automount_lock_t:s0 tclass=file
++node=james.example.com type=SYSCALL msg=audit(1165963069.244:851): arch=40000003 syscall=102 success=no exit=-13 a0=2 a1=bf96a830 a2=b5b1e8 a3=9e58ac0 items=0 ppid=21133 pid=21134 auid=3267 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts10 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
++node=james.example.com type=AVC msg=audit(1165963069.244:851): avc:  denied  { name_bind } for  pid=21134 comm="httpd" src=81 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket
++node=tom.example.com type=SYSCALL msg=audit(1165963069.244:852): arch=40000003 syscall=102 success=no exit=-13 a0=2 a1=bf96a830 a2=b5b1e8 a3=9e58ac0 items=0 ppid=21133 pid=21134 auid=3267 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts10 comm="smbd" exe="/usr/sbin/smbd" subj=system_u:system_r:smbd_t:s0 key=(null)
++node=tom.example.com type=AVC msg=audit(1165963069.244:852): avc:  denied  { name_connect } for  pid=21134 comm="smbd" src=81 scontext=system_u:system_r:smbd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket
++node=mary.example.com type=SYSCALL msg=audit(1166023021.373:910): arch=40000003 syscall=12 success=no exit=-13 a0=8493cd8 a1=cc3 a2=3282ec a3=bf992a04 items=0 ppid=24423 pid=24427 auid=3267 uid=0 gid=0 euid=3267 suid=3267 fsuid=3267 egid=3267 sgid=3267 fsgid=3267 tty=(none) comm="vsftpd" exe="/usr/sbin/vsftpd" subj=system_u:system_r:ftpd_t:s0 key=(null)
++node=mary.example.com type=AVC msg=audit(1166023021.373:910): avc:  denied  { search } for  pid=24427 comm="vsftpd" name="home" dev=dm-0 ino=9338881 scontext=system_u:system_r:ftpd_t:s0 tcontext=system_u:object_r:home_root_t:s0 tclass=dir
++node=tom.example.com type=SYSCALL msg=audit(1165963069.244:852): arch=40000003 syscall=102 success=no exit=-13 a0=2 a1=bf96a830 a2=b5b1e8 a3=9e58ac0 items=0 ppid=21133 pid=21134 auid=3267 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts10 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
++node=tom.example.com type=AVC msg=audit(1165963069.244:852): avc:  denied  { name_connect } for  pid=21134 comm="httpd" src=81 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket
++node=dan.example.com type=AVC_PATH msg=audit(1166017682.366:877):  path="/var/www/html/index.html"
++node=dan.example.com type=SYSCALL msg=audit(1166017682.366:877): arch=40000003 syscall=196 success=no exit=-13 a0=96226a8 a1=bf88b01c a2=31fff4 a3=2008171 items=0 ppid=23762 pid=23768 auid=3267 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
++node=dan.example.com type=AVC msg=audit(1166017682.366:877): avc:  denied  { execute_no_trans } for  pid=23768 comm="httpd" name="index.html" dev=dm-0 ino=7996439 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
++node=judy.example.com type=SYSCALL msg=audit(1165963069.244:853): arch=40000003 syscall=102 success=no exit=-13 a0=2 a1=bf96a830 a2=b5b1e8 a3=9e58ac0 items=0 ppid=21133 pid=21134 auid=3267 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts10 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
++node=judy.example.com type=AVC msg=audit(1165963069.244:853): avc:  denied  { name_connect } for  pid=21134 comm="httpd" src=81 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:mysqld_port_t:s0 tclass=tcp_socket
++node=judy.example.com type=SYSCALL msg=audit(1165963069.244:853): arch=40000003 syscall=102 success=no exit=-13 a0=2 a1=bf96a830 a2=b5b1e8 a3=9e58ac0 items=0 ppid=21133 pid=21134 auid=3267 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts10 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
++node=judy.example.com type=AVC msg=audit(1165963069.244:853): avc:  denied  { name_connect } for  pid=21134 comm="httpd" src=81 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket
++node=patty.example.com type=AVC_PATH msg=audit(1166036885.378:1097):  path="/var/www/cgi-bin"
++node=patty.example.com type=SYSCALL msg=audit(1166036885.378:1097): arch=40000003 syscall=196 success=no exit=-13 a0=9624f38 a1=bf88b11c a2=31fff4 a3=2008171 items=0 ppid=23762 pid=23770 auid=3267 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
++node=patty.example.com type=AVC msg=audit(1166036885.378:1097): avc:  denied  { execute } for  pid=23770 comm="httpd" name="cgi-bin" dev=dm-0 ino=7995597 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_script_exec_t:s0 tclass=file
++node=sam.example.com type=SYSCALL msg=audit(1166038880.318:1103): arch=40000003 syscall=5 success=no exit=-13 a0=bf96f068 a1=18800 a2=0 a3=bf973110 items=0 ppid=23765 pid=12387 auid=3267 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) comm="sealert.cgi" exe="/usr/bin/perl" subj=system_u:system_r:httpd_sys_script_t:s0 key=(null)
++node=sam.example.com type=AVC msg=audit(1166038880.318:1103): avc:  denied  { write } for  pid=12387 comm="sealert.cgi" name="sealert-upload" dev=dm-0 ino=8093724 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file
++node=holycross.devel.redhat.com type=AVC_PATH msg=audit(1166027294.395:952):  path="/home/devel/dwalsh/public_html"
++node=holycross.devel.redhat.com type=SYSCALL msg=audit(1166027294.395:952): arch=40000003 syscall=196 success=yes exit=0 a0=8495230 a1=849c830 a2=874ff4 a3=328d28 items=0 ppid=7234 pid=7236 auid=3267 uid=3267 gid=3267 euid=3267 suid=3267 fsuid=3267 egid=3267 sgid=3267 fsgid=3267 tty=(none) comm="vsftpd" exe="/usr/sbin/vsftpd" subj=system_u:system_r:ftpd_t:s0 key=(null)
++node=holycross.devel.redhat.com type=AVC msg=audit(1166027294.395:952): avc:  denied  { getattr } for  pid=7236 comm="vsftpd" name="public_html" dev=dm-0 ino=9601649 scontext=system_u:system_r:ftpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file
++host=dhcppc2 type=AVC msg=audit(1216729188.853:241): avc:  denied  { read } for pid=14066 comm="qemu-kvm" name="HelpdeskRHEL4-RHEL4.x86_64" dev=tmpfs ino=333 scontext=system_u:system_r:qemu_t:s0 tcontext=system_u:object_r:fixed_disk_device_t:s0 tclass=blk_file host=dhcppc2 type=SYSCALL msg=audit(1216729188.853:241): arch=c000003e syscall=2 success=no exit=-13 a0=7fff6f654680 a1=0 a2=1a4 a3=3342f67a70 items=0 ppid=2953 pid=14066 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="qemu-kvm" exe="/usr/bin/qemu-kvm" subj=system_u:system_r:qemu_t:s0 key=(null)
++node=mallorn.farre.nom type=AVC msg=audit(1228276291.360:466): avc:  denied  { execute } for  pid=13015 comm="npviewer.bin" path="/opt/real/RealPlayer/mozilla/nphelix.so" dev=dm-0 ino=2850912 scontext=unconfined_u:unconfined_r:nsplugin_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file 
++node=mallorn.farre.nom type=SYSCALL msg=audit(1228276291.360:466): arch=40000003 syscall=192 success=no exit=-13 a0=0 a1=9eec a2=5 a3=802 items=0 ppid=13014 pid=13015 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=(none) ses=63 comm="npviewer.bin" exe="/usr/lib/nspluginwrapper/npviewer.bin" subj=unconfined_u:unconfined_r:nsplugin_t:s0 key=(null)
++node=mary.example.com type=SYSCALL msg=audit(1166023021.373:910): arch=40000003 syscall=12 success=no exit=-13 a0=8493cd8 a1=cc3 a2=3282ec a3=bf992a04 items=0 ppid=24423 pid=24427 auid=3267 uid=0 gid=0 euid=3267 suid=3267 fsuid=3267 egid=3267 sgid=3267 fsgid=3267 tty=(none) comm="vssmbd" exe="/usr/sbin/vssmbd" subj=system_u:system_r:smbd_t:s0 key=(null)
++node=mary.example.com type=AVC msg=audit(1166023021.373:910): avc:  denied  { read } for  pid=24427 comm="vssmbd" name="home" dev=dm-0 ino=9338881 scontext=system_u:system_r:smbd_t:s0 tcontext=system_u:object_r:ssh_home_t:s0 tclass=file
++node=lilly.example.com type=AVC_PATH msg=audit(1164783469.561:109):  path="/linuxtest/LVT/lvt/log.current"
++node=lilly.example.com type=SYSCALL msg=audit(1164783469.561:109): arch=14 syscall=11 success=yes exit=0 a0=10120520 a1=10120a78 a2=10120970 a3=118 items=0 ppid=8310 pid=8311 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) comm="smbd" exe="/usr/sbin/smbd" subj=root:system_r:smbd_t:s0 key=(null)
++node=lilly.example.com type=AVC msg=audit(1164783469.561:109): avc:  denied  { append } for  pid=8311 comm="smbd" name="log.current" dev=dm-0 ino=130930 scontext=root:system_r:smbd_t:s0 tcontext=root:object_r:default_t:s0 tclass=dir
+diff --git a/policycoreutils/audit2allow/test_audit2allow.py b/policycoreutils/audit2allow/test_audit2allow.py
+new file mode 100644
+index 0000000..d7d872e
+--- /dev/null
++++ b/policycoreutils/audit2allow/test_audit2allow.py
+@@ -0,0 +1,46 @@
++import unittest, os, shutil 
++from tempfile import mkdtemp
++from subprocess import Popen, PIPE
++
++class Audit2allowTests(unittest.TestCase):
++    def assertDenied(self, err):
++        self.assert_('Permission denied' in err,
++                     '"Permission denied" not found in %r' % err)
++    def assertNotFound(self, err):
++        self.assert_('not found' in err,
++                     '"not found" not found in %r' % err)
++
++    def assertFailure(self, status):
++        self.assert_(status != 0,
++                     '"Succeeded when it should have failed')
++
++    def assertSuccess(self, cmd, status, err):
++        self.assert_(status == 0,
++                     '"%s should have succeeded for this test %r' %  (cmd, err))
++
++    def test_sepolgen_ifgen(self):
++        "Verify sepolgen-ifgen works"
++        p = Popen(['sudo', 'sepolgen-ifgen'], stdout = PIPE)
++        out, err = p.communicate()
++        if err:
++            print(out, err)
++        self.assertSuccess("sepolgen-ifgen", p.returncode, err)
++
++    def test_audit2allow(self):
++        "Verify audit2allow works"
++        p = Popen(['audit2allow',"-i","test.log"], stdout = PIPE)
++        out, err = p.communicate()
++        if err:
++            print(out, err)
++        self.assertSuccess("audit2allow", p.returncode, err)
++
++    def test_audit2why(self):
++        "Verify audit2why works"
++        p = Popen(['audit2why',"-i","test.log"], stdout = PIPE)
++        out, err = p.communicate()
++        if err:
++            print(out, err)
++        self.assertSuccess("audit2why", p.returncode, err)
++
++if __name__ == "__main__":
++    unittest.main()
+diff --git a/policycoreutils/gui/Makefile b/policycoreutils/gui/Makefile
+index 9d9f820..0c2b390 100644
+--- a/policycoreutils/gui/Makefile
++++ b/policycoreutils/gui/Makefile
+@@ -12,7 +12,6 @@ domainsPage.py \
+ fcontextPage.py \
+ html_util.py \
+ loginsPage.py \
+-mappingsPage.py \
+ modulesPage.py \
+ polgen.glade \
+ portsPage.py \
 diff --git a/policycoreutils/gui/booleansPage.py b/policycoreutils/gui/booleansPage.py
-index eee954d..075b896 100644
+index eee954d..0c4b14b 100644
 --- a/policycoreutils/gui/booleansPage.py
 +++ b/policycoreutils/gui/booleansPage.py
-@@ -31,7 +31,7 @@ import semanagePage
+@@ -18,20 +18,17 @@
+ # You should have received a copy of the GNU General Public License
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ #
+-import string
+ import gtk
+ import gtk.glade
+-import os
+ import gobject
+ import sys
+-import tempfile
+ import seobject
+ import semanagePage
+ 
  INSTALLPATH='/usr/share/system-config-selinux'
  sys.path.append(INSTALLPATH)
  
@@ -11,18 +161,38 @@ index eee954d..075b896 100644
  ENFORCING=0
  PERMISSIVE=1
  DISABLED=2
-@@ -50,8 +50,8 @@ try:
+@@ -50,10 +47,8 @@ try:
                      unicode=False,
                      codeset = 'utf-8')
  except IOError:
 -    import __builtin__
 -    __builtin__.__dict__['_'] = unicode
+-
+-from glob import fnmatch
 +    import builtins
 +    builtins.__dict__['_'] = str
  
- from glob import fnmatch
- 
-@@ -170,16 +170,15 @@ class booleansPage:
+ class Modifier:
+     def __init__(self,name, on, save):
+@@ -103,8 +98,6 @@ class booleansPage:
+         self.revertButton = xml.get_widget("booleanRevertButton")
+         self.revertButton.set_sensitive(self.local)
+         self.revertButton.connect("clicked", self.on_revert_clicked)
+-        listStore = gtk.ListStore(gobject.TYPE_STRING)
+-        cell = gtk.CellRendererText()
+ 
+         self.store = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
+         self.store.set_sort_column_id(1, gtk.SORT_ASCENDING)
+@@ -123,7 +116,7 @@ class booleansPage:
+         self.booleansView.append_column(col)
+ 
+         col = gtk.TreeViewColumn("Description", gtk.CellRendererText(), text=DESC)
+-	col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
++        col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+         col.set_fixed_width(400)
+         col.set_sort_column_id(DESC)
+         col.set_resizable(True)
+@@ -170,16 +163,15 @@ class booleansPage:
          # change cursor
          if boolean == None:
              return
@@ -46,7 +216,7 @@ index eee954d..075b896 100644
  
      def filter_changed(self, *arg):
          filter =  arg[0].get_text()
-@@ -224,17 +223,25 @@ class booleansPage:
+@@ -224,17 +216,25 @@ class booleansPage:
          self.store.set_value(iter, ACTIVE , not val)
          self.wait()
          setsebool="/usr/sbin/setsebool -P %s %d" % (key, not val)
@@ -55,7 +225,7 @@ index eee954d..075b896 100644
 -            self.error(out)
 -        self.load(self.filter)
 +        try:
-+            subprocess.check_output(setsebool, 
++            subprocess.check_output(setsebool,
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.load(self.filter)
@@ -69,7 +239,7 @@ index eee954d..075b896 100644
 -        commands.getstatusoutput(setsebool)
 -        self.load(self.filter)
 +        try:
-+            subprocess.check_output(setsebool, 
++            subprocess.check_output(setsebool,
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.load(self.filter)
@@ -158,11 +328,14 @@ index 6af1e9a..39a4574 100644
 +            self.error(e.output)
 +        self.ready()
 diff --git a/policycoreutils/gui/fcontextPage.py b/policycoreutils/gui/fcontextPage.py
-index 131f1c2..600232e 100644
+index 131f1c2..9a34143 100644
 --- a/policycoreutils/gui/fcontextPage.py
 +++ b/policycoreutils/gui/fcontextPage.py
-@@ -21,7 +21,7 @@ import gtk.glade
- import os
+@@ -18,10 +18,9 @@
+ ## Author: Dan Walsh
+ import gtk
+ import gtk.glade
+-import os
  import gobject
  import seobject
 -import commands
@@ -170,7 +343,7 @@ index 131f1c2..600232e 100644
  from semanagePage import *;
  
  SPEC_COL = 0
-@@ -55,8 +55,8 @@ try:
+@@ -55,8 +54,8 @@ try:
                      unicode=False,
                      codeset = 'utf-8')
  except IOError:
@@ -181,7 +354,58 @@ index 131f1c2..600232e 100644
  
  
  class fcontextPage(semanagePage):
-@@ -124,7 +124,7 @@ class fcontextPage(semanagePage):
+@@ -72,16 +71,16 @@ class fcontextPage(semanagePage):
+         self.view.set_search_equal_func(self.search)
+ 
+         col = gtk.TreeViewColumn(_("File\nSpecification"), gtk.CellRendererText(), text=SPEC_COL)
+-	col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+-	col.set_fixed_width(250)
++        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)
+         col = gtk.TreeViewColumn(_("Selinux\nFile Type"), gtk.CellRendererText(), text=TYPE_COL)
+ 
+-	col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+-	col.set_fixed_width(250)
++        col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
++        col.set_fixed_width(250)
+         col.set_sort_column_id(TYPE_COL)
+         col.set_resizable(True)
+         self.view.append_column(col)
+@@ -97,16 +96,16 @@ class fcontextPage(semanagePage):
+         liststore=self.fcontextFileTypeCombo.get_model()
+         for k in seobject.file_types:
+             if len(k) > 0 and  k[0] != '-':
+-                iter=liststore.append()
+-                liststore.set_value(iter, 0, k)
+-        iter = liststore.get_iter_first()
+-        self.fcontextFileTypeCombo.set_active_iter(iter)
++                it=liststore.append()
++                liststore.set_value(it, 0, k)
++        it = liststore.get_iter_first()
++        self.fcontextFileTypeCombo.set_active_iter(it)
+         self.fcontextTypeEntry = xml.get_widget("fcontextTypeEntry")
+         self.fcontextMLSEntry = xml.get_widget("fcontextMLSEntry")
+ 
+-    def match(self, fcon_dict, k, filter):
++    def match(self, fcon_dict, k, filt):
+         try:
+-            f=filter.lower()
++            f=filt.lower()
+             for con in k:
+                 k=con.lower()
+                 if k.find(f) >= 0:
+@@ -119,46 +118,46 @@ class fcontextPage(semanagePage):
+             pass
+         return False
+ 
+-    def load(self, filter=""):
+-        self.filter=filter
++    def load(self, filt=""):
++        self.filter=filt
          self.fcontext=seobject.fcontextRecords()
          self.store.clear()
          fcon_dict=self.fcontext.get_all(self.local)
@@ -189,13 +413,66 @@ index 131f1c2..600232e 100644
 +        keys = list(fcon_dict.keys())
          keys.sort()
          for k in keys:
-             if not self.match(fcon_dict, k, filter):
-@@ -170,19 +170,18 @@ class fcontextPage(semanagePage):
+-            if not self.match(fcon_dict, k, filter):
++            if not self.match(fcon_dict, k, filt):
+                 continue
+-            iter=self.store.append()
+-            self.store.set_value(iter, SPEC_COL, k[0])
+-            self.store.set_value(iter, FTYPE_COL, k[1])
++            it=self.store.append()
++            self.store.set_value(it, SPEC_COL, k[0])
++            self.store.set_value(it, FTYPE_COL, k[1])
+             if fcon_dict[k]:
+                 rec="%s:%s" % (fcon_dict[k][2], seobject.translate(fcon_dict[k][3],False))
+             else:
+                 rec="<<None>>"
+-            self.store.set_value(iter, TYPE_COL, rec)
++            self.store.set_value(it, TYPE_COL, rec)
+         self.view.get_selection().select_path ((0,))
+ 
+     def filter_changed(self, *arg):
+-        filter =  arg[0].get_text()
+-        if filter != self.filter:
+-            self.load(filter)
++        filt =  arg[0].get_text()
++        if filt != self.filter:
++            self.load(filt)
+ 
+     def dialogInit(self):
+-        store, iter = self.view.get_selection().get_selected()
+-        self.fcontextEntry.set_text(store.get_value(iter, SPEC_COL))
++        store, it = self.view.get_selection().get_selected()
++        self.fcontextEntry.set_text(store.get_value(it, SPEC_COL))
+         self.fcontextEntry.set_sensitive(False)
+-        scontext = store.get_value(iter, TYPE_COL)
++        scontext = store.get_value(it, TYPE_COL)
+         scon=context(scontext)
+         self.fcontextTypeEntry.set_text(scon.type)
+         self.fcontextMLSEntry.set_text(scon.mls)
+-        type=store.get_value(iter, FTYPE_COL)
++        setype=store.get_value(it, FTYPE_COL)
+         liststore=self.fcontextFileTypeCombo.get_model()
+-        iter = liststore.get_iter_first()
+-        while iter != None and liststore.get_value(iter,0) != type:
+-            iter = liststore.iter_next(iter)
+-        if iter != None:
+-            self.fcontextFileTypeCombo.set_active_iter(iter)
++        it = liststore.get_iter_first()
++        while it != None and liststore.get_value(it,0) != setype:
++            it = liststore.iter_next(it)
++        if it != None:
++            self.fcontextFileTypeCombo.set_active_iter(it)
+         self.fcontextFileTypeCombo.set_sensitive(False)
+ 
+     def dialogClear(self):
+@@ -169,55 +168,60 @@ class fcontextPage(semanagePage):
+         self.fcontextMLSEntry.set_text("s0")
  
      def delete(self):
-         store, iter = self.view.get_selection().get_selected()
-+        fspec=store.get_value(iter, SPEC_COL)
-+        ftype=store.get_value(iter, FTYPE_COL)
+-        store, iter = self.view.get_selection().get_selected()
++        store, it = self.view.get_selection().get_selected()
++        fspec=store.get_value(it, SPEC_COL)
++        ftype=store.get_value(it, FTYPE_COL)
 +        self.wait()
          try:
 -            fspec=store.get_value(iter, SPEC_COL)
@@ -206,10 +483,11 @@ index 131f1c2..600232e 100644
 -
 -            if rc != 0:
 -                return self.error(out)
-+            subprocess.check_output("semanage fcontext -d -f '%s' '%s'" % (ftype, fspec), 
+-            store.remove(iter)
++            subprocess.check_output("semanage fcontext -d -f '%s' '%s'" % (ftype, fspec),
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
-             store.remove(iter)
++            store.remove(it)
              self.view.get_selection().select_path ((0,))
 -        except ValueError, e:
 -            self.error(e.args[0])
@@ -219,7 +497,10 @@ index 131f1c2..600232e 100644
  
      def add(self):
          ftype=["", "--", "-d", "-c", "-b", "-s", "-l", "-p" ]
-@@ -192,17 +191,20 @@ class fcontextPage(semanagePage):
+         fspec=self.fcontextEntry.get_text().strip()
+-        type=self.fcontextTypeEntry.get_text().strip()
++        setype=self.fcontextTypeEntry.get_text().strip()
+         mls=self.fcontextMLSEntry.get_text().strip()
          list_model=self.fcontextFileTypeCombo.get_model()
          active = self.fcontextFileTypeCombo.get_active()
          self.wait()
@@ -228,14 +509,14 @@ index 131f1c2..600232e 100644
 -        if rc != 0:
 -            self.error(out)
 +        try:
-+            subprocess.check_output("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, ftype[active], fspec),
++            subprocess.check_output("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (setype, mls, ftype[active], fspec),
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.ready()
-+            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))
++            it=self.store.append()
++            self.store.set_value(it, SPEC_COL, fspec)
++            self.store.set_value(it, FTYPE_COL, ftype)
++            self.store.set_value(it, TYPE_COL, "%s:%s" % (setype, mls))
 +        except subprocess.CalledProcessError as e:
 +            self.error(e.output)
 +            self.ready()
@@ -248,24 +529,28 @@ index 131f1c2..600232e 100644
 -
      def modify(self):
          fspec=self.fcontextEntry.get_text().strip()
-         type=self.fcontextTypeEntry.get_text().strip()
-@@ -211,13 +213,16 @@ class fcontextPage(semanagePage):
-         iter = self.fcontextFileTypeCombo.get_active_iter()
-         ftype=list_model.get_value(iter,0)
+-        type=self.fcontextTypeEntry.get_text().strip()
++        setype=self.fcontextTypeEntry.get_text().strip()
+         mls=self.fcontextMLSEntry.get_text().strip()
+         list_model=self.fcontextFileTypeCombo.get_model()
+-        iter = self.fcontextFileTypeCombo.get_active_iter()
+-        ftype=list_model.get_value(iter,0)
++        it = self.fcontextFileTypeCombo.get_active_iter()
++        ftype=list_model.get_value(it,0)
          self.wait()
 -        (rc, out) = commands.getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, ftype, fspec))
 -        self.ready()
 -        if rc != 0:
 -            self.error(out)
 +        try:
-+            subprocess.check_output("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, ftype, fspec),
++            subprocess.check_output("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (setype, mls, ftype, fspec),
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.ready()
-+            store, iter = self.view.get_selection().get_selected()
-+            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))
++            store, it = self.view.get_selection().get_selected()
++            self.store.set_value(it, SPEC_COL, fspec)
++            self.store.set_value(it, FTYPE_COL, ftype)
++            self.store.set_value(it, TYPE_COL, "%s:%s" % (setype, mls))
 +        except subprocess.CalledProcessError as e:
 +            self.error(e.output)
 +            self.ready()
@@ -317,19 +602,25 @@ index 68eed76..32de37a 100644
              if type(result) in [TupleType, ListType]:
                  for item in result:
 diff --git a/policycoreutils/gui/loginsPage.py b/policycoreutils/gui/loginsPage.py
-index ec29fd9..e52debd 100644
+index ec29fd9..8a1c0b7 100644
 --- a/policycoreutils/gui/loginsPage.py
 +++ b/policycoreutils/gui/loginsPage.py
-@@ -22,7 +22,7 @@ import gtk.glade
- import os
+@@ -16,13 +16,10 @@
+ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+ ## Author: Dan Walsh
+-import string
+ import gtk
+ import gtk.glade
+-import os
  import gobject
- import sys
+-import sys
 -import commands
 +import subprocess
  import seobject
  from semanagePage import *;
  
-@@ -39,8 +39,8 @@ try:
+@@ -39,8 +36,8 @@ try:
                      unicode=False,
                      codeset = 'utf-8')
  except IOError:
@@ -340,7 +631,7 @@ index ec29fd9..e52debd 100644
  
  class loginsPage(semanagePage):
      def __init__(self, xml):
-@@ -68,7 +68,7 @@ class loginsPage(semanagePage):
+@@ -68,21 +65,21 @@ class loginsPage(semanagePage):
          self.filter=filter
          self.login = seobject.loginRecords()
          dict = self.login.get_all(0)
@@ -349,7 +640,26 @@ index ec29fd9..e52debd 100644
          keys.sort()
          self.store.clear()
          for k in keys:
-@@ -92,7 +92,7 @@ class loginsPage(semanagePage):
+             range = seobject.translate(dict[k][1])
+             if not (self.match(k, filter) or self.match(dict[k][0], filter) or self.match(range, filter)):
+                 continue
+-            iter = self.store.append()
+-            self.store.set_value(iter, 0, k)
+-            self.store.set_value(iter, 1, dict[k][0])
+-            self.store.set_value(iter, 2, range)
++            it = self.store.append()
++            self.store.set_value(it, 0, k)
++            self.store.set_value(it, 1, dict[k][0])
++            self.store.set_value(it, 2, range)
+         self.view.get_selection().select_path ((0,))
+ 
+     def __dialogSetup(self):
+-        if self.firstTime == True:
++        if self.firstTime:
+             return
+         self.firstTime = True
+         liststore = gtk.ListStore(gobject.TYPE_STRING)
+@@ -92,31 +89,31 @@ class loginsPage(semanagePage):
          self.loginsSelinuxUserCombo.add_attribute(cell, 'text', 0)
  
          selusers = seobject.seluserRecords().get_all(0)
@@ -358,7 +668,53 @@ index ec29fd9..e52debd 100644
          keys.sort()
          for k in keys:
              if k != "system_u":
-@@ -133,14 +133,18 @@ class loginsPage(semanagePage):
+                 self.loginsSelinuxUserCombo.append_text(k)
+ 
+-        iter = liststore.get_iter_first()
+-        while liststore.get_value(iter,0) != "user_u":
+-            iter = liststore.iter_next(iter)
+-        self.loginsSelinuxUserCombo.set_active_iter(iter)
++        it = liststore.get_iter_first()
++        while liststore.get_value(it,0) != "user_u":
++            it = liststore.iter_next(it)
++        self.loginsSelinuxUserCombo.set_active_iter(it)
+ 
+     def dialogInit(self):
+         self.__dialogSetup()
+-        store, iter = self.view.get_selection().get_selected()
+-        self.loginsNameEntry.set_text(store.get_value(iter, 0))
++        store, it = self.view.get_selection().get_selected()
++        self.loginsNameEntry.set_text(store.get_value(it, 0))
+         self.loginsNameEntry.set_sensitive(False)
+ 
+-        self.loginsMLSEntry.set_text(store.get_value(iter, 2))
+-        seuser = store.get_value(iter, 1)
++        self.loginsMLSEntry.set_text(store.get_value(it, 2))
++        seuser = store.get_value(it, 1)
+         liststore = self.loginsSelinuxUserCombo.get_model()
+-        iter = liststore.get_iter_first()
+-        while iter != None and liststore.get_value(iter,0) != seuser:
+-            iter = liststore.iter_next(iter)
+-        if iter != None:
+-            self.loginsSelinuxUserCombo.set_active_iter(iter)
++        it = liststore.get_iter_first()
++        while it != None and liststore.get_value(it,0) != seuser:
++            it = liststore.iter_next(it)
++        if it != None:
++            self.loginsSelinuxUserCombo.set_active_iter(it)
+ 
+ 
+     def dialogClear(self):
+@@ -126,21 +123,25 @@ class loginsPage(semanagePage):
+         self.loginsMLSEntry.set_text("s0")
+ 
+     def delete(self):
+-        store, iter = self.view.get_selection().get_selected()
++        store, it = self.view.get_selection().get_selected()
+         try:
+-            login=store.get_value(iter, 0)
++            login=store.get_value(it, 0)
+             if login == "root" or login == "__default__":
                  raise ValueError(_("Login '%s' is required") % login)
  
              self.wait()
@@ -367,11 +723,11 @@ index ec29fd9..e52debd 100644
 -            if rc != 0:
 -                self.error(out)
 +            try:
-+                subprocess.check_output("semanage login -d %s" % login, 
++                subprocess.check_output("semanage login -d %s" % login,
 +                                        stderr=subprocess.STDOUT,
 +                                        shell=True)
 +                self.ready()
-+                store.remove(iter)
++                store.remove(it)
 +                self.view.get_selection().select_path ((0,))
 +            except subprocess.CalledProcessError as e:
 +                self.ready()
@@ -384,9 +740,14 @@ index ec29fd9..e52debd 100644
              self.error(e.args[0])
  
      def add(self):
-@@ -152,17 +156,20 @@ class loginsPage(semanagePage):
-         iter = self.loginsSelinuxUserCombo.get_active_iter()
-         seuser = list_model.get_value(iter,0)
+@@ -149,36 +150,42 @@ class loginsPage(semanagePage):
+         if serange == "":
+             serange="s0"
+         list_model=self.loginsSelinuxUserCombo.get_model()
+-        iter = self.loginsSelinuxUserCombo.get_active_iter()
+-        seuser = list_model.get_value(iter,0)
++        it = self.loginsSelinuxUserCombo.get_active_iter()
++        seuser = list_model.get_value(it,0)
          self.wait()
 -        (rc, out) = commands.getstatusoutput("semanage login -a -s %s -r %s %s" % (seuser, serange, target))
 -        self.ready()
@@ -397,10 +758,10 @@ index ec29fd9..e52debd 100644
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.ready()
-+            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))
++            it = self.store.append()
++            self.store.set_value(it, 0, target)
++            self.store.set_value(it, 1, seuser)
++            self.store.set_value(it, 2, seobject.translate(serange))
 +        except subprocess.CalledProcessError as e:
 +            self.error(e.output)
 +            self.ready()
@@ -414,9 +775,13 @@ index ec29fd9..e52debd 100644
      def modify(self):
          target=self.loginsNameEntry.get_text().strip()
          serange=self.loginsMLSEntry.get_text().strip()
-@@ -172,13 +179,16 @@ class loginsPage(semanagePage):
-         iter = self.loginsSelinuxUserCombo.get_active_iter()
-         seuser=list_model.get_value(iter,0)
+         if serange == "":
+             serange = "s0"
+         list_model = self.loginsSelinuxUserCombo.get_model()
+-        iter = self.loginsSelinuxUserCombo.get_active_iter()
+-        seuser=list_model.get_value(iter,0)
++        it = self.loginsSelinuxUserCombo.get_active_iter()
++        seuser=list_model.get_value(it,0)
          self.wait()
 -        (rc, out) = commands.getstatusoutput("semanage login -m -s %s -r %s %s" % (seuser, serange, target))
 -        self.ready()
@@ -427,10 +792,10 @@ index ec29fd9..e52debd 100644
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.ready()
-+            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))
++            store, it = self.view.get_selection().get_selected()
++            self.store.set_value(it, 0, target)
++            self.store.set_value(it, 1, seuser)
++            self.store.set_value(it, 2, seobject.translate(serange))
 +        except subprocess.CalledProcessError as e:
 +            self.error(e.output)
 +            self.ready()
@@ -441,32 +806,68 @@ index ec29fd9..e52debd 100644
 -        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
-index fd0ea75..ecd95bf 100644
+deleted file mode 100644
+index fd0ea75..0000000
 --- a/policycoreutils/gui/mappingsPage.py
-+++ b/policycoreutils/gui/mappingsPage.py
-@@ -37,8 +37,8 @@ try:
-                     unicode=False,
-                     codeset = 'utf-8')
- except IOError:
++++ /dev/null
+@@ -1,55 +0,0 @@
+-## mappingsPage.py - show selinux mappings
+-## Copyright (C) 2006 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
+-## along with this program; if not, write to the Free Software
+-## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+-
+-## Author: Dan Walsh
+-import string
+-import gtk
+-import gtk.glade
+-import os
+-import gobject
+-import sys
+-import seobject
+-
+-##
+-## 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
-+    import builtins
-+    builtins.__dict__['_'] = str
- 
- class loginsPage:
-     def __init__(self, xml):
-@@ -49,7 +49,7 @@ class loginsPage:
-         self.view.set_model(self.store)
-         self.login = loginRecords()
-         dict = self.login.get_all(0)
+-
+-class loginsPage:
+-    def __init__(self, xml):
+-        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.view.set_model(self.store)
+-        self.login = loginRecords()
+-        dict = self.login.get_all(0)
 -        keys = dict.keys()
-+        keys = list(dict.keys())
-         keys.sort()
-         for k in keys:
+-        keys.sort()
+-        for k in keys:
 -            print "%-25s %-25s %-25s" % (k, dict[k][0], translate(dict[k][1]))
-+            print("%-25s %-25s %-25s" % (k, dict[k][0], translate(dict[k][1])))
 diff --git a/policycoreutils/gui/modulesPage.py b/policycoreutils/gui/modulesPage.py
-index 9ff0766..20f64b5 100644
+index 9ff0766..a52863e 100644
 --- a/policycoreutils/gui/modulesPage.py
 +++ b/policycoreutils/gui/modulesPage.py
 @@ -20,7 +20,7 @@ import string
@@ -489,6 +890,33 @@ index 9ff0766..20f64b5 100644
  
  class modulesPage(semanagePage):
      def __init__(self, xml):
+@@ -85,8 +85,8 @@ class modulesPage(semanagePage):
+         except:
+             return 0
+ 
+-    def load(self, filter=""):
+-        self.filter=filter
++    def load(self, filt=""):
++        self.filter=filt
+         self.store.clear()
+         try:
+             fd = Popen("semodule -l", shell=True, stdout=PIPE).stdout
+@@ -94,11 +94,11 @@ class modulesPage(semanagePage):
+             fd.close()
+             for i in l:
+                 module, ver, newline = i.split('\t')
+-                if not (self.match(module, filter) or self.match(ver, filter)):
++                if not (self.match(module, filt) or self.match(ver, filt)):
+                     continue
+-                iter = self.store.append()
+-                self.store.set_value(iter, 0, module.strip())
+-                self.store.set_value(iter, 1, ver.strip())
++                it = self.store.append()
++                self.store.set_value(it, 0, module.strip())
++                self.store.set_value(it, 1, ver.strip())
+         except:
+             pass
+         self.view.get_selection().select_path ((0,))
 @@ -107,53 +107,51 @@ class modulesPage(semanagePage):
      def new_module(self, args):
          try:
@@ -498,8 +926,10 @@ index 9ff0766..20f64b5 100644
              self.error(e.args[0])
  
      def delete(self):
-         store, iter = self.view.get_selection().get_selected()
-         module = store.get_value(iter, 0)
+-        store, iter = self.view.get_selection().get_selected()
+-        module = store.get_value(iter, 0)
++        store, it = self.view.get_selection().get_selected()
++        module = store.get_value(it, 0)
 +        self.wait()
          try:
 -            self.wait()
@@ -516,7 +946,7 @@ index 9ff0766..20f64b5 100644
 +            subprocess.check_output("semodule -r %s" % module,
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
-+            store.remove(iter)
++            store.remove(it)
 +            self.view.get_selection().select_path ((0,))
 +        except subprocess.CalledProcessError as e:
 +            self.error(e.output)
@@ -526,10 +956,10 @@ index 9ff0766..20f64b5 100644
          self.audit_enabled = not self.audit_enabled
 +        if self.audit_enabled:
 +            cmd = "semodule -DB"
-+            label = _("Disable Audit"))
++            label = _("Disable Audit")
 +        else:
 +            cmd = "semodule -B"
-+            label = _("Enable Audit"))
++            label = _("Enable Audit")
 +        self.wait()
          try:
 -            self.wait()
@@ -575,7 +1005,22 @@ index 9ff0766..20f64b5 100644
  
      def propertiesDialog(self):
          # Do nothing
-@@ -178,14 +176,14 @@ class modulesPage(semanagePage):
+@@ -167,10 +165,10 @@ class modulesPage(semanagePage):
+                                         gtk.STOCK_OPEN, gtk.RESPONSE_OK))
+         dialog.set_default_response(gtk.RESPONSE_OK)
+ 
+-        filter = gtk.FileFilter()
+-        filter.set_name("Policy Files")
+-        filter.add_pattern("*.pp")
+-        dialog.add_filter(filter)
++        filt = gtk.FileFilter()
++        filt.set_name("Policy Files")
++        filt.add_pattern("*.pp")
++        dialog.add_filter(filt)
+ 
+         response = dialog.run()
+         if response == gtk.RESPONSE_OK:
+@@ -178,14 +176,13 @@ class modulesPage(semanagePage):
          dialog.destroy()
  
      def add(self, file):
@@ -599,7 +1044,6 @@ index 9ff0766..20f64b5 100644
 +        except subprocess.CalledProcessError as e:
 +            self.error(e.output)
 +        self.ready()
-+
 diff --git a/policycoreutils/gui/polgengui.py b/policycoreutils/gui/polgengui.py
 index 0f0e564..ab2b9c5 100644
 --- a/policycoreutils/gui/polgengui.py
@@ -726,19 +1170,26 @@ index 0f0e564..ab2b9c5 100644
                  self.store.set_value(iter, 0, f)
                  self.store.set_value(iter, 1, DIR)
 diff --git a/policycoreutils/gui/portsPage.py b/policycoreutils/gui/portsPage.py
-index bfb4e36..e85e807 100644
+index bfb4e36..e6c87c5 100644
 --- a/policycoreutils/gui/portsPage.py
 +++ b/policycoreutils/gui/portsPage.py
-@@ -23,7 +23,7 @@ import os
+@@ -16,14 +16,11 @@
+ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+ ## Author: Dan Walsh
+-import string
+ import gtk
+ import gtk.glade
+-import os
  import gobject
- import sys
+-import sys
  import seobject
 -import commands
 +import subprocess
  from semanagePage import *;
  
  ##
-@@ -43,8 +43,8 @@ try:
+@@ -43,8 +40,8 @@ try:
                      unicode=False,
                      codeset = 'utf-8')
  except IOError:
@@ -749,40 +1200,151 @@ index bfb4e36..e85e807 100644
  
  class portsPage(semanagePage):
      def __init__(self, xml):
-@@ -120,7 +120,7 @@ class portsPage(semanagePage):
-         self.filter=filter
+@@ -62,19 +59,19 @@ class portsPage(semanagePage):
+         self.ports_properties_button = xml.get_widget("portsPropertiesButton")
+         self.ports_delete_button = xml.get_widget("portsDeleteButton")
+         liststore = self.ports_protocol_combo.get_model()
+-        iter = liststore.get_iter_first()
+-        self.ports_protocol_combo.set_active_iter(iter)
++        it = liststore.get_iter_first()
++        self.ports_protocol_combo.set_active_iter(it)
+         self.init_store()
+         self.edit = True
+         self.load()
+ 
+     def filter_changed(self, *arg):
+-        filter =  arg[0].get_text()
+-        if filter != self.filter:
++        filt =  arg[0].get_text()
++        if filt != self.filter:
+             if self.edit:
+-                self.load(filter)
++                self.load(filt)
+             else:
+-                self.group_load(filter)
++                self.group_load(filt)
+ 
+     def init_store(self):
+         self.store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING , gobject.TYPE_STRING)
+@@ -116,43 +113,43 @@ class portsPage(semanagePage):
+         except:
+             return 0
+ 
+-    def load(self,filter = ""):
+-        self.filter=filter
++    def load(self,filt = ""):
++        self.filter=filt
          self.port = seobject.portRecords()
-         dict = self.port.get_all(self.local)
+-        dict = self.port.get_all(self.local)
 -        keys = dict.keys()
-+        keys = list(dict.keys())
++        pdict = self.port.get_all(self.local)
++        keys = list(pdict.keys())
          keys.sort()
          self.store.clear()
          for k in keys:
-@@ -141,7 +141,7 @@ class portsPage(semanagePage):
-         self.filter=filter
+-            if not (self.match(str(k[0]), filter) or self.match(dict[k][0], filter) or self.match(k[2], filter) or self.match(dict[k][1], filter) or self.match(dict[k][1], filter)):
++            if not (self.match(str(k[0]), filt) or self.match(pdict[k][0], filt) or self.match(k[2], filt) or self.match(pdict[k][1], filt) or self.match(pdict[k][1], filt)):
+                 continue
+-            iter = self.store.append()
++            it = self.store.append()
+             if k[0] == k[1]:
+-                self.store.set_value(iter, PORT_COL, k[0])
++                self.store.set_value(it, PORT_COL, k[0])
+             else:
+                 rec = "%s-%s" % k[:2]
+-                self.store.set_value(iter, PORT_COL, rec)
+-            self.store.set_value(iter, TYPE_COL, dict[k][0])
+-            self.store.set_value(iter, PROTOCOL_COL, k[2])
+-            self.store.set_value(iter, MLS_COL, dict[k][1])
++                self.store.set_value(it, PORT_COL, rec)
++            self.store.set_value(it, TYPE_COL, pdict[k][0])
++            self.store.set_value(it, PROTOCOL_COL, k[2])
++            self.store.set_value(it, MLS_COL, pdict[k][1])
+         self.view.get_selection().select_path ((0,))
+ 
+-    def group_load(self, filter = ""):
+-        self.filter=filter
++    def group_load(self, filt = ""):
++        self.filter=filt
          self.port = seobject.portRecords()
-         dict = self.port.get_all_by_type(self.local)
+-        dict = self.port.get_all_by_type(self.local)
 -        keys = dict.keys()
-+        keys = list(dict.keys())
++        pdict = self.port.get_all_by_type(self.local)
++        keys = list(pdict.keys())
          keys.sort()
          self.store.clear()
          for k in keys:
-@@ -185,16 +185,17 @@ class portsPage(semanagePage):
-         store, iter = self.view.get_selection().get_selected()
-         port = store.get_value(iter, PORT_COL)
-         protocol = store.get_value(iter, 1)
+-            ports_string = ", ".join(dict[k])
+-            if not (self.match(ports_string, filter) or self.match(k[0], filter) or self.match(k[1], filter) ):
++            ports_string = ", ".join(pdict[k])
++            if not (self.match(ports_string, filt) or self.match(k[0], filt) or self.match(k[1], filt) ):
+                 continue
+-            iter = self.store.append()
+-            self.store.set_value(iter, TYPE_COL, k[0])
+-            self.store.set_value(iter, PROTOCOL_COL, k[1])
+-            self.store.set_value(iter, PORT_COL, ports_string)
+-            self.store.set_value(iter, MLS_COL, "")
++            it = self.store.append()
++            self.store.set_value(it, TYPE_COL, k[0])
++            self.store.set_value(it, PROTOCOL_COL, k[1])
++            self.store.set_value(it, PORT_COL, ports_string)
++            self.store.set_value(it, MLS_COL, "")
+         self.view.get_selection().select_path ((0,))
+ 
+     def propertiesDialog(self):
+@@ -160,19 +157,19 @@ class portsPage(semanagePage):
+             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))
++        store, it = self.view.get_selection().get_selected()
++        self.ports_number_entry.set_text(store.get_value(it, PORT_COL))
+         self.ports_number_entry.set_sensitive(False)
+         self.ports_protocol_combo.set_sensitive(False)
+-        self.ports_name_entry.set_text(store.get_value(iter, TYPE_COL))
+-        self.ports_mls_entry.set_text(store.get_value(iter, MLS_COL))
+-        protocol = store.get_value(iter, PROTOCOL_COL)
++        self.ports_name_entry.set_text(store.get_value(it, TYPE_COL))
++        self.ports_mls_entry.set_text(store.get_value(it, MLS_COL))
++        protocol = store.get_value(it, PROTOCOL_COL)
+         liststore = self.ports_protocol_combo.get_model()
+-        iter = liststore.get_iter_first()
+-        while iter != None and liststore.get_value(iter,0) != protocol:
+-            iter = liststore.iter_next(iter)
+-        if iter != None:
+-            self.ports_protocol_combo.set_active_iter(iter)
++        it = liststore.get_iter_first()
++        while it != None and liststore.get_value(it,0) != protocol:
++            it = liststore.iter_next(it)
++        if it != None:
++            self.ports_protocol_combo.set_active_iter(it)
+ 
+     def dialogClear(self):
+         self.ports_number_entry.set_text("")
+@@ -182,19 +179,20 @@ class portsPage(semanagePage):
+         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)
++        store, it = self.view.get_selection().get_selected()
++        port = store.get_value(it, PORT_COL)
++        protocol = store.get_value(it, 1)
 +        self.wait()
-+        cmd = "semanage port -d -p %s %s" % (protocol, port))
++        cmd = "semanage port -d -p %s %s" % (protocol, port)
          try:
 -            self.wait()
 -            (rc, out) = commands.getstatusoutput("semanage port -d -p %s %s" % (protocol, port))
 -            self.ready()
 -            if rc != 0:
 -                return self.error(out)
+-            store.remove(iter)
 +            subprocess.check_output(cmd,
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
-             store.remove(iter)
++            store.remove(it)
              self.view.get_selection().select_path ((0,))
 -        except ValueError, e:
 -            self.error(e.args[0])
@@ -792,40 +1354,48 @@ index bfb4e36..e85e807 100644
  
      def add(self):
          target = self.ports_name_entry.get_text().strip()
-@@ -210,17 +211,20 @@ class portsPage(semanagePage):
-         iter = self.ports_protocol_combo.get_active_iter()
-         protocol = list_model.get_value(iter,0)
+@@ -207,39 +205,47 @@ class portsPage(semanagePage):
+                 self.error(_("Port number \"%s\" is not valid.  0 < PORT_NUMBER < 65536 ") % port_number )
+                 return False
+         list_model = self.ports_protocol_combo.get_model()
+-        iter = self.ports_protocol_combo.get_active_iter()
+-        protocol = list_model.get_value(iter,0)
++        it = self.ports_protocol_combo.get_active_iter()
++        protocol = list_model.get_value(it,0)
          self.wait()
 -        (rc, out) = commands.getstatusoutput("semanage port -a -p %s -r %s -t %s %s" % (protocol, mls, target, port_number))
--        self.ready()
++        cmd = "semanage port -a -p %s -r %s -t %s %s" % (protocol, mls, target, port_number)
++        try:
++            subprocess.check_output(cmd,
++                                    stderr=subprocess.STDOUT,
++                                    shell=True)
++            it = self.store.append()
++            self.store.set_value(it, TYPE_COL, target)
++            self.store.set_value(it, PORT_COL, port_number)
++            self.store.set_value(it, PROTOCOL_COL, protocol)
++            self.store.set_value(it, MLS_COL, mls)
++        except subprocess.CalledProcessError as e:
++            self.error(e.output)
+         self.ready()
 -        if rc != 0:
 -            self.error(out)
 -            return False
 -        iter = self.store.append()
-+        cmd = "semanage port -a -p %s -r %s -t %s %s" % (protocol, mls, target, port_number)
-+        try:
-+            output = subprocess.check_output(cmd,
-+                                         stderr=subprocess.STDOUT,
-+                                         shell=True)
-+            iter = self.store.append()
- 
+-
 -        self.store.set_value(iter, TYPE_COL, target)
 -        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)
-+            self.store.set_value(iter, TYPE_COL, target)
-+            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)
-+        except subprocess.CalledProcessError as e:
-+            self.error(e.output)
-+         self.ready()
  
      def modify(self):
          target = self.ports_name_entry.get_text().strip()
-@@ -230,16 +234,22 @@ class portsPage(semanagePage):
-         iter = self.ports_protocol_combo.get_active_iter()
-         protocol = list_model.get_value(iter,0)
+         mls = self.ports_mls_entry.get_text().strip()
+         port_number = self.ports_number_entry.get_text().strip()
+         list_model = self.ports_protocol_combo.get_model()
+-        iter = self.ports_protocol_combo.get_active_iter()
+-        protocol = list_model.get_value(iter,0)
++        it = self.ports_protocol_combo.get_active_iter()
++        protocol = list_model.get_value(it,0)
          self.wait()
 -        (rc, out) = commands.getstatusoutput("semanage port -m -p %s -r %s -t %s %s" % (protocol, mls, target, port_number))
 -        self.ready()
@@ -836,11 +1406,11 @@ index bfb4e36..e85e807 100644
 +            subprocess.check_output(cmd,
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
-+            store, iter = self.view.get_selection().get_selected()
-+            self.store.set_value(iter, TYPE_COL, target)
-+            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)
++            store, it = self.view.get_selection().get_selected()
++            self.store.set_value(it, TYPE_COL, target)
++            self.store.set_value(it, PORT_COL, port_number)
++            self.store.set_value(it, PROTOCOL_COL, protocol)
++            self.store.set_value(it, MLS_COL, mls)
 +            self.ready()
 +            return True
 +        except subprocess.CalledProcessError as e:
@@ -865,7 +1435,7 @@ index 0c2f399..bbcb18f 100644
  X-Desktop-File-Install-Version=0.2
 -Keywords=policy;security;selinux;avc;permission;mac;
 diff --git a/policycoreutils/gui/semanagePage.py b/policycoreutils/gui/semanagePage.py
-index 3a0e478..342ecb2 100644
+index 3a0e478..040a4f8 100644
 --- a/policycoreutils/gui/semanagePage.py
 +++ b/policycoreutils/gui/semanagePage.py
 @@ -37,8 +37,8 @@ try:
@@ -879,8 +1449,65 @@ index 3a0e478..342ecb2 100644
  
  def idle_func():
      while gtk.events_pending():
-@@ -139,7 +139,7 @@ class semanagePage:
-                 if self.add() == False:
+@@ -77,9 +77,9 @@ class semanagePage:
+         return
+ 
+     def filter_changed(self, *arg):
+-        filter =  arg[0].get_text()
+-        if filter != self.filter:
+-            self.load(filter)
++        filt =  arg[0].get_text()
++        if filt != self.filter:
++            self.load(filt)
+ 
+     def search(self, model, col, key, i):
+         sort_col = self.store.get_sort_column_id()[0]
+@@ -122,13 +122,37 @@ class semanagePage:
+         dlg.destroy()
+ 
+     def deleteDialog(self):
+-        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:
++        store, it = self.view.get_selection().get_selected()
++        if self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(it, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES:
+             self.delete()
+ 
+     def use_menus(self):
+         return True
+ 
++    def load(self, filt):
++        raise RuntimeError("load method not implemented in parent class");
++
++    def filter(self):
++        raise RuntimeError("filter method not implemented in parent class");
++
++    def store(self):
++        raise RuntimeError("store method not implemented in parent class");
++
++    def add(self):
++        raise RuntimeError("add method not implemented");
++
++    def modify(self):
++        raise RuntimeError("modify method not implemented");
++
++    def delete(self):
++        raise RuntimeError("delete method not implemented");
++
++    def dialogInit(self):
++        raise RuntimeError("dialogInit method not implemented");
++
++    def dialogClear(self):
++        raise RuntimeError("dialogClear method not implemented");
++
+     def addDialog(self):
+         self.dialogClear()
+         self.dialog.set_title(_("Add %s" % self.description))
+@@ -136,10 +160,10 @@ class semanagePage:
+ 
+         while self.dialog.run() ==  gtk.RESPONSE_OK:
+             try:
+-                if self.add() == False:
++                if not self.add():
                      continue
                  break;
 -            except ValueError, e:
@@ -888,8 +1515,12 @@ index 3a0e478..342ecb2 100644
                  self.error(e.args[0])
          self.dialog.hide()
  
-@@ -152,7 +152,7 @@ class semanagePage:
-                 if self.modify() == False:
+@@ -149,10 +173,10 @@ class semanagePage:
+         self.dialog.set_position(gtk.WIN_POS_MOUSE)
+         while self.dialog.run() ==  gtk.RESPONSE_OK:
+             try:
+-                if self.modify() == False:
++                if not self.modify():
                      continue
                  break;
 -            except ValueError, e:
@@ -898,32 +1529,89 @@ index 3a0e478..342ecb2 100644
          self.dialog.hide()
  
 diff --git a/policycoreutils/gui/statusPage.py b/policycoreutils/gui/statusPage.py
-index 02685f2..8ee96b8 100644
+index 02685f2..6510d2a 100644
 --- a/policycoreutils/gui/statusPage.py
 +++ b/policycoreutils/gui/statusPage.py
-@@ -27,7 +27,7 @@ import tempfile
+@@ -16,18 +16,14 @@
+ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+ ## Author: Dan Walsh
+-import string
+ import gtk
+ import gtk.glade
+ import os
+-import gobject
+ import sys
+-import tempfile
+ 
  INSTALLPATH = '/usr/share/system-config-selinux'
  sys.path.append(INSTALLPATH)
  
 -import commands
-+import subprocess
  ENFORCING = 1
  PERMISSIVE = 0
  DISABLED = -1
-@@ -45,10 +45,10 @@ gettext.bindtextdomain(PROGNAME, "/usr/share/locale")
- gettext.textdomain(PROGNAME)
- import selinux
+@@ -47,8 +43,8 @@ import selinux
  try:
--    gettext.install(PROGNAME, localedir="/usr/share/locale", unicode=1)
-+    gettext.install(PROGNAME, localedir="/usr/share/locale", str=1)
+     gettext.install(PROGNAME, localedir="/usr/share/locale", unicode=1)
  except IOError:
 -    import __builtin__
 -    __builtin__.__dict__['_'] = unicode
 +    import builtins
-+    builtins.__dict__['_'] = str
++    builtins.__dict__['_'] = unicode
  
  class statusPage:
      def __init__(self, xml):
+@@ -127,21 +123,21 @@ class statusPage:
+         return rc
+ 
+     def typemenu_changed(self, menu):
+-        type = self.get_type()
++        setype = self.get_type()
+         enabled = self.enabledOptionMenu.get_active()
+-        if self.initialtype != type:
++        if self.initialtype != setype:
+             if self.verify(_("Changing the policy type will cause a relabel of the entire file system on the next boot. Relabeling takes a long time depending on the size of the file system.  Do you wish to continue?")) == gtk.RESPONSE_NO:
+                 menu.set_active(self.typeHistory)
+                 return None
+ 
+             self.relabel_checkbutton.set_active(True)
+ 
+-        self.write_selinux_config(modearray[enabled], type )
++        self.write_selinux_config(modearray[enabled], setype )
+         self.typeHistory = menu.get_active()
+ 
+     def enabled_changed(self, combo):
+         enabled = combo.get_active()
+-        type = self.get_type()
++        setype = self.get_type()
+ 
+         if self.initEnabled != DISABLED and enabled == DISABLED:
+             if self.verify(_("Changing to SELinux disabled requires a reboot.  It is not recommended.  If you later decide to turn SELinux back on, the system will be required to relabel.  If you just want to see if SELinux is causing a problem on your system, you can go to permissive mode which will only log errors and not enforce SELinux policy.  Permissive mode does not require a reboot    Do you wish to continue?")) == gtk.RESPONSE_NO:
+@@ -154,11 +150,11 @@ class statusPage:
+                 return None
+             self.relabel_checkbutton.set_active(True)
+ 
+-        self.write_selinux_config(modearray[enabled], type )
++        self.write_selinux_config(modearray[enabled], setype )
+         self.enabled = enabled
+ 
+-    def write_selinux_config(self, enforcing, type):
+-        path = selinux.selinux_path() + "config" 
++    def write_selinux_config(self, enforcing, setype):
++        path = selinux.selinux_path() + "config"
+         backup_path = path + ".bck"
+         fd = open(path)
+         lines = fd.readlines()
+@@ -169,7 +165,7 @@ class statusPage:
+                 fd.write("SELINUX=%s\n" % enforcing)
+                 continue
+             if l.startswith("SELINUXTYPE="):
+-                fd.write("SELINUXTYPE=%s\n" % type)
++                fd.write("SELINUXTYPE=%s\n" % setype)
+                 continue
+             fd.write(l)
+         fd.close()
 diff --git a/policycoreutils/gui/system-config-selinux.desktop b/policycoreutils/gui/system-config-selinux.desktop
 index 8822ce2..befdb23 100644
 --- a/policycoreutils/gui/system-config-selinux.desktop
@@ -971,59 +1659,108 @@ index bc3027e..9482fa5 100644
  
          xml.signal_connect("on_quit_activate", self.destroy)
 diff --git a/policycoreutils/gui/usersPage.py b/policycoreutils/gui/usersPage.py
-index 93804ac..6fcf70d 100644
+index 93804ac..1451903 100644
 --- a/policycoreutils/gui/usersPage.py
 +++ b/policycoreutils/gui/usersPage.py
-@@ -22,7 +22,7 @@ import gtk.glade
- import os
+@@ -16,13 +16,10 @@
+ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+ ## Author: Dan Walsh
+-import string
+ import gtk
+ import gtk.glade
+-import os
  import gobject
- import sys
+-import sys
 -import commands
 +import subprocess
  import seobject
  from semanagePage import *;
  
-@@ -34,10 +34,10 @@ import gettext
- gettext.bindtextdomain(PROGNAME, "/usr/share/locale")
- gettext.textdomain(PROGNAME)
+@@ -36,8 +33,8 @@ gettext.textdomain(PROGNAME)
  try:
--    gettext.install(PROGNAME, localedir="/usr/share/locale", unicode=1)
-+    gettext.install(PROGNAME, localedir="/usr/share/locale", str=1)
+     gettext.install(PROGNAME, localedir="/usr/share/locale", unicode=1)
  except IOError:
 -    import __builtin__
 -    __builtin__.__dict__['_'] = unicode
 +    import builtins
-+    builtins.__dict__['_'] = str
++    builtins.__dict__['_'] = unicode
  
  class usersPage(semanagePage):
      def __init__(self, xml):
-@@ -69,7 +69,7 @@ class usersPage(semanagePage):
-         self.filter=filter
+@@ -65,34 +62,30 @@ class usersPage(semanagePage):
+         self.mlsRangeEntry = xml.get_widget("mlsRangeEntry")
+         self.selinuxRolesEntry = xml.get_widget("selinuxRolesEntry")
+ 
+-    def load(self, filter = ""):
+-        self.filter=filter
++    def load(self, filt = ""):
++        self.filter=filt
          self.user = seobject.seluserRecords()
-         dict = self.user.get_all()
+-        dict = self.user.get_all()
 -        keys = dict.keys()
-+        keys = list(dict.keys())
++        udict = self.user.get_all()
++        keys = list(udict.keys())
          keys.sort()
          self.store.clear()
          for k in keys:
-@@ -106,15 +106,19 @@ class usersPage(semanagePage):
+-            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)):
++            serange = seobject.translate(udict[k][2])
++            if not (self.match(k, filt) or self.match(udict[k][0], filter) or self.match(serange, filt) or self.match(udict[k][3], filt)):
+                 continue
+ 
+-            iter = self.store.append()
+-            self.store.set_value(iter, 0, k)
+-            self.store.set_value(iter, 1, range)
+-            self.store.set_value(iter, 2, dict[k][3])
++            it = self.store.append()
++            self.store.set_value(it, 0, k)
++            self.store.set_value(it, 1, serange)
++            self.store.set_value(it, 2, udict[k][3])
+         self.view.get_selection().select_path ((0,))
+ 
+-    def delete(self):
+-        if semanagePage.delete(self) == gtk.RESPONSE_NO:
+-                return None
+-
+     def dialogInit(self):
+-        store, iter = self.view.get_selection().get_selected()
+-        self.selinuxUserEntry.set_text(store.get_value(iter, 0))
++        store, it = self.view.get_selection().get_selected()
++        self.selinuxUserEntry.set_text(store.get_value(it, 0))
+         self.selinuxUserEntry.set_sensitive(False)
+-        self.mlsRangeEntry.set_text(store.get_value(iter, 1))
+-        self.selinuxRolesEntry.set_text(store.get_value(iter, 2))
++        self.mlsRangeEntry.set_text(store.get_value(it, 1))
++        self.selinuxRolesEntry.set_text(store.get_value(it, 2))
+ 
+     def dialogClear(self):
+         self.selinuxUserEntry.set_text("")
+@@ -102,48 +95,62 @@ class usersPage(semanagePage):
+ 
+     def add(self):
+         user = self.selinuxUserEntry.get_text()
+-        range = self.mlsRangeEntry.get_text()
++        serange = self.mlsRangeEntry.get_text()
          roles = self.selinuxRolesEntry.get_text()
  
          self.wait()
 -        (rc, out) = commands.getstatusoutput("semanage user -a -R '%s' -r %s %s" %  (roles, range, user))
 -        self.ready()
 -        if rc != 0:
+-            self.error(out)
 +        try:
-+            subprocess.check_output("semanage user -a -R '%s' -r %s %s" %  (roles, range, user),
++            subprocess.check_output("semanage user -a -R '%s' -r %s %s" %  (roles, serange, user),
 +                                    stderr=subprocess.STDOUT,
 +                                    shell=True)
 +            self.ready()
-+            iter = self.store.append()
-+            self.store.set_value(iter, 0, user)
-+            self.store.set_value(iter, 1, range)
-+            self.store.set_value(iter, 2, roles)
-+        except:
-             self.error(out)
++            it = self.store.append()
++            self.store.set_value(it, 0, user)
++            self.store.set_value(it, 1, serange)
++            self.store.set_value(it, 2, roles)
++        except subprocess.CalledProcessError as e:
++            self.error(e.output)
 +            self.ready()
              return False
 -        iter = self.store.append()
@@ -1033,7 +1770,8 @@ index 93804ac..6fcf70d 100644
  
      def modify(self):
          user = self.selinuxUserEntry.get_text()
-@@ -122,13 +126,18 @@ class usersPage(semanagePage):
+-        range = self.mlsRangeEntry.get_text()
++        serange = self.mlsRangeEntry.get_text()
          roles = self.selinuxRolesEntry.get_text()
  
          self.wait()
@@ -1042,7 +1780,7 @@ index 93804ac..6fcf70d 100644
 -
 -        if rc != 0:
 -            self.error(out)
-+        cmd = "semanage user -m -R '%s' -r %s %s" %  (roles, range, user)
++        cmd = "semanage user -m -R '%s' -r %s %s" %  (roles, serange, user)
 +        try:
 +            subprocess.check_output(cmd,
 +                                    stderr=subprocess.STDOUT,
@@ -1057,8 +1795,12 @@ index 93804ac..6fcf70d 100644
 +        return True
  
      def delete(self):
-         store, iter = self.view.get_selection().get_selected()
-@@ -138,12 +147,17 @@ class usersPage(semanagePage):
+-        store, iter = self.view.get_selection().get_selected()
++        store, it = self.view.get_selection().get_selected()
+         try:
+-            user=store.get_value(iter, 0)
++            user=store.get_value(it, 0)
+             if user == "root" or user == "user_u":
                  raise ValueError(_("SELinux user '%s' is required") % user)
  
              self.wait()
@@ -1072,7 +1814,7 @@ index 93804ac..6fcf70d 100644
 +                                        stderr=subprocess.STDOUT,
 +                                        shell=True)
 +                self.ready()
-+                store.remove(iter)
++                store.remove(it)
 +                self.view.get_selection().select_path ((0,))
 +            except subprocess.CalledProcessError as e:
 +                self.error(e.output)
@@ -252531,6 +253273,150 @@ index fb5a24c..3668abe 100644
                 
          if self.__options.setype:
                 self.setype = self.__options.setype
+diff --git a/policycoreutils/semanage/default_encoding/Makefile b/policycoreutils/semanage/default_encoding/Makefile
+new file mode 100644
+index 0000000..e15a877
+--- /dev/null
++++ b/policycoreutils/semanage/default_encoding/Makefile
+@@ -0,0 +1,8 @@
++all:
++	LDFLAGS="" python setup.py build
++
++install: all
++	LDFLAGS="" python setup.py install --root=$(DESTDIR)/
++
++clean:
++	rm -rf build *~
+diff --git a/policycoreutils/semanage/default_encoding/default_encoding.c b/policycoreutils/semanage/default_encoding/default_encoding.c
+new file mode 100644
+index 0000000..023b8f4
+--- /dev/null
++++ b/policycoreutils/semanage/default_encoding/default_encoding.c
+@@ -0,0 +1,57 @@
++/*
++ * Authors:
++ *   John Dennis <jdennis at redhat.com>
++ *
++ * Copyright (C) 2009  Red Hat
++ * see file 'COPYING' for use and warranty information
++ *
++ * 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.
++ *
++ * 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
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <Python.h>
++
++PyDoc_STRVAR(setdefaultencoding_doc,
++"setdefaultencoding(encoding='utf-8')\n\
++\n\
++Set the current default string encoding used by the Unicode implementation.\n\
++Defaults to utf-8."
++);
++
++static PyObject *
++setdefaultencoding(PyObject *self, PyObject *args, PyObject *kwds)
++{
++    static char *kwlist[] = {"utf-8", NULL};
++    char *encoding;
++
++    if (!PyArg_ParseTupleAndKeywords(args, kwds, "s:setdefaultencoding", kwlist, &encoding))
++        return NULL;
++
++    if (PyUnicode_SetDefaultEncoding(encoding))
++        return NULL;
++
++    Py_RETURN_NONE;
++}
++
++static PyMethodDef methods[] = {
++    {"setdefaultencoding", (PyCFunction)setdefaultencoding, METH_VARARGS|METH_KEYWORDS, setdefaultencoding_doc},
++	{NULL,		NULL}		/* sentinel */
++};
++
++
++PyMODINIT_FUNC
++initdefault_encoding_utf8(void)
++{
++    PyUnicode_SetDefaultEncoding("utf-8");
++    Py_InitModule3("default_encoding_utf8", methods, "Forces the default encoding to utf-8");
++}
+diff --git a/policycoreutils/semanage/default_encoding/policycoreutils/__init__.py b/policycoreutils/semanage/default_encoding/policycoreutils/__init__.py
+new file mode 100644
+index 0000000..ccb6b8b
+--- /dev/null
++++ b/policycoreutils/semanage/default_encoding/policycoreutils/__init__.py
+@@ -0,0 +1,17 @@
++#
++# Copyright (C) 2006,2007,2008, 2009 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
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
+diff --git a/policycoreutils/semanage/default_encoding/setup.py b/policycoreutils/semanage/default_encoding/setup.py
+new file mode 100644
+index 0000000..e2befdb
+--- /dev/null
++++ b/policycoreutils/semanage/default_encoding/setup.py
+@@ -0,0 +1,38 @@
++# Authors:
++#   John Dennis <jdennis at redhat.com>
++#
++# Copyright (C) 2009  Red Hat
++# see file 'COPYING' for use and warranty information
++#
++# 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.
++#
++# 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
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++from distutils.core import setup, Extension
++
++default_encoding_utf8 = Extension('policycoreutils.default_encoding_utf8', ['default_encoding.c'])
++
++setup(name             = 'policycoreutils-default-encoding',
++      version          = '0.1',
++      description      = 'Forces the default encoding in Python to be utf-8',
++      long_description = 'Forces the default encoding in Python to be utf-8',
++      author           = 'John Dennis',
++      author_email     = 'jdennis at redhat.com',
++      maintainer       = 'John Dennis',
++      maintainer_email = 'jdennis at redhat.com',
++      license          = 'GPLv3+',
++      platforms        = 'posix',
++      url              = '',
++      download_url     = '',
++      ext_modules      = [default_encoding_utf8],
++      packages=["policycoreutils"],
++)
 diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
 index bd6c526..9204622 100644
 --- a/policycoreutils/semanage/semanage
@@ -257370,13 +258256,15 @@ index 9b9a09a..ec3e67e 100755
      return tlist
  
 diff --git a/policycoreutils/sepolicy/sepolicy/generate.py b/policycoreutils/sepolicy/sepolicy/generate.py
-index 15366c3..b3e2557 100644
+index 15366c3..bd7af36 100644
 --- a/policycoreutils/sepolicy/sepolicy/generate.py
 +++ b/policycoreutils/sepolicy/sepolicy/generate.py
-@@ -28,21 +28,21 @@ from sepolicy import get_all_types, get_all_attributes, get_all_roles
+@@ -26,23 +26,22 @@ import re
+ import sepolicy
+ from sepolicy import get_all_types, get_all_attributes, get_all_roles
  import time
- import yum
- 
+-import yum
+-
 -from templates import executable
 -from templates import boolean
 -from templates import etc_rw
@@ -257392,6 +258280,7 @@ index 15366c3..b3e2557 100644
 -from templates import script
 -from templates import spec
 -from templates import user
++
 +from .templates import executable
 +from .templates import boolean
 +from .templates import etc_rw
@@ -257410,7 +258299,7 @@ index 15366c3..b3e2557 100644
  import sepolgen.interfaces as interfaces
  import sepolgen.defaults as defaults
  
-@@ -57,11 +57,11 @@ gettext.textdomain(PROGNAME)
+@@ -57,11 +56,11 @@ gettext.textdomain(PROGNAME)
  try:
      gettext.install(PROGNAME,
                      localedir="/usr/share/locale",
@@ -257425,7 +258314,7 @@ index 15366c3..b3e2557 100644
  
  def get_rpm_nvr_from_header(hdr):
      'Given an RPM header return the package NVR as a string'
-@@ -83,7 +83,7 @@ def get_rpm_nvr_list(package):
+@@ -83,7 +82,7 @@ def get_rpm_nvr_list(package):
              nvr = get_rpm_nvr_from_header(h)
              break
      except:
@@ -257434,7 +258323,7 @@ index 15366c3..b3e2557 100644
          nvr = None
  
      return nvr
-@@ -99,7 +99,7 @@ def get_all_ports():
+@@ -99,7 +98,7 @@ def get_all_ports():
      return dict
  
  def get_all_users():
@@ -257443,7 +258332,7 @@ index 15366c3..b3e2557 100644
      users.remove("system_u")
      users.remove("root")
      users.sort()
-@@ -142,13 +142,13 @@ poltype[RUSER] = _("Confined Root Administrator Role")
+@@ -142,13 +141,13 @@ poltype[RUSER] = _("Confined Root Administrator Role")
  poltype[NEWTYPE] = _("Module information for a new type")
  
  def get_poltype_desc():
@@ -257459,7 +258348,7 @@ index 15366c3..b3e2557 100644
  APPLICATIONS = [ DAEMON, DBUS, INETD, USER, CGI ]
  USERS = [ XUSER, TUSER, LUSER, AUSER, RUSER]
  
-@@ -182,7 +182,7 @@ def verify_ports(ports):
+@@ -182,7 +181,7 @@ def verify_ports(ports):
  
  class policy:
  
@@ -257468,7 +258357,7 @@ index 15366c3..b3e2557 100644
                  self.rpms = []
                  self.ports = []
                  self.all_roles = get_all_roles()
-@@ -191,14 +191,14 @@ class policy:
+@@ -191,14 +190,14 @@ class policy:
                  if type not in poltype:
                      raise ValueError(_("You must enter a valid policy type"))
  
@@ -257488,7 +258377,7 @@ index 15366c3..b3e2557 100644
  
                  self.symbols = {}
                  self.symbols["openlog"] = "set_use_kerberos(True)"
-@@ -290,32 +290,32 @@ class policy:
+@@ -290,32 +289,32 @@ class policy:
                  self.symbols["audit_control"] = "add_capability('audit_control')"
                  self.symbols["setfcap"] = "add_capability('setfcap')"
  
@@ -257544,7 +258433,7 @@ index 15366c3..b3e2557 100644
  ( self.generate_daemon_types, self.generate_daemon_rules), \
  ( self.generate_dbusd_types, self.generate_dbusd_rules), \
  ( self.generate_inetd_types, self.generate_inetd_rules), \
-@@ -332,47 +332,47 @@ class policy:
+@@ -332,47 +331,47 @@ class policy:
                  if not re.match(r"^[a-zA-Z0-9-_]+$", name):
                      raise ValueError(_("Name must be alpha numberic with no spaces. Consider using option \"-n MODULENAME\""))
  
@@ -257623,7 +258512,7 @@ index 15366c3..b3e2557 100644
                  self.roles = []
  
          def __isnetset(self, l):
-@@ -415,162 +415,162 @@ class policy:
+@@ -415,162 +414,162 @@ class policy:
              return self.use_tcp() or self.use_udp()
  
          def find_port(self, port, protocol="tcp"):
@@ -257848,7 +258737,7 @@ index 15366c3..b3e2557 100644
                  newte =""
                  if self.use_mail:
                      newte = re.sub("TEMPLATETYPE", self.name, executable.te_mail_rules)
-@@ -590,7 +590,7 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -590,7 +589,7 @@ allow %s_t %s_t:%s_socket name_%s;
  """ % (port_name, self.name, port_name, protocol, action)
              return line
  
@@ -257857,7 +258746,7 @@ index 15366c3..b3e2557 100644
              for i in self.in_tcp[PORTS]:
                  rec = self.find_port(int(i), "tcp")
                  if rec == None:
-@@ -628,7 +628,7 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -628,7 +627,7 @@ allow %s_t %s_t:%s_socket name_%s;
                  return re.sub("TEMPLATETYPE", self.name, network.te_types)
              return ""
  
@@ -257866,7 +258755,7 @@ index 15366c3..b3e2557 100644
              for d in self.DEFAULT_DIRS:
                  if file.find(d) == 0:
                      self.DEFAULT_DIRS[d][1].append(file)
-@@ -636,34 +636,34 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -636,34 +635,34 @@ allow %s_t %s_t:%s_socket name_%s;
              self.DEFAULT_DIRS["rw"][1].append(file)
              return self.DEFAULT_DIRS["rw"]
  
@@ -257911,7 +258800,7 @@ index 15366c3..b3e2557 100644
              newte = ""
              self.processes.sort()
              if len(self.processes) > 0:
-@@ -671,9 +671,9 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -671,9 +670,9 @@ allow %s_t %s_t:%s_socket name_%s;
              return newte
  
  
@@ -257924,7 +258813,7 @@ index 15366c3..b3e2557 100644
                      newte = "\n"
  
                      newte += re.sub("TEMPLATETYPE", self.name, network.te_network)
-@@ -726,7 +726,7 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -726,7 +725,7 @@ allow %s_t %s_t:%s_socket name_%s;
  
                          for i in self.found_udp_ports:
                              newte += i
@@ -257933,7 +258822,7 @@ index 15366c3..b3e2557 100644
  
          def generate_transition_rules(self):
              newte = ""
-@@ -751,11 +751,11 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -751,11 +750,11 @@ allow %s_t %s_t:%s_socket name_%s;
                          tmp = re.sub("TEMPLATETYPE", name, user.te_admin_domain_rules)
                          if role not in self.all_roles:
                              tmp = re.sub(role, "system_r", tmp)
@@ -257948,7 +258837,7 @@ index 15366c3..b3e2557 100644
  
              if self.type == RUSER:
                  newte += re.sub("TEMPLATETYPE", self.name, user.te_admin_rules)
-@@ -773,7 +773,7 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -773,7 +772,7 @@ allow %s_t %s_t:%s_socket name_%s;
  
              return newte
  
@@ -257957,7 +258846,7 @@ index 15366c3..b3e2557 100644
                  newif = ""
                  if self.use_dbus:
                      newif = re.sub("TEMPLATETYPE", self.name, executable.if_dbus_rules)
-@@ -809,31 +809,31 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -809,31 +808,31 @@ allow %s_t %s_t:%s_socket name_%s;
  
              return ""
  
@@ -258006,7 +258895,7 @@ index 15366c3..b3e2557 100644
                  if len(self.existing_domains) == 0:
                      raise ValueError(_("'%s' policy modules require existing domains") % poltype[self.type])
                  newte = re.sub("TEMPLATETYPE", self.name, user.te_existing_user_types)
-@@ -845,27 +845,27 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -845,27 +844,27 @@ allow %s_t %s_t:%s_socket name_%s;
                      role = d.split("_t")[0] + "_r"
                      if role in self.all_roles:
                          newte += """
@@ -258043,7 +258932,7 @@ index 15366c3..b3e2557 100644
                              newte += re.sub("TEMPLATETYPE", t[:-len(i)], self.DEFAULT_EXT[i].te_types)
                              break
  
-@@ -877,46 +877,46 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -877,46 +876,46 @@ allow %s_t %s_t:%s_socket name_%s;
  
                  return newte
  
@@ -258103,7 +258992,7 @@ index 15366c3..b3e2557 100644
                  newif = ""
                  for t in self.types:
                      for i in self.DEFAULT_EXT:
-@@ -926,46 +926,46 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -926,46 +925,46 @@ allow %s_t %s_t:%s_socket name_%s;
                              break
                  return newif
  
@@ -258175,7 +259064,7 @@ index 15366c3..b3e2557 100644
                  newif =""
                  if self.use_terminal or self.type == USER:
                      newif = re.sub("TEMPLATETYPE", self.name, executable.if_user_program_rules)
-@@ -974,7 +974,7 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -974,7 +973,7 @@ allow %s_t %s_t:%s_socket name_%s;
                      newif += re.sub("TEMPLATETYPE", self.name, executable.if_role_change_rules)
                  return newif
  
@@ -258184,7 +259073,7 @@ index 15366c3..b3e2557 100644
                  newif = ""
                  newif += re.sub("TEMPLATETYPE", self.name, executable.if_heading_rules)
                  if self.program:
-@@ -983,8 +983,8 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -983,8 +982,8 @@ allow %s_t %s_t:%s_socket name_%s;
                      newif += re.sub("TEMPLATETYPE", self.name, executable.if_initscript_rules)
  
                  for d in self.DEFAULT_KEYS:
@@ -258195,7 +259084,7 @@ index 15366c3..b3e2557 100644
                                  for i in self.DEFAULT_DIRS[d][1]:
                                          if os.path.exists(i) and stat.S_ISSOCK(os.stat(i)[stat.ST_MODE]):
                                              newif += re.sub("TEMPLATETYPE", self.name, self.DEFAULT_DIRS[d][2].if_stream_rules)
-@@ -996,17 +996,17 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -996,17 +995,17 @@ allow %s_t %s_t:%s_socket name_%s;
                  newif += self.generate_new_type_if()
                  newif += self.generate_new_rules()
  
@@ -258218,7 +259107,7 @@ index 15366c3..b3e2557 100644
              newte = ""
              if self.type in ( TUSER, XUSER, AUSER, LUSER ):
                  roles = ""
-@@ -1018,12 +1018,12 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1018,12 +1017,12 @@ allow %s_t %s_t:%s_socket name_%s;
                          newte += re.sub("ROLE", role, tmp)
              return newte
  
@@ -258236,7 +259125,7 @@ index 15366c3..b3e2557 100644
                                      newte += re.sub("TEMPLATETYPE", self.name, self.DEFAULT_DIRS[d][2].te_types)
  
                  if self.type != EUSER:
-@@ -1035,14 +1035,14 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1035,14 +1034,14 @@ allow %s_t %s_t:%s_socket name_%s;
  """ % self.name
                  newte += self.generate_capabilities()
                  newte += self.generate_process()
@@ -258257,7 +259146,7 @@ index 15366c3..b3e2557 100644
                              if self.type == EUSER:
                                  newte_tmp = ""
                                  for domain in self.existing_domains:
-@@ -1060,40 +1060,40 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1060,40 +1059,40 @@ allow %s_t %s_t:%s_socket name_%s;
                                          newte += re.sub("TEMPLATETYPE", self.name, self.DEFAULT_DIRS[d][2].te_stream_rules)
                                      break
  
@@ -258325,7 +259214,7 @@ index 15366c3..b3e2557 100644
                          fclist.append(re.sub("FILETYPE", self.dirs[i][0], t2))
  
                  if self.type in USERS +  [ SANDBOX ]:
-@@ -1113,9 +1113,9 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1113,9 +1112,9 @@ allow %s_t %s_t:%s_socket name_%s;
  
                  fclist.sort()
                  newfc="\n".join(fclist)
@@ -258337,7 +259226,7 @@ index 15366c3..b3e2557 100644
              newsh = ""
              if self.type not in ( TUSER, XUSER, AUSER, LUSER, RUSER):
                  return newsh
-@@ -1141,7 +1141,7 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1141,7 +1140,7 @@ allow %s_t %s_t:%s_socket name_%s;
  
              return newsh
  
@@ -258346,7 +259235,7 @@ index 15366c3..b3e2557 100644
                  temp  = re.sub("TEMPLATETYPE", self.file_name, script.compile)
                  temp  = re.sub("DOMAINTYPE", self.name, temp)
                  if self.type == EUSER:
-@@ -1155,11 +1155,11 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1155,11 +1154,11 @@ allow %s_t %s_t:%s_socket name_%s;
                  if self.initscript != "":
                      newsh += re.sub("FILENAME", self.initscript, script.restorecon)
  
@@ -258362,7 +259251,7 @@ index 15366c3..b3e2557 100644
  
                  for i in self.in_tcp[PORTS] + self.out_tcp[PORTS]:
                      if self.find_port(i,"tcp") == None:
-@@ -1168,88 +1168,88 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1168,90 +1167,91 @@ allow %s_t %s_t:%s_socket name_%s;
  
                  for i in self.in_udp[PORTS]:
                      if self.find_port(i,"udp") == None:
@@ -258528,8 +259417,23 @@ index 15366c3..b3e2557 100644
 +            return fcfile
  
          def __extract_rpms(self):
++            import yum
              yb = yum.YumBase()
-@@ -1313,10 +1313,10 @@ allow %s_t %s_t:%s_socket name_%s;
+             yb.setCacheDir()
+ 
+@@ -1293,7 +1293,10 @@ allow %s_t %s_t:%s_socket name_%s;
+                                 self.add_dir(fname)
+ 
+         def gen_writeable(self):
+-            self.__extract_rpms()
++            try:
++                self.__extract_rpms()
++            except ImportError:
++                pass
+ 
+             if os.path.isfile("/var/run/%s.pid"  % self.name):
+                 self.add_file("/var/run/%s.pid"  % self.name)
+@@ -1313,10 +1316,10 @@ allow %s_t %s_t:%s_socket name_%s;
              if os.path.isfile("/etc/rc.d/init.d/%s"  % self.name):
                  self.set_init_script("/etc/rc\.d/init\.d/%s"  % self.name)
  
@@ -258542,7 +259446,7 @@ index 15366c3..b3e2557 100644
                  temp_dirs = []
                  try:
                      temp_basepath = self.DEFAULT_DIRS[p][1][0] + "/"
-@@ -1331,9 +1331,9 @@ allow %s_t %s_t:%s_socket name_%s;
+@@ -1331,9 +1334,9 @@ allow %s_t %s_t:%s_socket name_%s;
  
                  if len(temp_dirs) is not 0:
                      for i in temp_dirs:
@@ -258554,7 +259458,7 @@ index 15366c3..b3e2557 100644
                              del(self.files[i])
                          else:
                              continue
-@@ -1355,10 +1355,10 @@ Warning %s does not exist
+@@ -1355,10 +1358,10 @@ Warning %s does not exist
              for s in fd.read().split():
                  for b in self.symbols:
                      if s.startswith(b):
@@ -258907,7 +259811,7 @@ index bbabb3b..63cff9b 100644
                  os.remove(v)
  
 diff --git a/policycoreutils/sepolicy/sepolicy/manpage.py b/policycoreutils/sepolicy/sepolicy/manpage.py
-index ba15b2c..09066d9 100755
+index ba15b2c..1765b1c 100755
 --- a/policycoreutils/sepolicy/sepolicy/manpage.py
 +++ b/policycoreutils/sepolicy/sepolicy/manpage.py
 @@ -30,7 +30,7 @@ import selinux
@@ -259091,7 +259995,12 @@ index ba15b2c..09066d9 100755
  
  def prettyprint(f,trim):
      return " ".join(f[:-len(trim)].split("_"))
-@@ -139,68 +139,73 @@ fedora_releases = ["Fedora17","Fedora18"]
+@@ -135,72 +135,77 @@ def prettyprint(f,trim):
+ manpage_domains = []
+ manpage_roles = []
+ 
+-fedora_releases = ["Fedora17","Fedora18"]
++fedora_releases = ["Fedora17","Fedora18","Fedora19","Fedora20"]
  rhel_releases = ["RHEL6","RHEL7"]
  
  def get_alphabet_manpages(manpage_list):
@@ -259122,14 +260031,14 @@ index ba15b2c..09066d9 100755
 -		fd.write(output)
 -		fd.close()
 +        try:
-+                subprocess.check_output("/usr/bin/groff -man -Thtml %s 2>/dev/null" % manpage, 
++                man_page = subprocess.check_output("/usr/bin/groff -man -Thtml %s 2>/dev/null" % manpage, 
 +                                        stderr=subprocess.STDOUT,
 +                                        shell=True)
 +        except subprocess.CalledProcessError as e:
 +                sys.stderr.write(e.output)
 +                return
 +        fd = open(html_manpage,'w')
-+        fd.write(output)
++        fd.write(man_page)
 +        fd.close()
 +        print(html_manpage)
  


More information about the scm-commits mailing list