From 18e735df1babc89fd966859e0400b62e603b880c Mon Sep 17 00:00:00 2001 From: Petr Lautrbach Date: Fri, 22 Mar 2019 17:35:38 +0100 Subject: [PATCH] Use separate patches instead of *-fedora.patch'es Using patches from git makes it clean which changes are included in Fedora New workflow: 1. clone https://github.com/fedora-selinux/selinux 2. create patchset $ git format-patch 20190315 -- policycoreutils python gui sandbox dbus semodule-utils restorecond 3. update spec file $ for j in [0-9]*.patch; do printf "Patch%s: %s\n" ${j/-*/} $j; done # deleted: restorecond-fedora.patch --- ...engui.py-to-usr-bin-selinux-polgengu.patch | 43 + ...ktop-files-to-usr-share-applications.patch | 49 + ...t-to-Xephyr-as-it-works-better-with-.patch | 26 + ...RD_FILE_CONTEXT-section-in-man-pages.patch | 46 + ...xecutable-we-don-t-want-to-print-a-p.patch | 27 + ...sepolicy-manpage-web-functionality.-.patch | 169 + ...e-the-trailing-newline-for-etc-syste.patch | 26 + ...-in-manpage.py-to-not-contain-online.patch | 25 + ...t-be-verbose-if-you-are-not-on-a-tty.patch | 24 + ...d-interface-file_type_is_executable-.patch | 63 + ...her-small-optimization-for-mcs-types.patch | 53 + ...ion-files-into-the-right-sub-directo.patch | 515 ++ ...ettext-domains-in-python-gui-sandbox.patch | 306 ++ ...al-.pot-files-for-gui-python-sandbox.patch | 4532 +++++++++++++++++ ...setfiles-Improve-description-of-d-sw.patch | 30 + ...rate-Handle-more-reserved-port-types.patch | 71 + ...ix-RESOURCE_LEAK-coverity-scan-defec.patch | 24 + ...hbox-window-manager-instead-of-openb.patch | 74 + ...-python-Use-ipaddress-instead-of-IPy.patch | 45 + ...Do-not-traceback-when-the-default-po.patch | 93 + policycoreutils-fedora.patch | 139 - policycoreutils.spec | 121 +- restorecond-fedora.patch | 0 selinux-dbus-fedora.patch | 0 selinux-gui-fedora.patch | 313 -- selinux-python-fedora.patch | 512 -- selinux-sandbox-fedora.patch | 186 - semodule-utils-fedora.patch | 12 - 28 files changed, 6311 insertions(+), 1213 deletions(-) create mode 100644 0001-gui-Install-polgengui.py-to-usr-bin-selinux-polgengu.patch create mode 100644 0002-gui-Install-.desktop-files-to-usr-share-applications.patch create mode 100644 0003-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch create mode 100644 0004-Fix-STANDARD_FILE_CONTEXT-section-in-man-pages.patch create mode 100644 0005-If-there-is-no-executable-we-don-t-want-to-print-a-p.patch create mode 100644 0006-Simplication-of-sepolicy-manpage-web-functionality.-.patch create mode 100644 0007-We-want-to-remove-the-trailing-newline-for-etc-syste.patch create mode 100644 0008-Fix-title-in-manpage.py-to-not-contain-online.patch create mode 100644 0009-Don-t-be-verbose-if-you-are-not-on-a-tty.patch create mode 100644 0010-sepolicy-Drop-old-interface-file_type_is_executable-.patch create mode 100644 0011-sepolicy-Another-small-optimization-for-mcs-types.patch create mode 100644 0012-Move-po-translation-files-into-the-right-sub-directo.patch create mode 100644 0013-Use-correct-gettext-domains-in-python-gui-sandbox.patch create mode 100644 0014-Initial-.pot-files-for-gui-python-sandbox.patch create mode 100644 0016-policycoreutils-setfiles-Improve-description-of-d-sw.patch create mode 100644 0017-sepolicy-generate-Handle-more-reserved-port-types.patch create mode 100644 0018-semodule-utils-Fix-RESOURCE_LEAK-coverity-scan-defec.patch create mode 100644 0019-sandbox-Use-matchbox-window-manager-instead-of-openb.patch create mode 100644 0020-python-Use-ipaddress-instead-of-IPy.patch create mode 100644 0021-python-semanage-Do-not-traceback-when-the-default-po.patch delete mode 100644 policycoreutils-fedora.patch delete mode 100644 restorecond-fedora.patch delete mode 100644 selinux-dbus-fedora.patch delete mode 100644 selinux-gui-fedora.patch delete mode 100644 selinux-python-fedora.patch delete mode 100644 selinux-sandbox-fedora.patch delete mode 100644 semodule-utils-fedora.patch diff --git a/0001-gui-Install-polgengui.py-to-usr-bin-selinux-polgengu.patch b/0001-gui-Install-polgengui.py-to-usr-bin-selinux-polgengu.patch new file mode 100644 index 0000000..d75ca4b --- /dev/null +++ b/0001-gui-Install-polgengui.py-to-usr-bin-selinux-polgengu.patch @@ -0,0 +1,43 @@ +From c778509dd0ed3b184d720032f31971f975e42973 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Tue, 5 Mar 2019 17:38:55 +0100 +Subject: [PATCH] gui: Install polgengui.py to /usr/bin/selinux-polgengui + +polgengui.py is a standalone gui tool which should be in /usr/bin with other +tools. + +Signed-off-by: Petr Lautrbach +--- + gui/Makefile | 2 +- + gui/modulesPage.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gui/Makefile b/gui/Makefile +index c2f982de..b2375fbf 100644 +--- a/gui/Makefile ++++ b/gui/Makefile +@@ -31,7 +31,7 @@ install: all + -mkdir -p $(DESTDIR)$(DATADIR)/polkit-1/actions/ + install -m 755 system-config-selinux.py $(DESTDIR)$(SHAREDIR) + install -m 755 system-config-selinux $(DESTDIR)$(BINDIR) +- install -m 755 polgengui.py $(DESTDIR)$(SHAREDIR) ++ install -m 755 polgengui.py $(DESTDIR)$(BINDIR)/selinux-polgengui + install -m 644 $(TARGETS) $(DESTDIR)$(SHAREDIR) + install -m 644 system-config-selinux.8 $(DESTDIR)$(MANDIR)/man8 + install -m 644 selinux-polgengui.8 $(DESTDIR)$(MANDIR)/man8 +diff --git a/gui/modulesPage.py b/gui/modulesPage.py +index 34c5d9e3..cb856b2d 100644 +--- a/gui/modulesPage.py ++++ b/gui/modulesPage.py +@@ -118,7 +118,7 @@ class modulesPage(semanagePage): + + def new_module(self, args): + try: +- Popen(["/usr/share/system-config-selinux/polgengui.py"]) ++ Popen(["selinux-polgengui"]) + except ValueError as e: + self.error(e.args[0]) + +-- +2.22.0 + diff --git a/0002-gui-Install-.desktop-files-to-usr-share-applications.patch b/0002-gui-Install-.desktop-files-to-usr-share-applications.patch new file mode 100644 index 0000000..9043bdf --- /dev/null +++ b/0002-gui-Install-.desktop-files-to-usr-share-applications.patch @@ -0,0 +1,49 @@ +From 04b632e6de14ec0336e14988bf4c2bd581f7308e Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Tue, 5 Mar 2019 17:25:00 +0100 +Subject: [PATCH] gui: Install .desktop files to /usr/share/applications by + default + +/usr/share/applications is a standard directory for .desktop files. +Installation path can be changed using DESKTOPDIR variable in installation +phase, e.g. + +make DESKTOPDIR=/usr/local/share/applications install + +Signed-off-by: Petr Lautrbach +--- + gui/Makefile | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/gui/Makefile b/gui/Makefile +index b2375fbf..ca965c94 100644 +--- a/gui/Makefile ++++ b/gui/Makefile +@@ -5,6 +5,7 @@ BINDIR ?= $(PREFIX)/bin + SHAREDIR ?= $(PREFIX)/share/system-config-selinux + DATADIR ?= $(PREFIX)/share + MANDIR ?= $(PREFIX)/share/man ++DESKTOPDIR ?= $(PREFIX)/share/applications + + TARGETS= \ + booleansPage.py \ +@@ -29,6 +30,7 @@ install: all + -mkdir -p $(DESTDIR)$(DATADIR)/pixmaps + -mkdir -p $(DESTDIR)$(DATADIR)/icons/hicolor/24x24/apps + -mkdir -p $(DESTDIR)$(DATADIR)/polkit-1/actions/ ++ -mkdir -p $(DESTDIR)$(DESKTOPDIR) + install -m 755 system-config-selinux.py $(DESTDIR)$(SHAREDIR) + install -m 755 system-config-selinux $(DESTDIR)$(BINDIR) + install -m 755 polgengui.py $(DESTDIR)$(BINDIR)/selinux-polgengui +@@ -44,7 +46,7 @@ install: all + install -m 644 system-config-selinux.png $(DESTDIR)$(DATADIR)/pixmaps + install -m 644 system-config-selinux.png $(DESTDIR)$(DATADIR)/icons/hicolor/24x24/apps + install -m 644 system-config-selinux.png $(DESTDIR)$(DATADIR)/system-config-selinux +- install -m 644 *.desktop $(DESTDIR)$(DATADIR)/system-config-selinux ++ install -m 644 *.desktop $(DESTDIR)$(DESKTOPDIR) + -mkdir -p $(DESTDIR)$(DATADIR)/pixmaps + install -m 644 sepolicy_256.png $(DESTDIR)$(DATADIR)/pixmaps/sepolicy.png + for i in 16 22 32 48 256; do \ +-- +2.22.0 + diff --git a/0003-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch b/0003-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch new file mode 100644 index 0000000..6501d36 --- /dev/null +++ b/0003-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch @@ -0,0 +1,26 @@ +From 52e0583f6adfe70825b009b626e19c290b49763a Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Thu, 20 Aug 2015 12:58:41 +0200 +Subject: [PATCH] sandbox: add -reset to Xephyr as it works better with it in + recent Fedoras + +--- + sandbox/sandboxX.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sandbox/sandboxX.sh b/sandbox/sandboxX.sh +index eaa500d0..47745280 100644 +--- a/sandbox/sandboxX.sh ++++ b/sandbox/sandboxX.sh +@@ -20,7 +20,7 @@ cat > ~/.config/openbox/rc.xml << EOF + + EOF + +-(/usr/bin/Xephyr -resizeable -title "$TITLE" -terminate -screen $SCREENSIZE -dpi $DPI -nolisten tcp -displayfd 5 5>&1 2>/dev/null) | while read D; do ++(/usr/bin/Xephyr -resizeable -title "$TITLE" -terminate -reset -screen $SCREENSIZE -dpi $DPI -nolisten tcp -displayfd 5 5>&1 2>/dev/null) | while read D; do + export DISPLAY=:$D + cat > ~/seremote << __EOF + #!/bin/sh +-- +2.22.0 + diff --git a/0004-Fix-STANDARD_FILE_CONTEXT-section-in-man-pages.patch b/0004-Fix-STANDARD_FILE_CONTEXT-section-in-man-pages.patch new file mode 100644 index 0000000..641170d --- /dev/null +++ b/0004-Fix-STANDARD_FILE_CONTEXT-section-in-man-pages.patch @@ -0,0 +1,46 @@ +From 7504614fdd7dcf11b3a7568ca9b4b921973531dd Mon Sep 17 00:00:00 2001 +From: Dan Walsh +Date: Mon, 21 Apr 2014 13:54:40 -0400 +Subject: [PATCH] Fix STANDARD_FILE_CONTEXT section in man pages + +Signed-off-by: Miroslav Grepl +--- + python/sepolicy/sepolicy/manpage.py | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py +index 1d367962..24e311a3 100755 +--- a/python/sepolicy/sepolicy/manpage.py ++++ b/python/sepolicy/sepolicy/manpage.py +@@ -735,10 +735,13 @@ Default Defined Ports:""") + + def _file_context(self): + flist = [] ++ flist_non_exec = [] + mpaths = [] + for f in self.all_file_types: + if f.startswith(self.domainname): + flist.append(f) ++ if not file_type_is_executable(f) or not file_type_is_entrypoint(f): ++ flist_non_exec.append(f) + if f in self.fcdict: + mpaths = mpaths + self.fcdict[f]["regex"] + if len(mpaths) == 0: +@@ -797,12 +800,12 @@ SELinux %(domainname)s policy is very flexible allowing users to setup their %(d + SELinux defines the file context types for the %(domainname)s, if you wanted to + store files with these types in a diffent paths, you need to execute the semanage command to sepecify alternate labeling and then use restorecon to put the labels on disk. + +-.B semanage fcontext -a -t %(type)s '/srv/%(domainname)s/content(/.*)?' ++.B semanage fcontext -a -t %(type)s '/srv/my%(domainname)s_content(/.*)?' + .br + .B restorecon -R -v /srv/my%(domainname)s_content + + Note: SELinux often uses regular expressions to specify labels that match multiple files. +-""" % {'domainname': self.domainname, "type": flist[0]}) ++""" % {'domainname': self.domainname, "type": flist_non_exec[-1]}) + + self.fd.write(r""" + .I The following file types are defined for %(domainname)s: +-- +2.22.0 + diff --git a/0005-If-there-is-no-executable-we-don-t-want-to-print-a-p.patch b/0005-If-there-is-no-executable-we-don-t-want-to-print-a-p.patch new file mode 100644 index 0000000..4c29df6 --- /dev/null +++ b/0005-If-there-is-no-executable-we-don-t-want-to-print-a-p.patch @@ -0,0 +1,27 @@ +From 9847a26b7f8358432ee4c7019efb3cbad0c162b0 Mon Sep 17 00:00:00 2001 +From: Miroslav Grepl +Date: Mon, 12 May 2014 14:11:22 +0200 +Subject: [PATCH] If there is no executable we don't want to print a part of + STANDARD FILE CONTEXT + +--- + python/sepolicy/sepolicy/manpage.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py +index 24e311a3..46092be0 100755 +--- a/python/sepolicy/sepolicy/manpage.py ++++ b/python/sepolicy/sepolicy/manpage.py +@@ -793,7 +793,8 @@ SELinux %(domainname)s policy is very flexible allowing users to setup their %(d + .PP + """ % {'domainname': self.domainname, 'equiv': e, 'alt': e.split('/')[-1]}) + +- self.fd.write(r""" ++ if flist_non_exec: ++ self.fd.write(r""" + .PP + .B STANDARD FILE CONTEXT + +-- +2.22.0 + diff --git a/0006-Simplication-of-sepolicy-manpage-web-functionality.-.patch b/0006-Simplication-of-sepolicy-manpage-web-functionality.-.patch new file mode 100644 index 0000000..740964c --- /dev/null +++ b/0006-Simplication-of-sepolicy-manpage-web-functionality.-.patch @@ -0,0 +1,169 @@ +From b2993d464e05291020dbf60fc2948ac152eb0003 Mon Sep 17 00:00:00 2001 +From: Miroslav Grepl +Date: Thu, 19 Feb 2015 17:45:15 +0100 +Subject: [PATCH] Simplication of sepolicy-manpage web functionality. + system_release is no longer hardcoded and it creates only index.html and html + man pages in the directory for the system release. + +--- + python/sepolicy/sepolicy/__init__.py | 25 +++-------- + python/sepolicy/sepolicy/manpage.py | 65 +++------------------------- + 2 files changed, 13 insertions(+), 77 deletions(-) + +diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py +index 6aed31bd..88a2b8f6 100644 +--- a/python/sepolicy/sepolicy/__init__.py ++++ b/python/sepolicy/sepolicy/__init__.py +@@ -1209,27 +1209,14 @@ def boolean_desc(boolean): + + + def get_os_version(): +- os_version = "" +- pkg_name = "selinux-policy" ++ system_release = "" + try: +- try: +- from commands import getstatusoutput +- except ImportError: +- from subprocess import getstatusoutput +- rc, output = getstatusoutput("rpm -q '%s'" % pkg_name) +- if rc == 0: +- os_version = output.split(".")[-2] +- except: +- os_version = "" +- +- if os_version[0:2] == "fc": +- os_version = "Fedora" + os_version[2:] +- elif os_version[0:2] == "el": +- os_version = "RHEL" + os_version[2:] +- else: +- os_version = "" ++ with open('/etc/system-release') as f: ++ system_release = f.readline() ++ except IOError: ++ system_release = "Misc" + +- return os_version ++ return system_release + + + def reinit(): +diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py +index 46092be0..d60acfaf 100755 +--- a/python/sepolicy/sepolicy/manpage.py ++++ b/python/sepolicy/sepolicy/manpage.py +@@ -149,10 +149,6 @@ def prettyprint(f, trim): + manpage_domains = [] + manpage_roles = [] + +-fedora_releases = ["Fedora17", "Fedora18"] +-rhel_releases = ["RHEL6", "RHEL7"] +- +- + def get_alphabet_manpages(manpage_list): + alphabet_manpages = dict.fromkeys(string.ascii_letters, []) + for i in string.ascii_letters: +@@ -182,7 +178,7 @@ def convert_manpage_to_html(html_manpage, manpage): + class HTMLManPages: + + """ +- Generate a HHTML Manpages on an given SELinux domains ++ Generate a HTML Manpages on an given SELinux domains + """ + + def __init__(self, manpage_roles, manpage_domains, path, os_version): +@@ -190,9 +186,9 @@ class HTMLManPages: + self.manpage_domains = get_alphabet_manpages(manpage_domains) + self.os_version = os_version + self.old_path = path + "/" +- self.new_path = self.old_path + self.os_version + "/" ++ self.new_path = self.old_path + +- if self.os_version in fedora_releases or self.os_version in rhel_releases: ++ if self.os_version: + self.__gen_html_manpages() + else: + print("SELinux HTML man pages can not be generated for this %s" % os_version) +@@ -201,7 +197,6 @@ class HTMLManPages: + def __gen_html_manpages(self): + self._write_html_manpage() + self._gen_index() +- self._gen_body() + self._gen_css() + + def _write_html_manpage(self): +@@ -219,67 +214,21 @@ class HTMLManPages: + convert_manpage_to_html((self.new_path + r.rsplit("_selinux", 1)[0] + ".html"), self.old_path + r) + + def _gen_index(self): +- index = self.old_path + "index.html" +- fd = open(index, 'w') +- fd.write(""" +- +- +- +- SELinux man pages online +- +- +-

SELinux man pages

+-

+-Fedora or Red Hat Enterprise Linux Man Pages. +-

+-
+-

Fedora

+- +- +-
+-
+-
+-""")
+-        for f in fedora_releases:
+-            fd.write("""
+-%s - SELinux man pages for %s """ % (f, f, f, f))
+-
+-        fd.write("""
+-
+-
+-

RHEL

+- +- +-
+-
+-
+-""")
+-        for r in rhel_releases:
+-            fd.write("""
+-%s - SELinux man pages for %s """ % (r, r, r, r))
+-
+-        fd.write("""
+-
+- """) +- fd.close() +- print("%s has been created" % index) +- +- def _gen_body(self): + html = self.new_path + self.os_version + ".html" + fd = open(html, 'w') + fd.write(""" + + +- +- Linux man-pages online for Fedora18 ++ ++ SELinux man pages online + + +-

SELinux man pages for Fedora18

++

SELinux man pages for %s

+
+ +
+

SELinux roles

+-""") ++""" % self.os_version) + for letter in self.manpage_roles: + if len(self.manpage_roles[letter]): + fd.write(""" +-- +2.22.0 + diff --git a/0007-We-want-to-remove-the-trailing-newline-for-etc-syste.patch b/0007-We-want-to-remove-the-trailing-newline-for-etc-syste.patch new file mode 100644 index 0000000..e9e249e --- /dev/null +++ b/0007-We-want-to-remove-the-trailing-newline-for-etc-syste.patch @@ -0,0 +1,26 @@ +From bfcb599d9424ef6ffcd250931c89675b451edd00 Mon Sep 17 00:00:00 2001 +From: Miroslav Grepl +Date: Fri, 20 Feb 2015 16:42:01 +0100 +Subject: [PATCH] We want to remove the trailing newline for + /etc/system_release. + +--- + python/sepolicy/sepolicy/__init__.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py +index 88a2b8f6..0c66f4d5 100644 +--- a/python/sepolicy/sepolicy/__init__.py ++++ b/python/sepolicy/sepolicy/__init__.py +@@ -1212,7 +1212,7 @@ def get_os_version(): + system_release = "" + try: + with open('/etc/system-release') as f: +- system_release = f.readline() ++ system_release = f.readline().rstrip() + except IOError: + system_release = "Misc" + +-- +2.22.0 + diff --git a/0008-Fix-title-in-manpage.py-to-not-contain-online.patch b/0008-Fix-title-in-manpage.py-to-not-contain-online.patch new file mode 100644 index 0000000..1bb568c --- /dev/null +++ b/0008-Fix-title-in-manpage.py-to-not-contain-online.patch @@ -0,0 +1,25 @@ +From 4ea504acce6389c3e28134c4b8e6bf9072c295ce Mon Sep 17 00:00:00 2001 +From: Miroslav Grepl +Date: Fri, 20 Feb 2015 16:42:53 +0100 +Subject: [PATCH] Fix title in manpage.py to not contain 'online'. + +--- + python/sepolicy/sepolicy/manpage.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py +index d60acfaf..de8184d8 100755 +--- a/python/sepolicy/sepolicy/manpage.py ++++ b/python/sepolicy/sepolicy/manpage.py +@@ -220,7 +220,7 @@ class HTMLManPages: + + + +- SELinux man pages online ++ SELinux man pages + + +

SELinux man pages for %s

+-- +2.22.0 + diff --git a/0009-Don-t-be-verbose-if-you-are-not-on-a-tty.patch b/0009-Don-t-be-verbose-if-you-are-not-on-a-tty.patch new file mode 100644 index 0000000..894fdc6 --- /dev/null +++ b/0009-Don-t-be-verbose-if-you-are-not-on-a-tty.patch @@ -0,0 +1,24 @@ +From 8af697659bd662517571577bf47946a2113f34a1 Mon Sep 17 00:00:00 2001 +From: Dan Walsh +Date: Fri, 14 Feb 2014 12:32:12 -0500 +Subject: [PATCH] Don't be verbose if you are not on a tty + +--- + policycoreutils/scripts/fixfiles | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/policycoreutils/scripts/fixfiles b/policycoreutils/scripts/fixfiles +index b2779581..53d28c7b 100755 +--- a/policycoreutils/scripts/fixfiles ++++ b/policycoreutils/scripts/fixfiles +@@ -108,6 +108,7 @@ exclude_dirs_from_relabelling() { + fullFlag=0 + BOOTTIME="" + VERBOSE="-p" ++[ -t 1 ] || VERBOSE="" + FORCEFLAG="" + RPMFILES="" + PREFC="" +-- +2.22.0 + diff --git a/0010-sepolicy-Drop-old-interface-file_type_is_executable-.patch b/0010-sepolicy-Drop-old-interface-file_type_is_executable-.patch new file mode 100644 index 0000000..223dd21 --- /dev/null +++ b/0010-sepolicy-Drop-old-interface-file_type_is_executable-.patch @@ -0,0 +1,63 @@ +From ef0f54ffc6d691d10e66a0793204edd159cd45d0 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Mon, 27 Feb 2017 17:12:39 +0100 +Subject: [PATCH] sepolicy: Drop old interface file_type_is_executable(f) and + file_type_is_entrypoint(f) + +- use direct queries +- load exec_types and entry_types only once +--- + python/sepolicy/sepolicy/manpage.py | 22 ++++++++++++++++++++-- + 1 file changed, 20 insertions(+), 2 deletions(-) + +diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py +index de8184d8..f8a94fc0 100755 +--- a/python/sepolicy/sepolicy/manpage.py ++++ b/python/sepolicy/sepolicy/manpage.py +@@ -125,8 +125,24 @@ def gen_domains(): + domains.sort() + return domains + +-types = None + ++exec_types = None ++ ++def _gen_exec_types(): ++ global exec_types ++ if exec_types is None: ++ exec_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "exec_type"))["types"] ++ return exec_types ++ ++entry_types = None ++ ++def _gen_entry_types(): ++ global entry_types ++ if entry_types is None: ++ entry_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "entry_type"))["types"] ++ return entry_types ++ ++types = None + + def _gen_types(): + global types +@@ -372,6 +388,8 @@ class ManPage: + self.all_file_types = sepolicy.get_all_file_types() + self.role_allows = sepolicy.get_all_role_allows() + self.types = _gen_types() ++ self.exec_types = _gen_exec_types() ++ self.entry_types = _gen_entry_types() + + if self.source_files: + self.fcpath = self.root + "file_contexts" +@@ -689,7 +707,7 @@ Default Defined Ports:""") + for f in self.all_file_types: + if f.startswith(self.domainname): + flist.append(f) +- if not file_type_is_executable(f) or not file_type_is_entrypoint(f): ++ if not f in self.exec_types or not f in self.entry_types: + flist_non_exec.append(f) + if f in self.fcdict: + mpaths = mpaths + self.fcdict[f]["regex"] +-- +2.22.0 + diff --git a/0011-sepolicy-Another-small-optimization-for-mcs-types.patch b/0011-sepolicy-Another-small-optimization-for-mcs-types.patch new file mode 100644 index 0000000..9dcdd05 --- /dev/null +++ b/0011-sepolicy-Another-small-optimization-for-mcs-types.patch @@ -0,0 +1,53 @@ +From e54db76a3bff8e911ddd7c7ce834c024d634d9e1 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Tue, 28 Feb 2017 21:29:46 +0100 +Subject: [PATCH] sepolicy: Another small optimization for mcs types + +--- + python/sepolicy/sepolicy/manpage.py | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py +index f8a94fc0..67d39301 100755 +--- a/python/sepolicy/sepolicy/manpage.py ++++ b/python/sepolicy/sepolicy/manpage.py +@@ -142,6 +142,15 @@ def _gen_entry_types(): + entry_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "entry_type"))["types"] + return entry_types + ++mcs_constrained_types = None ++ ++def _gen_mcs_constrained_types(): ++ global mcs_constrained_types ++ if mcs_constrained_types is None: ++ mcs_constrained_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "mcs_constrained_type")) ++ return mcs_constrained_types ++ ++ + types = None + + def _gen_types(): +@@ -390,6 +399,7 @@ class ManPage: + self.types = _gen_types() + self.exec_types = _gen_exec_types() + self.entry_types = _gen_entry_types() ++ self.mcs_constrained_types = _gen_mcs_constrained_types() + + if self.source_files: + self.fcpath = self.root + "file_contexts" +@@ -944,11 +954,7 @@ All executeables with the default executable label, usually stored in /usr/bin a + %s""" % ", ".join(paths)) + + def _mcs_types(self): +- try: +- mcs_constrained_type = next(sepolicy.info(sepolicy.ATTRIBUTE, "mcs_constrained_type")) +- except StopIteration: +- return +- if self.type not in mcs_constrained_type['types']: ++ if self.type not in self.mcs_constrained_types['types']: + return + self.fd.write (""" + .SH "MCS Constrained" +-- +2.22.0 + diff --git a/0012-Move-po-translation-files-into-the-right-sub-directo.patch b/0012-Move-po-translation-files-into-the-right-sub-directo.patch new file mode 100644 index 0000000..1c4ab69 --- /dev/null +++ b/0012-Move-po-translation-files-into-the-right-sub-directo.patch @@ -0,0 +1,515 @@ +From 4015e9299bfda622e9d407cdbcc536000688aa8f Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Mon, 6 Aug 2018 13:23:00 +0200 +Subject: [PATCH] Move po/ translation files into the right sub-directories + +When policycoreutils was split into policycoreutils/ python/ gui/ and sandbox/ +sub-directories, po/ translation files stayed in policycoreutils/. + +This commit split original policycoreutils/po directory into +policycoreutils/po +python/po +gui/po +sandbox/po + +See https://github.com/fedora-selinux/selinux/issues/43 +--- + gui/Makefile | 3 ++ + gui/po/Makefile | 82 ++++++++++++++++++++++++++++++++++++ + gui/po/POTFILES | 17 ++++++++ + policycoreutils/po/Makefile | 70 ++----------------------------- + policycoreutils/po/POTFILES | 9 ++++ + python/Makefile | 2 +- + python/po/Makefile | 83 +++++++++++++++++++++++++++++++++++++ + python/po/POTFILES | 10 +++++ + sandbox/Makefile | 2 + + sandbox/po/Makefile | 82 ++++++++++++++++++++++++++++++++++++ + sandbox/po/POTFILES | 1 + + 11 files changed, 293 insertions(+), 68 deletions(-) + create mode 100644 gui/po/Makefile + create mode 100644 gui/po/POTFILES + create mode 100644 policycoreutils/po/POTFILES + create mode 100644 python/po/Makefile + create mode 100644 python/po/POTFILES + create mode 100644 sandbox/po/Makefile + create mode 100644 sandbox/po/POTFILES + +diff --git a/gui/Makefile b/gui/Makefile +index ca965c94..5a5bf6dc 100644 +--- a/gui/Makefile ++++ b/gui/Makefile +@@ -22,6 +22,7 @@ system-config-selinux.ui \ + usersPage.py + + all: $(TARGETS) system-config-selinux.py polgengui.py ++ (cd po && $(MAKE) $@) + + install: all + -mkdir -p $(DESTDIR)$(MANDIR)/man8 +@@ -54,6 +55,8 @@ install: all + install -m 644 sepolicy_$${i}.png $(DESTDIR)$(DATADIR)/icons/hicolor/$${i}x$${i}/apps/sepolicy.png; \ + done + install -m 644 org.selinux.config.policy $(DESTDIR)$(DATADIR)/polkit-1/actions/ ++ (cd po && $(MAKE) $@) ++ + clean: + + indent: +diff --git a/gui/po/Makefile b/gui/po/Makefile +new file mode 100644 +index 00000000..a0f5439f +--- /dev/null ++++ b/gui/po/Makefile +@@ -0,0 +1,82 @@ ++# ++# Makefile for the PO files (translation) catalog ++# ++ ++PREFIX ?= /usr ++ ++# What is this package? ++NLSPACKAGE = gui ++POTFILE = $(NLSPACKAGE).pot ++INSTALL = /usr/bin/install -c -p ++INSTALL_DATA = $(INSTALL) -m 644 ++INSTALL_DIR = /usr/bin/install -d ++ ++# destination directory ++INSTALL_NLS_DIR = $(PREFIX)/share/locale ++ ++# PO catalog handling ++MSGMERGE = msgmerge ++MSGMERGE_FLAGS = -q ++XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) ++MSGFMT = msgfmt ++ ++# All possible linguas ++PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po))) ++ ++# Only the files matching what the user has set in LINGUAS ++USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS)) ++ ++# if no valid LINGUAS, build all languages ++USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) ++ ++POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) ++MOFILES = $(patsubst %.po,%.mo,$(POFILES)) ++POTFILES = $(shell cat POTFILES) ++ ++#default:: clean ++ ++all:: $(MOFILES) ++ ++$(POTFILE): $(POTFILES) ++ $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES) ++ @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ ++ rm -f $(NLSPACKAGE).po; \ ++ else \ ++ mv -f $(NLSPACKAGE).po $(POTFILE); \ ++ fi; \ ++ ++ ++refresh-po: Makefile ++ for cat in $(POFILES); do \ ++ lang=`basename $$cat .po`; \ ++ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ ++ mv -f $$lang.pot $$lang.po ; \ ++ echo "$(MSGMERGE) of $$lang succeeded" ; \ ++ else \ ++ echo "$(MSGMERGE) of $$lang failed" ; \ ++ rm -f $$lang.pot ; \ ++ fi \ ++ done ++ ++clean: ++ @rm -fv *mo *~ .depend ++ @rm -rf tmp ++ ++install: $(MOFILES) ++ @for n in $(MOFILES); do \ ++ l=`basename $$n .mo`; \ ++ $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ ++ $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \ ++ done ++ ++%.mo: %.po ++ $(MSGFMT) -o $@ $< ++report: ++ @for cat in $(wildcard *.po); do \ ++ echo -n "$$cat: "; \ ++ msgfmt -v --statistics -o /dev/null $$cat; \ ++ done ++ ++.PHONY: missing depend ++ ++relabel: +diff --git a/gui/po/POTFILES b/gui/po/POTFILES +new file mode 100644 +index 00000000..1795c5c1 +--- /dev/null ++++ b/gui/po/POTFILES +@@ -0,0 +1,17 @@ ++../booleansPage.py ++../domainsPage.py ++../fcontextPage.py ++../loginsPage.py ++../modulesPage.py ++../org.selinux.config.policy ++../polgengui.py ++../polgen.ui ++../portsPage.py ++../selinux-polgengui.desktop ++../semanagePage.py ++../sepolicy.desktop ++../statusPage.py ++../system-config-selinux.desktop ++../system-config-selinux.py ++../system-config-selinux.ui ++../usersPage.py +diff --git a/policycoreutils/po/Makefile b/policycoreutils/po/Makefile +index 575e1431..18bc1dff 100644 +--- a/policycoreutils/po/Makefile ++++ b/policycoreutils/po/Makefile +@@ -3,7 +3,6 @@ + # + + PREFIX ?= /usr +-TOP = ../.. + + # What is this package? + NLSPACKAGE = policycoreutils +@@ -32,74 +31,13 @@ USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) + + POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) + MOFILES = $(patsubst %.po,%.mo,$(POFILES)) +-POTFILES = \ +- ../run_init/open_init_pty.c \ +- ../run_init/run_init.c \ +- ../semodule_link/semodule_link.c \ +- ../audit2allow/audit2allow \ +- ../semanage/seobject.py \ +- ../setsebool/setsebool.c \ +- ../newrole/newrole.c \ +- ../load_policy/load_policy.c \ +- ../sestatus/sestatus.c \ +- ../semodule/semodule.c \ +- ../setfiles/setfiles.c \ +- ../semodule_package/semodule_package.c \ +- ../semodule_deps/semodule_deps.c \ +- ../semodule_expand/semodule_expand.c \ +- ../scripts/chcat \ +- ../scripts/fixfiles \ +- ../restorecond/stringslist.c \ +- ../restorecond/restorecond.h \ +- ../restorecond/utmpwatcher.h \ +- ../restorecond/stringslist.h \ +- ../restorecond/restorecond.c \ +- ../restorecond/utmpwatcher.c \ +- ../gui/booleansPage.py \ +- ../gui/fcontextPage.py \ +- ../gui/loginsPage.py \ +- ../gui/mappingsPage.py \ +- ../gui/modulesPage.py \ +- ../gui/polgen.glade \ +- ../gui/polgengui.py \ +- ../gui/portsPage.py \ +- ../gui/semanagePage.py \ +- ../gui/statusPage.py \ +- ../gui/system-config-selinux.glade \ +- ../gui/system-config-selinux.py \ +- ../gui/usersPage.py \ +- ../secon/secon.c \ +- booleans.py \ +- ../sepolicy/sepolicy.py \ +- ../sepolicy/sepolicy/communicate.py \ +- ../sepolicy/sepolicy/__init__.py \ +- ../sepolicy/sepolicy/network.py \ +- ../sepolicy/sepolicy/generate.py \ +- ../sepolicy/sepolicy/sepolicy.glade \ +- ../sepolicy/sepolicy/gui.py \ +- ../sepolicy/sepolicy/manpage.py \ +- ../sepolicy/sepolicy/transition.py \ +- ../sepolicy/sepolicy/templates/executable.py \ +- ../sepolicy/sepolicy/templates/__init__.py \ +- ../sepolicy/sepolicy/templates/network.py \ +- ../sepolicy/sepolicy/templates/rw.py \ +- ../sepolicy/sepolicy/templates/script.py \ +- ../sepolicy/sepolicy/templates/semodule.py \ +- ../sepolicy/sepolicy/templates/tmp.py \ +- ../sepolicy/sepolicy/templates/user.py \ +- ../sepolicy/sepolicy/templates/var_lib.py \ +- ../sepolicy/sepolicy/templates/var_log.py \ +- ../sepolicy/sepolicy/templates/var_run.py \ +- ../sepolicy/sepolicy/templates/var_spool.py ++POTFILES = $(shell cat POTFILES) + + #default:: clean + +-all:: $(MOFILES) ++all:: $(POTFILE) $(MOFILES) + +-booleans.py: +- sepolicy booleans -a > booleans.py +- +-$(POTFILE): $(POTFILES) booleans.py ++$(POTFILE): $(POTFILES) + $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES) + @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ + rm -f $(NLSPACKAGE).po; \ +@@ -107,8 +45,6 @@ $(POTFILE): $(POTFILES) booleans.py + mv -f $(NLSPACKAGE).po $(POTFILE); \ + fi; \ + +-update-po: Makefile $(POTFILE) refresh-po +- @rm -f booleans.py + + refresh-po: Makefile + for cat in $(POFILES); do \ +diff --git a/policycoreutils/po/POTFILES b/policycoreutils/po/POTFILES +new file mode 100644 +index 00000000..12237dc6 +--- /dev/null ++++ b/policycoreutils/po/POTFILES +@@ -0,0 +1,9 @@ ++../run_init/open_init_pty.c ++../run_init/run_init.c ++../setsebool/setsebool.c ++../newrole/newrole.c ++../load_policy/load_policy.c ++../sestatus/sestatus.c ++../semodule/semodule.c ++../setfiles/setfiles.c ++../secon/secon.c +diff --git a/python/Makefile b/python/Makefile +index 9b66d52f..00312dbd 100644 +--- a/python/Makefile ++++ b/python/Makefile +@@ -1,4 +1,4 @@ +-SUBDIRS = sepolicy audit2allow semanage sepolgen chcat ++SUBDIRS = sepolicy audit2allow semanage sepolgen chcat po + + all install relabel clean indent test: + @for subdir in $(SUBDIRS); do \ +diff --git a/python/po/Makefile b/python/po/Makefile +new file mode 100644 +index 00000000..4e052d5a +--- /dev/null ++++ b/python/po/Makefile +@@ -0,0 +1,83 @@ ++# ++# Makefile for the PO files (translation) catalog ++# ++ ++PREFIX ?= /usr ++ ++# What is this package? ++NLSPACKAGE = python ++POTFILE = $(NLSPACKAGE).pot ++INSTALL = /usr/bin/install -c -p ++INSTALL_DATA = $(INSTALL) -m 644 ++INSTALL_DIR = /usr/bin/install -d ++ ++# destination directory ++INSTALL_NLS_DIR = $(PREFIX)/share/locale ++ ++# PO catalog handling ++MSGMERGE = msgmerge ++MSGMERGE_FLAGS = -q ++XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) ++MSGFMT = msgfmt ++ ++# All possible linguas ++PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po))) ++ ++# Only the files matching what the user has set in LINGUAS ++USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS)) ++ ++# if no valid LINGUAS, build all languages ++USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) ++ ++POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) ++MOFILES = $(patsubst %.po,%.mo,$(POFILES)) ++POTFILES = $(shell cat POTFILES) ++ ++#default:: clean ++ ++all:: $(MOFILES) ++ ++$(POTFILE): $(POTFILES) ++ $(XGETTEXT) -L Python --keyword=_ --keyword=N_ $(POTFILES) ++ $(XGETTEXT) -j --keyword=_ --keyword=N_ ../sepolicy/sepolicy/sepolicy.glade ++ @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ ++ rm -f $(NLSPACKAGE).po; \ ++ else \ ++ mv -f $(NLSPACKAGE).po $(POTFILE); \ ++ fi; \ ++ ++ ++refresh-po: Makefile ++ for cat in $(POFILES); do \ ++ lang=`basename $$cat .po`; \ ++ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ ++ mv -f $$lang.pot $$lang.po ; \ ++ echo "$(MSGMERGE) of $$lang succeeded" ; \ ++ else \ ++ echo "$(MSGMERGE) of $$lang failed" ; \ ++ rm -f $$lang.pot ; \ ++ fi \ ++ done ++ ++clean: ++ @rm -fv *mo *~ .depend ++ @rm -rf tmp ++ ++install: $(MOFILES) ++ @for n in $(MOFILES); do \ ++ l=`basename $$n .mo`; \ ++ $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ ++ $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \ ++ done ++ ++%.mo: %.po ++ $(MSGFMT) -o $@ $< ++report: ++ @for cat in $(wildcard *.po); do \ ++ echo -n "$$cat: "; \ ++ msgfmt -v --statistics -o /dev/null $$cat; \ ++ done ++ ++.PHONY: missing depend ++ ++relabel: +diff --git a/python/po/POTFILES b/python/po/POTFILES +new file mode 100644 +index 00000000..128eb870 +--- /dev/null ++++ b/python/po/POTFILES +@@ -0,0 +1,10 @@ ++../audit2allow/audit2allow ++../chcat/chcat ++../semanage/semanage ++../semanage/seobject.py ++../sepolgen/src/sepolgen/interfaces.py ++../sepolicy/sepolicy/generate.py ++../sepolicy/sepolicy/gui.py ++../sepolicy/sepolicy/__init__.py ++../sepolicy/sepolicy/interface.py ++../sepolicy/sepolicy.py +diff --git a/sandbox/Makefile b/sandbox/Makefile +index 9da5e58d..b817824e 100644 +--- a/sandbox/Makefile ++++ b/sandbox/Makefile +@@ -13,6 +13,7 @@ override LDLIBS += -lselinux -lcap-ng + SEUNSHARE_OBJS = seunshare.o + + all: sandbox seunshare sandboxX.sh start ++ (cd po && $(MAKE) $@) + + seunshare: $(SEUNSHARE_OBJS) + +@@ -39,6 +40,7 @@ install: all + install -m 755 start $(DESTDIR)$(SHAREDIR) + -mkdir -p $(DESTDIR)$(SYSCONFDIR) + install -m 644 sandbox.conf $(DESTDIR)$(SYSCONFDIR)/sandbox ++ (cd po && $(MAKE) $@) + + test: + @$(PYTHON) test_sandbox.py -v +diff --git a/sandbox/po/Makefile b/sandbox/po/Makefile +new file mode 100644 +index 00000000..0556bbe9 +--- /dev/null ++++ b/sandbox/po/Makefile +@@ -0,0 +1,82 @@ ++# ++# Makefile for the PO files (translation) catalog ++# ++ ++PREFIX ?= /usr ++ ++# What is this package? ++NLSPACKAGE = sandbox ++POTFILE = $(NLSPACKAGE).pot ++INSTALL = /usr/bin/install -c -p ++INSTALL_DATA = $(INSTALL) -m 644 ++INSTALL_DIR = /usr/bin/install -d ++ ++# destination directory ++INSTALL_NLS_DIR = $(PREFIX)/share/locale ++ ++# PO catalog handling ++MSGMERGE = msgmerge ++MSGMERGE_FLAGS = -q ++XGETTEXT = xgettext -L Python --default-domain=$(NLSPACKAGE) ++MSGFMT = msgfmt ++ ++# All possible linguas ++PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po))) ++ ++# Only the files matching what the user has set in LINGUAS ++USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS)) ++ ++# if no valid LINGUAS, build all languages ++USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) ++ ++POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) ++MOFILES = $(patsubst %.po,%.mo,$(POFILES)) ++POTFILES = $(shell cat POTFILES) ++ ++#default:: clean ++ ++all:: $(POTFILE) $(MOFILES) ++ ++$(POTFILE): $(POTFILES) ++ $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES) ++ @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ ++ rm -f $(NLSPACKAGE).po; \ ++ else \ ++ mv -f $(NLSPACKAGE).po $(POTFILE); \ ++ fi; \ ++ ++ ++refresh-po: Makefile ++ for cat in $(POFILES); do \ ++ lang=`basename $$cat .po`; \ ++ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ ++ mv -f $$lang.pot $$lang.po ; \ ++ echo "$(MSGMERGE) of $$lang succeeded" ; \ ++ else \ ++ echo "$(MSGMERGE) of $$lang failed" ; \ ++ rm -f $$lang.pot ; \ ++ fi \ ++ done ++ ++clean: ++ @rm -fv *mo *~ .depend ++ @rm -rf tmp ++ ++install: $(MOFILES) ++ @for n in $(MOFILES); do \ ++ l=`basename $$n .mo`; \ ++ $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ ++ $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \ ++ done ++ ++%.mo: %.po ++ $(MSGFMT) -o $@ $< ++report: ++ @for cat in $(wildcard *.po); do \ ++ echo -n "$$cat: "; \ ++ msgfmt -v --statistics -o /dev/null $$cat; \ ++ done ++ ++.PHONY: missing depend ++ ++relabel: +diff --git a/sandbox/po/POTFILES b/sandbox/po/POTFILES +new file mode 100644 +index 00000000..deff3f2f +--- /dev/null ++++ b/sandbox/po/POTFILES +@@ -0,0 +1 @@ ++../sandbox +-- +2.22.0 + diff --git a/0013-Use-correct-gettext-domains-in-python-gui-sandbox.patch b/0013-Use-correct-gettext-domains-in-python-gui-sandbox.patch new file mode 100644 index 0000000..7d252f0 --- /dev/null +++ b/0013-Use-correct-gettext-domains-in-python-gui-sandbox.patch @@ -0,0 +1,306 @@ +From 57cd23e11e1a700802a5955e84a0a7e04c30ec73 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Mon, 6 Aug 2018 13:37:07 +0200 +Subject: [PATCH] Use correct gettext domains in python/ gui/ sandbox/ + +https://github.com/fedora-selinux/selinux/issues/43 +--- + gui/booleansPage.py | 2 +- + gui/domainsPage.py | 2 +- + gui/fcontextPage.py | 2 +- + gui/loginsPage.py | 2 +- + gui/modulesPage.py | 2 +- + gui/polgengui.py | 2 +- + gui/portsPage.py | 2 +- + gui/semanagePage.py | 2 +- + gui/statusPage.py | 2 +- + gui/system-config-selinux.py | 2 +- + gui/usersPage.py | 2 +- + python/chcat/chcat | 2 +- + python/semanage/semanage | 2 +- + python/semanage/seobject.py | 2 +- + python/sepolgen/src/sepolgen/sepolgeni18n.py | 2 +- + python/sepolicy/sepolicy.py | 2 +- + python/sepolicy/sepolicy/__init__.py | 2 +- + python/sepolicy/sepolicy/generate.py | 2 +- + python/sepolicy/sepolicy/gui.py | 2 +- + python/sepolicy/sepolicy/interface.py | 2 +- + sandbox/sandbox | 2 +- + 21 files changed, 21 insertions(+), 21 deletions(-) + +diff --git a/gui/booleansPage.py b/gui/booleansPage.py +index 7849bea2..dd12b6d6 100644 +--- a/gui/booleansPage.py ++++ b/gui/booleansPage.py +@@ -38,7 +38,7 @@ DISABLED = 2 + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/domainsPage.py b/gui/domainsPage.py +index bad5140d..6bbe4de5 100644 +--- a/gui/domainsPage.py ++++ b/gui/domainsPage.py +@@ -30,7 +30,7 @@ from semanagePage import * + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py +index 370bbee4..e424366d 100644 +--- a/gui/fcontextPage.py ++++ b/gui/fcontextPage.py +@@ -47,7 +47,7 @@ class context: + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/loginsPage.py b/gui/loginsPage.py +index b67eb8bc..cbfb0cc2 100644 +--- a/gui/loginsPage.py ++++ b/gui/loginsPage.py +@@ -29,7 +29,7 @@ from semanagePage import * + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/modulesPage.py b/gui/modulesPage.py +index cb856b2d..26ac5404 100644 +--- a/gui/modulesPage.py ++++ b/gui/modulesPage.py +@@ -30,7 +30,7 @@ from semanagePage import * + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/polgengui.py b/gui/polgengui.py +index b1cc9937..46a1bd2c 100644 +--- a/gui/polgengui.py ++++ b/gui/polgengui.py +@@ -63,7 +63,7 @@ def get_all_modules(): + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/portsPage.py b/gui/portsPage.py +index 30f58383..a537ecc8 100644 +--- a/gui/portsPage.py ++++ b/gui/portsPage.py +@@ -35,7 +35,7 @@ from semanagePage import * + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/semanagePage.py b/gui/semanagePage.py +index 4127804f..5361d69c 100644 +--- a/gui/semanagePage.py ++++ b/gui/semanagePage.py +@@ -22,7 +22,7 @@ from gi.repository import Gdk, Gtk + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/statusPage.py b/gui/statusPage.py +index 766854b1..a8f079b9 100644 +--- a/gui/statusPage.py ++++ b/gui/statusPage.py +@@ -35,7 +35,7 @@ RELABELFILE = "/.autorelabel" + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py +index c42301b6..1e0d5eb1 100644 +--- a/gui/system-config-selinux.py ++++ b/gui/system-config-selinux.py +@@ -45,7 +45,7 @@ import selinux + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/gui/usersPage.py b/gui/usersPage.py +index 26794ed5..d15d4c5a 100644 +--- a/gui/usersPage.py ++++ b/gui/usersPage.py +@@ -29,7 +29,7 @@ from semanagePage import * + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-gui" + try: + import gettext + kwargs = {} +diff --git a/python/chcat/chcat b/python/chcat/chcat +index ba398684..df2509f2 100755 +--- a/python/chcat/chcat ++++ b/python/chcat/chcat +@@ -30,7 +30,7 @@ import getopt + import selinux + import seobject + +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/python/semanage/semanage b/python/semanage/semanage +index 144cc000..56db3e0d 100644 +--- a/python/semanage/semanage ++++ b/python/semanage/semanage +@@ -27,7 +27,7 @@ import traceback + import argparse + import seobject + import sys +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py +index 13fdf531..b90b1070 100644 +--- a/python/semanage/seobject.py ++++ b/python/semanage/seobject.py +@@ -29,7 +29,7 @@ import sys + import stat + import socket + from semanage import * +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + import sepolicy + import setools + from IPy import IP +diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py +index 998c4356..56ebd807 100644 +--- a/python/sepolgen/src/sepolgen/sepolgeni18n.py ++++ b/python/sepolgen/src/sepolgen/sepolgeni18n.py +@@ -19,7 +19,7 @@ + + try: + import gettext +- t = gettext.translation( 'yumex' ) ++ t = gettext.translation( 'selinux-python' ) + _ = t.gettext + except: + def _(str): +diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py +index 1934cd86..8bd6a579 100755 +--- a/python/sepolicy/sepolicy.py ++++ b/python/sepolicy/sepolicy.py +@@ -27,7 +27,7 @@ import selinux + import sepolicy + from sepolicy import get_os_version, get_conditionals, get_conditionals_format_text + import argparse +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py +index 0c66f4d5..b6ca57c3 100644 +--- a/python/sepolicy/sepolicy/__init__.py ++++ b/python/sepolicy/sepolicy/__init__.py +@@ -13,7 +13,7 @@ import os + import re + import gzip + +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py +index 019e7836..7175d36b 100644 +--- a/python/sepolicy/sepolicy/generate.py ++++ b/python/sepolicy/sepolicy/generate.py +@@ -49,7 +49,7 @@ import sepolgen.defaults as defaults + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py +index 00fd7a11..805cee67 100644 +--- a/python/sepolicy/sepolicy/gui.py ++++ b/python/sepolicy/sepolicy/gui.py +@@ -41,7 +41,7 @@ import os + import re + import unicodedata + +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/python/sepolicy/sepolicy/interface.py b/python/sepolicy/sepolicy/interface.py +index 583091ae..e2b8d23b 100644 +--- a/python/sepolicy/sepolicy/interface.py ++++ b/python/sepolicy/sepolicy/interface.py +@@ -30,7 +30,7 @@ __all__ = ['get_all_interfaces', 'get_interfaces_from_xml', 'get_admin', 'get_us + ## + ## I18N + ## +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-python" + try: + import gettext + kwargs = {} +diff --git a/sandbox/sandbox b/sandbox/sandbox +index 1dec07ac..a12403b3 100644 +--- a/sandbox/sandbox ++++ b/sandbox/sandbox +@@ -37,7 +37,7 @@ import sepolicy + + SEUNSHARE = "/usr/sbin/seunshare" + SANDBOXSH = "/usr/share/sandbox/sandboxX.sh" +-PROGNAME = "policycoreutils" ++PROGNAME = "selinux-sandbox" + try: + import gettext + kwargs = {} +-- +2.22.0 + diff --git a/0014-Initial-.pot-files-for-gui-python-sandbox.patch b/0014-Initial-.pot-files-for-gui-python-sandbox.patch new file mode 100644 index 0000000..60241e3 --- /dev/null +++ b/0014-Initial-.pot-files-for-gui-python-sandbox.patch @@ -0,0 +1,4532 @@ +From c8c59758d2fb7f6cbe368c9ff8f356ea7acebb4b Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Mon, 6 Aug 2018 14:23:19 +0200 +Subject: [PATCH] Initial .pot files for gui/ python/ sandbox/ + +https://github.com/fedora-selinux/selinux/issues/43 +--- + gui/po/gui.pot | 964 ++++++++++++ + python/po/python.pot | 3375 ++++++++++++++++++++++++++++++++++++++++ + sandbox/po/sandbox.pot | 157 ++ + 3 files changed, 4496 insertions(+) + create mode 100644 gui/po/gui.pot + create mode 100644 python/po/python.pot + create mode 100644 sandbox/po/sandbox.pot + +diff --git a/gui/po/gui.pot b/gui/po/gui.pot +new file mode 100644 +index 00000000..1663b4ca +--- /dev/null ++++ b/gui/po/gui.pot +@@ -0,0 +1,964 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy ++msgid "" ++msgstr "" ++"Project-Id-Version: PACKAGE VERSION\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-08-06 14:22+0200\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"Language: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=CHARSET\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: ../booleansPage.py:198 ../system-config-selinux.ui:1025 ++msgid "Boolean" ++msgstr "" ++ ++#: ../booleansPage.py:248 ../semanagePage.py:166 ++msgid "all" ++msgstr "" ++ ++#: ../booleansPage.py:250 ../semanagePage.py:168 ++#: ../system-config-selinux.ui:961 ../system-config-selinux.ui:1097 ++#: ../system-config-selinux.ui:1506 ++msgid "Customized" ++msgstr "" ++ ++#: ../domainsPage.py:55 ../system-config-selinux.ui:1834 ++msgid "Process Domain" ++msgstr "" ++ ++#: ../domainsPage.py:63 ++msgid "Domain Name" ++msgstr "" ++ ++#: ../domainsPage.py:68 ++msgid "Mode" ++msgstr "" ++ ++#: ../domainsPage.py:101 ../domainsPage.py:112 ../domainsPage.py:156 ++#: ../statusPage.py:73 ../system-config-selinux.ui:622 ++#: ../system-config-selinux.ui:1755 ++msgid "Permissive" ++msgstr "" ++ ++#: ../fcontextPage.py:72 ../system-config-selinux.ui:1160 ++msgid "File Labeling" ++msgstr "" ++ ++#: ../fcontextPage.py:82 ++msgid "" ++"File\n" ++"Specification" ++msgstr "" ++ ++#: ../fcontextPage.py:89 ++msgid "" ++"Selinux\n" ++"File Type" ++msgstr "" ++ ++#: ../fcontextPage.py:96 ++msgid "" ++"File\n" ++"Type" ++msgstr "" ++ ++#: ../loginsPage.py:55 ../system-config-selinux.ui:1281 ++msgid "User Mapping" ++msgstr "" ++ ++#: ../loginsPage.py:59 ++msgid "" ++"Login\n" ++"Name" ++msgstr "" ++ ++#: ../loginsPage.py:63 ../usersPage.py:60 ++msgid "" ++"SELinux\n" ++"User" ++msgstr "" ++ ++#: ../loginsPage.py:66 ../usersPage.py:65 ++msgid "" ++"MLS/\n" ++"MCS Range" ++msgstr "" ++ ++#: ../loginsPage.py:135 ++#, python-format ++msgid "Login '%s' is required" ++msgstr "" ++ ++#: ../modulesPage.py:55 ../system-config-selinux.ui:1722 ++msgid "Policy Module" ++msgstr "" ++ ++#: ../modulesPage.py:65 ++msgid "Module Name" ++msgstr "" ++ ++#: ../modulesPage.py:70 ++msgid "Priority" ++msgstr "" ++ ++#: ../modulesPage.py:79 ++msgid "Kind" ++msgstr "" ++ ++#: ../modulesPage.py:147 ++msgid "Disable Audit" ++msgstr "" ++ ++#: ../modulesPage.py:150 ../system-config-selinux.ui:1659 ++msgid "Enable Audit" ++msgstr "" ++ ++#: ../modulesPage.py:175 ++msgid "Load Policy Module" ++msgstr "" ++ ++#: ../org.selinux.config.policy:11 ++msgid "Run System Config SELinux" ++msgstr "" ++ ++#: ../org.selinux.config.policy:12 ++msgid "Authentication is required to run system-config-selinux" ++msgstr "" ++ ++#: ../polgengui.py:288 ../polgen.ui:728 ++msgid "Name" ++msgstr "" ++ ++#: ../polgengui.py:290 ../polgen.ui:111 ++msgid "Description" ++msgstr "" ++ ++#: ../polgengui.py:298 ++msgid "Role" ++msgstr "" ++ ++#: ../polgengui.py:305 ++msgid "Existing_User" ++msgstr "" ++ ++#: ../polgengui.py:319 ../polgengui.py:327 ../polgengui.py:341 ++msgid "Application" ++msgstr "" ++ ++#: ../polgengui.py:386 ++#, python-format ++msgid "%s must be a directory" ++msgstr "" ++ ++#: ../polgengui.py:446 ../polgengui.py:727 ++msgid "You must select a user" ++msgstr "" ++ ++#: ../polgengui.py:576 ++msgid "Select executable file to be confined." ++msgstr "" ++ ++#: ../polgengui.py:587 ++msgid "Select init script file to be confined." ++msgstr "" ++ ++#: ../polgengui.py:597 ++msgid "Select file(s) that confined application creates or writes" ++msgstr "" ++ ++#: ../polgengui.py:604 ++msgid "Select directory(s) that the confined application owns and writes into" ++msgstr "" ++ ++#: ../polgengui.py:666 ++msgid "Select directory to generate policy files in" ++msgstr "" ++ ++#: ../polgengui.py:683 ++#, python-format ++msgid "" ++"Type %s_t already defined in current policy.\n" ++"Do you want to continue?" ++msgstr "" ++ ++#: ../polgengui.py:683 ../polgengui.py:687 ++msgid "Verify Name" ++msgstr "" ++ ++#: ../polgengui.py:687 ++#, python-format ++msgid "" ++"Module %s already loaded in current policy.\n" ++"Do you want to continue?" ++msgstr "" ++ ++#: ../polgengui.py:733 ++msgid "" ++"You must add a name made up of letters and numbers and containing no spaces." ++msgstr "" ++ ++#: ../polgengui.py:747 ++msgid "You must enter a executable" ++msgstr "" ++ ++#: ../polgengui.py:772 ../system-config-selinux.py:184 ++msgid "Configue SELinux" ++msgstr "" ++ ++#: ../polgen.ui:9 ++msgid "Red Hat 2007" ++msgstr "" ++ ++#: ../polgen.ui:11 ++msgid "GPL" ++msgstr "" ++ ++#. TRANSLATORS: Replace this string with your names, one name per line. ++#: ../polgen.ui:13 ../system-config-selinux.ui:15 ++msgid "translator-credits" ++msgstr "" ++ ++#: ../polgen.ui:34 ++msgid "Add Booleans Dialog" ++msgstr "" ++ ++#: ../polgen.ui:99 ++msgid "Boolean Name" ++msgstr "" ++ ++#: ../polgen.ui:234 ../selinux-polgengui.desktop:3 ++msgid "SELinux Policy Generation Tool" ++msgstr "" ++ ++#: ../polgen.ui:255 ++msgid "" ++"Select the policy type for the application or user role you want to " ++"confine:" ++msgstr "" ++ ++#: ../polgen.ui:288 ++msgid "Applications" ++msgstr "" ++ ++#: ../polgen.ui:320 ++msgid "Standard Init Daemon" ++msgstr "" ++ ++#: ../polgen.ui:324 ../polgen.ui:340 ++msgid "" ++"Standard Init Daemon are daemons started on boot via init scripts. Usually " ++"requires a script in /etc/rc.d/init.d" ++msgstr "" ++ ++#: ../polgen.ui:336 ++msgid "DBUS System Daemon" ++msgstr "" ++ ++#: ../polgen.ui:353 ++msgid "Internet Services Daemon (inetd)" ++msgstr "" ++ ++#: ../polgen.ui:357 ++msgid "Internet Services Daemon are daemons started by xinetd" ++msgstr "" ++ ++#: ../polgen.ui:370 ++msgid "Web Application/Script (CGI)" ++msgstr "" ++ ++#: ../polgen.ui:374 ++msgid "" ++"Web Applications/Script (CGI) CGI scripts started by the web server (apache)" ++msgstr "" ++ ++#: ../polgen.ui:387 ++msgid "User Application" ++msgstr "" ++ ++#: ../polgen.ui:391 ../polgen.ui:408 ++msgid "" ++"User Application are any application that you would like to confine that is " ++"started by a user" ++msgstr "" ++ ++#: ../polgen.ui:404 ++msgid "Sandbox" ++msgstr "" ++ ++#: ../polgen.ui:450 ++msgid "Login Users" ++msgstr "" ++ ++#: ../polgen.ui:482 ++msgid "Existing User Roles" ++msgstr "" ++ ++#: ../polgen.ui:486 ++msgid "Modify an existing login user record." ++msgstr "" ++ ++#: ../polgen.ui:499 ++msgid "Minimal Terminal User Role" ++msgstr "" ++ ++#: ../polgen.ui:503 ++msgid "" ++"This user will login to a machine only via a terminal or remote login. By " ++"default this user will have no setuid, no networking, no su, no sudo." ++msgstr "" ++ ++#: ../polgen.ui:516 ++msgid "Minimal X Windows User Role" ++msgstr "" ++ ++#: ../polgen.ui:520 ++msgid "" ++"This user can login to a machine via X or terminal. By default this user " ++"will have no setuid, no networking, no sudo, no su" ++msgstr "" ++ ++#: ../polgen.ui:533 ++msgid "User Role" ++msgstr "" ++ ++#: ../polgen.ui:537 ++msgid "" ++"User with full networking, no setuid applications without transition, no " ++"sudo, no su." ++msgstr "" ++ ++#: ../polgen.ui:550 ++msgid "Admin User Role" ++msgstr "" ++ ++#: ../polgen.ui:554 ++msgid "" ++"User with full networking, no setuid applications without transition, no su, " ++"can sudo to Root Administration Roles" ++msgstr "" ++ ++#: ../polgen.ui:596 ++msgid "Root Users" ++msgstr "" ++ ++#: ../polgen.ui:627 ++msgid "Root Admin User Role" ++msgstr "" ++ ++#: ../polgen.ui:631 ++msgid "" ++"Select Root Administrator User Role, if this user will be used to administer " ++"the machine while running as root. This user will not be able to login to " ++"the system directly." ++msgstr "" ++ ++#: ../polgen.ui:705 ++msgid "Enter name of application or user role:" ++msgstr "" ++ ++#: ../polgen.ui:739 ++msgid "Enter complete path for executable to be confined." ++msgstr "" ++ ++#: ../polgen.ui:756 ../polgen.ui:838 ../polgen.ui:2317 ++msgid "..." ++msgstr "" ++ ++#: ../polgen.ui:776 ++msgid "Enter unique name for the confined application or user role." ++msgstr "" ++ ++#: ../polgen.ui:794 ++msgid "Executable" ++msgstr "" ++ ++#: ../polgen.ui:808 ++msgid "Init script" ++msgstr "" ++ ++#: ../polgen.ui:821 ++msgid "" ++"Enter complete path to init script used to start the confined application." ++msgstr "" ++ ++#: ../polgen.ui:883 ++msgid "Select existing role to modify:" ++msgstr "" ++ ++#: ../polgen.ui:904 ++#, python-format ++msgid "Select the user roles that will transiton to the %s domain." ++msgstr "" ++ ++#: ../polgen.ui:921 ++msgid "role tab" ++msgstr "" ++ ++#: ../polgen.ui:937 ++#, python-format ++msgid "Select roles that %s will transition to:" ++msgstr "" ++ ++#: ../polgen.ui:955 ++#, python-format ++msgid "Select applications domains that %s will transition to." ++msgstr "" ++ ++#: ../polgen.ui:972 ++msgid "" ++"transition \n" ++"role tab" ++msgstr "" ++ ++#: ../polgen.ui:989 ++#, python-format ++msgid "Select the user_roles that will transition to %s:" ++msgstr "" ++ ++#: ../polgen.ui:1007 ++msgid "Select the user roles that will transiton to this applications domains." ++msgstr "" ++ ++#: ../polgen.ui:1040 ++#, python-format ++msgid "Select domains that %s will administer:" ++msgstr "" ++ ++#: ../polgen.ui:1058 ../polgen.ui:1109 ++msgid "Select the domains that you would like this user administer." ++msgstr "" ++ ++#: ../polgen.ui:1091 ++#, python-format ++msgid "Select additional roles for %s:" ++msgstr "" ++ ++#: ../polgen.ui:1142 ++#, python-format ++msgid "Enter network ports that %s binds on:" ++msgstr "" ++ ++#: ../polgen.ui:1162 ../polgen.ui:1529 ++msgid "TCP Ports" ++msgstr "" ++ ++#: ../polgen.ui:1199 ../polgen.ui:1366 ../polgen.ui:1561 ../polgen.ui:1670 ++msgid "All" ++msgstr "" ++ ++#: ../polgen.ui:1203 ../polgen.ui:1370 ++#, python-format ++msgid "Allows %s to bind to any udp port" ++msgstr "" ++ ++#: ../polgen.ui:1216 ../polgen.ui:1383 ++msgid "600-1024" ++msgstr "" ++ ++#: ../polgen.ui:1220 ../polgen.ui:1387 ++#, python-format ++msgid "Allow %s to call bindresvport with 0. Binding to port 600-1024" ++msgstr "" ++ ++#: ../polgen.ui:1233 ../polgen.ui:1400 ++msgid "Unreserved Ports (>1024)" ++msgstr "" ++ ++#: ../polgen.ui:1237 ../polgen.ui:1404 ++#, python-format ++msgid "" ++"Enter a comma separated list of udp ports or ranges of ports that %s binds " ++"to. Example: 612, 650-660" ++msgstr "" ++ ++#: ../polgen.ui:1265 ../polgen.ui:1432 ../polgen.ui:1581 ../polgen.ui:1690 ++msgid "Select Ports" ++msgstr "" ++ ++#: ../polgen.ui:1278 ../polgen.ui:1445 ++#, python-format ++msgid "Allows %s to bind to any udp ports > 1024" ++msgstr "" ++ ++#: ../polgen.ui:1329 ../polgen.ui:1638 ++msgid "UDP Ports" ++msgstr "" ++ ++#: ../polgen.ui:1492 ++msgid "" ++"Network\n" ++"Bind tab" ++msgstr "" ++ ++#: ../polgen.ui:1509 ++#, python-format ++msgid "Select network ports that %s connects to:" ++msgstr "" ++ ++#: ../polgen.ui:1565 ++#, python-format ++msgid "Allows %s to connect to any tcp port" ++msgstr "" ++ ++#: ../polgen.ui:1594 ++#, python-format ++msgid "" ++"Enter a comma separated list of tcp ports or ranges of ports that %s " ++"connects to. Example: 612, 650-660" ++msgstr "" ++ ++#: ../polgen.ui:1674 ++#, python-format ++msgid "Allows %s to connect to any udp port" ++msgstr "" ++ ++#: ../polgen.ui:1703 ++#, python-format ++msgid "" ++"Enter a comma separated list of udp ports or ranges of ports that %s " ++"connects to. Example: 612, 650-660" ++msgstr "" ++ ++#: ../polgen.ui:1760 ++#, python-format ++msgid "Select common application traits for %s:" ++msgstr "" ++ ++#: ../polgen.ui:1777 ++msgid "Writes syslog messages\t" ++msgstr "" ++ ++#: ../polgen.ui:1792 ++msgid "Create/Manipulate temporary files in /tmp" ++msgstr "" ++ ++#: ../polgen.ui:1807 ++msgid "Uses Pam for authentication" ++msgstr "" ++ ++#: ../polgen.ui:1822 ++msgid "Uses nsswitch or getpw* calls" ++msgstr "" ++ ++#: ../polgen.ui:1837 ++msgid "Uses dbus" ++msgstr "" ++ ++#: ../polgen.ui:1852 ++msgid "Sends audit messages" ++msgstr "" ++ ++#: ../polgen.ui:1867 ++msgid "Interacts with the terminal" ++msgstr "" ++ ++#: ../polgen.ui:1882 ++msgid "Sends email" ++msgstr "" ++ ++#: ../polgen.ui:1925 ++#, python-format ++msgid "Add files/directories that %s manages" ++msgstr "" ++ ++#: ../polgen.ui:2086 ++#, python-format ++msgid "" ++"Files/Directories which the %s \"manages\". Pid Files, Log Files, /var/lib " ++"Files ..." ++msgstr "" ++ ++#: ../polgen.ui:2126 ++#, python-format ++msgid "Add booleans from the %s policy:" ++msgstr "" ++ ++#: ../polgen.ui:2234 ++#, python-format ++msgid "Add/Remove booleans used by the %s domain" ++msgstr "" ++ ++#: ../polgen.ui:2272 ++#, python-format ++msgid "Which directory you will generate the %s policy?" ++msgstr "" ++ ++#: ../polgen.ui:2290 ++msgid "Policy Directory" ++msgstr "" ++ ++#: ../portsPage.py:60 ../system-config-selinux.ui:1570 ++msgid "Network Port" ++msgstr "" ++ ++#: ../portsPage.py:95 ++msgid "" ++"SELinux Port\n" ++"Type" ++msgstr "" ++ ++#: ../portsPage.py:101 ../system-config-selinux.ui:294 ++msgid "Protocol" ++msgstr "" ++ ++#: ../portsPage.py:106 ../system-config-selinux.ui:355 ++msgid "" ++"MLS/MCS\n" ++"Level" ++msgstr "" ++ ++#: ../portsPage.py:111 ++msgid "Port" ++msgstr "" ++ ++#: ../portsPage.py:213 ++#, python-format ++msgid "Port number \"%s\" is not valid. 0 < PORT_NUMBER < 65536 " ++msgstr "" ++ ++#: ../portsPage.py:258 ++msgid "List View" ++msgstr "" ++ ++#: ../portsPage.py:261 ../system-config-selinux.ui:1492 ++msgid "Group View" ++msgstr "" ++ ++#: ../selinux-polgengui.desktop:32 ../sepolicy.desktop:4 ++msgid "Generate SELinux policy modules" ++msgstr "" ++ ++#: ../selinux-polgengui.desktop:62 ../system-config-selinux.desktop:62 ++msgid "system-config-selinux" ++msgstr "" ++ ++#: ../semanagePage.py:130 ++#, python-format ++msgid "Are you sure you want to delete %s '%s'?" ++msgstr "" ++ ++#: ../semanagePage.py:130 ++#, python-format ++msgid "Delete %s" ++msgstr "" ++ ++#: ../semanagePage.py:138 ++#, python-format ++msgid "Add %s" ++msgstr "" ++ ++#: ../semanagePage.py:152 ++#, python-format ++msgid "Modify %s" ++msgstr "" ++ ++#: ../sepolicy.desktop:3 ++msgid "SELinux Policy Management Tool" ++msgstr "" ++ ++#: ../sepolicy.desktop:5 ++msgid "sepolicy" ++msgstr "" ++ ++#: ../sepolicy.desktop:11 ++msgid "policy;security;selinux;avc;permission;mac;" ++msgstr "" ++ ++#: ../statusPage.py:74 ../system-config-selinux.ui:625 ++#: ../system-config-selinux.ui:1770 ++msgid "Enforcing" ++msgstr "" ++ ++#: ../statusPage.py:79 ../system-config-selinux.ui:619 ++msgid "Disabled" ++msgstr "" ++ ++#: ../statusPage.py:98 ++msgid "Status" ++msgstr "" ++ ++#: ../statusPage.py:137 ++msgid "" ++"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?" ++msgstr "" ++ ++#: ../statusPage.py:151 ++msgid "" ++"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?" ++msgstr "" ++ ++#: ../statusPage.py:156 ++msgid "" ++"Changing to SELinux enabled 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?" ++msgstr "" ++ ++#: ../system-config-selinux.desktop:3 ++msgid "SELinux Management" ++msgstr "" ++ ++#: ../system-config-selinux.desktop:32 ++msgid "Configure SELinux in a graphical setting" ++msgstr "" ++ ++#: ../system-config-selinux.ui:11 ++msgid "" ++"Copyright (c)2006 Red Hat, Inc.\n" ++"Copyright (c) 2006 Dan Walsh " ++msgstr "" ++ ++#: ../system-config-selinux.ui:53 ../system-config-selinux.ui:433 ++msgid "Add SELinux Login Mapping" ++msgstr "" ++ ++#: ../system-config-selinux.ui:117 ++msgid "Login Name" ++msgstr "" ++ ++#: ../system-config-selinux.ui:128 ../system-config-selinux.ui:1402 ++#: ../system-config-selinux.ui:1937 ../usersPage.py:54 ++msgid "SELinux User" ++msgstr "" ++ ++#: ../system-config-selinux.ui:139 ../system-config-selinux.ui:1948 ++msgid "MLS/MCS Range" ++msgstr "" ++ ++#: ../system-config-selinux.ui:219 ++msgid "Add SELinux Network Ports" ++msgstr "" ++ ++#: ../system-config-selinux.ui:283 ++msgid "Port Number" ++msgstr "" ++ ++#: ../system-config-selinux.ui:305 ../system-config-selinux.ui:519 ++msgid "SELinux Type" ++msgstr "" ++ ++#: ../system-config-selinux.ui:406 ++msgid "all files" ++msgstr "" ++ ++#: ../system-config-selinux.ui:409 ++msgid "regular file" ++msgstr "" ++ ++#: ../system-config-selinux.ui:412 ++msgid "directory" ++msgstr "" ++ ++#: ../system-config-selinux.ui:415 ++msgid "character device" ++msgstr "" ++ ++#: ../system-config-selinux.ui:418 ++msgid "block device" ++msgstr "" ++ ++#: ../system-config-selinux.ui:421 ++msgid "socket file" ++msgstr "" ++ ++#: ../system-config-selinux.ui:424 ++msgid "symbolic link" ++msgstr "" ++ ++#: ../system-config-selinux.ui:427 ++msgid "named pipe" ++msgstr "" ++ ++#: ../system-config-selinux.ui:497 ++msgid "File Specification" ++msgstr "" ++ ++#: ../system-config-selinux.ui:508 ++msgid "File Type" ++msgstr "" ++ ++#: ../system-config-selinux.ui:569 ++msgid "MLS" ++msgstr "" ++ ++#: ../system-config-selinux.ui:631 ++msgid "SELinux Administration" ++msgstr "" ++ ++#: ../system-config-selinux.ui:648 ++msgid "_File" ++msgstr "" ++ ++#: ../system-config-selinux.ui:656 ++msgid "_Add" ++msgstr "" ++ ++#: ../system-config-selinux.ui:668 ++msgid "_Properties" ++msgstr "" ++ ++#: ../system-config-selinux.ui:680 ++msgid "_Delete" ++msgstr "" ++ ++#: ../system-config-selinux.ui:707 ++msgid "_Help" ++msgstr "" ++ ++#: ../system-config-selinux.ui:754 ++msgid "Select Management Object" ++msgstr "" ++ ++#: ../system-config-selinux.ui:767 ++msgid "Select:" ++msgstr "" ++ ++#: ../system-config-selinux.ui:797 ++msgid "System Default Enforcing Mode" ++msgstr "" ++ ++#: ../system-config-selinux.ui:826 ++msgid "Current Enforcing Mode" ++msgstr "" ++ ++#: ../system-config-selinux.ui:848 ++msgid "System Default Policy Type: " ++msgstr "" ++ ++#: ../system-config-selinux.ui:871 ++msgid "" ++"Select if you wish to relabel then entire file system on next reboot. " ++"Relabeling can take a very long time, depending on the size of the system. " ++"If you are changing policy types or going from disabled to enforcing, a " ++"relabel is required." ++msgstr "" ++ ++#: ../system-config-selinux.ui:903 ++msgid "Relabel on next reboot." ++msgstr "" ++ ++#: ../system-config-selinux.ui:947 ++msgid "Revert boolean setting to system default" ++msgstr "" ++ ++#: ../system-config-selinux.ui:960 ++msgid "Toggle between Customized and All Booleans" ++msgstr "" ++ ++#: ../system-config-selinux.ui:986 ../system-config-selinux.ui:1122 ++#: ../system-config-selinux.ui:1242 ../system-config-selinux.ui:1363 ++#: ../system-config-selinux.ui:1531 ../system-config-selinux.ui:1683 ++#: ../system-config-selinux.ui:1795 ++msgid "Filter" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1057 ++msgid "Add File Context" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1070 ++msgid "Modify File Context" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1083 ++msgid "Delete File Context" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1096 ++msgid "Toggle between all and customized file context" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1192 ++msgid "Add SELinux User Mapping" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1205 ++msgid "Modify SELinux User Mapping" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1218 ++msgid "Delete SELinux User Mapping" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1313 ++msgid "Add User" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1326 ++msgid "Modify User" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1339 ++msgid "Delete User" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1434 ++msgid "Add Network Port" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1447 ++msgid "Edit Network Port" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1460 ++msgid "Delete Network Port" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1491 ../system-config-selinux.ui:1505 ++msgid "Toggle between Customized and All Ports" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1602 ++msgid "Generate new policy module" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1614 ++msgid "Load policy module" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1627 ++msgid "Remove loadable policy module" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1658 ++msgid "" ++"Enable/Disable additional audit rules, that are normally not reported in the " ++"log files." ++msgstr "" ++ ++#: ../system-config-selinux.ui:1754 ++msgid "Change process mode to permissive." ++msgstr "" ++ ++#: ../system-config-selinux.ui:1769 ++msgid "Change process mode to enforcing" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1873 ++msgid "Add SELinux User" ++msgstr "" ++ ++#: ../system-config-selinux.ui:1970 ../usersPage.py:69 ++msgid "SELinux Roles" ++msgstr "" ++ ++#: ../usersPage.py:142 ++#, python-format ++msgid "SELinux user '%s' is required" ++msgstr "" +diff --git a/python/po/python.pot b/python/po/python.pot +new file mode 100644 +index 00000000..a279b0e8 +--- /dev/null ++++ b/python/po/python.pot +@@ -0,0 +1,3375 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy ++msgid "" ++msgstr "" ++"Project-Id-Version: PACKAGE VERSION\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-08-06 14:22+0200\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"Language: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=CHARSET\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: ../audit2allow/audit2allow:237 ++msgid "******************** IMPORTANT ***********************\n" ++msgstr "" ++ ++#: ../audit2allow/audit2allow:238 ++#, python-format ++msgid "" ++"To make this policy package active, execute:\n" ++"\n" ++"semodule -i %s\n" ++"\n" ++msgstr "" ++ ++#: ../chcat/chcat:115 ../chcat/chcat:194 ++msgid "Requires at least one category" ++msgstr "" ++ ++#: ../chcat/chcat:129 ../chcat/chcat:208 ++#, python-format ++msgid "Can not modify sensitivity levels using '+' on %s" ++msgstr "" ++ ++#: ../chcat/chcat:133 ++#, python-format ++msgid "%s is already in %s" ++msgstr "" ++ ++#: ../chcat/chcat:213 ../chcat/chcat:223 ++#, python-format ++msgid "%s is not in %s" ++msgstr "" ++ ++#: ../chcat/chcat:295 ../chcat/chcat:300 ++msgid "Can not combine +/- with other types of categories" ++msgstr "" ++ ++#: ../chcat/chcat:350 ++msgid "Can not have multiple sensitivities" ++msgstr "" ++ ++#: ../chcat/chcat:357 ++#, python-format ++msgid "Usage %s CATEGORY File ..." ++msgstr "" ++ ++#: ../chcat/chcat:358 ++#, python-format ++msgid "Usage %s -l CATEGORY user ..." ++msgstr "" ++ ++#: ../chcat/chcat:359 ++#, python-format ++msgid "Usage %s [[+|-]CATEGORY],...] File ..." ++msgstr "" ++ ++#: ../chcat/chcat:360 ++#, python-format ++msgid "Usage %s -l [[+|-]CATEGORY],...] user ..." ++msgstr "" ++ ++#: ../chcat/chcat:361 ++#, python-format ++msgid "Usage %s -d File ..." ++msgstr "" ++ ++#: ../chcat/chcat:362 ++#, python-format ++msgid "Usage %s -l -d user ..." ++msgstr "" ++ ++#: ../chcat/chcat:363 ++#, python-format ++msgid "Usage %s -L" ++msgstr "" ++ ++#: ../chcat/chcat:364 ++#, python-format ++msgid "Usage %s -L -l user" ++msgstr "" ++ ++#: ../chcat/chcat:365 ++msgid "Use -- to end option list. For example" ++msgstr "" ++ ++#: ../chcat/chcat:366 ++msgid "chcat -- -CompanyConfidential /docs/businessplan.odt" ++msgstr "" ++ ++#: ../chcat/chcat:367 ++msgid "chcat -l +CompanyConfidential juser" ++msgstr "" ++ ++#: ../chcat/chcat:436 ++#, python-format ++msgid "Options Error %s " ++msgstr "" ++ ++#: ../semanage/semanage:203 ++msgid "Select an alternate SELinux Policy Store to manage" ++msgstr "" ++ ++#: ../semanage/semanage:207 ++msgid "Select a priority for module operations" ++msgstr "" ++ ++#: ../semanage/semanage:211 ++#, python-format ++msgid "Do not print heading when listing %s object types" ++msgstr "" ++ ++#: ../semanage/semanage:215 ++msgid "Do not reload policy after commit" ++msgstr "" ++ ++#: ../semanage/semanage:219 ++#, python-format ++msgid "List %s local customizations" ++msgstr "" ++ ++#: ../semanage/semanage:223 ++#, python-format ++msgid "Add a record of the %s object type" ++msgstr "" ++ ++#: ../semanage/semanage:227 ++msgid "SELinux Type for the object" ++msgstr "" ++ ++#: ../semanage/semanage:231 ++msgid "" ++"Default SELinux Level for SELinux user, s0 Default. (MLS/MCS Systems only)" ++msgstr "" ++ ++#: ../semanage/semanage:236 ++msgid "" ++"\n" ++"MLS/MCS Security Range (MLS/MCS Systems only)\n" ++"SELinux Range for SELinux login mapping\n" ++"defaults to the SELinux user record range.\n" ++"SELinux Range for SELinux user defaults to s0.\n" ++msgstr "" ++ ++#: ../semanage/semanage:245 ++msgid "" ++"\n" ++" Protocol for the specified port (tcp|udp) or internet protocol\n" ++" version for the specified node (ipv4|ipv6).\n" ++msgstr "" ++ ++#: ../semanage/semanage:251 ++msgid "" ++"\n" ++" Subnet prefix for the specified infiniband ibpkey.\n" ++msgstr "" ++ ++#: ../semanage/semanage:256 ++msgid "" ++"\n" ++" Name for the specified infiniband end port.\n" ++msgstr "" ++ ++#: ../semanage/semanage:261 ++#, python-format ++msgid "Modify a record of the %s object type" ++msgstr "" ++ ++#: ../semanage/semanage:265 ++#, python-format ++msgid "List records of the %s object type" ++msgstr "" ++ ++#: ../semanage/semanage:269 ++#, python-format ++msgid "Delete a record of the %s object type" ++msgstr "" ++ ++#: ../semanage/semanage:273 ++msgid "Extract customizable commands, for use within a transaction" ++msgstr "" ++ ++#: ../semanage/semanage:277 ++#, python-format ++msgid "Remove all %s objects local customizations" ++msgstr "" ++ ++#: ../semanage/semanage:281 ++msgid "SELinux user name" ++msgstr "" ++ ++#: ../semanage/semanage:286 ++msgid "Manage login mappings between linux users and SELinux confined users" ++msgstr "" ++ ++#: ../semanage/semanage:303 ++#, python-format ++msgid "login_name | %%groupname" ++msgstr "" ++ ++#: ../semanage/semanage:355 ++msgid "Manage file context mapping definitions" ++msgstr "" ++ ++#: ../semanage/semanage:369 ++msgid "" ++"Substitute target path with sourcepath when generating default\n" ++" label. " ++"This is used with fcontext. Requires source and target\n" ++" path " ++"arguments. The context labeling for the target subtree is\n" ++" made " ++"equivalent to that defined for the source." ++msgstr "" ++ ++#: ../semanage/semanage:377 ++msgid "file_spec" ++msgstr "" ++ ++#: ../semanage/semanage:405 ++msgid "Manage SELinux confined users (Roles and levels for an SELinux user)" ++msgstr "" ++ ++#: ../semanage/semanage:423 ++msgid "" ++"\n" ++"SELinux Roles. You must enclose multiple roles within " ++"quotes, separate by spaces. Or specify -R multiple times.\n" ++msgstr "" ++ ++#: ../semanage/semanage:427 ++msgid "selinux_name" ++msgstr "" ++ ++#: ../semanage/semanage:455 ++msgid "Manage network port type definitions" ++msgstr "" ++ ++#: ../semanage/semanage:471 ++msgid "port | port_range" ++msgstr "" ++ ++#: ../semanage/semanage:500 ++msgid "Manage infiniband ibpkey type definitions" ++msgstr "" ++ ++#: ../semanage/semanage:516 ++msgid "pkey | pkey_range" ++msgstr "" ++ ++#: ../semanage/semanage:543 ++msgid "Manage infiniband end port type definitions" ++msgstr "" ++ ++#: ../semanage/semanage:559 ++msgid "ibendport" ++msgstr "" ++ ++#: ../semanage/semanage:586 ++msgid "Manage network interface type definitions" ++msgstr "" ++ ++#: ../semanage/semanage:601 ++msgid "interface_spec" ++msgstr "" ++ ++#: ../semanage/semanage:625 ++msgid "Manage SELinux policy modules" ++msgstr "" ++ ++#: ../semanage/semanage:637 ++msgid "Remove a module" ++msgstr "" ++ ++#: ../semanage/semanage:638 ++msgid "Disable a module" ++msgstr "" ++ ++#: ../semanage/semanage:639 ++msgid "Enable a module" ++msgstr "" ++ ++#: ../semanage/semanage:640 ++msgid "Name of the module to act on" ++msgstr "" ++ ++#: ../semanage/semanage:667 ++msgid "Manage network node type definitions" ++msgstr "" ++ ++#: ../semanage/semanage:681 ++msgid "Network Mask" ++msgstr "" ++ ++#: ../semanage/semanage:685 ++msgid "node" ++msgstr "" ++ ++#: ../semanage/semanage:710 ++msgid "Manage booleans to selectively enable functionality" ++msgstr "" ++ ++#: ../semanage/semanage:715 ++msgid "boolean" ++msgstr "" ++ ++#: ../semanage/semanage:725 ++msgid "Enable the boolean" ++msgstr "" ++ ++#: ../semanage/semanage:726 ++msgid "Disable the boolean" ++msgstr "" ++ ++#: ../semanage/semanage:743 ++msgid "semanage permissive: error: the following argument is required: type\n" ++msgstr "" ++ ++#: ../semanage/semanage:748 ++msgid "Manage process type enforcement mode" ++msgstr "" ++ ++#: ../semanage/semanage:760 ../semanage/seobject.py:2611 ++msgid "type" ++msgstr "" ++ ++#: ../semanage/semanage:771 ++msgid "Disable/Enable dontaudit rules in policy" ++msgstr "" ++ ++#: ../semanage/semanage:791 ++msgid "Output local customizations" ++msgstr "" ++ ++#: ../semanage/semanage:793 ++msgid "Output file" ++msgstr "" ++ ++#: ../semanage/semanage:871 ++msgid "Import local customizations" ++msgstr "" ++ ++#: ../semanage/semanage:874 ++msgid "Input file" ++msgstr "" ++ ++#: ../semanage/seobject.py:274 ++msgid "Could not create semanage handle" ++msgstr "" ++ ++#: ../semanage/seobject.py:282 ++msgid "SELinux policy is not managed or store cannot be accessed." ++msgstr "" ++ ++#: ../semanage/seobject.py:287 ++msgid "Cannot read policy store." ++msgstr "" ++ ++#: ../semanage/seobject.py:292 ++msgid "Could not establish semanage connection" ++msgstr "" ++ ++#: ../semanage/seobject.py:297 ++msgid "Could not test MLS enabled status" ++msgstr "" ++ ++#: ../semanage/seobject.py:303 ../semanage/seobject.py:319 ++msgid "Not yet implemented" ++msgstr "" ++ ++#: ../semanage/seobject.py:307 ++msgid "Semanage transaction already in progress" ++msgstr "" ++ ++#: ../semanage/seobject.py:316 ++msgid "Could not start semanage transaction" ++msgstr "" ++ ++#: ../semanage/seobject.py:330 ++msgid "Could not commit semanage transaction" ++msgstr "" ++ ++#: ../semanage/seobject.py:335 ++msgid "Semanage transaction not in progress" ++msgstr "" ++ ++#: ../semanage/seobject.py:349 ../semanage/seobject.py:469 ++msgid "Could not list SELinux modules" ++msgstr "" ++ ++#: ../semanage/seobject.py:356 ++msgid "Could not get module name" ++msgstr "" ++ ++#: ../semanage/seobject.py:360 ++msgid "Could not get module enabled" ++msgstr "" ++ ++#: ../semanage/seobject.py:364 ++msgid "Could not get module priority" ++msgstr "" ++ ++#: ../semanage/seobject.py:368 ++msgid "Could not get module lang_ext" ++msgstr "" ++ ++#: ../semanage/seobject.py:389 ++msgid "Module Name" ++msgstr "" ++ ++#: ../semanage/seobject.py:389 ++msgid "Priority" ++msgstr "" ++ ++#: ../semanage/seobject.py:389 ++msgid "Language" ++msgstr "" ++ ++#: ../semanage/seobject.py:392 ../sepolicy/sepolicy/sepolicy.glade:3431 ++msgid "Disabled" ++msgstr "" ++ ++#: ../semanage/seobject.py:401 ++#, python-format ++msgid "Module does not exist: %s " ++msgstr "" ++ ++#: ../semanage/seobject.py:405 ../semanage/seobject.py:432 ++#, python-format ++msgid "Invalid priority %d (needs to be between 1 and 999)" ++msgstr "" ++ ++#: ../semanage/seobject.py:415 ++msgid "Could not create module key" ++msgstr "" ++ ++#: ../semanage/seobject.py:419 ++msgid "Could not set module key name" ++msgstr "" ++ ++#: ../semanage/seobject.py:424 ++#, python-format ++msgid "Could not enable module %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:426 ++#, python-format ++msgid "Could not disable module %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:437 ++#, python-format ++msgid "Could not remove module %s (remove failed)" ++msgstr "" ++ ++#: ../semanage/seobject.py:454 ++msgid "dontaudit requires either 'on' or 'off'" ++msgstr "" ++ ++#: ../semanage/seobject.py:484 ++msgid "Builtin Permissive Types" ++msgstr "" ++ ++#: ../semanage/seobject.py:494 ++msgid "Customized Permissive Types" ++msgstr "" ++ ++#: ../semanage/seobject.py:502 ++msgid "" ++"The sepolgen python module is required to setup permissive domains.\n" ++"In some distributions it is included in the policycoreutils-devel package.\n" ++"# yum install policycoreutils-devel\n" ++"Or similar for your distro." ++msgstr "" ++ ++#: ../semanage/seobject.py:512 ++#, python-format ++msgid "Could not set permissive domain %s (module installation failed)" ++msgstr "" ++ ++#: ../semanage/seobject.py:518 ++#, python-format ++msgid "Could not remove permissive domain %s (remove failed)" ++msgstr "" ++ ++#: ../semanage/seobject.py:555 ../semanage/seobject.py:627 ++#: ../semanage/seobject.py:674 ../semanage/seobject.py:794 ++#: ../semanage/seobject.py:824 ../semanage/seobject.py:889 ++#: ../semanage/seobject.py:945 ../semanage/seobject.py:1209 ++#: ../semanage/seobject.py:1468 ../semanage/seobject.py:2442 ++#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2536 ++#: ../semanage/seobject.py:2664 ../semanage/seobject.py:2715 ++#, python-format ++msgid "Could not create a key for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:559 ../semanage/seobject.py:631 ++#: ../semanage/seobject.py:678 ../semanage/seobject.py:684 ++#, python-format ++msgid "Could not check if login mapping for %s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:561 ++#, python-format ++msgid "Login mapping for %s is already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:566 ++#, python-format ++msgid "Linux Group %s does not exist" ++msgstr "" ++ ++#: ../semanage/seobject.py:571 ++#, python-format ++msgid "Linux User %s does not exist" ++msgstr "" ++ ++#: ../semanage/seobject.py:575 ++#, python-format ++msgid "Could not create login mapping for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:579 ../semanage/seobject.py:838 ++#, python-format ++msgid "Could not set name for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:584 ../semanage/seobject.py:848 ++#, python-format ++msgid "Could not set MLS range for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:588 ++#, python-format ++msgid "Could not set SELinux user for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:592 ++#, python-format ++msgid "Could not add login mapping for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:610 ++msgid "Requires seuser or serange" ++msgstr "" ++ ++#: ../semanage/seobject.py:633 ../semanage/seobject.py:680 ++#, python-format ++msgid "Login mapping for %s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:637 ++#, python-format ++msgid "Could not query seuser for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:652 ++#, python-format ++msgid "Could not modify login mapping for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:686 ++#, python-format ++msgid "Login mapping for %s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:690 ++#, python-format ++msgid "Could not delete login mapping for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:712 ../semanage/seobject.py:745 ++#: ../semanage/seobject.py:988 ++msgid "Could not list login mappings" ++msgstr "" ++ ++#: ../semanage/seobject.py:769 ../semanage/seobject.py:781 ++#: ../sepolicy/sepolicy/sepolicy.glade:1162 ++#: ../sepolicy/sepolicy/sepolicy.glade:3156 ++msgid "Login Name" ++msgstr "" ++ ++#: ../semanage/seobject.py:769 ../semanage/seobject.py:781 ++#: ../semanage/seobject.py:1035 ../semanage/seobject.py:1040 ++#: ../sepolicy/sepolicy/sepolicy.glade:1188 ++#: ../sepolicy/sepolicy/sepolicy.glade:3174 ++#: ../sepolicy/sepolicy/sepolicy.glade:3260 ++#: ../sepolicy/sepolicy/sepolicy.glade:4915 ++msgid "SELinux User" ++msgstr "" ++ ++#: ../semanage/seobject.py:769 ++msgid "MLS/MCS Range" ++msgstr "" ++ ++#: ../semanage/seobject.py:769 ++msgid "Service" ++msgstr "" ++ ++#: ../semanage/seobject.py:797 ../semanage/seobject.py:828 ++#: ../semanage/seobject.py:893 ../semanage/seobject.py:949 ++#: ../semanage/seobject.py:955 ++#, python-format ++msgid "Could not check if SELinux user %s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:800 ../semanage/seobject.py:899 ++#: ../semanage/seobject.py:961 ++#, python-format ++msgid "Could not query user for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:820 ++#, python-format ++msgid "You must add at least one role for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:830 ++#, python-format ++msgid "SELinux user %s is already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:834 ++#, python-format ++msgid "Could not create SELinux user for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:843 ++#, python-format ++msgid "Could not add role %s for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:852 ++#, python-format ++msgid "Could not set MLS level for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:855 ++#, python-format ++msgid "Could not add prefix %s for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:858 ++#, python-format ++msgid "Could not extract key for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:862 ++#, python-format ++msgid "Could not add SELinux user %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:883 ++msgid "Requires prefix, roles, level or range" ++msgstr "" ++ ++#: ../semanage/seobject.py:885 ++msgid "Requires prefix or roles" ++msgstr "" ++ ++#: ../semanage/seobject.py:895 ../semanage/seobject.py:951 ++#, python-format ++msgid "SELinux user %s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:924 ++#, python-format ++msgid "Could not modify SELinux user %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:957 ++#, python-format ++msgid "SELinux user %s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:968 ++#, python-format ++msgid "Could not delete SELinux user %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1006 ++msgid "Could not list SELinux users" ++msgstr "" ++ ++#: ../semanage/seobject.py:1012 ++#, python-format ++msgid "Could not list roles for user %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1034 ++msgid "Labeling" ++msgstr "" ++ ++#: ../semanage/seobject.py:1034 ++msgid "MLS/" ++msgstr "" ++ ++#: ../semanage/seobject.py:1035 ++msgid "Prefix" ++msgstr "" ++ ++#: ../semanage/seobject.py:1035 ++msgid "MCS Level" ++msgstr "" ++ ++#: ../semanage/seobject.py:1035 ++msgid "MCS Range" ++msgstr "" ++ ++#: ../semanage/seobject.py:1035 ../semanage/seobject.py:1040 ++#: ../sepolicy/sepolicy/sepolicy.glade:3280 ++#: ../sepolicy/sepolicy/sepolicy.glade:5251 ++#: ../sepolicy/sepolicy/sepolicy.glade:5400 ++msgid "SELinux Roles" ++msgstr "" ++ ++#: ../semanage/seobject.py:1061 ++msgid "Protocol udp or tcp is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1063 ++msgid "Port is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1073 ++msgid "Invalid Port" ++msgstr "" ++ ++#: ../semanage/seobject.py:1077 ../semanage/seobject.py:1345 ++#, python-format ++msgid "Could not create a key for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1088 ../semanage/seobject.py:1356 ++#: ../semanage/seobject.py:1604 ++msgid "Type is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1155 ++#, python-format ++msgid "Type %s is invalid, must be a port type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1161 ++#: ../semanage/seobject.py:1227 ../semanage/seobject.py:1233 ++#, python-format ++msgid "Could not check if port %s/%s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1099 ++#, python-format ++msgid "Port %s/%s already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1103 ++#, python-format ++msgid "Could not create port for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1109 ../semanage/seobject.py:1377 ++#: ../semanage/seobject.py:1624 ++#, python-format ++msgid "Could not create context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1113 ++#, python-format ++msgid "Could not set user in port context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1117 ++#, python-format ++msgid "Could not set role in port context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1121 ++#, python-format ++msgid "Could not set type in port context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1126 ++#, python-format ++msgid "Could not set mls fields in port context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1130 ++#, python-format ++msgid "Could not set port context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1134 ++#, python-format ++msgid "Could not add port %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1150 ../semanage/seobject.py:1416 ++#: ../semanage/seobject.py:1663 ../semanage/seobject.py:1923 ++#: ../semanage/seobject.py:2125 ++msgid "Requires setype or serange" ++msgstr "" ++ ++#: ../semanage/seobject.py:1152 ../semanage/seobject.py:1418 ++#: ../semanage/seobject.py:1665 ++msgid "Requires setype" ++msgstr "" ++ ++#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1229 ++#, python-format ++msgid "Port %s/%s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1167 ++#, python-format ++msgid "Could not query port %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1181 ++#, python-format ++msgid "Could not modify port %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1196 ++msgid "Could not list the ports" ++msgstr "" ++ ++#: ../semanage/seobject.py:1213 ++#, python-format ++msgid "Could not delete the port %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1235 ++#, python-format ++msgid "Port %s/%s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:1239 ++#, python-format ++msgid "Could not delete port %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1257 ../semanage/seobject.py:1277 ++msgid "Could not list ports" ++msgstr "" ++ ++#: ../semanage/seobject.py:1311 ../sepolicy/sepolicy/sepolicy.glade:2676 ++#: ../sepolicy/sepolicy/sepolicy.glade:2774 ++#: ../sepolicy/sepolicy/sepolicy.glade:4648 ++msgid "SELinux Port Type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1311 ++msgid "Proto" ++msgstr "" ++ ++#: ../semanage/seobject.py:1311 ../semanage/seobject.py:1801 ++#: ../sepolicy/sepolicy/sepolicy.glade:1413 ++msgid "Port Number" ++msgstr "" ++ ++#: ../semanage/seobject.py:1331 ++msgid "Subnet Prefix is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1341 ++msgid "Invalid Pkey" ++msgstr "" ++ ++#: ../semanage/seobject.py:1359 ../semanage/seobject.py:1421 ++#, python-format ++msgid "Type %s is invalid, must be a ibpkey type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1365 ../semanage/seobject.py:1427 ++#: ../semanage/seobject.py:1481 ../semanage/seobject.py:1487 ++#, python-format ++msgid "Could not check if ibpkey %s/%s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1367 ++#, python-format ++msgid "ibpkey %s/%s already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1371 ++#, python-format ++msgid "Could not create ibpkey for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1381 ++#, python-format ++msgid "Could not set user in ibpkey context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1385 ++#, python-format ++msgid "Could not set role in ibpkey context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1389 ++#, python-format ++msgid "Could not set type in ibpkey context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1394 ++#, python-format ++msgid "Could not set mls fields in ibpkey context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1398 ++#, python-format ++msgid "Could not set ibpkey context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1402 ++#, python-format ++msgid "Could not add ibpkey %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1429 ../semanage/seobject.py:1483 ++#, python-format ++msgid "ibpkey %s/%s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1433 ++#, python-format ++msgid "Could not query ibpkey %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1444 ++#, python-format ++msgid "Could not modify ibpkey %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1457 ++msgid "Could not list the ibpkeys" ++msgstr "" ++ ++#: ../semanage/seobject.py:1472 ++#, python-format ++msgid "Could not delete the ibpkey %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1489 ++#, python-format ++msgid "ibpkey %s/%s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:1493 ++#, python-format ++msgid "Could not delete ibpkey %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1509 ../semanage/seobject.py:1530 ++msgid "Could not list ibpkeys" ++msgstr "" ++ ++#: ../semanage/seobject.py:1564 ++msgid "SELinux IB Pkey Type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1564 ++msgid "Subnet_Prefix" ++msgstr "" ++ ++#: ../semanage/seobject.py:1564 ++msgid "Pkey Number" ++msgstr "" ++ ++#: ../semanage/seobject.py:1584 ++msgid "IB device name is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1589 ++msgid "Invalid Port Number" ++msgstr "" ++ ++#: ../semanage/seobject.py:1593 ++#, python-format ++msgid "Could not create a key for ibendport %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1607 ../semanage/seobject.py:1668 ++#, python-format ++msgid "Type %s is invalid, must be an ibendport type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1612 ../semanage/seobject.py:1674 ++#: ../semanage/seobject.py:1726 ../semanage/seobject.py:1732 ++#, python-format ++msgid "Could not check if ibendport %s/%s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1614 ++#, python-format ++msgid "ibendport %s/%s already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1618 ++#, python-format ++msgid "Could not create ibendport for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1628 ++#, python-format ++msgid "Could not set user in ibendport context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1632 ++#, python-format ++msgid "Could not set role in ibendport context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1636 ++#, python-format ++msgid "Could not set type in ibendport context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1641 ++#, python-format ++msgid "Could not set mls fields in ibendport context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1645 ++#, python-format ++msgid "Could not set ibendport context for %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1649 ++#, python-format ++msgid "Could not add ibendport %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1676 ../semanage/seobject.py:1728 ++#, python-format ++msgid "ibendport %s/%s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1680 ++#, python-format ++msgid "Could not query ibendport %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1691 ++#, python-format ++msgid "Could not modify ibendport %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1704 ++msgid "Could not list the ibendports" ++msgstr "" ++ ++#: ../semanage/seobject.py:1713 ++#, python-format ++msgid "Could not create a key for %s/%d" ++msgstr "" ++ ++#: ../semanage/seobject.py:1717 ++#, python-format ++msgid "Could not delete the ibendport %s/%d" ++msgstr "" ++ ++#: ../semanage/seobject.py:1734 ++#, python-format ++msgid "ibendport %s/%s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:1738 ++#, python-format ++msgid "Could not delete ibendport %s/%s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1754 ../semanage/seobject.py:1774 ++msgid "Could not list ibendports" ++msgstr "" ++ ++#: ../semanage/seobject.py:1801 ++msgid "SELinux IB End Port Type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1801 ++msgid "IB Device Name" ++msgstr "" ++ ++#: ../semanage/seobject.py:1825 ++msgid "Node Address is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1840 ++msgid "Unknown or missing protocol" ++msgstr "" ++ ++#: ../semanage/seobject.py:1854 ++msgid "SELinux node type is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:1857 ../semanage/seobject.py:1926 ++#, python-format ++msgid "Type %s is invalid, must be a node type" ++msgstr "" ++ ++#: ../semanage/seobject.py:1861 ../semanage/seobject.py:1930 ++#: ../semanage/seobject.py:1968 ../semanage/seobject.py:2066 ++#: ../semanage/seobject.py:2129 ../semanage/seobject.py:2165 ++#: ../semanage/seobject.py:2377 ++#, python-format ++msgid "Could not create key for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1863 ../semanage/seobject.py:1934 ++#: ../semanage/seobject.py:1972 ../semanage/seobject.py:1978 ++#, python-format ++msgid "Could not check if addr %s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1867 ++#, python-format ++msgid "Addr %s already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1871 ++#, python-format ++msgid "Could not create addr for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1877 ../semanage/seobject.py:2081 ++#: ../semanage/seobject.py:2333 ++#, python-format ++msgid "Could not create context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1881 ++#, python-format ++msgid "Could not set mask for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1885 ++#, python-format ++msgid "Could not set user in addr context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1889 ++#, python-format ++msgid "Could not set role in addr context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1893 ++#, python-format ++msgid "Could not set type in addr context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1898 ++#, python-format ++msgid "Could not set mls fields in addr context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1902 ++#, python-format ++msgid "Could not set addr context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1906 ++#, python-format ++msgid "Could not add addr %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1936 ../semanage/seobject.py:1974 ++#, python-format ++msgid "Addr %s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:1940 ++#, python-format ++msgid "Could not query addr %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1950 ++#, python-format ++msgid "Could not modify addr %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1980 ++#, python-format ++msgid "Addr %s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:1984 ++#, python-format ++msgid "Could not delete addr %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:1998 ++msgid "Could not deleteall node mappings" ++msgstr "" ++ ++#: ../semanage/seobject.py:2012 ++msgid "Could not list addrs" ++msgstr "" ++ ++#: ../semanage/seobject.py:2062 ../semanage/seobject.py:2370 ++msgid "SELinux Type is required" ++msgstr "" ++ ++#: ../semanage/seobject.py:2070 ../semanage/seobject.py:2133 ++#: ../semanage/seobject.py:2169 ../semanage/seobject.py:2175 ++#, python-format ++msgid "Could not check if interface %s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2072 ++#, python-format ++msgid "Interface %s already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2076 ++#, python-format ++msgid "Could not create interface for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2085 ++#, python-format ++msgid "Could not set user in interface context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2089 ++#, python-format ++msgid "Could not set role in interface context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2093 ++#, python-format ++msgid "Could not set type in interface context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2098 ++#, python-format ++msgid "Could not set mls fields in interface context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2102 ++#, python-format ++msgid "Could not set interface context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2106 ++#, python-format ++msgid "Could not set message context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2110 ++#, python-format ++msgid "Could not add interface %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2135 ../semanage/seobject.py:2171 ++#, python-format ++msgid "Interface %s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2139 ++#, python-format ++msgid "Could not query interface %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2150 ++#, python-format ++msgid "Could not modify interface %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2177 ++#, python-format ++msgid "Interface %s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:2181 ++#, python-format ++msgid "Could not delete interface %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2195 ++msgid "Could not delete all interface mappings" ++msgstr "" ++ ++#: ../semanage/seobject.py:2209 ++msgid "Could not list interfaces" ++msgstr "" ++ ++#: ../semanage/seobject.py:2231 ++msgid "SELinux Interface" ++msgstr "" ++ ++#: ../semanage/seobject.py:2231 ../semanage/seobject.py:2611 ++msgid "Context" ++msgstr "" ++ ++#: ../semanage/seobject.py:2299 ++#, python-format ++msgid "Target %s is not valid. Target is not allowed to end with '/'" ++msgstr "" ++ ++#: ../semanage/seobject.py:2302 ++#, python-format ++msgid "Substiture %s is not valid. Substitute is not allowed to end with '/'" ++msgstr "" ++ ++#: ../semanage/seobject.py:2305 ++#, python-format ++msgid "Equivalence class for %s already exists" ++msgstr "" ++ ++#: ../semanage/seobject.py:2311 ++#, python-format ++msgid "File spec %s conflicts with equivalency rule '%s %s'" ++msgstr "" ++ ++#: ../semanage/seobject.py:2322 ++#, python-format ++msgid "Equivalence class for %s does not exist" ++msgstr "" ++ ++#: ../semanage/seobject.py:2339 ++#, python-format ++msgid "Could not set user in file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2343 ++#, python-format ++msgid "Could not set role in file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2348 ../semanage/seobject.py:2406 ++#, python-format ++msgid "Could not set mls fields in file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2354 ++msgid "Invalid file specification" ++msgstr "" ++ ++#: ../semanage/seobject.py:2356 ++msgid "File specification can not include spaces" ++msgstr "" ++ ++#: ../semanage/seobject.py:2361 ++#, python-format ++msgid "" ++"File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead" ++msgstr "" ++ ++#: ../semanage/seobject.py:2373 ../semanage/seobject.py:2436 ++#, python-format ++msgid "Type %s is invalid, must be a file or device type" ++msgstr "" ++ ++#: ../semanage/seobject.py:2381 ../semanage/seobject.py:2386 ++#: ../semanage/seobject.py:2446 ../semanage/seobject.py:2540 ++#: ../semanage/seobject.py:2544 ++#, python-format ++msgid "Could not check if file context for %s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2389 ++#, python-format ++msgid "File context for %s already defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2393 ++#, python-format ++msgid "Could not create file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2401 ++#, python-format ++msgid "Could not set type in file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2409 ../semanage/seobject.py:2476 ++#: ../semanage/seobject.py:2480 ++#, python-format ++msgid "Could not set file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2415 ++#, python-format ++msgid "Could not add file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2434 ++msgid "Requires setype, serange or seuser" ++msgstr "" ++ ++#: ../semanage/seobject.py:2450 ../semanage/seobject.py:2548 ++#, python-format ++msgid "File context for %s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2458 ++#, python-format ++msgid "Could not query file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2484 ++#, python-format ++msgid "Could not modify file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2502 ++msgid "Could not list the file contexts" ++msgstr "" ++ ++#: ../semanage/seobject.py:2516 ++#, python-format ++msgid "Could not delete the file context %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2546 ++#, python-format ++msgid "File context for %s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:2552 ++#, python-format ++msgid "Could not delete file context for %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2569 ++msgid "Could not list file contexts" ++msgstr "" ++ ++#: ../semanage/seobject.py:2573 ++msgid "Could not list file contexts for home directories" ++msgstr "" ++ ++#: ../semanage/seobject.py:2577 ++msgid "Could not list local file contexts" ++msgstr "" ++ ++#: ../semanage/seobject.py:2611 ++msgid "SELinux fcontext" ++msgstr "" ++ ++#: ../semanage/seobject.py:2624 ++msgid "" ++"\n" ++"SELinux Distribution fcontext Equivalence \n" ++msgstr "" ++ ++#: ../semanage/seobject.py:2629 ++msgid "" ++"\n" ++"SELinux Local fcontext Equivalence \n" ++msgstr "" ++ ++#: ../semanage/seobject.py:2667 ../semanage/seobject.py:2718 ++#: ../semanage/seobject.py:2724 ++#, python-format ++msgid "Could not check if boolean %s is defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2669 ../semanage/seobject.py:2720 ++#, python-format ++msgid "Boolean %s is not defined" ++msgstr "" ++ ++#: ../semanage/seobject.py:2673 ++#, python-format ++msgid "Could not query file context %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2678 ++#, python-format ++msgid "You must specify one of the following values: %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2683 ++#, python-format ++msgid "Could not set active value of boolean %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2686 ++#, python-format ++msgid "Could not modify boolean %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2702 ++#, python-format ++msgid "Bad format %s: Record %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2726 ++#, python-format ++msgid "Boolean %s is defined in policy, cannot be deleted" ++msgstr "" ++ ++#: ../semanage/seobject.py:2730 ++#, python-format ++msgid "Could not delete boolean %s" ++msgstr "" ++ ++#: ../semanage/seobject.py:2742 ../semanage/seobject.py:2759 ++msgid "Could not list booleans" ++msgstr "" ++ ++#: ../semanage/seobject.py:2792 ++msgid "off" ++msgstr "" ++ ++#: ../semanage/seobject.py:2792 ++msgid "on" ++msgstr "" ++ ++#: ../semanage/seobject.py:2804 ++msgid "SELinux boolean" ++msgstr "" ++ ++#: ../semanage/seobject.py:2804 ++msgid "State" ++msgstr "" ++ ++#: ../semanage/seobject.py:2804 ++msgid "Default" ++msgstr "" ++ ++#: ../semanage/seobject.py:2804 ../sepolicy/sepolicy/sepolicy.glade:2148 ++#: ../sepolicy/sepolicy/sepolicy.glade:2518 ++#: ../sepolicy/sepolicy/sepolicy.glade:5117 ++msgid "Description" ++msgstr "" ++ ++#: ../sepolgen/src/sepolgen/interfaces.py:486 ++msgid "Found circular interface class" ++msgstr "" ++ ++#: ../sepolgen/src/sepolgen/interfaces.py:491 ++#, python-format ++msgid "Missing interface definition for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:141 ++msgid "Standard Init Daemon" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:142 ++msgid "DBUS System Daemon" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:143 ++msgid "Internet Services Daemon" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:144 ++msgid "Web Application/Script (CGI)" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:145 ++msgid "Sandbox" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:146 ++msgid "User Application" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:147 ++msgid "Existing Domain Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:148 ++msgid "Minimal Terminal Login User Role" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:149 ++msgid "Minimal X Windows Login User Role" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:150 ++msgid "Desktop Login User Role" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:151 ++msgid "Administrator Login User Role" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:152 ++msgid "Confined Root Administrator Role" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:153 ++msgid "Module information for a new type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:159 ++msgid "Valid Types:\n" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:194 ++#, python-format ++msgid "Ports must be numbers or ranges of numbers from 1 to %d " ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:206 ++msgid "You must enter a valid policy type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:209 ++#, python-format ++msgid "You must enter a name for your policy module for your '%s'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:347 ++msgid "" ++"Name must be alpha numberic with no spaces. Consider using option \"-n " ++"MODULENAME\"" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:439 ++msgid "User Role types can not be assigned executables." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:445 ++msgid "Only Daemon apps can use an init script.." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:463 ++msgid "use_resolve must be a boolean value " ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:469 ++msgid "use_syslog must be a boolean value " ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:475 ++msgid "use_kerberos must be a boolean value " ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:481 ++msgid "manage_krb5_rcache must be a boolean value " ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:511 ++msgid "USER Types automatically get a tmp type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:848 ++#, python-format ++msgid "'%s' policy modules require existing domains" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:873 ++msgid "Type field required" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:886 ++#, python-format ++msgid "" ++"You need to define a new type which ends with: \n" ++" %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:1114 ++msgid "You must enter the executable path for your confined process" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:1381 ++msgid "Type Enforcement file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:1382 ++msgid "Interface file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:1383 ++msgid "File Contexts file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:1386 ++msgid "Spec file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/generate.py:1387 ++msgid "Setup Script" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:68 ../sepolicy/sepolicy/sepolicy.glade:3742 ++#: ../sepolicy/sepolicy/sepolicy.glade:3844 ++#: ../sepolicy/sepolicy/sepolicy.glade:3907 ++#: ../sepolicy/sepolicy/sepolicy.glade:3970 ++msgid "No" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:68 ../sepolicy/sepolicy/sepolicy.glade:3725 ++#: ../sepolicy/sepolicy/sepolicy.glade:3826 ++#: ../sepolicy/sepolicy/sepolicy.glade:3890 ++#: ../sepolicy/sepolicy/sepolicy.glade:3953 ++msgid "Yes" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:69 ++msgid "Disable" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:69 ++msgid "Enable" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:82 ../sepolicy/sepolicy/sepolicy.glade:726 ++#: ../sepolicy/sepolicy/sepolicy.glade:1467 ++#: ../sepolicy/sepolicy/sepolicy.glade:3511 ++msgid "Advanced >>" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:82 ++msgid "Advanced <<" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:83 ../sepolicy/sepolicy/sepolicy.glade:80 ++msgid "Advanced Search >>" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:83 ++msgid "Advanced Search <<" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:108 ++msgid "" ++"\n" ++"To change from Disabled to Enforcing mode\n" ++"- Change the system mode from Disabled to Permissive\n" ++"- Reboot, so that the system can relabel\n" ++"- Once the system is working as planned\n" ++" * Change the system mode to Enforcing\n" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:503 ++#, python-format ++msgid "%s is not a valid domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:652 ++msgid "System Status: Disabled" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:750 ++msgid "Help: Start Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:754 ++msgid "Help: Booleans Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:760 ++msgid "Help: Executable Files Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:763 ++msgid "Help: Writable Files Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:766 ++msgid "Help: Application Types Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:771 ++msgid "Help: Outbound Network Connections Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:774 ++msgid "Help: Inbound Network Connections Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:780 ++msgid "Help: Transition from application Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:783 ++msgid "Help: Transition into application Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:786 ++msgid "Help: Transition application file Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:790 ++msgid "Help: Systems Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:794 ++msgid "Help: Lockdown Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:798 ++msgid "Help: Login Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:802 ++msgid "Help: SELinux User Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:806 ++msgid "Help: File Equivalence Page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:951 ../sepolicy/sepolicy/gui.py:1242 ++#: ../sepolicy/sepolicy/gui.py:1682 ../sepolicy/sepolicy/gui.py:1929 ++#: ../sepolicy/sepolicy/gui.py:2717 ++msgid "More..." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1059 ++#, python-format ++msgid "File path used to enter the '%s' domain." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1060 ++#, python-format ++msgid "Files to which the '%s' domain can write." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1061 ++#, python-format ++msgid "Network Ports to which the '%s' is allowed to connect." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1062 ++#, python-format ++msgid "Network Ports to which the '%s' is allowed to listen." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1063 ++#, python-format ++msgid "File Types defined for the '%s'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1064 ++#, python-format ++msgid "" ++"Display boolean information that can be used to modify the policy for the " ++"'%s'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1065 ++#, python-format ++msgid "Display file type information that can be used by the '%s'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1066 ++#, python-format ++msgid "Display network ports to which the '%s' can connect or listen to." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1067 ++#, python-format ++msgid "Application Transitions Into '%s'" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1068 ++#, python-format ++msgid "Application Transitions From '%s'" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1069 ++#, python-format ++msgid "File Transitions From '%s'" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1070 ++#, python-format ++msgid "" ++"Executables which will transition to '%s', when executing selected domains " ++"entrypoint." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1071 ++#, python-format ++msgid "" ++"Executables which will transition to a different domain, when '%s' executes " ++"them." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1072 ++#, python-format ++msgid "Files by '%s' with transitions to a different label." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1073 ++#, python-format ++msgid "Display applications that can transition into or out of the '%s'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1167 ../sepolicy/sepolicy/__init__.py:74 ++msgid "all files" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1181 ++msgid "MISSING FILE PATH" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1296 ++#, python-format ++msgid "To disable this transition, go to the %sBoolean section%s." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1298 ++#, python-format ++msgid "To enable this transition, go to the %sBoolean section%s." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1355 ++msgid "executable" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1358 ++msgid "writable" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1361 ++msgid "application" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1362 ++#, python-format ++msgid "Add new %(TYPE)s file path for '%(DOMAIN)s' domains." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1363 ++#, python-format ++msgid "Delete %(TYPE)s file paths for '%(DOMAIN)s' domain." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1364 ++#, python-format ++msgid "" ++"Modify %(TYPE)s file path for '%(DOMAIN)s' domain. Only bolded items in the " ++"list can be selected, this indicates they were modified previously." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1376 ++msgid "connect" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1379 ++msgid "listen for inbound connections" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1381 ++#, python-format ++msgid "" ++"Add new port definition to which the '%(APP)s' domain is allowed to %(PERM)s." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1382 ++#, python-format ++msgid "" ++"Delete modified port definitions to which the '%(APP)s' domain is allowed to " ++"%(PERM)s." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1383 ++#, python-format ++msgid "" ++"Modify port definitions to which the '%(APP)s' domain is allowed to %(PERM)s." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1412 ++msgid "Add new SELinux User/Role definition." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1413 ++msgid "Delete modified SELinux User/Role definitions." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1414 ++msgid "Modify selected modified SELinux User/Role definitions." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1421 ++msgid "Add new Login Mapping definition." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1422 ++msgid "Delete modified Login Mapping definitions." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1423 ++msgid "Modify selected modified Login Mapping definitions." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1430 ++msgid "Add new File Equivalence definition." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1431 ++msgid "Delete modified File Equivalence definitions." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1432 ++msgid "" ++"Modify selected modified File Equivalence definitions. Only bolded items in " ++"the list can be selected, this indicates they were modified previously." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1460 ++#, python-format ++msgid "Boolean %s Allow Rules" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1473 ++#, python-format ++msgid "Add Network Port for %s. Ports will be created when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1474 ++#, python-format ++msgid "Add Network Port for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1479 ++#, python-format ++msgid "" ++"Add File Labeling for %s. File labels will be created when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1480 ../sepolicy/sepolicy/gui.py:1533 ++#, python-format ++msgid "Add File Labeling for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1490 ++msgid "Add Login Mapping. User Mapping will be created when Update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1491 ++msgid "Add Login Mapping" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1496 ++msgid "" ++"Add SELinux User Role. SELinux user roles will be created when update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1497 ++msgid "Add SELinux Users" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1504 ++msgid "" ++"Add File Equivalency Mapping. Mapping will be created when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1505 ++msgid "Add SELinux File Equivalency" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1532 ++#, python-format ++msgid "" ++"Modify File Labeling for %s. File labels will be created when update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1588 ++msgid "" ++"Modify SELinux User Role. SELinux user roles will be modified when update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1589 ++msgid "Modify SELinux Users" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1597 ++msgid "" ++"Modify Login Mapping. Login Mapping will be modified when Update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1598 ++msgid "Modify Login Mapping" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1604 ++msgid "" ++"Modify File Equivalency Mapping. Mapping will be created when update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1605 ++msgid "Modify SELinux File Equivalency" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1690 ++#, python-format ++msgid "" ++"Modify Network Port for %s. Ports will be created when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1691 ++#, python-format ++msgid "Modify Network Port for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1910 ++#, python-format ++msgid "The entry '%s' is not a valid path. Paths must begin with a '/'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:1923 ++msgid "Port number must be between 1 and 65536" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2203 ++#, python-format ++msgid "SELinux name: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2214 ++#, python-format ++msgid "Add file labeling for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2216 ++#, python-format ++msgid "Delete file labeling for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2218 ++#, python-format ++msgid "Modify file labeling for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2222 ++#, python-format ++msgid "File path: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2225 ++#, python-format ++msgid "File class: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2228 ../sepolicy/sepolicy/gui.py:2252 ++#, python-format ++msgid "SELinux file type: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2237 ++#, python-format ++msgid "Add ports for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2239 ++#, python-format ++msgid "Delete ports for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2241 ++#, python-format ++msgid "Modify ports for %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2244 ++#, python-format ++msgid "Network ports: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2247 ++#, python-format ++msgid "Network protocol: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2261 ++msgid "Add user" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2263 ++msgid "Delete user" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2265 ++msgid "Modify user" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2268 ++#, python-format ++msgid "SELinux User : %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2273 ++#, python-format ++msgid "Roles: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2277 ../sepolicy/sepolicy/gui.py:2302 ++#, python-format ++msgid "MLS/MCS Range: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2286 ++msgid "Add login mapping" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2288 ++msgid "Delete login mapping" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2290 ++msgid "Modify login mapping" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2294 ++#, python-format ++msgid "Login Name : %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2298 ++#, python-format ++msgid "SELinux User: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2311 ++msgid "Add file equiv labeling." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2313 ++msgid "Delete file equiv labeling." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2315 ++msgid "Modify file equiv labeling." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2319 ++#, python-format ++msgid "File path : %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2323 ++#, python-format ++msgid "Equivalence: %s" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2354 ../sepolicy/sepolicy/sepolicy.glade:129 ++#: ../sepolicy/sepolicy/sepolicy.glade:1898 ++#: ../sepolicy/sepolicy/sepolicy.glade:3803 ++msgid "System" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2363 ../sepolicy/sepolicy/sepolicy.glade:95 ++msgid "File Equivalence" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2373 ../sepolicy/sepolicy/sepolicy.glade:112 ++msgid "Users" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2426 ++#, python-format ++msgid "" ++"Run restorecon on %(PATH)s to change its type from %(CUR_CONTEXT)s to the " ++"default %(DEF_CONTEXT)s?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2436 ../sepolicy/sepolicy/sepolicy.glade:4226 ++msgid "Update" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2438 ++msgid "Update Changes" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2440 ++msgid "Revert Changes" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2571 ++msgid "System Status: Enforcing" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2574 ++msgid "System Status: Permissive" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2638 ++msgid "" ++"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?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2768 ++msgid "" ++"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?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2772 ++msgid "" ++"Changing to SELinux enabled 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?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2802 ++msgid "" ++"You are attempting to close the application without applying your changes.\n" ++" * To apply changes you have made during this session, click No and " ++"click Update.\n" ++" * To leave the application without applying your changes, click Yes. " ++"All changes that you have made during this session will be lost." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/gui.py:2802 ++msgid "Loss of data Dialog" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:75 ++msgid "regular file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:76 ++msgid "directory" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:77 ++msgid "character device" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:78 ++msgid "block device" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:79 ++msgid "socket file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:80 ++msgid "symbolic link" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:81 ++msgid "named pipe" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:130 ++msgid "No SELinux Policy installed" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:157 ++#, python-format ++msgid "Failed to read %s policy file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:418 ++#, python-format ++msgid "-- Allowed %s [ %s ]" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:831 ++msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/__init__.py:1150 ++msgid "unknown" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/interface.py:223 ++#, python-format ++msgid "Compiling %s interface" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/interface.py:231 ++#, python-format ++msgid "" ++"\n" ++"Compile test for %s failed.\n" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/interface.py:234 ++#, python-format ++msgid "" ++"\n" ++"Compile test for %s has not run. %s\n" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/interface.py:240 ++#, python-format ++msgid "" ++"\n" ++"Compiling of %s interface is not supported." ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:227 ++#, python-format ++msgid "Interface %s does not exist." ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:324 ++msgid "You need to install policycoreutils-gui package to use the gui option" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:329 ++msgid "Graphical User Interface for SELinux Policy" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:332 ../sepolicy/sepolicy.py:380 ++msgid "Domain name(s) of man pages to be created" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:345 ++msgid "Alternative root needs to be setup" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:362 ++msgid "Generate SELinux man pages" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:365 ++msgid "path in which the generated SELinux man pages will be stored" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:367 ++msgid "name of the OS for man pages" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:369 ++msgid "Generate HTML man pages structure for selected SELinux man page" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:371 ++msgid "Alternate root directory, defaults to /" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:373 ++msgid "" ++"With this flag, alternative root path needs to include file context files " ++"and policy.xml file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:377 ++msgid "All domains" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:386 ++msgid "Query SELinux policy network information" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:391 ++msgid "list all SELinux port types" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:394 ++msgid "show SELinux type related to the port" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:397 ++msgid "Show ports defined for this SELinux type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:400 ++msgid "show ports to which this domain can bind and/or connect" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:403 ++msgid "show ports to which this application can bind and/or connect" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:420 ++msgid "query SELinux policy to see if domains can communicate with each other" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:423 ++msgid "Source Domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:426 ++msgid "Target Domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:447 ++msgid "query SELinux Policy to see description of booleans" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:451 ++msgid "get all booleans descriptions" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:454 ++msgid "boolean to get description" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:466 ++msgid "" ++"query SELinux Policy to see how a source process domain can transition to " ++"the target process domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:469 ++msgid "source process domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:472 ++msgid "target process domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:517 ++#, python-format ++msgid "sepolicy generate: error: one of the arguments %s is required" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:522 ++msgid "Command required for this type of policy" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:533 ++#, python-format ++msgid "" ++"-t option can not be used with '%s' domains. Read usage for more details." ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:538 ++#, python-format ++msgid "" ++"-d option can not be used with '%s' domains. Read usage for more details." ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:542 ++#, python-format ++msgid "" ++"-a option can not be used with '%s' domains. Read usage for more details." ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:546 ++msgid "-w option can not be used with the --newtype option" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:567 ++msgid "List SELinux Policy interfaces" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:587 ++msgid "Enter interface names, you wish to query" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:597 ++msgid "Generate SELinux Policy module template" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:600 ++msgid "Enter domain type which you will be extending" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:603 ++msgid "Enter SELinux user(s) which will transition to this domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:606 ++msgid "Enter SELinux role(s) to which the administror domain will transition" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:609 ++msgid "Enter domain(s) which this confined admin will administrate" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:612 ++msgid "name of policy to generate" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:619 ++msgid "path in which the generated policy files will be stored" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:621 ++msgid "path to which the confined processes will need to write" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:622 ++msgid "Policy types which require a command" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:626 ../sepolicy/sepolicy.py:629 ++#: ../sepolicy/sepolicy.py:632 ../sepolicy/sepolicy.py:635 ++#: ../sepolicy/sepolicy.py:638 ../sepolicy/sepolicy.py:644 ++#: ../sepolicy/sepolicy.py:647 ../sepolicy/sepolicy.py:650 ++#: ../sepolicy/sepolicy.py:656 ../sepolicy/sepolicy.py:659 ++#: ../sepolicy/sepolicy.py:662 ../sepolicy/sepolicy.py:665 ++#, python-format ++msgid "Generate '%s' policy" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:653 ++#, python-format ++msgid "Generate '%s' policy " ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:667 ++msgid "executable to confine" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:672 ++msgid "commands" ++msgstr "" ++ ++#: ../sepolicy/sepolicy.py:675 ++msgid "Alternate SELinux policy, defaults to /sys/fs/selinux/policy" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:25 ++#: ../sepolicy/sepolicy/sepolicy.glade:4330 ++msgid "Applications" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:52 ++msgid "Select domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:189 ++#: ../sepolicy/sepolicy/sepolicy.glade:4367 ++#: ../sepolicy/sepolicy/sepolicy.glade:4460 ++#: ../sepolicy/sepolicy/sepolicy.glade:4606 ++#: ../sepolicy/sepolicy/sepolicy.glade:4755 ++#: ../sepolicy/sepolicy/sepolicy.glade:4889 ++#: ../sepolicy/sepolicy/sepolicy.glade:5030 ++#: ../sepolicy/sepolicy/sepolicy.glade:5103 ++#: ../sepolicy/sepolicy/sepolicy.glade:5238 ++msgid "Select" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:204 ++#: ../sepolicy/sepolicy/sepolicy.glade:539 ++#: ../sepolicy/sepolicy/sepolicy.glade:684 ++#: ../sepolicy/sepolicy/sepolicy.glade:1239 ++#: ../sepolicy/sepolicy/sepolicy.glade:1535 ++#: ../sepolicy/sepolicy/sepolicy.glade:4540 ++#: ../sepolicy/sepolicy/sepolicy.glade:4690 ++#: ../sepolicy/sepolicy/sepolicy.glade:4821 ++#: ../sepolicy/sepolicy/sepolicy.glade:4955 ++#: ../sepolicy/sepolicy/sepolicy.glade:5173 ++#: ../sepolicy/sepolicy/sepolicy.glade:5304 ++#: ../sepolicy/sepolicy/sepolicy.glade:5464 ++msgid "Cancel" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:332 ++msgid "" ++"The entry that was entered is incorrect. Please try again in the " ++"ex:/.../... format." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:358 ++msgid "Retry" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:442 ++#: ../sepolicy/sepolicy/sepolicy.glade:1120 ++#: ../sepolicy/sepolicy/sepolicy.glade:1368 ++#: ../sepolicy/sepolicy/sepolicy.glade:5332 ++msgid "Network Port Definitions" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:458 ++msgid "" ++"Add file Equivalence Mapping. Mapping will be created when Update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:483 ++#: ../sepolicy/sepolicy/sepolicy.glade:4046 ++msgid "Path" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:493 ++#: ../sepolicy/sepolicy/sepolicy.glade:5384 ++msgid "" ++"Specify a new SELinux user name. By convention SELinux User names usually " ++"end in an _u." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:497 ++msgid "Enter the path to which you want to setup an equivalence label." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:510 ++#: ../sepolicy/sepolicy/sepolicy.glade:4063 ++#: ../sepolicy/sepolicy/sepolicy.glade:4781 ++msgid "Equivalence Path" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:524 ++#: ../sepolicy/sepolicy/sepolicy.glade:669 ++#: ../sepolicy/sepolicy/sepolicy.glade:1224 ++#: ../sepolicy/sepolicy/sepolicy.glade:1520 ++#: ../sepolicy/sepolicy/sepolicy.glade:5449 ++msgid "Save to update" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:564 ++msgid "" ++"Specify the mapping between the new path and the equivalence path. " ++"Everything under this new path will be labeled as if they were under the " ++"equivalence path." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:621 ++msgid "Add a file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:638 ++msgid "" ++" File Labeling for . File labels will be created " ++"when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:711 ++#: ../sepolicy/sepolicy/sepolicy.glade:1485 ++msgid "MLS" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:747 ++#: ../sepolicy/sepolicy/sepolicy.glade:2306 ++#: ../sepolicy/sepolicy/sepolicy.glade:2418 ++#: ../sepolicy/sepolicy/sepolicy.glade:2540 ++#: ../sepolicy/sepolicy/sepolicy.glade:4500 ++msgid "Class" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:763 ++msgid "Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:777 ++msgid "" ++"Select the file class to which this label will be applied. Defaults to all " ++"classes." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:804 ++msgid "Make Path Recursive" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:808 ++msgid "" ++"Select Make Path Recursive if you want to apply this label to all children " ++"of the specified directory path. objects under the directory to have this " ++"label." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:821 ++msgid "Browse" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:825 ++msgid "Browse to select the file/directory for labeling." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:869 ++msgid "Path " ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:880 ++msgid "" ++"Specify the path using regular expressions that you would like to modify the " ++"labeling." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:902 ++msgid "Select the SELinux file type to assign to this path." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:929 ++msgid "Enter the MLS Label to assign to this file path." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:933 ++msgid "SELinux MLS Label you wish to assign to this path." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1070 ++msgid "Analyzing Policy..." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1137 ++msgid "" ++"Add Login Mapping. Login Mapping will be created when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1172 ++msgid "" ++"Enter the login user name of the user to which you wish to add SELinux User " ++"confinement." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1201 ++msgid "" ++"Select the SELinux User to assign to this login user. Login users by " ++"default get assigned by the __default__ user." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1264 ++msgid "" ++"Enter MLS/MCS Range for this login User. Defaults to the range for the " ++"Selected SELinux User." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1267 ++#: ../sepolicy/sepolicy/sepolicy.glade:3192 ++#: ../sepolicy/sepolicy/sepolicy.glade:3313 ++#: ../sepolicy/sepolicy/sepolicy.glade:5414 ++msgid "MLS Range" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1279 ++msgid "" ++"Specify the MLS Range for this user to login in with. Defaults to the " ++"selected SELinux Users MLS Range." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1385 ++msgid "" ++" Network Port for . Ports will be created when " ++"update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1423 ++msgid "Enter the port number or range to which you want to add a port type." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1439 ++#: ../sepolicy/sepolicy/sepolicy.glade:2658 ++#: ../sepolicy/sepolicy/sepolicy.glade:2756 ++#: ../sepolicy/sepolicy/sepolicy.glade:4633 ++msgid "Protocol" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1453 ++msgid "Port Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1498 ++msgid "Select the port type you want to assign to the specified port number." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1562 ++msgid "tcp" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1566 ++msgid "" ++"Select tcp if the port type should be assigned to tcp port numbers." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1579 ++msgid "udp" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1583 ++msgid "" ++"Select udp if the port type should be assigned to udp port numbers." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1605 ++msgid "Enter the MLS Label to assign to this port." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1707 ++msgid "SELinux Configuration" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1743 ++msgid "Select..." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1792 ++#: ../sepolicy/sepolicy/sepolicy.glade:2212 ++msgid "Booleans" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1796 ++msgid "" ++"Display boolean information that can be used to modify the policy for the " ++"'selected domain'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1810 ++#: ../sepolicy/sepolicy/sepolicy.glade:2597 ++msgid "Files" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1814 ++msgid "" ++"Display file type information that can be used by the 'selected domain'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1828 ++#: ../sepolicy/sepolicy/sepolicy.glade:2830 ++msgid "Network" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1832 ++msgid "" ++"Display network ports to which the 'selected domain' can connect or listen " ++"to." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1846 ++#: ../sepolicy/sepolicy/sepolicy.glade:3121 ++msgid "Transitions" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1850 ++msgid "" ++"Display applications that can transition into or out of the 'selected " ++"domain'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1864 ++#: ../sepolicy/sepolicy/sepolicy.glade:3222 ++msgid "Login Mapping" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1867 ++#: ../sepolicy/sepolicy/sepolicy.glade:1884 ++#: ../sepolicy/sepolicy/sepolicy.glade:1901 ++msgid "Manage the SELinux configuration" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1881 ++#: ../sepolicy/sepolicy/sepolicy.glade:3344 ++msgid "SELinux Users" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1915 ++#: ../sepolicy/sepolicy/sepolicy.glade:4016 ++msgid "Lockdown" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1918 ++msgid "" ++"Lockdown the SELinux System.\n" ++"This screen can be used to turn up the SELinux Protections." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1933 ++msgid "radiobutton" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:1993 ++msgid "Filter" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2021 ++msgid "Show Modified Only" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2060 ++msgid "Mislabeled files exist" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2080 ++msgid "Show mislabeled files only" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2120 ++#: ../sepolicy/sepolicy/sepolicy.glade:3244 ++msgid "" ++"If-Then-Else rules written in policy that can\n" ++"allow alternative access control." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2132 ++msgid "Enabled" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2183 ++msgid "Name" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2252 ++#: ../sepolicy/sepolicy/sepolicy.glade:2364 ++#: ../sepolicy/sepolicy/sepolicy.glade:2482 ++#: ../sepolicy/sepolicy/sepolicy.glade:4473 ++#: ../sepolicy/sepolicy/sepolicy.glade:4768 ++msgid "File Path" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2288 ++#: ../sepolicy/sepolicy/sepolicy.glade:2399 ++msgid "SELinux File Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2332 ++msgid "File path used to enter the 'selected domain'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2333 ++msgid "Executable Files" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2448 ++msgid "Files to which the 'selected domain' can write." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2449 ++msgid "Writable files" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2571 ++msgid "File Types defined for the 'selected domain'." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2572 ++msgid "Application File Types" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2639 ++#: ../sepolicy/sepolicy/sepolicy.glade:2738 ++#: ../sepolicy/sepolicy/sepolicy.glade:4619 ++msgid "Port" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2704 ++msgid "Network Ports to which the 'selected domain' is allowed to connect." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2705 ++msgid "Outbound" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2804 ++msgid "Network Ports to which the 'selected domain' is allowed to listen." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2805 ++msgid "Inbound" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2866 ++#: ../sepolicy/sepolicy/sepolicy.glade:2956 ++msgid "" ++"Boolean\n" ++"Enabled" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2892 ++msgid "Boolean name" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2909 ++msgid "SELinux Application Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2930 ++msgid "" ++"Executables which will transition to a different domain, when the 'selected " ++"domain' executes them." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2933 ++msgid "Application Transitions From 'select domain'" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2972 ++msgid "Calling Process Domain" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:2988 ++msgid "Executable File" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3012 ++msgid "" ++"Executables which will transition to the 'selected domain', when executing a " ++"selected domains entrypoint." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3013 ++msgid "Application Transitions Into 'select domain'" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3028 ++msgid "" ++"File Transitions define what happens when the current domain creates the " ++"content of a particular class in a directory of the destination type. " ++"Optionally a file name could be specified for the transition." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3036 ++msgid "SELinux Directory Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3049 ++msgid "Destination Class" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3063 ++msgid "SELinux Destination Type" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3076 ++msgid "File Name" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3098 ++msgid "File Transitions From 'select domain'" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3297 ++#: ../sepolicy/sepolicy/sepolicy.glade:5508 ++msgid "Default Level" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3383 ++msgid "Select the system mode when the system first boots up" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3395 ++#: ../sepolicy/sepolicy/sepolicy.glade:3469 ++msgid "Enforcing" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3414 ++#: ../sepolicy/sepolicy/sepolicy.glade:3487 ++msgid "Permissive" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3456 ++msgid "Select the system mode for the current session" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3533 ++msgid "System Policy Type:" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3594 ++msgid "System Mode" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3632 ++msgid "Import system settings from another machine" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3640 ++msgid "Import" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3659 ++msgid "Export system settings to a file" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3669 ++msgid "Export" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3688 ++msgid "Relabel all files back to system defaults on reboot" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3783 ++msgid "System Configuration" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3830 ++#: ../sepolicy/sepolicy/sepolicy.glade:3848 ++msgid "" ++"An unconfined domain is a process label that allows the process to do what " ++"it wants, without SELinux interfering. Applications started at boot by the " ++"init system that SELinux do not have defined SELinux policy will run as " ++"unconfined if this module is enabled. Disabling it means all daemons will " ++"now be confined. To disable the unconfined_t user you must first remove " ++"unconfined_t from the users/login screens." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3866 ++msgid "Disable ability to run unconfined system processes?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3894 ++#: ../sepolicy/sepolicy/sepolicy.glade:3911 ++#: ../sepolicy/sepolicy/sepolicy.glade:3957 ++#: ../sepolicy/sepolicy/sepolicy.glade:3974 ++msgid "" ++"A permissive domain is a process label that allows the process to do what it " ++"wants, with SELinux only logging the denials, but not enforcing them. " ++"Usually permissive domains indicate experimental policy, disabling the " ++"module could cause SELinux to deny access to a domain, that should be " ++"allowed." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3929 ++msgid "Disable all permissive processes?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:3995 ++msgid "Deny all processes from ptracing or debugging other processes?" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4032 ++msgid "" ++"File equivalence cause the system to label content under the new path as if " ++"it were under the equivalence path." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4088 ++msgid "Files Equivalence" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4101 ++msgid "...SELECT TO VIEW DATA..." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4132 ++msgid "Delete" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4148 ++msgid "Modify" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4163 ++msgid "Add" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4209 ++msgid "Revert" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4214 ++msgid "" ++"Revert button will launch a dialog window which allows you to revert changes " ++"within the current transaction." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4231 ++msgid "Commit all changes in your current transaction to the server." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4279 ++msgid "Applications - Advanced Search" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4344 ++msgid "Process Types" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4385 ++msgid "More Details" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4421 ++#: ../sepolicy/sepolicy/sepolicy.glade:4715 ++msgid "Delete Modified File Labeling" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4439 ++msgid "" ++"Select file labeling to delete. File labeling will be deleted when update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4486 ++msgid "SELinux File Label" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4525 ++#: ../sepolicy/sepolicy/sepolicy.glade:4675 ++#: ../sepolicy/sepolicy/sepolicy.glade:4806 ++#: ../sepolicy/sepolicy/sepolicy.glade:4940 ++#: ../sepolicy/sepolicy/sepolicy.glade:5289 ++msgid "Save to Update" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4565 ++msgid "Delete Modified Ports" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4583 ++msgid "Select ports to delete. Ports will be deleted when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4733 ++msgid "" ++"Select file equivalence labeling to delete. File equivalence labeling will " ++"be deleted when update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4849 ++#: ../sepolicy/sepolicy/sepolicy.glade:5198 ++msgid "Delete Modified Users Mapping." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4867 ++msgid "" ++"Select login user mapping to delete. Login user mapping will be deleted when " ++"update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4902 ++msgid "Login name" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:4983 ++msgid "More Types" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5010 ++msgid "Types" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5069 ++msgid "" ++"Review the updates you have made before committing them to the system. To " ++"reset an item, uncheck the checkbox. All items checked will be updated in " ++"the system when you select update." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5132 ++msgid "Action" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5158 ++msgid "Apply" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5216 ++msgid "" ++"Select users mapping to delete.Users mapping will be deleted when update is " ++"applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5264 ++msgid "SELinux Username" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5349 ++msgid "" ++"Add User Roles. SELinux User Roles will be created when Update is applied." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5374 ++msgid "SELinux User Name" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5489 ++msgid "" ++"Enter MLS/MCS Range for this SELinux User.\n" ++"s0-s0:c1023" ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5520 ++msgid "" ++"Specify the default level that you would like this SELinux user to login " ++"with. Defaults to s0." ++msgstr "" ++ ++#: ../sepolicy/sepolicy/sepolicy.glade:5524 ++msgid "Enter Default Level for SELinux User to login with. Default s0" ++msgstr "" +diff --git a/sandbox/po/sandbox.pot b/sandbox/po/sandbox.pot +new file mode 100644 +index 00000000..328b4f01 +--- /dev/null ++++ b/sandbox/po/sandbox.pot +@@ -0,0 +1,157 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy ++msgid "" ++msgstr "" ++"Project-Id-Version: PACKAGE VERSION\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2018-08-06 14:22+0200\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"Language: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=CHARSET\n" ++"Content-Transfer-Encoding: 8bit\n" ++ ++#: ../sandbox:119 ++#, python-format ++msgid "Do you want to save changes to '%s' (Y/N): " ++msgstr "" ++ ++#: ../sandbox:120 ++msgid "Sandbox Message" ++msgstr "" ++ ++#: ../sandbox:132 ++#, python-format ++msgid "Do you want to save changes to '%s' (y/N): " ++msgstr "" ++ ++#: ../sandbox:133 ++msgid "[yY]" ++msgstr "" ++ ++#: ../sandbox:156 ++msgid "User account must be setup with an MCS Range" ++msgstr "" ++ ++#: ../sandbox:184 ++msgid "" ++"Failed to find any unused category sets. Consider a larger MCS range for " ++"this user." ++msgstr "" ++ ++#: ../sandbox:215 ++msgid "Homedir and tempdir required for level mounts" ++msgstr "" ++ ++#: ../sandbox:218 ../sandbox:229 ../sandbox:234 ++#, python-format ++msgid "" ++"\n" ++"%s is required for the action you want to perform.\n" ++msgstr "" ++ ++#: ../sandbox:305 ++#, python-format ++msgid "" ++"\n" ++"Policy defines the following types for use with the -t:\n" ++"\t%s\n" ++msgstr "" ++ ++#: ../sandbox:312 ++#, python-format ++msgid "" ++"\n" ++"sandbox [-h] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I " ++"includefile ] [-W windowmanager ] [ -w windowsize ] [[-i file ] ...] [ -t " ++"type ] command\n" ++"\n" ++"sandbox [-h] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I " ++"includefile ] [-W windowmanager ] [ -w windowsize ] [[-i file ] ...] [ -t " ++"type ] -S\n" ++"%s\n" ++msgstr "" ++ ++#: ../sandbox:324 ++msgid "include file in sandbox" ++msgstr "" ++ ++#: ../sandbox:327 ++msgid "read list of files to include in sandbox from INCLUDEFILE" ++msgstr "" ++ ++#: ../sandbox:329 ++msgid "run sandbox with SELinux type" ++msgstr "" ++ ++#: ../sandbox:332 ++msgid "mount new home and/or tmp directory" ++msgstr "" ++ ++#: ../sandbox:336 ++msgid "dots per inch for X display" ++msgstr "" ++ ++#: ../sandbox:339 ++msgid "run complete desktop session within sandbox" ++msgstr "" ++ ++#: ../sandbox:342 ++msgid "Shred content before tempory directories are removed" ++msgstr "" ++ ++#: ../sandbox:346 ++msgid "run X application within a sandbox" ++msgstr "" ++ ++#: ../sandbox:352 ++msgid "alternate home directory to use for mounting" ++msgstr "" ++ ++#: ../sandbox:357 ++msgid "alternate /tmp directory to use for mounting" ++msgstr "" ++ ++#: ../sandbox:366 ++msgid "alternate window manager" ++msgstr "" ++ ++#: ../sandbox:369 ++msgid "MCS/MLS level for the sandbox" ++msgstr "" ++ ++#: ../sandbox:385 ++msgid "" ++"Sandbox Policy is not currently installed.\n" ++"You need to install the selinux-policy-sandbox package in order to run this " ++"command" ++msgstr "" ++ ++#: ../sandbox:397 ++msgid "" ++"You must specify a Homedir and tempdir when setting up a session sandbox" ++msgstr "" ++ ++#: ../sandbox:399 ++msgid "Commands are not allowed in a session sandbox" ++msgstr "" ++ ++#: ../sandbox:409 ++msgid "Command required" ++msgstr "" ++ ++#: ../sandbox:412 ++#, python-format ++msgid "%s is not an executable" ++msgstr "" ++ ++#: ../sandbox:535 ++#, python-format ++msgid "Invalid value %s" ++msgstr "" +-- +2.22.0 + diff --git a/0016-policycoreutils-setfiles-Improve-description-of-d-sw.patch b/0016-policycoreutils-setfiles-Improve-description-of-d-sw.patch new file mode 100644 index 0000000..77416d4 --- /dev/null +++ b/0016-policycoreutils-setfiles-Improve-description-of-d-sw.patch @@ -0,0 +1,30 @@ +From c8fbb8042852c18775c001999ce949e9b591e381 Mon Sep 17 00:00:00 2001 +From: Vit Mojzis +Date: Wed, 21 Mar 2018 08:51:31 +0100 +Subject: [PATCH] policycoreutils/setfiles: Improve description of -d switch + +The "-q" switch is becoming obsolete (completely unused in fedora) and +debug output ("-d" switch) makes sense in any scenario. Therefore both +options can be specified at once. + +Resolves: rhbz#1271327 +--- + policycoreutils/setfiles/setfiles.8 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/policycoreutils/setfiles/setfiles.8 b/policycoreutils/setfiles/setfiles.8 +index ccaaf4de..a8a76c86 100644 +--- a/policycoreutils/setfiles/setfiles.8 ++++ b/policycoreutils/setfiles/setfiles.8 +@@ -57,7 +57,7 @@ check the validity of the contexts against the specified binary policy. + .TP + .B \-d + show what specification matched each file (do not abort validation +-after ABORT_ON_ERRORS errors). ++after ABORT_ON_ERRORS errors). Not affected by "\-q" + .TP + .BI \-e \ directory + directory to exclude (repeat option for more than one directory). +-- +2.22.0 + diff --git a/0017-sepolicy-generate-Handle-more-reserved-port-types.patch b/0017-sepolicy-generate-Handle-more-reserved-port-types.patch new file mode 100644 index 0000000..d98271c --- /dev/null +++ b/0017-sepolicy-generate-Handle-more-reserved-port-types.patch @@ -0,0 +1,71 @@ +From 3073efc112929b535f3a832c6f99e0dbe3af29ca Mon Sep 17 00:00:00 2001 +From: Masatake YAMATO +Date: Thu, 14 Dec 2017 15:57:58 +0900 +Subject: [PATCH] sepolicy-generate: Handle more reserved port types + +Currently only reserved_port_t, port_t and hi_reserved_port_t are +handled as special when making a ports-dictionary. However, as fas as +corenetwork.te.in of serefpolicy, unreserved_port_t and +ephemeral_port_t should be handled in the same way, too. + +(Details) I found the need of this change when I was using +selinux-polgengui. Though tcp port 12345, which my application may +use, was given to the gui, selinux-polgengui generates expected te +file and sh file which didn't utilize the tcp port. + +selinux-polgengui checks whether a port given via gui is already typed +or not. + +If it is already typed, selinux-polgengui generates a te file having +rules to allow the application to use the port. (A) + +If not, it seems for me that selinux-polgengui is designed to generate +a te file having rules to allow the application to own(?) the port; +and a sh file having a command line to assign the application own type +to the port. (B) + +As we can see the output of `semanage port -l' some of ports for +specified purpose have types already. The important point is that the +rest of ports also have types already: + + hi_reserved_port_t tcp 512-1023 + hi_reserved_port_t udp 512-1023 + unreserved_port_t tcp 1024-32767, 61001-65535 + unreserved_port_t udp 1024-32767, 61001-65535 + ephemeral_port_t tcp 32768-61000 + ephemeral_port_t udp 32768-61000 + +As my patch shows, the original selinux-polgengui ignored +hi_reserved_port_t; though hi_reserved_port_t is assigned, +selinux-polgengui considered ports 512-1023 are not used. As the +result selinux-polgengui generates file sets of (B). + +For the purpose of selinux-polgengui, I think unreserved_port_t and +ephemeral_port_t are treated as the same as hi_reserved_port_t. + +Signed-off-by: Masatake YAMATO + +Fedora only patch: +https://lore.kernel.org/selinux/20150610.190635.1866127952891120915.yamato@redhat.com/ +--- + python/sepolicy/sepolicy/generate.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py +index 7175d36b..93caedee 100644 +--- a/python/sepolicy/sepolicy/generate.py ++++ b/python/sepolicy/sepolicy/generate.py +@@ -100,7 +100,9 @@ def get_all_ports(): + for p in sepolicy.info(sepolicy.PORT): + if p['type'] == "reserved_port_t" or \ + p['type'] == "port_t" or \ +- p['type'] == "hi_reserved_port_t": ++ p['type'] == "hi_reserved_port_t" or \ ++ p['type'] == "ephemeral_port_t" or \ ++ p['type'] == "unreserved_port_t": + continue + dict[(p['low'], p['high'], p['protocol'])] = (p['type'], p.get('range')) + return dict +-- +2.22.0 + diff --git a/0018-semodule-utils-Fix-RESOURCE_LEAK-coverity-scan-defec.patch b/0018-semodule-utils-Fix-RESOURCE_LEAK-coverity-scan-defec.patch new file mode 100644 index 0000000..07033a3 --- /dev/null +++ b/0018-semodule-utils-Fix-RESOURCE_LEAK-coverity-scan-defec.patch @@ -0,0 +1,24 @@ +From f8602180d042e95947fe0bbd35d261771b347705 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Thu, 8 Nov 2018 09:20:58 +0100 +Subject: [PATCH] semodule-utils: Fix RESOURCE_LEAK coverity scan defects + +--- + semodule-utils/semodule_package/semodule_package.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/semodule-utils/semodule_package/semodule_package.c b/semodule-utils/semodule_package/semodule_package.c +index 3515234e..7b75b3fd 100644 +--- a/semodule-utils/semodule_package/semodule_package.c ++++ b/semodule-utils/semodule_package/semodule_package.c +@@ -74,6 +74,7 @@ static int file_to_data(const char *path, char **data, size_t * len) + } + if (!sb.st_size) { + *len = 0; ++ close(fd); + return 0; + } + +-- +2.22.0 + diff --git a/0019-sandbox-Use-matchbox-window-manager-instead-of-openb.patch b/0019-sandbox-Use-matchbox-window-manager-instead-of-openb.patch new file mode 100644 index 0000000..311cfac --- /dev/null +++ b/0019-sandbox-Use-matchbox-window-manager-instead-of-openb.patch @@ -0,0 +1,74 @@ +From 89895635ae012d1864a03700054ecc723973b5c0 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Wed, 18 Jul 2018 09:09:35 +0200 +Subject: [PATCH] sandbox: Use matchbox-window-manager instead of openbox + +--- + sandbox/sandbox | 4 ++-- + sandbox/sandbox.8 | 2 +- + sandbox/sandboxX.sh | 14 -------------- + 3 files changed, 3 insertions(+), 17 deletions(-) + +diff --git a/sandbox/sandbox b/sandbox/sandbox +index a12403b3..707959a6 100644 +--- a/sandbox/sandbox ++++ b/sandbox/sandbox +@@ -268,7 +268,7 @@ class Sandbox: + copyfile(f, "/tmp", self.__tmpdir) + copyfile(f, "/var/tmp", self.__tmpdir) + +- def __setup_sandboxrc(self, wm="/usr/bin/openbox"): ++ def __setup_sandboxrc(self, wm="/usr/bin/matchbox-window-manager"): + execfile = self.__homedir + "/.sandboxrc" + fd = open(execfile, "w+") + if self.__options.session: +@@ -362,7 +362,7 @@ sandbox [-h] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I includefile ] [- + + parser.add_option("-W", "--windowmanager", dest="wm", + type="string", +- default="/usr/bin/openbox", ++ default="/usr/bin/matchbox-window-manager", + help=_("alternate window manager")) + + parser.add_option("-l", "--level", dest="level", +diff --git a/sandbox/sandbox.8 b/sandbox/sandbox.8 +index d83fee76..90ef4951 100644 +--- a/sandbox/sandbox.8 ++++ b/sandbox/sandbox.8 +@@ -77,7 +77,7 @@ Specifies the windowsize when creating an X based Sandbox. The default windowsiz + \fB\-W\fR \fB\-\-windowmanager\fR + Select alternative window manager to run within + .B sandbox \-X. +-Default to /usr/bin/openbox. ++Default to /usr/bin/matchbox-window-manager. + .TP + \fB\-X\fR + Create an X based Sandbox for gui apps, temporary files for +diff --git a/sandbox/sandboxX.sh b/sandbox/sandboxX.sh +index 47745280..c211ebc1 100644 +--- a/sandbox/sandboxX.sh ++++ b/sandbox/sandboxX.sh +@@ -6,20 +6,6 @@ export TITLE="Sandbox $context -- `grep ^#TITLE: ~/.sandboxrc | /usr/bin/cut -b8 + [ -z $2 ] && export DPI="96" || export DPI="$2" + trap "exit 0" HUP + +-mkdir -p ~/.config/openbox +-cat > ~/.config/openbox/rc.xml << EOF +- +- +- +- no +- all +- yes +- +- +- +-EOF +- + (/usr/bin/Xephyr -resizeable -title "$TITLE" -terminate -reset -screen $SCREENSIZE -dpi $DPI -nolisten tcp -displayfd 5 5>&1 2>/dev/null) | while read D; do + export DISPLAY=:$D + cat > ~/seremote << __EOF +-- +2.22.0 + diff --git a/0020-python-Use-ipaddress-instead-of-IPy.patch b/0020-python-Use-ipaddress-instead-of-IPy.patch new file mode 100644 index 0000000..f916108 --- /dev/null +++ b/0020-python-Use-ipaddress-instead-of-IPy.patch @@ -0,0 +1,45 @@ +From b2512e2a92a33360639a3459039cdf2e685655a8 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Mon, 3 Dec 2018 14:40:09 +0100 +Subject: [PATCH] python: Use ipaddress instead of IPy + +ipaddress module was added in python 3.3 and this allows us to drop python3-IPy +--- + python/semanage/seobject.py | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py +index b90b1070..58497e3b 100644 +--- a/python/semanage/seobject.py ++++ b/python/semanage/seobject.py +@@ -32,7 +32,7 @@ from semanage import * + PROGNAME = "selinux-python" + import sepolicy + import setools +-from IPy import IP ++import ipaddress + + try: + import gettext +@@ -1851,13 +1851,13 @@ class nodeRecords(semanageRecords): + + # verify valid comination + if len(mask) == 0 or mask[0] == "/": +- i = IP(addr + mask) +- newaddr = i.strNormal(0) +- newmask = str(i.netmask()) +- if newmask == "0.0.0.0" and i.version() == 6: ++ i = ipaddress.ip_network(addr + mask) ++ newaddr = str(i.network_address) ++ newmask = str(i.netmask) ++ if newmask == "0.0.0.0" and i.version == 6: + newmask = "::" + +- protocol = "ipv%d" % i.version() ++ protocol = "ipv%d" % i.version + + try: + newprotocol = self.protocol.index(protocol) +-- +2.22.0 + diff --git a/0021-python-semanage-Do-not-traceback-when-the-default-po.patch b/0021-python-semanage-Do-not-traceback-when-the-default-po.patch new file mode 100644 index 0000000..710d2a6 --- /dev/null +++ b/0021-python-semanage-Do-not-traceback-when-the-default-po.patch @@ -0,0 +1,93 @@ +From e9b08da87ed222059c1f1f0c0de7cc760f485552 Mon Sep 17 00:00:00 2001 +From: Petr Lautrbach +Date: Thu, 4 Apr 2019 23:02:56 +0200 +Subject: [PATCH] python/semanage: Do not traceback when the default policy is + not available + +"import seobject" causes "import sepolicy" which crashes when the system policy +is not available. It's better to provide an error message instead. + +Signed-off-by: Petr Lautrbach +--- + python/semanage/semanage | 37 +++++++++++++++++++++---------------- + 1 file changed, 21 insertions(+), 16 deletions(-) + +diff --git a/python/semanage/semanage b/python/semanage/semanage +index 56db3e0d..4c766ae3 100644 +--- a/python/semanage/semanage ++++ b/python/semanage/semanage +@@ -25,7 +25,6 @@ + + import traceback + import argparse +-import seobject + import sys + PROGNAME = "selinux-python" + try: +@@ -129,21 +128,6 @@ class SetImportFile(argparse.Action): + sys.exit(1) + setattr(namespace, self.dest, values) + +-# define dictonary for seobject OBEJCTS +-object_dict = { +- 'login': seobject.loginRecords, +- 'user': seobject.seluserRecords, +- 'port': seobject.portRecords, +- 'module': seobject.moduleRecords, +- 'interface': seobject.interfaceRecords, +- 'node': seobject.nodeRecords, +- 'fcontext': seobject.fcontextRecords, +- 'boolean': seobject.booleanRecords, +- 'permissive': seobject.permissiveRecords, +- 'dontaudit': seobject.dontauditClass, +- 'ibpkey': seobject.ibpkeyRecords, +- 'ibendport': seobject.ibendportRecords +-} + + def generate_custom_usage(usage_text, usage_dict): + # generate custom usage from given text and dictonary +@@ -608,6 +592,7 @@ def setupInterfaceParser(subparsers): + + + def handleModule(args): ++ import seobject + OBJECT = seobject.moduleRecords(args) + if args.action_add: + OBJECT.add(args.action_add[0], args.priority) +@@ -846,6 +831,7 @@ def mkargv(line): + + + def handleImport(args): ++ import seobject + trans = seobject.semanageRecords(args) + trans.start() + +@@ -887,6 +873,25 @@ def createCommandParser(): + #To add a new subcommand define the parser for it in a function above and call it here. + subparsers = commandParser.add_subparsers(dest='subcommand') + subparsers.required = True ++ ++ import seobject ++ # define dictonary for seobject OBEJCTS ++ global object_dict ++ object_dict = { ++ 'login': seobject.loginRecords, ++ 'user': seobject.seluserRecords, ++ 'port': seobject.portRecords, ++ 'module': seobject.moduleRecords, ++ 'interface': seobject.interfaceRecords, ++ 'node': seobject.nodeRecords, ++ 'fcontext': seobject.fcontextRecords, ++ 'boolean': seobject.booleanRecords, ++ 'permissive': seobject.permissiveRecords, ++ 'dontaudit': seobject.dontauditClass, ++ 'ibpkey': seobject.ibpkeyRecords, ++ 'ibendport': seobject.ibendportRecords ++ } ++ + setupImportParser(subparsers) + setupExportParser(subparsers) + setupLoginParser(subparsers) +-- +2.22.0 + diff --git a/policycoreutils-fedora.patch b/policycoreutils-fedora.patch deleted file mode 100644 index c18a4e7..0000000 --- a/policycoreutils-fedora.patch +++ /dev/null @@ -1,139 +0,0 @@ -diff --git policycoreutils-2.9/po/Makefile policycoreutils-2.9/po/Makefile -index 575e143..18bc1df 100644 ---- policycoreutils-2.9/po/Makefile -+++ policycoreutils-2.9/po/Makefile -@@ -3,7 +3,6 @@ - # - - PREFIX ?= /usr --TOP = ../.. - - # What is this package? - NLSPACKAGE = policycoreutils -@@ -32,74 +31,13 @@ USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) - - POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) - MOFILES = $(patsubst %.po,%.mo,$(POFILES)) --POTFILES = \ -- ../run_init/open_init_pty.c \ -- ../run_init/run_init.c \ -- ../semodule_link/semodule_link.c \ -- ../audit2allow/audit2allow \ -- ../semanage/seobject.py \ -- ../setsebool/setsebool.c \ -- ../newrole/newrole.c \ -- ../load_policy/load_policy.c \ -- ../sestatus/sestatus.c \ -- ../semodule/semodule.c \ -- ../setfiles/setfiles.c \ -- ../semodule_package/semodule_package.c \ -- ../semodule_deps/semodule_deps.c \ -- ../semodule_expand/semodule_expand.c \ -- ../scripts/chcat \ -- ../scripts/fixfiles \ -- ../restorecond/stringslist.c \ -- ../restorecond/restorecond.h \ -- ../restorecond/utmpwatcher.h \ -- ../restorecond/stringslist.h \ -- ../restorecond/restorecond.c \ -- ../restorecond/utmpwatcher.c \ -- ../gui/booleansPage.py \ -- ../gui/fcontextPage.py \ -- ../gui/loginsPage.py \ -- ../gui/mappingsPage.py \ -- ../gui/modulesPage.py \ -- ../gui/polgen.glade \ -- ../gui/polgengui.py \ -- ../gui/portsPage.py \ -- ../gui/semanagePage.py \ -- ../gui/statusPage.py \ -- ../gui/system-config-selinux.glade \ -- ../gui/system-config-selinux.py \ -- ../gui/usersPage.py \ -- ../secon/secon.c \ -- booleans.py \ -- ../sepolicy/sepolicy.py \ -- ../sepolicy/sepolicy/communicate.py \ -- ../sepolicy/sepolicy/__init__.py \ -- ../sepolicy/sepolicy/network.py \ -- ../sepolicy/sepolicy/generate.py \ -- ../sepolicy/sepolicy/sepolicy.glade \ -- ../sepolicy/sepolicy/gui.py \ -- ../sepolicy/sepolicy/manpage.py \ -- ../sepolicy/sepolicy/transition.py \ -- ../sepolicy/sepolicy/templates/executable.py \ -- ../sepolicy/sepolicy/templates/__init__.py \ -- ../sepolicy/sepolicy/templates/network.py \ -- ../sepolicy/sepolicy/templates/rw.py \ -- ../sepolicy/sepolicy/templates/script.py \ -- ../sepolicy/sepolicy/templates/semodule.py \ -- ../sepolicy/sepolicy/templates/tmp.py \ -- ../sepolicy/sepolicy/templates/user.py \ -- ../sepolicy/sepolicy/templates/var_lib.py \ -- ../sepolicy/sepolicy/templates/var_log.py \ -- ../sepolicy/sepolicy/templates/var_run.py \ -- ../sepolicy/sepolicy/templates/var_spool.py -+POTFILES = $(shell cat POTFILES) - - #default:: clean - --all:: $(MOFILES) -+all:: $(POTFILE) $(MOFILES) - --booleans.py: -- sepolicy booleans -a > booleans.py -- --$(POTFILE): $(POTFILES) booleans.py -+$(POTFILE): $(POTFILES) - $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES) - @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ - rm -f $(NLSPACKAGE).po; \ -@@ -107,8 +45,6 @@ $(POTFILE): $(POTFILES) booleans.py - mv -f $(NLSPACKAGE).po $(POTFILE); \ - fi; \ - --update-po: Makefile $(POTFILE) refresh-po -- @rm -f booleans.py - - refresh-po: Makefile - for cat in $(POFILES); do \ -diff --git policycoreutils-2.9/po/POTFILES policycoreutils-2.9/po/POTFILES -new file mode 100644 -index 0000000..12237dc ---- /dev/null -+++ policycoreutils-2.9/po/POTFILES -@@ -0,0 +1,9 @@ -+../run_init/open_init_pty.c -+../run_init/run_init.c -+../setsebool/setsebool.c -+../newrole/newrole.c -+../load_policy/load_policy.c -+../sestatus/sestatus.c -+../semodule/semodule.c -+../setfiles/setfiles.c -+../secon/secon.c -diff --git policycoreutils-2.9/scripts/fixfiles policycoreutils-2.9/scripts/fixfiles -index b277958..53d28c7 100755 ---- policycoreutils-2.9/scripts/fixfiles -+++ policycoreutils-2.9/scripts/fixfiles -@@ -108,6 +108,7 @@ exclude_dirs_from_relabelling() { - fullFlag=0 - BOOTTIME="" - VERBOSE="-p" -+[ -t 1 ] || VERBOSE="" - FORCEFLAG="" - RPMFILES="" - PREFC="" -diff --git policycoreutils-2.9/setfiles/setfiles.8 policycoreutils-2.9/setfiles/setfiles.8 -index ccaaf4d..a8a76c8 100644 ---- policycoreutils-2.9/setfiles/setfiles.8 -+++ policycoreutils-2.9/setfiles/setfiles.8 -@@ -57,7 +57,7 @@ check the validity of the contexts against the specified binary policy. - .TP - .B \-d - show what specification matched each file (do not abort validation --after ABORT_ON_ERRORS errors). -+after ABORT_ON_ERRORS errors). Not affected by "\-q" - .TP - .BI \-e \ directory - directory to exclude (repeat option for more than one directory). diff --git a/policycoreutils.spec b/policycoreutils.spec index 75a64ae..ffb2e07 100644 --- a/policycoreutils.spec +++ b/policycoreutils.spec @@ -34,19 +34,32 @@ Source20: policycoreutils-po.tgz Source21: python-po.tgz Source22: gui-po.tgz Source23: sandbox-po.tgz -# download https://raw.githubusercontent.com/fedora-selinux/scripts/master/selinux/make-fedora-selinux-patch.sh -# run: -# HEAD https://github.com/fedora-selinux/selinux/commit/431f72836d6c02450725cf6ffb1c7223b9fa6acc -# $ for i in policycoreutils selinux-python selinux-gui selinux-sandbox selinux-dbus semodule-utils restorecond; do -# VERSION=2.9 ./make-fedora-selinux-patch.sh $i -# done -Patch: policycoreutils-fedora.patch -Patch1: selinux-python-fedora.patch -Patch2: selinux-gui-fedora.patch -Patch3: selinux-sandbox-fedora.patch -# Patch4: selinux-dbus-fedora.patch -Patch5: semodule-utils-fedora.patch -# Patch6: restorecond-fedora.patch +# https://github.com/fedora-selinux/selinux +# $ git format-patch -N 20190315 -- policycoreutils python gui sandbox dbus semodule-utils restorecond +# $ for j in [0-9]*.patch; do printf "Patch%s: %s\n" ${j/-*/} $j; done +Patch0001: 0001-gui-Install-polgengui.py-to-usr-bin-selinux-polgengu.patch +Patch0002: 0002-gui-Install-.desktop-files-to-usr-share-applications.patch +Patch0003: 0003-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch +Patch0004: 0004-Fix-STANDARD_FILE_CONTEXT-section-in-man-pages.patch +Patch0005: 0005-If-there-is-no-executable-we-don-t-want-to-print-a-p.patch +Patch0006: 0006-Simplication-of-sepolicy-manpage-web-functionality.-.patch +Patch0007: 0007-We-want-to-remove-the-trailing-newline-for-etc-syste.patch +Patch0008: 0008-Fix-title-in-manpage.py-to-not-contain-online.patch +Patch0009: 0009-Don-t-be-verbose-if-you-are-not-on-a-tty.patch +Patch0010: 0010-sepolicy-Drop-old-interface-file_type_is_executable-.patch +Patch0011: 0011-sepolicy-Another-small-optimization-for-mcs-types.patch +Patch0012: 0012-Move-po-translation-files-into-the-right-sub-directo.patch +Patch0013: 0013-Use-correct-gettext-domains-in-python-gui-sandbox.patch +Patch0014: 0014-Initial-.pot-files-for-gui-python-sandbox.patch +# this is too big and it's covered by sources 20 - 23 +# Patch0015: 0015-Update-.po-files-from-fedora.zanata.org.patch +Patch0016: 0016-policycoreutils-setfiles-Improve-description-of-d-sw.patch +Patch0017: 0017-sepolicy-generate-Handle-more-reserved-port-types.patch +Patch0018: 0018-semodule-utils-Fix-RESOURCE_LEAK-coverity-scan-defec.patch +Patch0019: 0019-sandbox-Use-matchbox-window-manager-instead-of-openb.patch +Patch0020: 0020-python-Use-ipaddress-instead-of-IPy.patch +Patch0021: 0021-python-semanage-Do-not-traceback-when-the-default-po.patch + Obsoletes: policycoreutils < 2.0.61-2 Conflicts: filesystem < 3, selinux-policy-base < 3.13.1-138 # initscripts < 9.66 shipped fedora-autorelabel services which are renamed to selinux-relabel @@ -59,6 +72,7 @@ BuildRequires: pam-devel libsepol-static >= %{libsepolver} libsemanage-static >= BuildRequires: desktop-file-utils dbus-devel dbus-glib-devel BuildRequires: python2-devel python3-devel BuildRequires: systemd +BuildRequires: git Requires: util-linux grep gawk diffutils rpm sed Requires: libsepol >= %{libsepolver} coreutils libselinux-utils >= %{libselinuxver} @@ -78,44 +92,49 @@ for basic operation of a SELinux system. These utilities include load_policy to load policies, setfiles to label filesystems, newrole to switch roles. -%prep +%prep -p /usr/bin/bash # create selinux/ directory and extract sources -%setup -q -c -n selinux -%setup -q -T -D -a 1 -n selinux -%setup -q -T -D -a 2 -n selinux -%setup -q -T -D -a 3 -n selinux -%setup -q -T -D -a 4 -n selinux -%setup -q -T -D -a 5 -n selinux -%setup -q -T -D -a 6 -n selinux -%patch -p0 -b .policycoreutils-fedora +%autosetup -S git -N -c -n selinux +%autosetup -S git -N -T -D -a 1 -n selinux +%autosetup -S git -N -T -D -a 2 -n selinux +%autosetup -S git -N -T -D -a 3 -n selinux +%autosetup -S git -N -T -D -a 4 -n selinux +%autosetup -S git -N -T -D -a 5 -n selinux +%autosetup -S git -N -T -D -a 6 -n selinux -cp %{SOURCE13} selinux-gui-%{version}/ -tar -xvf %{SOURCE14} -C selinux-python-%{version}/sepolicy/ -%patch1 -p0 -b .selinux-python -%patch2 -p0 -b .selinux-gui -%patch3 -p0 -b .selinux-sandbox -# %patch4 -p0 -b .selinux-dbus -%patch5 -p0 -b .semodule-utils -# %patch6 -p0 -b .restorecond +for i in *; do + git mv $i ${i/-%{version}/} + git commit -q --allow-empty -a --author 'rpm-build ' -m "$i -> ${i/-%{version}/}" +done + +for i in selinux-*; do + git mv $i ${i#selinux-} + git commit -q --allow-empty -a --author 'rpm-build ' -m "$i -> ${i#selinux-}" +done + +git am %{_sourcedir}/[0-9]*.patch + +cp %{SOURCE13} gui/ +tar -xvf %{SOURCE14} -C python/sepolicy/ # Since patches containing translation changes were too big, translations were moved to separate tarballs # For more information see README.translations -tar -x -f %{SOURCE20} -C policycoreutils-%{version} -z -tar -x -f %{SOURCE21} -C selinux-python-%{version} -z -tar -x -f %{SOURCE22} -C selinux-gui-%{version} -z -tar -x -f %{SOURCE23} -C selinux-sandbox-%{version} -z +tar -x -f %{SOURCE20} -C policycoreutils -z +tar -x -f %{SOURCE21} -C python -z +tar -x -f %{SOURCE22} -C gui -z +tar -x -f %{SOURCE23} -C sandbox -z %build %set_build_flags export PYTHON=%{__python3} -make -C policycoreutils-%{version} LSPP_PRIV=y SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" SEMODULE_PATH="/usr/sbin" LIBSEPOLA="%{_libdir}/libsepol.a" all -make -C selinux-python-%{version} SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all -make -C selinux-gui-%{version} SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all -make -C selinux-sandbox-%{version} SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all -make -C selinux-dbus-%{version} SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all -make -C semodule-utils-%{version} SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all -make -C restorecond-%{version} SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C policycoreutils LSPP_PRIV=y SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" SEMODULE_PATH="/usr/sbin" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C python SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C gui SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C sandbox SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C dbus SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C semodule-utils SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all +make -C restorecond SBINDIR="%{_sbindir}" LSPP_PRIV=y LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" all %install mkdir -p %{buildroot}%{_bindir} @@ -125,20 +144,20 @@ mkdir -p %{buildroot}%{_mandir}/man5 mkdir -p %{buildroot}%{_mandir}/man8 %{__mkdir} -p %{buildroot}/%{_usr}/share/doc/%{name}/ -make -C policycoreutils-%{version} LSPP_PRIV=y DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" SEMODULE_PATH="/usr/sbin" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C policycoreutils LSPP_PRIV=y DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" SEMODULE_PATH="/usr/sbin" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C selinux-python-%{version} PYTHON=%{__python2} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C selinux-python-%{version} PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C python PYTHON=%{__python2} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C python PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C selinux-gui-%{version} PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C gui PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C selinux-sandbox-%{version} PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C sandbox PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C selinux-dbus-%{version} PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C dbus PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C semodule-utils-%{version} PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C semodule-utils PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install -make -C restorecond-%{version} PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install +make -C restorecond PYTHON=%{__python3} DESTDIR="%{buildroot}" SBINDIR="%{_sbindir}" LIBDIR="%{_libdir}" LIBSEPOLA="%{_libdir}/libsepol.a" install # Fix perms on newrole so that objcopy can process it chmod 0755 %{buildroot}%{_bindir}/newrole @@ -473,7 +492,7 @@ system-config-selinux is a utility for managing the SELinux environment %dir %{_datadir}/bash-completion %{_datadir}/bash-completion/completions/setsebool %{!?_licensedir:%global license %%doc} -%license policycoreutils-%{version}/COPYING +%license policycoreutils/COPYING %doc %{_usr}/share/doc/%{name} %package restorecond @@ -531,7 +550,7 @@ The policycoreutils-restorecond package contains the restorecond service. /usr/share/man/ru/man8/system-config-selinux.8.gz %{!?_licensedir:%global license %%doc} -%license policycoreutils-%{version}/COPYING +%license policycoreutils/COPYING %post %systemd_post selinux-autorelabel-mark.service diff --git a/restorecond-fedora.patch b/restorecond-fedora.patch deleted file mode 100644 index e69de29..0000000 diff --git a/selinux-dbus-fedora.patch b/selinux-dbus-fedora.patch deleted file mode 100644 index e69de29..0000000 diff --git a/selinux-gui-fedora.patch b/selinux-gui-fedora.patch deleted file mode 100644 index 0cce141..0000000 --- a/selinux-gui-fedora.patch +++ /dev/null @@ -1,313 +0,0 @@ -diff --git selinux-gui-2.9/Makefile selinux-gui-2.9/Makefile -index c2f982d..5a5bf6d 100644 ---- selinux-gui-2.9/Makefile -+++ selinux-gui-2.9/Makefile -@@ -5,6 +5,7 @@ BINDIR ?= $(PREFIX)/bin - SHAREDIR ?= $(PREFIX)/share/system-config-selinux - DATADIR ?= $(PREFIX)/share - MANDIR ?= $(PREFIX)/share/man -+DESKTOPDIR ?= $(PREFIX)/share/applications - - TARGETS= \ - booleansPage.py \ -@@ -21,6 +22,7 @@ system-config-selinux.ui \ - usersPage.py - - all: $(TARGETS) system-config-selinux.py polgengui.py -+ (cd po && $(MAKE) $@) - - install: all - -mkdir -p $(DESTDIR)$(MANDIR)/man8 -@@ -29,9 +31,10 @@ install: all - -mkdir -p $(DESTDIR)$(DATADIR)/pixmaps - -mkdir -p $(DESTDIR)$(DATADIR)/icons/hicolor/24x24/apps - -mkdir -p $(DESTDIR)$(DATADIR)/polkit-1/actions/ -+ -mkdir -p $(DESTDIR)$(DESKTOPDIR) - install -m 755 system-config-selinux.py $(DESTDIR)$(SHAREDIR) - install -m 755 system-config-selinux $(DESTDIR)$(BINDIR) -- install -m 755 polgengui.py $(DESTDIR)$(SHAREDIR) -+ install -m 755 polgengui.py $(DESTDIR)$(BINDIR)/selinux-polgengui - install -m 644 $(TARGETS) $(DESTDIR)$(SHAREDIR) - install -m 644 system-config-selinux.8 $(DESTDIR)$(MANDIR)/man8 - install -m 644 selinux-polgengui.8 $(DESTDIR)$(MANDIR)/man8 -@@ -44,7 +47,7 @@ install: all - install -m 644 system-config-selinux.png $(DESTDIR)$(DATADIR)/pixmaps - install -m 644 system-config-selinux.png $(DESTDIR)$(DATADIR)/icons/hicolor/24x24/apps - install -m 644 system-config-selinux.png $(DESTDIR)$(DATADIR)/system-config-selinux -- install -m 644 *.desktop $(DESTDIR)$(DATADIR)/system-config-selinux -+ install -m 644 *.desktop $(DESTDIR)$(DESKTOPDIR) - -mkdir -p $(DESTDIR)$(DATADIR)/pixmaps - install -m 644 sepolicy_256.png $(DESTDIR)$(DATADIR)/pixmaps/sepolicy.png - for i in 16 22 32 48 256; do \ -@@ -52,6 +55,8 @@ install: all - install -m 644 sepolicy_$${i}.png $(DESTDIR)$(DATADIR)/icons/hicolor/$${i}x$${i}/apps/sepolicy.png; \ - done - install -m 644 org.selinux.config.policy $(DESTDIR)$(DATADIR)/polkit-1/actions/ -+ (cd po && $(MAKE) $@) -+ - clean: - - indent: -diff --git selinux-gui-2.9/booleansPage.py selinux-gui-2.9/booleansPage.py -index 7849bea..dd12b6d 100644 ---- selinux-gui-2.9/booleansPage.py -+++ selinux-gui-2.9/booleansPage.py -@@ -38,7 +38,7 @@ DISABLED = 2 - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/domainsPage.py selinux-gui-2.9/domainsPage.py -index bad5140..6bbe4de 100644 ---- selinux-gui-2.9/domainsPage.py -+++ selinux-gui-2.9/domainsPage.py -@@ -30,7 +30,7 @@ from semanagePage import * - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/fcontextPage.py selinux-gui-2.9/fcontextPage.py -index 370bbee..e424366 100644 ---- selinux-gui-2.9/fcontextPage.py -+++ selinux-gui-2.9/fcontextPage.py -@@ -47,7 +47,7 @@ class context: - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/loginsPage.py selinux-gui-2.9/loginsPage.py -index b67eb8b..cbfb0cc 100644 ---- selinux-gui-2.9/loginsPage.py -+++ selinux-gui-2.9/loginsPage.py -@@ -29,7 +29,7 @@ from semanagePage import * - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/modulesPage.py selinux-gui-2.9/modulesPage.py -index 34c5d9e..26ac540 100644 ---- selinux-gui-2.9/modulesPage.py -+++ selinux-gui-2.9/modulesPage.py -@@ -30,7 +30,7 @@ from semanagePage import * - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -@@ -118,7 +118,7 @@ class modulesPage(semanagePage): - - def new_module(self, args): - try: -- Popen(["/usr/share/system-config-selinux/polgengui.py"]) -+ Popen(["selinux-polgengui"]) - except ValueError as e: - self.error(e.args[0]) - -diff --git selinux-gui-2.9/po/Makefile selinux-gui-2.9/po/Makefile -new file mode 100644 -index 0000000..a0f5439 ---- /dev/null -+++ selinux-gui-2.9/po/Makefile -@@ -0,0 +1,82 @@ -+# -+# Makefile for the PO files (translation) catalog -+# -+ -+PREFIX ?= /usr -+ -+# What is this package? -+NLSPACKAGE = gui -+POTFILE = $(NLSPACKAGE).pot -+INSTALL = /usr/bin/install -c -p -+INSTALL_DATA = $(INSTALL) -m 644 -+INSTALL_DIR = /usr/bin/install -d -+ -+# destination directory -+INSTALL_NLS_DIR = $(PREFIX)/share/locale -+ -+# PO catalog handling -+MSGMERGE = msgmerge -+MSGMERGE_FLAGS = -q -+XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) -+MSGFMT = msgfmt -+ -+# All possible linguas -+PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po))) -+ -+# Only the files matching what the user has set in LINGUAS -+USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS)) -+ -+# if no valid LINGUAS, build all languages -+USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) -+ -+POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) -+MOFILES = $(patsubst %.po,%.mo,$(POFILES)) -+POTFILES = $(shell cat POTFILES) -+ -+#default:: clean -+ -+all:: $(MOFILES) -+ -+$(POTFILE): $(POTFILES) -+ $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES) -+ @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ -+ rm -f $(NLSPACKAGE).po; \ -+ else \ -+ mv -f $(NLSPACKAGE).po $(POTFILE); \ -+ fi; \ -+ -+ -+refresh-po: Makefile -+ for cat in $(POFILES); do \ -+ lang=`basename $$cat .po`; \ -+ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ -+ mv -f $$lang.pot $$lang.po ; \ -+ echo "$(MSGMERGE) of $$lang succeeded" ; \ -+ else \ -+ echo "$(MSGMERGE) of $$lang failed" ; \ -+ rm -f $$lang.pot ; \ -+ fi \ -+ done -+ -+clean: -+ @rm -fv *mo *~ .depend -+ @rm -rf tmp -+ -+install: $(MOFILES) -+ @for n in $(MOFILES); do \ -+ l=`basename $$n .mo`; \ -+ $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ -+ $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \ -+ done -+ -+%.mo: %.po -+ $(MSGFMT) -o $@ $< -+report: -+ @for cat in $(wildcard *.po); do \ -+ echo -n "$$cat: "; \ -+ msgfmt -v --statistics -o /dev/null $$cat; \ -+ done -+ -+.PHONY: missing depend -+ -+relabel: -diff --git selinux-gui-2.9/po/POTFILES selinux-gui-2.9/po/POTFILES -new file mode 100644 -index 0000000..1795c5c ---- /dev/null -+++ selinux-gui-2.9/po/POTFILES -@@ -0,0 +1,17 @@ -+../booleansPage.py -+../domainsPage.py -+../fcontextPage.py -+../loginsPage.py -+../modulesPage.py -+../org.selinux.config.policy -+../polgengui.py -+../polgen.ui -+../portsPage.py -+../selinux-polgengui.desktop -+../semanagePage.py -+../sepolicy.desktop -+../statusPage.py -+../system-config-selinux.desktop -+../system-config-selinux.py -+../system-config-selinux.ui -+../usersPage.py -diff --git selinux-gui-2.9/polgengui.py selinux-gui-2.9/polgengui.py -index b1cc993..46a1bd2 100644 ---- selinux-gui-2.9/polgengui.py -+++ selinux-gui-2.9/polgengui.py -@@ -63,7 +63,7 @@ def get_all_modules(): - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/portsPage.py selinux-gui-2.9/portsPage.py -index 30f5838..a537ecc 100644 ---- selinux-gui-2.9/portsPage.py -+++ selinux-gui-2.9/portsPage.py -@@ -35,7 +35,7 @@ from semanagePage import * - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/semanagePage.py selinux-gui-2.9/semanagePage.py -index 4127804..5361d69 100644 ---- selinux-gui-2.9/semanagePage.py -+++ selinux-gui-2.9/semanagePage.py -@@ -22,7 +22,7 @@ from gi.repository import Gdk, Gtk - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/statusPage.py selinux-gui-2.9/statusPage.py -index 766854b..a8f079b 100644 ---- selinux-gui-2.9/statusPage.py -+++ selinux-gui-2.9/statusPage.py -@@ -35,7 +35,7 @@ RELABELFILE = "/.autorelabel" - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/system-config-selinux.py selinux-gui-2.9/system-config-selinux.py -index c42301b..1e0d5eb 100644 ---- selinux-gui-2.9/system-config-selinux.py -+++ selinux-gui-2.9/system-config-selinux.py -@@ -45,7 +45,7 @@ import selinux - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} -diff --git selinux-gui-2.9/usersPage.py selinux-gui-2.9/usersPage.py -index 26794ed..d15d4c5 100644 ---- selinux-gui-2.9/usersPage.py -+++ selinux-gui-2.9/usersPage.py -@@ -29,7 +29,7 @@ from semanagePage import * - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-gui" - try: - import gettext - kwargs = {} diff --git a/selinux-python-fedora.patch b/selinux-python-fedora.patch deleted file mode 100644 index e39f778..0000000 --- a/selinux-python-fedora.patch +++ /dev/null @@ -1,512 +0,0 @@ -diff --git selinux-python-2.9/Makefile selinux-python-2.9/Makefile -index 9b66d52..00312db 100644 ---- selinux-python-2.9/Makefile -+++ selinux-python-2.9/Makefile -@@ -1,4 +1,4 @@ --SUBDIRS = sepolicy audit2allow semanage sepolgen chcat -+SUBDIRS = sepolicy audit2allow semanage sepolgen chcat po - - all install relabel clean indent test: - @for subdir in $(SUBDIRS); do \ -diff --git selinux-python-2.9/chcat/chcat selinux-python-2.9/chcat/chcat -index ba39868..df2509f 100755 ---- selinux-python-2.9/chcat/chcat -+++ selinux-python-2.9/chcat/chcat -@@ -30,7 +30,7 @@ import getopt - import selinux - import seobject - --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -diff --git selinux-python-2.9/po/Makefile selinux-python-2.9/po/Makefile -new file mode 100644 -index 0000000..4e052d5 ---- /dev/null -+++ selinux-python-2.9/po/Makefile -@@ -0,0 +1,83 @@ -+# -+# Makefile for the PO files (translation) catalog -+# -+ -+PREFIX ?= /usr -+ -+# What is this package? -+NLSPACKAGE = python -+POTFILE = $(NLSPACKAGE).pot -+INSTALL = /usr/bin/install -c -p -+INSTALL_DATA = $(INSTALL) -m 644 -+INSTALL_DIR = /usr/bin/install -d -+ -+# destination directory -+INSTALL_NLS_DIR = $(PREFIX)/share/locale -+ -+# PO catalog handling -+MSGMERGE = msgmerge -+MSGMERGE_FLAGS = -q -+XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) -+MSGFMT = msgfmt -+ -+# All possible linguas -+PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po))) -+ -+# Only the files matching what the user has set in LINGUAS -+USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS)) -+ -+# if no valid LINGUAS, build all languages -+USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) -+ -+POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) -+MOFILES = $(patsubst %.po,%.mo,$(POFILES)) -+POTFILES = $(shell cat POTFILES) -+ -+#default:: clean -+ -+all:: $(MOFILES) -+ -+$(POTFILE): $(POTFILES) -+ $(XGETTEXT) -L Python --keyword=_ --keyword=N_ $(POTFILES) -+ $(XGETTEXT) -j --keyword=_ --keyword=N_ ../sepolicy/sepolicy/sepolicy.glade -+ @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ -+ rm -f $(NLSPACKAGE).po; \ -+ else \ -+ mv -f $(NLSPACKAGE).po $(POTFILE); \ -+ fi; \ -+ -+ -+refresh-po: Makefile -+ for cat in $(POFILES); do \ -+ lang=`basename $$cat .po`; \ -+ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ -+ mv -f $$lang.pot $$lang.po ; \ -+ echo "$(MSGMERGE) of $$lang succeeded" ; \ -+ else \ -+ echo "$(MSGMERGE) of $$lang failed" ; \ -+ rm -f $$lang.pot ; \ -+ fi \ -+ done -+ -+clean: -+ @rm -fv *mo *~ .depend -+ @rm -rf tmp -+ -+install: $(MOFILES) -+ @for n in $(MOFILES); do \ -+ l=`basename $$n .mo`; \ -+ $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ -+ $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \ -+ done -+ -+%.mo: %.po -+ $(MSGFMT) -o $@ $< -+report: -+ @for cat in $(wildcard *.po); do \ -+ echo -n "$$cat: "; \ -+ msgfmt -v --statistics -o /dev/null $$cat; \ -+ done -+ -+.PHONY: missing depend -+ -+relabel: -diff --git selinux-python-2.9/po/POTFILES selinux-python-2.9/po/POTFILES -new file mode 100644 -index 0000000..128eb87 ---- /dev/null -+++ selinux-python-2.9/po/POTFILES -@@ -0,0 +1,10 @@ -+../audit2allow/audit2allow -+../chcat/chcat -+../semanage/semanage -+../semanage/seobject.py -+../sepolgen/src/sepolgen/interfaces.py -+../sepolicy/sepolicy/generate.py -+../sepolicy/sepolicy/gui.py -+../sepolicy/sepolicy/__init__.py -+../sepolicy/sepolicy/interface.py -+../sepolicy/sepolicy.py -diff --git selinux-python-2.9/semanage/semanage selinux-python-2.9/semanage/semanage -index 144cc00..56db3e0 100644 ---- selinux-python-2.9/semanage/semanage -+++ selinux-python-2.9/semanage/semanage -@@ -27,7 +27,7 @@ import traceback - import argparse - import seobject - import sys --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -diff --git selinux-python-2.9/semanage/seobject.py selinux-python-2.9/semanage/seobject.py -index 13fdf53..58497e3 100644 ---- selinux-python-2.9/semanage/seobject.py -+++ selinux-python-2.9/semanage/seobject.py -@@ -29,10 +29,10 @@ import sys - import stat - import socket - from semanage import * --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - import sepolicy - import setools --from IPy import IP -+import ipaddress - - try: - import gettext -@@ -1851,13 +1851,13 @@ class nodeRecords(semanageRecords): - - # verify valid comination - if len(mask) == 0 or mask[0] == "/": -- i = IP(addr + mask) -- newaddr = i.strNormal(0) -- newmask = str(i.netmask()) -- if newmask == "0.0.0.0" and i.version() == 6: -+ i = ipaddress.ip_network(addr + mask) -+ newaddr = str(i.network_address) -+ newmask = str(i.netmask) -+ if newmask == "0.0.0.0" and i.version == 6: - newmask = "::" - -- protocol = "ipv%d" % i.version() -+ protocol = "ipv%d" % i.version - - try: - newprotocol = self.protocol.index(protocol) -diff --git selinux-python-2.9/sepolgen/src/sepolgen/sepolgeni18n.py selinux-python-2.9/sepolgen/src/sepolgen/sepolgeni18n.py -index 998c435..56ebd80 100644 ---- selinux-python-2.9/sepolgen/src/sepolgen/sepolgeni18n.py -+++ selinux-python-2.9/sepolgen/src/sepolgen/sepolgeni18n.py -@@ -19,7 +19,7 @@ - - try: - import gettext -- t = gettext.translation( 'yumex' ) -+ t = gettext.translation( 'selinux-python' ) - _ = t.gettext - except: - def _(str): -diff --git selinux-python-2.9/sepolicy/sepolicy.py selinux-python-2.9/sepolicy/sepolicy.py -index 1934cd8..8bd6a57 100755 ---- selinux-python-2.9/sepolicy/sepolicy.py -+++ selinux-python-2.9/sepolicy/sepolicy.py -@@ -27,7 +27,7 @@ import selinux - import sepolicy - from sepolicy import get_os_version, get_conditionals, get_conditionals_format_text - import argparse --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -diff --git selinux-python-2.9/sepolicy/sepolicy/__init__.py selinux-python-2.9/sepolicy/sepolicy/__init__.py -index 6aed31b..b6ca57c 100644 ---- selinux-python-2.9/sepolicy/sepolicy/__init__.py -+++ selinux-python-2.9/sepolicy/sepolicy/__init__.py -@@ -13,7 +13,7 @@ import os - import re - import gzip - --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -@@ -1209,27 +1209,14 @@ def boolean_desc(boolean): - - - def get_os_version(): -- os_version = "" -- pkg_name = "selinux-policy" -+ system_release = "" - try: -- try: -- from commands import getstatusoutput -- except ImportError: -- from subprocess import getstatusoutput -- rc, output = getstatusoutput("rpm -q '%s'" % pkg_name) -- if rc == 0: -- os_version = output.split(".")[-2] -- except: -- os_version = "" -- -- if os_version[0:2] == "fc": -- os_version = "Fedora" + os_version[2:] -- elif os_version[0:2] == "el": -- os_version = "RHEL" + os_version[2:] -- else: -- os_version = "" -+ with open('/etc/system-release') as f: -+ system_release = f.readline().rstrip() -+ except IOError: -+ system_release = "Misc" - -- return os_version -+ return system_release - - - def reinit(): -diff --git selinux-python-2.9/sepolicy/sepolicy/generate.py selinux-python-2.9/sepolicy/sepolicy/generate.py -index 019e783..93caede 100644 ---- selinux-python-2.9/sepolicy/sepolicy/generate.py -+++ selinux-python-2.9/sepolicy/sepolicy/generate.py -@@ -49,7 +49,7 @@ import sepolgen.defaults as defaults - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -@@ -100,7 +100,9 @@ def get_all_ports(): - for p in sepolicy.info(sepolicy.PORT): - if p['type'] == "reserved_port_t" or \ - p['type'] == "port_t" or \ -- p['type'] == "hi_reserved_port_t": -+ p['type'] == "hi_reserved_port_t" or \ -+ p['type'] == "ephemeral_port_t" or \ -+ p['type'] == "unreserved_port_t": - continue - dict[(p['low'], p['high'], p['protocol'])] = (p['type'], p.get('range')) - return dict -diff --git selinux-python-2.9/sepolicy/sepolicy/gui.py selinux-python-2.9/sepolicy/sepolicy/gui.py -index 00fd7a1..805cee6 100644 ---- selinux-python-2.9/sepolicy/sepolicy/gui.py -+++ selinux-python-2.9/sepolicy/sepolicy/gui.py -@@ -41,7 +41,7 @@ import os - import re - import unicodedata - --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -diff --git selinux-python-2.9/sepolicy/sepolicy/interface.py selinux-python-2.9/sepolicy/sepolicy/interface.py -index 583091a..e2b8d23 100644 ---- selinux-python-2.9/sepolicy/sepolicy/interface.py -+++ selinux-python-2.9/sepolicy/sepolicy/interface.py -@@ -30,7 +30,7 @@ __all__ = ['get_all_interfaces', 'get_interfaces_from_xml', 'get_admin', 'get_us - ## - ## I18N - ## --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-python" - try: - import gettext - kwargs = {} -diff --git selinux-python-2.9/sepolicy/sepolicy/manpage.py selinux-python-2.9/sepolicy/sepolicy/manpage.py -index 1d36796..67d3930 100755 ---- selinux-python-2.9/sepolicy/sepolicy/manpage.py -+++ selinux-python-2.9/sepolicy/sepolicy/manpage.py -@@ -125,8 +125,33 @@ def gen_domains(): - domains.sort() - return domains - --types = None - -+exec_types = None -+ -+def _gen_exec_types(): -+ global exec_types -+ if exec_types is None: -+ exec_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "exec_type"))["types"] -+ return exec_types -+ -+entry_types = None -+ -+def _gen_entry_types(): -+ global entry_types -+ if entry_types is None: -+ entry_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "entry_type"))["types"] -+ return entry_types -+ -+mcs_constrained_types = None -+ -+def _gen_mcs_constrained_types(): -+ global mcs_constrained_types -+ if mcs_constrained_types is None: -+ mcs_constrained_types = next(sepolicy.info(sepolicy.ATTRIBUTE, "mcs_constrained_type")) -+ return mcs_constrained_types -+ -+ -+types = None - - def _gen_types(): - global types -@@ -149,10 +174,6 @@ def prettyprint(f, trim): - manpage_domains = [] - manpage_roles = [] - --fedora_releases = ["Fedora17", "Fedora18"] --rhel_releases = ["RHEL6", "RHEL7"] -- -- - def get_alphabet_manpages(manpage_list): - alphabet_manpages = dict.fromkeys(string.ascii_letters, []) - for i in string.ascii_letters: -@@ -182,7 +203,7 @@ def convert_manpage_to_html(html_manpage, manpage): - class HTMLManPages: - - """ -- Generate a HHTML Manpages on an given SELinux domains -+ Generate a HTML Manpages on an given SELinux domains - """ - - def __init__(self, manpage_roles, manpage_domains, path, os_version): -@@ -190,9 +211,9 @@ class HTMLManPages: - self.manpage_domains = get_alphabet_manpages(manpage_domains) - self.os_version = os_version - self.old_path = path + "/" -- self.new_path = self.old_path + self.os_version + "/" -+ self.new_path = self.old_path - -- if self.os_version in fedora_releases or self.os_version in rhel_releases: -+ if self.os_version: - self.__gen_html_manpages() - else: - print("SELinux HTML man pages can not be generated for this %s" % os_version) -@@ -201,7 +222,6 @@ class HTMLManPages: - def __gen_html_manpages(self): - self._write_html_manpage() - self._gen_index() -- self._gen_body() - self._gen_css() - - def _write_html_manpage(self): -@@ -219,67 +239,21 @@ class HTMLManPages: - convert_manpage_to_html((self.new_path + r.rsplit("_selinux", 1)[0] + ".html"), self.old_path + r) - - def _gen_index(self): -- index = self.old_path + "index.html" -- fd = open(index, 'w') -- fd.write(""" -- -- -- -- SELinux man pages online -- -- --

SELinux man pages

--

--Fedora or Red Hat Enterprise Linux Man Pages. --

--
--

Fedora

-- -- --
--
--
--""")
--        for f in fedora_releases:
--            fd.write("""
--%s - SELinux man pages for %s """ % (f, f, f, f))
--
--        fd.write("""
--
--
--

RHEL

-- -- --
--
--
--""")
--        for r in rhel_releases:
--            fd.write("""
--%s - SELinux man pages for %s """ % (r, r, r, r))
--
--        fd.write("""
--
-- """) -- fd.close() -- print("%s has been created" % index) -- -- def _gen_body(self): - html = self.new_path + self.os_version + ".html" - fd = open(html, 'w') - fd.write(""" - - -- -- Linux man-pages online for Fedora18 -+ -+ SELinux man pages - - --

SELinux man pages for Fedora18

-+

SELinux man pages for %s

-
- -
-

SELinux roles

--""") -+""" % self.os_version) - for letter in self.manpage_roles: - if len(self.manpage_roles[letter]): - fd.write(""" -@@ -423,6 +397,9 @@ class ManPage: - self.all_file_types = sepolicy.get_all_file_types() - self.role_allows = sepolicy.get_all_role_allows() - self.types = _gen_types() -+ self.exec_types = _gen_exec_types() -+ self.entry_types = _gen_entry_types() -+ self.mcs_constrained_types = _gen_mcs_constrained_types() - - if self.source_files: - self.fcpath = self.root + "file_contexts" -@@ -735,10 +712,13 @@ Default Defined Ports:""") - - def _file_context(self): - flist = [] -+ flist_non_exec = [] - mpaths = [] - for f in self.all_file_types: - if f.startswith(self.domainname): - flist.append(f) -+ if not f in self.exec_types or not f in self.entry_types: -+ flist_non_exec.append(f) - if f in self.fcdict: - mpaths = mpaths + self.fcdict[f]["regex"] - if len(mpaths) == 0: -@@ -790,19 +770,20 @@ SELinux %(domainname)s policy is very flexible allowing users to setup their %(d - .PP - """ % {'domainname': self.domainname, 'equiv': e, 'alt': e.split('/')[-1]}) - -- self.fd.write(r""" -+ if flist_non_exec: -+ self.fd.write(r""" - .PP - .B STANDARD FILE CONTEXT - - SELinux defines the file context types for the %(domainname)s, if you wanted to - store files with these types in a diffent paths, you need to execute the semanage command to sepecify alternate labeling and then use restorecon to put the labels on disk. - --.B semanage fcontext -a -t %(type)s '/srv/%(domainname)s/content(/.*)?' -+.B semanage fcontext -a -t %(type)s '/srv/my%(domainname)s_content(/.*)?' - .br - .B restorecon -R -v /srv/my%(domainname)s_content - - Note: SELinux often uses regular expressions to specify labels that match multiple files. --""" % {'domainname': self.domainname, "type": flist[0]}) -+""" % {'domainname': self.domainname, "type": flist_non_exec[-1]}) - - self.fd.write(r""" - .I The following file types are defined for %(domainname)s: -@@ -973,11 +954,7 @@ All executeables with the default executable label, usually stored in /usr/bin a - %s""" % ", ".join(paths)) - - def _mcs_types(self): -- try: -- mcs_constrained_type = next(sepolicy.info(sepolicy.ATTRIBUTE, "mcs_constrained_type")) -- except StopIteration: -- return -- if self.type not in mcs_constrained_type['types']: -+ if self.type not in self.mcs_constrained_types['types']: - return - self.fd.write (""" - .SH "MCS Constrained" diff --git a/selinux-sandbox-fedora.patch b/selinux-sandbox-fedora.patch deleted file mode 100644 index 03c42c9..0000000 --- a/selinux-sandbox-fedora.patch +++ /dev/null @@ -1,186 +0,0 @@ -diff --git selinux-sandbox-2.9/Makefile selinux-sandbox-2.9/Makefile -index 9da5e58..b817824 100644 ---- selinux-sandbox-2.9/Makefile -+++ selinux-sandbox-2.9/Makefile -@@ -13,6 +13,7 @@ override LDLIBS += -lselinux -lcap-ng - SEUNSHARE_OBJS = seunshare.o - - all: sandbox seunshare sandboxX.sh start -+ (cd po && $(MAKE) $@) - - seunshare: $(SEUNSHARE_OBJS) - -@@ -39,6 +40,7 @@ install: all - install -m 755 start $(DESTDIR)$(SHAREDIR) - -mkdir -p $(DESTDIR)$(SYSCONFDIR) - install -m 644 sandbox.conf $(DESTDIR)$(SYSCONFDIR)/sandbox -+ (cd po && $(MAKE) $@) - - test: - @$(PYTHON) test_sandbox.py -v -diff --git selinux-sandbox-2.9/po/Makefile selinux-sandbox-2.9/po/Makefile -new file mode 100644 -index 0000000..0556bbe ---- /dev/null -+++ selinux-sandbox-2.9/po/Makefile -@@ -0,0 +1,82 @@ -+# -+# Makefile for the PO files (translation) catalog -+# -+ -+PREFIX ?= /usr -+ -+# What is this package? -+NLSPACKAGE = sandbox -+POTFILE = $(NLSPACKAGE).pot -+INSTALL = /usr/bin/install -c -p -+INSTALL_DATA = $(INSTALL) -m 644 -+INSTALL_DIR = /usr/bin/install -d -+ -+# destination directory -+INSTALL_NLS_DIR = $(PREFIX)/share/locale -+ -+# PO catalog handling -+MSGMERGE = msgmerge -+MSGMERGE_FLAGS = -q -+XGETTEXT = xgettext -L Python --default-domain=$(NLSPACKAGE) -+MSGFMT = msgfmt -+ -+# All possible linguas -+PO_LINGUAS := $(sort $(patsubst %.po,%,$(wildcard *.po))) -+ -+# Only the files matching what the user has set in LINGUAS -+USER_LINGUAS := $(filter $(patsubst %,%%,$(LINGUAS)),$(PO_LINGUAS)) -+ -+# if no valid LINGUAS, build all languages -+USE_LINGUAS := $(if $(USER_LINGUAS),$(USER_LINGUAS),$(PO_LINGUAS)) -+ -+POFILES = $(patsubst %,%.po,$(USE_LINGUAS)) -+MOFILES = $(patsubst %.po,%.mo,$(POFILES)) -+POTFILES = $(shell cat POTFILES) -+ -+#default:: clean -+ -+all:: $(POTFILE) $(MOFILES) -+ -+$(POTFILE): $(POTFILES) -+ $(XGETTEXT) --keyword=_ --keyword=N_ $(POTFILES) -+ @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ -+ rm -f $(NLSPACKAGE).po; \ -+ else \ -+ mv -f $(NLSPACKAGE).po $(POTFILE); \ -+ fi; \ -+ -+ -+refresh-po: Makefile -+ for cat in $(POFILES); do \ -+ lang=`basename $$cat .po`; \ -+ if $(MSGMERGE) $(MSGMERGE_FLAGS) $$lang.po $(POTFILE) > $$lang.pot ; then \ -+ mv -f $$lang.pot $$lang.po ; \ -+ echo "$(MSGMERGE) of $$lang succeeded" ; \ -+ else \ -+ echo "$(MSGMERGE) of $$lang failed" ; \ -+ rm -f $$lang.pot ; \ -+ fi \ -+ done -+ -+clean: -+ @rm -fv *mo *~ .depend -+ @rm -rf tmp -+ -+install: $(MOFILES) -+ @for n in $(MOFILES); do \ -+ l=`basename $$n .mo`; \ -+ $(INSTALL_DIR) $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ -+ $(INSTALL_DATA) --verbose $$n $(DESTDIR)$(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/selinux-$(NLSPACKAGE).mo; \ -+ done -+ -+%.mo: %.po -+ $(MSGFMT) -o $@ $< -+report: -+ @for cat in $(wildcard *.po); do \ -+ echo -n "$$cat: "; \ -+ msgfmt -v --statistics -o /dev/null $$cat; \ -+ done -+ -+.PHONY: missing depend -+ -+relabel: -diff --git selinux-sandbox-2.9/po/POTFILES selinux-sandbox-2.9/po/POTFILES -new file mode 100644 -index 0000000..deff3f2 ---- /dev/null -+++ selinux-sandbox-2.9/po/POTFILES -@@ -0,0 +1 @@ -+../sandbox -diff --git selinux-sandbox-2.9/sandbox selinux-sandbox-2.9/sandbox -index 1dec07a..707959a 100644 ---- selinux-sandbox-2.9/sandbox -+++ selinux-sandbox-2.9/sandbox -@@ -37,7 +37,7 @@ import sepolicy - - SEUNSHARE = "/usr/sbin/seunshare" - SANDBOXSH = "/usr/share/sandbox/sandboxX.sh" --PROGNAME = "policycoreutils" -+PROGNAME = "selinux-sandbox" - try: - import gettext - kwargs = {} -@@ -268,7 +268,7 @@ class Sandbox: - copyfile(f, "/tmp", self.__tmpdir) - copyfile(f, "/var/tmp", self.__tmpdir) - -- def __setup_sandboxrc(self, wm="/usr/bin/openbox"): -+ def __setup_sandboxrc(self, wm="/usr/bin/matchbox-window-manager"): - execfile = self.__homedir + "/.sandboxrc" - fd = open(execfile, "w+") - if self.__options.session: -@@ -362,7 +362,7 @@ sandbox [-h] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I includefile ] [- - - parser.add_option("-W", "--windowmanager", dest="wm", - type="string", -- default="/usr/bin/openbox", -+ default="/usr/bin/matchbox-window-manager", - help=_("alternate window manager")) - - parser.add_option("-l", "--level", dest="level", -diff --git selinux-sandbox-2.9/sandbox.8 selinux-sandbox-2.9/sandbox.8 -index d83fee7..90ef495 100644 ---- selinux-sandbox-2.9/sandbox.8 -+++ selinux-sandbox-2.9/sandbox.8 -@@ -77,7 +77,7 @@ Specifies the windowsize when creating an X based Sandbox. The default windowsiz - \fB\-W\fR \fB\-\-windowmanager\fR - Select alternative window manager to run within - .B sandbox \-X. --Default to /usr/bin/openbox. -+Default to /usr/bin/matchbox-window-manager. - .TP - \fB\-X\fR - Create an X based Sandbox for gui apps, temporary files for -diff --git selinux-sandbox-2.9/sandboxX.sh selinux-sandbox-2.9/sandboxX.sh -index eaa500d..c211ebc 100644 ---- selinux-sandbox-2.9/sandboxX.sh -+++ selinux-sandbox-2.9/sandboxX.sh -@@ -6,21 +6,7 @@ export TITLE="Sandbox $context -- `grep ^#TITLE: ~/.sandboxrc | /usr/bin/cut -b8 - [ -z $2 ] && export DPI="96" || export DPI="$2" - trap "exit 0" HUP - --mkdir -p ~/.config/openbox --cat > ~/.config/openbox/rc.xml << EOF -- -- -- -- no -- all -- yes -- -- -- --EOF -- --(/usr/bin/Xephyr -resizeable -title "$TITLE" -terminate -screen $SCREENSIZE -dpi $DPI -nolisten tcp -displayfd 5 5>&1 2>/dev/null) | while read D; do -+(/usr/bin/Xephyr -resizeable -title "$TITLE" -terminate -reset -screen $SCREENSIZE -dpi $DPI -nolisten tcp -displayfd 5 5>&1 2>/dev/null) | while read D; do - export DISPLAY=:$D - cat > ~/seremote << __EOF - #!/bin/sh diff --git a/semodule-utils-fedora.patch b/semodule-utils-fedora.patch deleted file mode 100644 index e8e2d3d..0000000 --- a/semodule-utils-fedora.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git semodule-utils-2.9/semodule_package/semodule_package.c semodule-utils-2.9/semodule_package/semodule_package.c -index 3515234..7b75b3f 100644 ---- semodule-utils-2.9/semodule_package/semodule_package.c -+++ semodule-utils-2.9/semodule_package/semodule_package.c -@@ -74,6 +74,7 @@ static int file_to_data(const char *path, char **data, size_t * len) - } - if (!sb.st_size) { - *len = 0; -+ close(fd); - return 0; - } -