import policycoreutils-3.4-3.el9
This commit is contained in:
parent
c8e8ea4b2e
commit
b75813c5f2
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,6 +2,6 @@ SOURCES/gui-po.tgz
|
|||||||
SOURCES/policycoreutils-po.tgz
|
SOURCES/policycoreutils-po.tgz
|
||||||
SOURCES/python-po.tgz
|
SOURCES/python-po.tgz
|
||||||
SOURCES/sandbox-po.tgz
|
SOURCES/sandbox-po.tgz
|
||||||
SOURCES/selinux-3.3.tar.gz
|
SOURCES/selinux-3.4.tar.gz
|
||||||
SOURCES/sepolicy-icons.tgz
|
SOURCES/sepolicy-icons.tgz
|
||||||
SOURCES/system-config-selinux.png
|
SOURCES/system-config-selinux.png
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
e0c82a8693936806c4289f865712ba0e8fc94f91 SOURCES/gui-po.tgz
|
e0c82a8693936806c4289f865712ba0e8fc94f91 SOURCES/gui-po.tgz
|
||||||
c8279f87160e2ff16eb775287d529e5c49b19ae3 SOURCES/policycoreutils-po.tgz
|
c8279f87160e2ff16eb775287d529e5c49b19ae3 SOURCES/policycoreutils-po.tgz
|
||||||
bca6372bd3e5b63e2b64ce4bf62a7b5934d933af SOURCES/python-po.tgz
|
606f854b945f4deae897770692707013b753b277 SOURCES/python-po.tgz
|
||||||
413495010fcab556e8ea9f226c67557a23cc1498 SOURCES/sandbox-po.tgz
|
413495010fcab556e8ea9f226c67557a23cc1498 SOURCES/sandbox-po.tgz
|
||||||
cdde8ef04ac354b2499fd2822acbd11fc27843c8 SOURCES/selinux-3.3.tar.gz
|
3c789c6783738e17f74221efa475cbb878183379 SOURCES/selinux-3.4.tar.gz
|
||||||
d849fa76cc3ef4a26047d8a69fef3a55d2f3097f SOURCES/sepolicy-icons.tgz
|
d849fa76cc3ef4a26047d8a69fef3a55d2f3097f SOURCES/sepolicy-icons.tgz
|
||||||
611a5d497efaddd45ec0dcc3e9b2e5b0f81ebc41 SOURCES/system-config-selinux.png
|
611a5d497efaddd45ec0dcc3e9b2e5b0f81ebc41 SOURCES/system-config-selinux.png
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
From ec3bf6f3e5468ba7b5164cc588ef5746454808a5 Mon Sep 17 00:00:00 2001
|
From f361ee407490bc74b43ec408b1edc70cd647d4e0 Mon Sep 17 00:00:00 2001
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
From: Petr Lautrbach <plautrba@redhat.com>
|
||||||
Date: Thu, 20 Aug 2015 12:58:41 +0200
|
Date: Thu, 20 Aug 2015 12:58:41 +0200
|
||||||
Subject: [PATCH] sandbox: add -reset to Xephyr as it works better with it in
|
Subject: [PATCH] sandbox: add -reset to Xephyr as it works better with it in
|
||||||
recent Fedoras
|
recent Fedoras
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
sandbox/sandboxX.sh | 2 +-
|
sandbox/sandboxX.sh | 2 +-
|
||||||
@ -22,5 +23,5 @@ index eaa500d08143..4774528027ef 100644
|
|||||||
cat > ~/seremote << __EOF
|
cat > ~/seremote << __EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
From 7a548cae4303f8429040ba6be67be182b7f9a943 Mon Sep 17 00:00:00 2001
|
From 71a2f14767c0ec70c23ecce43d7cbc5404c95552 Mon Sep 17 00:00:00 2001
|
||||||
From: Dan Walsh <dwalsh@redhat.com>
|
From: Dan Walsh <dwalsh@redhat.com>
|
||||||
Date: Mon, 21 Apr 2014 13:54:40 -0400
|
Date: Mon, 21 Apr 2014 13:54:40 -0400
|
||||||
Subject: [PATCH] Fix STANDARD_FILE_CONTEXT section in man pages
|
Subject: [PATCH] Fix STANDARD_FILE_CONTEXT section in man pages
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
Signed-off-by: Miroslav Grepl <mgrepl@redhat.com>
|
Signed-off-by: Miroslav Grepl <mgrepl@redhat.com>
|
||||||
---
|
---
|
||||||
@ -9,7 +10,7 @@ Signed-off-by: Miroslav Grepl <mgrepl@redhat.com>
|
|||||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
||||||
index 2f847abb87e2..dccd778ed4be 100755
|
index 3e61e333193f..82338aeeef32 100755
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
--- a/python/sepolicy/sepolicy/manpage.py
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
+++ b/python/sepolicy/sepolicy/manpage.py
|
||||||
@@ -737,10 +737,13 @@ Default Defined Ports:""")
|
@@ -737,10 +737,13 @@ Default Defined Ports:""")
|
||||||
@ -42,5 +43,5 @@ index 2f847abb87e2..dccd778ed4be 100755
|
|||||||
self.fd.write(r"""
|
self.fd.write(r"""
|
||||||
.I The following file types are defined for %(domainname)s:
|
.I The following file types are defined for %(domainname)s:
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
From b3cb362afe86278c600d6e97cc7abf9c0b102071 Mon Sep 17 00:00:00 2001
|
From d55a06c002641dce1301b9b5639bd8e206460724 Mon Sep 17 00:00:00 2001
|
||||||
From: Miroslav Grepl <mgrepl@redhat.com>
|
From: Miroslav Grepl <mgrepl@redhat.com>
|
||||||
Date: Mon, 12 May 2014 14:11:22 +0200
|
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
|
Subject: [PATCH] If there is no executable we don't want to print a part of
|
||||||
STANDARD FILE CONTEXT
|
STANDARD FILE CONTEXT
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
python/sepolicy/sepolicy/manpage.py | 3 ++-
|
python/sepolicy/sepolicy/manpage.py | 3 ++-
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
||||||
index dccd778ed4be..81333928d552 100755
|
index 82338aeeef32..ec8aa1cb94a2 100755
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
--- a/python/sepolicy/sepolicy/manpage.py
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
+++ b/python/sepolicy/sepolicy/manpage.py
|
||||||
@@ -795,7 +795,8 @@ SELinux %(domainname)s policy is very flexible allowing users to setup their %(d
|
@@ -795,7 +795,8 @@ SELinux %(domainname)s policy is very flexible allowing users to setup their %(d
|
||||||
@ -23,5 +24,5 @@ index dccd778ed4be..81333928d552 100755
|
|||||||
.B STANDARD FILE CONTEXT
|
.B STANDARD FILE CONTEXT
|
||||||
|
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
From b954ff8379e03714f707daa85111f6bf2f265772 Mon Sep 17 00:00:00 2001
|
From b180f7679c5e09535416f47d48afd0c0738f5fa9 Mon Sep 17 00:00:00 2001
|
||||||
From: Miroslav Grepl <mgrepl@redhat.com>
|
From: Miroslav Grepl <mgrepl@redhat.com>
|
||||||
Date: Thu, 19 Feb 2015 17:45:15 +0100
|
Date: Thu, 19 Feb 2015 17:45:15 +0100
|
||||||
Subject: [PATCH] Simplication of sepolicy-manpage web functionality.
|
Subject: [PATCH] Simplication of sepolicy-manpage web functionality.
|
||||||
system_release is no longer hardcoded and it creates only index.html and html
|
system_release is no longer hardcoded and it creates only index.html and html
|
||||||
man pages in the directory for the system release.
|
man pages in the directory for the system release.
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
python/sepolicy/sepolicy/__init__.py | 25 +++--------
|
python/sepolicy/sepolicy/__init__.py | 25 +++--------
|
||||||
@ -11,7 +12,7 @@ Subject: [PATCH] Simplication of sepolicy-manpage web functionality.
|
|||||||
2 files changed, 13 insertions(+), 77 deletions(-)
|
2 files changed, 13 insertions(+), 77 deletions(-)
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
|
diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
|
||||||
index e8654abbceb3..a2475d22547a 100644
|
index 203ca25f4210..9447812b7450 100644
|
||||||
--- a/python/sepolicy/sepolicy/__init__.py
|
--- a/python/sepolicy/sepolicy/__init__.py
|
||||||
+++ b/python/sepolicy/sepolicy/__init__.py
|
+++ b/python/sepolicy/sepolicy/__init__.py
|
||||||
@@ -1225,27 +1225,14 @@ def boolean_desc(boolean):
|
@@ -1225,27 +1225,14 @@ def boolean_desc(boolean):
|
||||||
@ -49,7 +50,7 @@ index e8654abbceb3..a2475d22547a 100644
|
|||||||
|
|
||||||
def reinit():
|
def reinit():
|
||||||
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
||||||
index 81333928d552..dc3e5207c57c 100755
|
index ec8aa1cb94a2..c632d05dbb1b 100755
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
--- a/python/sepolicy/sepolicy/manpage.py
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
+++ b/python/sepolicy/sepolicy/manpage.py
|
||||||
@@ -151,10 +151,6 @@ def prettyprint(f, trim):
|
@@ -151,10 +151,6 @@ def prettyprint(f, trim):
|
||||||
@ -165,5 +166,5 @@ index 81333928d552..dc3e5207c57c 100755
|
|||||||
if len(self.manpage_roles[letter]):
|
if len(self.manpage_roles[letter]):
|
||||||
fd.write("""
|
fd.write("""
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
From 7572bbec8b6a422e722864348a53d5e0f855e7f6 Mon Sep 17 00:00:00 2001
|
From 1747f59fece8183772e5591ce5b5feb5f421f602 Mon Sep 17 00:00:00 2001
|
||||||
From: Miroslav Grepl <mgrepl@redhat.com>
|
From: Miroslav Grepl <mgrepl@redhat.com>
|
||||||
Date: Fri, 20 Feb 2015 16:42:01 +0100
|
Date: Fri, 20 Feb 2015 16:42:01 +0100
|
||||||
Subject: [PATCH] We want to remove the trailing newline for
|
Subject: [PATCH] We want to remove the trailing newline for
|
||||||
/etc/system_release.
|
/etc/system_release.
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
python/sepolicy/sepolicy/__init__.py | 2 +-
|
python/sepolicy/sepolicy/__init__.py | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
|
diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
|
||||||
index a2475d22547a..8055a12f6020 100644
|
index 9447812b7450..aa8beda313c8 100644
|
||||||
--- a/python/sepolicy/sepolicy/__init__.py
|
--- a/python/sepolicy/sepolicy/__init__.py
|
||||||
+++ b/python/sepolicy/sepolicy/__init__.py
|
+++ b/python/sepolicy/sepolicy/__init__.py
|
||||||
@@ -1228,7 +1228,7 @@ def get_os_version():
|
@@ -1228,7 +1228,7 @@ def get_os_version():
|
||||||
@ -22,5 +23,5 @@ index a2475d22547a..8055a12f6020 100644
|
|||||||
system_release = "Misc"
|
system_release = "Misc"
|
||||||
|
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
From a4d59dcce863a02895fe40e487176149f3a4ad5b Mon Sep 17 00:00:00 2001
|
From 0bd28bc715034c644405d3c03f160d69ae710500 Mon Sep 17 00:00:00 2001
|
||||||
From: Miroslav Grepl <mgrepl@redhat.com>
|
From: Miroslav Grepl <mgrepl@redhat.com>
|
||||||
Date: Fri, 20 Feb 2015 16:42:53 +0100
|
Date: Fri, 20 Feb 2015 16:42:53 +0100
|
||||||
Subject: [PATCH] Fix title in manpage.py to not contain 'online'.
|
Subject: [PATCH] Fix title in manpage.py to not contain 'online'.
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
python/sepolicy/sepolicy/manpage.py | 2 +-
|
python/sepolicy/sepolicy/manpage.py | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
||||||
index dc3e5207c57c..6420ebe2e08e 100755
|
index c632d05dbb1b..3ae2f42b2fdf 100755
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
--- a/python/sepolicy/sepolicy/manpage.py
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
+++ b/python/sepolicy/sepolicy/manpage.py
|
||||||
@@ -222,7 +222,7 @@ class HTMLManPages:
|
@@ -222,7 +222,7 @@ class HTMLManPages:
|
||||||
@ -21,5 +22,5 @@ index dc3e5207c57c..6420ebe2e08e 100755
|
|||||||
<body>
|
<body>
|
||||||
<h1>SELinux man pages for %s</h1>
|
<h1>SELinux man pages for %s</h1>
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
From f183dd36c66069c95726e1dab47639e76077d86a Mon Sep 17 00:00:00 2001
|
From f204dd292340689c2d7ab75612b9fd81337fcbc3 Mon Sep 17 00:00:00 2001
|
||||||
From: Dan Walsh <dwalsh@redhat.com>
|
From: Dan Walsh <dwalsh@redhat.com>
|
||||||
Date: Fri, 14 Feb 2014 12:32:12 -0500
|
Date: Fri, 14 Feb 2014 12:32:12 -0500
|
||||||
Subject: [PATCH] Don't be verbose if you are not on a tty
|
Subject: [PATCH] Don't be verbose if you are not on a tty
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
policycoreutils/scripts/fixfiles | 1 +
|
policycoreutils/scripts/fixfiles | 1 +
|
||||||
1 file changed, 1 insertion(+)
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
diff --git a/policycoreutils/scripts/fixfiles b/policycoreutils/scripts/fixfiles
|
diff --git a/policycoreutils/scripts/fixfiles b/policycoreutils/scripts/fixfiles
|
||||||
index 6fb12e0451a9..cb20002ab613 100755
|
index c72ca0eb9d61..163ebcd1f232 100755
|
||||||
--- a/policycoreutils/scripts/fixfiles
|
--- a/policycoreutils/scripts/fixfiles
|
||||||
+++ b/policycoreutils/scripts/fixfiles
|
+++ b/policycoreutils/scripts/fixfiles
|
||||||
@@ -108,6 +108,7 @@ exclude_dirs_from_relabelling() {
|
@@ -108,6 +108,7 @@ exclude_dirs_from_relabelling() {
|
||||||
@ -17,8 +18,8 @@ index 6fb12e0451a9..cb20002ab613 100755
|
|||||||
VERBOSE="-p"
|
VERBOSE="-p"
|
||||||
+[ -t 1 ] || VERBOSE=""
|
+[ -t 1 ] || VERBOSE=""
|
||||||
FORCEFLAG=""
|
FORCEFLAG=""
|
||||||
|
THREADS=""
|
||||||
RPMFILES=""
|
RPMFILES=""
|
||||||
PREFC=""
|
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
From 53c27e891b9053a9bbbbca5a854deb4fc526a8a2 Mon Sep 17 00:00:00 2001
|
From d8f51aa7d299383247213b69ec7cbb68c1fa3bc4 Mon Sep 17 00:00:00 2001
|
||||||
From: Masatake YAMATO <yamato@redhat.com>
|
From: Masatake YAMATO <yamato@redhat.com>
|
||||||
Date: Thu, 14 Dec 2017 15:57:58 +0900
|
Date: Thu, 14 Dec 2017 15:57:58 +0900
|
||||||
Subject: [PATCH] sepolicy-generate: Handle more reserved port types
|
Subject: [PATCH] sepolicy-generate: Handle more reserved port types
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
Currently only reserved_port_t, port_t and hi_reserved_port_t are
|
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
|
handled as special when making a ports-dictionary. However, as fas as
|
||||||
@ -67,5 +68,5 @@ index 43180ca6fda4..d60a08e1d72c 100644
|
|||||||
dict[(p['low'], p['high'], p['protocol'])] = (p['type'], p.get('range'))
|
dict[(p['low'], p['high'], p['protocol'])] = (p['type'], p.get('range'))
|
||||||
return dict
|
return dict
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
From be804ecd456a52803067e1aa11e20ef69788221c Mon Sep 17 00:00:00 2001
|
From 8054dc44cf105b959864a1424fe857fac3ba3d73 Mon Sep 17 00:00:00 2001
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
From: Petr Lautrbach <plautrba@redhat.com>
|
||||||
Date: Wed, 18 Jul 2018 09:09:35 +0200
|
Date: Wed, 18 Jul 2018 09:09:35 +0200
|
||||||
Subject: [PATCH] sandbox: Use matchbox-window-manager instead of openbox
|
Subject: [PATCH] sandbox: Use matchbox-window-manager instead of openbox
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
---
|
---
|
||||||
sandbox/sandbox | 4 ++--
|
sandbox/sandbox | 4 ++--
|
||||||
@ -70,5 +71,5 @@ index 4774528027ef..c211ebc14549 100644
|
|||||||
export DISPLAY=:$D
|
export DISPLAY=:$D
|
||||||
cat > ~/seremote << __EOF
|
cat > ~/seremote << __EOF
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From afe686ec783ccf442c8e2bbcb9dbdb7650328253 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
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 d15522135288..ffcedb547993 100755
|
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
|
||||||
@@ -144,6 +144,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():
|
|
||||||
@@ -392,6 +401,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"
|
|
||||||
@@ -946,11 +956,7 @@ All executables with the default executable label, usually stored in /usr/bin an
|
|
||||||
%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.32.0
|
|
||||||
|
|
@ -1,515 +0,0 @@
|
|||||||
From 28879b771a804242d00a8a978bdbc4b85210814d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
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 ca965c942912..5a5bf6dcae19 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 000000000000..a0f5439f2d1c
|
|
||||||
--- /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 000000000000..1795c5c1951b
|
|
||||||
--- /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 575e143122e6..18bc1dff8d1f 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 000000000000..12237dc61ee4
|
|
||||||
--- /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 9b66d52fbd4d..00312dbdb5c6 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 000000000000..4e052d5a2bd7
|
|
||||||
--- /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 000000000000..128eb870a69e
|
|
||||||
--- /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 9da5e58db9e6..b817824e2102 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 000000000000..0556bbe953f0
|
|
||||||
--- /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 000000000000..deff3f2f4656
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/sandbox/po/POTFILES
|
|
||||||
@@ -0,0 +1 @@
|
|
||||||
+../sandbox
|
|
||||||
--
|
|
||||||
2.32.0
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
From ec1b147076345478636de763ce5d4e8daa69afd6 Mon Sep 17 00:00:00 2001
|
From 53d085d8d6edc05886d473e412a8025b7f8d9ce4 Mon Sep 17 00:00:00 2001
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
From: Petr Lautrbach <plautrba@redhat.com>
|
||||||
Date: Fri, 30 Jul 2021 14:14:37 +0200
|
Date: Fri, 30 Jul 2021 14:14:37 +0200
|
||||||
Subject: [PATCH] Use SHA-2 instead of SHA-1
|
Subject: [PATCH] Use SHA-2 instead of SHA-1
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
The use of SHA-1 in RHEL9 is deprecated
|
The use of SHA-1 in RHEL9 is deprecated
|
||||||
---
|
---
|
||||||
@ -15,10 +16,10 @@ The use of SHA-1 in RHEL9 is deprecated
|
|||||||
7 files changed, 33 insertions(+), 33 deletions(-)
|
7 files changed, 33 insertions(+), 33 deletions(-)
|
||||||
|
|
||||||
diff --git a/policycoreutils/setfiles/restorecon.8 b/policycoreutils/setfiles/restorecon.8
|
diff --git a/policycoreutils/setfiles/restorecon.8 b/policycoreutils/setfiles/restorecon.8
|
||||||
index 668486f66113..a8900f02b3f3 100644
|
index e07db2c87dc4..dbd55ce7c512 100644
|
||||||
--- a/policycoreutils/setfiles/restorecon.8
|
--- a/policycoreutils/setfiles/restorecon.8
|
||||||
+++ b/policycoreutils/setfiles/restorecon.8
|
+++ b/policycoreutils/setfiles/restorecon.8
|
||||||
@@ -93,14 +93,14 @@ display usage information and exit.
|
@@ -95,14 +95,14 @@ display usage information and exit.
|
||||||
ignore files that do not exist.
|
ignore files that do not exist.
|
||||||
.TP
|
.TP
|
||||||
.B \-I
|
.B \-I
|
||||||
@ -36,7 +37,7 @@ index 668486f66113..a8900f02b3f3 100644
|
|||||||
enable usage of the
|
enable usage of the
|
||||||
.IR security.sehash
|
.IR security.sehash
|
||||||
extended attribute.
|
extended attribute.
|
||||||
@@ -191,7 +191,7 @@ the
|
@@ -200,7 +200,7 @@ the
|
||||||
.B \-D
|
.B \-D
|
||||||
option to
|
option to
|
||||||
.B restorecon
|
.B restorecon
|
||||||
@ -45,7 +46,7 @@ index 668486f66113..a8900f02b3f3 100644
|
|||||||
attribute named
|
attribute named
|
||||||
.IR security.sehash
|
.IR security.sehash
|
||||||
on each directory specified in
|
on each directory specified in
|
||||||
@@ -208,7 +208,7 @@ for further details.
|
@@ -217,7 +217,7 @@ for further details.
|
||||||
.sp
|
.sp
|
||||||
The
|
The
|
||||||
.B \-I
|
.B \-I
|
||||||
@ -253,10 +254,10 @@ index 910101452625..7f2daa09191b 100644
|
|||||||
, и, при условии, что НЕ установлен параметр
|
, и, при условии, что НЕ установлен параметр
|
||||||
.B \-n
|
.B \-n
|
||||||
diff --git a/policycoreutils/setfiles/setfiles.8 b/policycoreutils/setfiles/setfiles.8
|
diff --git a/policycoreutils/setfiles/setfiles.8 b/policycoreutils/setfiles/setfiles.8
|
||||||
index 8e6c4ab94841..0692121f2f4d 100644
|
index 19b59a2cc90d..bad9f37a9ac4 100644
|
||||||
--- a/policycoreutils/setfiles/setfiles.8
|
--- a/policycoreutils/setfiles/setfiles.8
|
||||||
+++ b/policycoreutils/setfiles/setfiles.8
|
+++ b/policycoreutils/setfiles/setfiles.8
|
||||||
@@ -85,14 +85,14 @@ display usage information and exit.
|
@@ -87,14 +87,14 @@ display usage information and exit.
|
||||||
ignore files that do not exist.
|
ignore files that do not exist.
|
||||||
.TP
|
.TP
|
||||||
.B \-I
|
.B \-I
|
||||||
@ -274,7 +275,7 @@ index 8e6c4ab94841..0692121f2f4d 100644
|
|||||||
enable usage of the
|
enable usage of the
|
||||||
.IR security.sehash
|
.IR security.sehash
|
||||||
extended attribute.
|
extended attribute.
|
||||||
@@ -230,7 +230,7 @@ the
|
@@ -239,7 +239,7 @@ the
|
||||||
.B \-D
|
.B \-D
|
||||||
option to
|
option to
|
||||||
.B setfiles
|
.B setfiles
|
||||||
@ -283,7 +284,7 @@ index 8e6c4ab94841..0692121f2f4d 100644
|
|||||||
.B spec_file
|
.B spec_file
|
||||||
set in an extended attribute named
|
set in an extended attribute named
|
||||||
.IR security.sehash
|
.IR security.sehash
|
||||||
@@ -251,7 +251,7 @@ for further details.
|
@@ -260,7 +260,7 @@ for further details.
|
||||||
.sp
|
.sp
|
||||||
The
|
The
|
||||||
.B \-I
|
.B \-I
|
||||||
@ -293,5 +294,5 @@ index 8e6c4ab94841..0692121f2f4d 100644
|
|||||||
and provided the
|
and provided the
|
||||||
.B \-n
|
.B \-n
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
@ -1,306 +0,0 @@
|
|||||||
From a8cacf2944ddd803909d2111bdf2d43ab90e1111 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
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 7849bea26a06..dd12b6d6ab86 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 bad5140d8c59..6bbe4de5884f 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 d26aa1b405a9..52292cae01d2 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 b67eb8bc42af..cbfb0cc23f65 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 0584acf9b3a4..35a0129bab9c 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 d284ded65279..01f541bafae8 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 30f58383bc1d..a537ecc8c0a1 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 4127804fbbee..5361d69c1313 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 766854b19cba..a8f079b9b163 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 3f70122b87e8..8c46c987b974 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 26794ed5c3f3..d15d4c5a71dd 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 fdd2e46ee3f9..839ddd3b54b6 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 18a2710531ca..0980aecb6311 100644
|
|
||||||
--- a/python/semanage/semanage
|
|
||||||
+++ b/python/semanage/semanage
|
|
||||||
@@ -30,7 +30,7 @@ import seobject
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
-PROGNAME = "policycoreutils"
|
|
||||||
+PROGNAME = "selinux-python"
|
|
||||||
try:
|
|
||||||
import gettext
|
|
||||||
kwargs = {}
|
|
||||||
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
|
|
||||||
index 21adbf6eb74f..69e60db80060 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
|
|
||||||
from setools.policyrep import SELinuxPolicy
|
|
||||||
from setools.typequery import TypeQuery
|
|
||||||
diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py
|
|
||||||
index 998c4356415c..56ebd807c69c 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 7b2230651099..32956e58f52e 100755
|
|
||||||
--- a/python/sepolicy/sepolicy.py
|
|
||||||
+++ b/python/sepolicy/sepolicy.py
|
|
||||||
@@ -28,7 +28,7 @@ import sepolicy
|
|
||||||
from multiprocessing import Pool
|
|
||||||
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 8055a12f6020..aa8beda313c8 100644
|
|
||||||
--- a/python/sepolicy/sepolicy/__init__.py
|
|
||||||
+++ b/python/sepolicy/sepolicy/__init__.py
|
|
||||||
@@ -23,7 +23,7 @@ from setools.typeattrquery import TypeAttributeQuery
|
|
||||||
from setools.typequery import TypeQuery
|
|
||||||
from setools.userquery import UserQuery
|
|
||||||
|
|
||||||
-PROGNAME = "policycoreutils"
|
|
||||||
+PROGNAME = "selinux-python"
|
|
||||||
try:
|
|
||||||
import gettext
|
|
||||||
kwargs = {}
|
|
||||||
diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py
|
|
||||||
index 4e1ed4e9dc31..43180ca6fda4 100644
|
|
||||||
--- a/python/sepolicy/sepolicy/generate.py
|
|
||||||
+++ b/python/sepolicy/sepolicy/generate.py
|
|
||||||
@@ -48,7 +48,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 1e86422b864a..c9ca158ddd09 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 bdffb770f364..9d40aea1498d 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 ca5f1e030a51..16c43b51eaaa 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.32.0
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
|||||||
From fae31a306e7b6084710c02b658ace668766fc004 Mon Sep 17 00:00:00 2001
|
From 3748b7eab7434698998edfcf613fe738cf19d5c9 Mon Sep 17 00:00:00 2001
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
From: Petr Lautrbach <plautrba@redhat.com>
|
||||||
Date: Mon, 27 Feb 2017 17:12:39 +0100
|
Date: Mon, 27 Feb 2017 17:12:39 +0100
|
||||||
Subject: [PATCH] sepolicy: Drop old interface file_type_is_executable(f) and
|
Subject: [PATCH] sepolicy: Drop old interface file_type_is_executable(f) and
|
||||||
file_type_is_entrypoint(f)
|
file_type_is_entrypoint(f)
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
- use direct queries
|
- use direct queries
|
||||||
- load exec_types and entry_types only once
|
- load exec_types and entry_types only once
|
||||||
@ -11,7 +12,7 @@ Subject: [PATCH] sepolicy: Drop old interface file_type_is_executable(f) and
|
|||||||
1 file changed, 20 insertions(+), 2 deletions(-)
|
1 file changed, 20 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
||||||
index 6420ebe2e08e..d15522135288 100755
|
index 3ae2f42b2fdf..5a434bd360ae 100755
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
--- a/python/sepolicy/sepolicy/manpage.py
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
+++ b/python/sepolicy/sepolicy/manpage.py
|
||||||
@@ -127,8 +127,24 @@ def gen_domains():
|
@@ -127,8 +127,24 @@ def gen_domains():
|
||||||
@ -54,10 +55,10 @@ index 6420ebe2e08e..d15522135288 100755
|
|||||||
if f.startswith(self.domainname):
|
if f.startswith(self.domainname):
|
||||||
flist.append(f)
|
flist.append(f)
|
||||||
- if not file_type_is_executable(f) or not file_type_is_entrypoint(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:
|
+ if f not in self.exec_types or f not in self.entry_types:
|
||||||
flist_non_exec.append(f)
|
flist_non_exec.append(f)
|
||||||
if f in self.fcdict:
|
if f in self.fcdict:
|
||||||
mpaths = mpaths + self.fcdict[f]["regex"]
|
mpaths = mpaths + self.fcdict[f]["regex"]
|
||||||
--
|
--
|
||||||
2.32.0
|
2.35.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
349
SOURCES/0012-gettext-handle-unsupported-languages-properly.patch
Normal file
349
SOURCES/0012-gettext-handle-unsupported-languages-properly.patch
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
From f62227788b28e3afd2016b47af248f8ecefa8155 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vit Mojzis <vmojzis@redhat.com>
|
||||||
|
Date: Fri, 24 Jun 2022 16:24:25 +0200
|
||||||
|
Subject: [PATCH] gettext: handle unsupported languages properly
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
|
With "fallback=True" gettext.translation behaves the same as
|
||||||
|
gettext.install and uses NullTranslations in case the
|
||||||
|
translation file for given language was not found (as opposed to
|
||||||
|
throwing an exception).
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
# LANG is set to any "unsupported" language, e.g. en_US.UTF-8
|
||||||
|
$ chcat --help
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "/usr/bin/chcat", line 39, in <module>
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
File "/usr/lib64/python3.9/gettext.py", line 592, in translation
|
||||||
|
raise FileNotFoundError(ENOENT,
|
||||||
|
FileNotFoundError: [Errno 2] No translation file found for domain: 'selinux-python'
|
||||||
|
|
||||||
|
Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
|
||||||
|
Reviewed-by: Daniel Burgener <dburgener@linux.microsoft.com>
|
||||||
|
Acked-by: Petr Lautrbach <plautrba@redhat.com>
|
||||||
|
---
|
||||||
|
gui/booleansPage.py | 3 ++-
|
||||||
|
gui/domainsPage.py | 3 ++-
|
||||||
|
gui/fcontextPage.py | 3 ++-
|
||||||
|
gui/loginsPage.py | 3 ++-
|
||||||
|
gui/modulesPage.py | 3 ++-
|
||||||
|
gui/polgengui.py | 3 ++-
|
||||||
|
gui/portsPage.py | 3 ++-
|
||||||
|
gui/semanagePage.py | 3 ++-
|
||||||
|
gui/statusPage.py | 3 ++-
|
||||||
|
gui/system-config-selinux.py | 3 ++-
|
||||||
|
gui/usersPage.py | 3 ++-
|
||||||
|
python/chcat/chcat | 5 +++--
|
||||||
|
python/semanage/semanage | 3 ++-
|
||||||
|
python/semanage/seobject.py | 3 ++-
|
||||||
|
python/sepolgen/src/sepolgen/sepolgeni18n.py | 4 +++-
|
||||||
|
python/sepolicy/sepolicy.py | 3 ++-
|
||||||
|
python/sepolicy/sepolicy/__init__.py | 3 ++-
|
||||||
|
python/sepolicy/sepolicy/generate.py | 3 ++-
|
||||||
|
python/sepolicy/sepolicy/gui.py | 3 ++-
|
||||||
|
python/sepolicy/sepolicy/interface.py | 3 ++-
|
||||||
|
sandbox/sandbox | 3 ++-
|
||||||
|
21 files changed, 44 insertions(+), 22 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gui/booleansPage.py b/gui/booleansPage.py
|
||||||
|
index 5beec58bc360..ad11a9b24c79 100644
|
||||||
|
--- a/gui/booleansPage.py
|
||||||
|
+++ b/gui/booleansPage.py
|
||||||
|
@@ -46,7 +46,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/domainsPage.py b/gui/domainsPage.py
|
||||||
|
index e08f34b4d3a9..e6eadd61c1bc 100644
|
||||||
|
--- a/gui/domainsPage.py
|
||||||
|
+++ b/gui/domainsPage.py
|
||||||
|
@@ -38,7 +38,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py
|
||||||
|
index bac2bec3ebbd..767664f26ec8 100644
|
||||||
|
--- a/gui/fcontextPage.py
|
||||||
|
+++ b/gui/fcontextPage.py
|
||||||
|
@@ -55,7 +55,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/loginsPage.py b/gui/loginsPage.py
|
||||||
|
index 18b93d8c9756..7e08232a90b5 100644
|
||||||
|
--- a/gui/loginsPage.py
|
||||||
|
+++ b/gui/loginsPage.py
|
||||||
|
@@ -37,7 +37,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/modulesPage.py b/gui/modulesPage.py
|
||||||
|
index c546d455d4cd..02b79f150a13 100644
|
||||||
|
--- a/gui/modulesPage.py
|
||||||
|
+++ b/gui/modulesPage.py
|
||||||
|
@@ -38,7 +38,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/polgengui.py b/gui/polgengui.py
|
||||||
|
index a18f1cba17b9..7a3ecd50c91c 100644
|
||||||
|
--- a/gui/polgengui.py
|
||||||
|
+++ b/gui/polgengui.py
|
||||||
|
@@ -71,7 +71,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/portsPage.py b/gui/portsPage.py
|
||||||
|
index 54aa80ded327..bee2bdf17b99 100644
|
||||||
|
--- a/gui/portsPage.py
|
||||||
|
+++ b/gui/portsPage.py
|
||||||
|
@@ -43,7 +43,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/semanagePage.py b/gui/semanagePage.py
|
||||||
|
index 1371d4e7dabe..efad14d9b375 100644
|
||||||
|
--- a/gui/semanagePage.py
|
||||||
|
+++ b/gui/semanagePage.py
|
||||||
|
@@ -30,7 +30,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/statusPage.py b/gui/statusPage.py
|
||||||
|
index c241ef83dfa0..832849e60d60 100644
|
||||||
|
--- a/gui/statusPage.py
|
||||||
|
+++ b/gui/statusPage.py
|
||||||
|
@@ -43,7 +43,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py
|
||||||
|
index 1b460c99363b..9f53b7fe9020 100644
|
||||||
|
--- a/gui/system-config-selinux.py
|
||||||
|
+++ b/gui/system-config-selinux.py
|
||||||
|
@@ -53,7 +53,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/gui/usersPage.py b/gui/usersPage.py
|
||||||
|
index d51bd968b77e..9acd3b844056 100644
|
||||||
|
--- a/gui/usersPage.py
|
||||||
|
+++ b/gui/usersPage.py
|
||||||
|
@@ -37,7 +37,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/chcat/chcat b/python/chcat/chcat
|
||||||
|
index e779fcc6ebd7..952cb8187599 100755
|
||||||
|
--- a/python/chcat/chcat
|
||||||
|
+++ b/python/chcat/chcat
|
||||||
|
@@ -38,9 +38,10 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
-except ImportError:
|
||||||
|
+except:
|
||||||
|
try:
|
||||||
|
import builtins
|
||||||
|
builtins.__dict__['_'] = str
|
||||||
|
diff --git a/python/semanage/semanage b/python/semanage/semanage
|
||||||
|
index 8f4e44a7a9cd..f45061a601f9 100644
|
||||||
|
--- a/python/semanage/semanage
|
||||||
|
+++ b/python/semanage/semanage
|
||||||
|
@@ -38,7 +38,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
|
||||||
|
index ff8f4e9c3008..0782c082dc0c 100644
|
||||||
|
--- a/python/semanage/seobject.py
|
||||||
|
+++ b/python/semanage/seobject.py
|
||||||
|
@@ -42,7 +42,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py
|
||||||
|
index 56ebd807c69c..1ff307d9b27d 100644
|
||||||
|
--- a/python/sepolgen/src/sepolgen/sepolgeni18n.py
|
||||||
|
+++ b/python/sepolgen/src/sepolgen/sepolgeni18n.py
|
||||||
|
@@ -19,7 +19,9 @@
|
||||||
|
|
||||||
|
try:
|
||||||
|
import gettext
|
||||||
|
- t = gettext.translation( 'selinux-python' )
|
||||||
|
+ t = gettext.translation("selinux-python",
|
||||||
|
+ localedir="/usr/share/locale",
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
def _(str):
|
||||||
|
diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py
|
||||||
|
index 7ebe0efa88a1..c7a70e094b0c 100755
|
||||||
|
--- a/python/sepolicy/sepolicy.py
|
||||||
|
+++ b/python/sepolicy/sepolicy.py
|
||||||
|
@@ -36,7 +36,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
|
||||||
|
index 95520f9bc35d..6bde1971fd7c 100644
|
||||||
|
--- a/python/sepolicy/sepolicy/__init__.py
|
||||||
|
+++ b/python/sepolicy/sepolicy/__init__.py
|
||||||
|
@@ -31,7 +31,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py
|
||||||
|
index 3e8b9f9c291d..eff3a8973917 100644
|
||||||
|
--- a/python/sepolicy/sepolicy/generate.py
|
||||||
|
+++ b/python/sepolicy/sepolicy/generate.py
|
||||||
|
@@ -56,7 +56,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
|
||||||
|
index b0263740a79f..5bdbfebade1d 100644
|
||||||
|
--- a/python/sepolicy/sepolicy/gui.py
|
||||||
|
+++ b/python/sepolicy/sepolicy/gui.py
|
||||||
|
@@ -49,7 +49,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/python/sepolicy/sepolicy/interface.py b/python/sepolicy/sepolicy/interface.py
|
||||||
|
index 599f97fdc6e7..43f86443f2c8 100644
|
||||||
|
--- a/python/sepolicy/sepolicy/interface.py
|
||||||
|
+++ b/python/sepolicy/sepolicy/interface.py
|
||||||
|
@@ -38,7 +38,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
diff --git a/sandbox/sandbox b/sandbox/sandbox
|
||||||
|
index 3ef444a12561..53cc504149c9 100644
|
||||||
|
--- a/sandbox/sandbox
|
||||||
|
+++ b/sandbox/sandbox
|
||||||
|
@@ -45,7 +45,8 @@ try:
|
||||||
|
kwargs['unicode'] = True
|
||||||
|
t = gettext.translation(PROGNAME,
|
||||||
|
localedir="/usr/share/locale",
|
||||||
|
- **kwargs)
|
||||||
|
+ **kwargs,
|
||||||
|
+ fallback=True)
|
||||||
|
_ = t.gettext
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From f5045f645cfa10fed01b4225d26d98ea9f81f085 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vit Mojzis <vmojzis@redhat.com>
|
|
||||||
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 4d28bc9a95c1..8e6c4ab94841 100644
|
|
||||||
--- a/policycoreutils/setfiles/setfiles.8
|
|
||||||
+++ b/policycoreutils/setfiles/setfiles.8
|
|
||||||
@@ -57,7 +57,7 @@ option will force a replacement of the entire context.
|
|
||||||
check the validity of the contexts against the specified binary policy.
|
|
||||||
.TP
|
|
||||||
.B \-d
|
|
||||||
-show what specification matched each file.
|
|
||||||
+show what specification matched each file. Not affected by "\-q".
|
|
||||||
.TP
|
|
||||||
.BI \-e \ directory
|
|
||||||
directory to exclude (repeat option for more than one directory).
|
|
||||||
--
|
|
||||||
2.32.0
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
|||||||
|
From dc99f08e121ee21650a4179e3deaea8c04ae40c9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Date: Wed, 8 Jun 2022 19:09:54 +0200
|
||||||
|
Subject: [PATCH] semodule: rename --rebuild-if-modules-changed to --refresh
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
|
After the last commit this option's name and description no longer
|
||||||
|
matches the semantic, so give it a new one and update the descriptions.
|
||||||
|
The old name is still recognized and aliased to the new one for
|
||||||
|
backwards compatibility.
|
||||||
|
|
||||||
|
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
|
||||||
|
Acked-by: Nicolas Iooss <nicolas.iooss@m4x.org>
|
||||||
|
---
|
||||||
|
policycoreutils/semodule/semodule.8 | 12 ++++++------
|
||||||
|
policycoreutils/semodule/semodule.c | 13 ++++++++++---
|
||||||
|
2 files changed, 16 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/policycoreutils/semodule/semodule.8 b/policycoreutils/semodule/semodule.8
|
||||||
|
index d1735d216276..c56e580f27b8 100644
|
||||||
|
--- a/policycoreutils/semodule/semodule.8
|
||||||
|
+++ b/policycoreutils/semodule/semodule.8
|
||||||
|
@@ -23,12 +23,12 @@ force a reload of policy
|
||||||
|
.B \-B, \-\-build
|
||||||
|
force a rebuild of policy (also reloads unless \-n is used)
|
||||||
|
.TP
|
||||||
|
-.B \-\-rebuild-if-modules-changed
|
||||||
|
-Force a rebuild of the policy if any changes to module content are detected
|
||||||
|
-(by comparing with checksum from the last transaction). One can use this
|
||||||
|
-instead of \-B to ensure that any changes to the module store done by an
|
||||||
|
-external tool (e.g. a package manager) are applied, while automatically
|
||||||
|
-skipping the rebuild if there are no new changes.
|
||||||
|
+.B \-\-refresh
|
||||||
|
+Like \-\-build, but reuses existing linked policy if no changes to module
|
||||||
|
+files are detected (by comparing with checksum from the last transaction).
|
||||||
|
+One can use this instead of \-B to ensure that any changes to the module
|
||||||
|
+store done by an external tool (e.g. a package manager) are applied, while
|
||||||
|
+automatically skipping the module re-linking if there are no module changes.
|
||||||
|
.TP
|
||||||
|
.B \-D, \-\-disable_dontaudit
|
||||||
|
Temporarily remove dontaudits from policy. Reverts whenever policy is rebuilt
|
||||||
|
diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
|
||||||
|
index 1ed8e69054e0..ec0794866daa 100644
|
||||||
|
--- a/policycoreutils/semodule/semodule.c
|
||||||
|
+++ b/policycoreutils/semodule/semodule.c
|
||||||
|
@@ -150,9 +150,12 @@ static void usage(char *progname)
|
||||||
|
printf(" -c, --cil extract module as cil. This only affects module extraction.\n");
|
||||||
|
printf(" -H, --hll extract module as hll. This only affects module extraction.\n");
|
||||||
|
printf(" -m, --checksum print module checksum (SHA256).\n");
|
||||||
|
- printf(" --rebuild-if-modules-changed\n"
|
||||||
|
- " force policy rebuild if module content changed since\n"
|
||||||
|
- " last rebuild (based on checksum)\n");
|
||||||
|
+ printf(" --refresh like --build, but reuses existing linked policy if no\n"
|
||||||
|
+ " changes to module files are detected (via checksum)\n");
|
||||||
|
+ printf("Deprecated options:\n");
|
||||||
|
+ printf(" -b,--base same as --install\n");
|
||||||
|
+ printf(" --rebuild-if-modules-changed\n"
|
||||||
|
+ " same as --refresh\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the global mode variable to new_mode, but only if no other
|
||||||
|
@@ -185,6 +188,7 @@ static void parse_command_line(int argc, char **argv)
|
||||||
|
{
|
||||||
|
static struct option opts[] = {
|
||||||
|
{"rebuild-if-modules-changed", 0, NULL, '\0'},
|
||||||
|
+ {"refresh", 0, NULL, '\0'},
|
||||||
|
{"store", required_argument, NULL, 's'},
|
||||||
|
{"base", required_argument, NULL, 'b'},
|
||||||
|
{"help", 0, NULL, 'h'},
|
||||||
|
@@ -225,6 +229,9 @@ static void parse_command_line(int argc, char **argv)
|
||||||
|
case '\0':
|
||||||
|
switch(longind) {
|
||||||
|
case 0: /* --rebuild-if-modules-changed */
|
||||||
|
+ fprintf(stderr, "The --rebuild-if-modules-changed option is deprecated. Use --refresh instead.\n");
|
||||||
|
+ /* fallthrough */
|
||||||
|
+ case 1: /* --refresh */
|
||||||
|
check_ext_changes = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -0,0 +1,65 @@
|
|||||||
|
From 8abaf61849ce9688dddc3b27ef4df3cc23af0109 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vit Mojzis <vmojzis@redhat.com>
|
||||||
|
Date: Mon, 30 May 2022 14:20:21 +0200
|
||||||
|
Subject: [PATCH] python: Split "semanage import" into two transactions
|
||||||
|
Content-type: text/plain
|
||||||
|
|
||||||
|
First transaction applies all deletion operations, so that there are no
|
||||||
|
collisions when applying the rest of the changes.
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
# semanage port -a -t http_cache_port_t -r s0 -p tcp 3024
|
||||||
|
# semanage export | semanage import
|
||||||
|
ValueError: Port tcp/3024 already defined
|
||||||
|
|
||||||
|
Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
|
||||||
|
---
|
||||||
|
python/semanage/semanage | 21 +++++++++++++++++++--
|
||||||
|
1 file changed, 19 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/python/semanage/semanage b/python/semanage/semanage
|
||||||
|
index f45061a601f9..4e8d64d6863a 100644
|
||||||
|
--- a/python/semanage/semanage
|
||||||
|
+++ b/python/semanage/semanage
|
||||||
|
@@ -853,10 +853,29 @@ def handleImport(args):
|
||||||
|
trans = seobject.semanageRecords(args)
|
||||||
|
trans.start()
|
||||||
|
|
||||||
|
+ deleteCommands = []
|
||||||
|
+ commands = []
|
||||||
|
+ # separate commands for deletion from the rest so they can be
|
||||||
|
+ # applied in a separate transaction
|
||||||
|
for l in sys.stdin.readlines():
|
||||||
|
if len(l.strip()) == 0:
|
||||||
|
continue
|
||||||
|
+ if "-d" in l or "-D" in l:
|
||||||
|
+ deleteCommands.append(l)
|
||||||
|
+ else:
|
||||||
|
+ commands.append(l)
|
||||||
|
+
|
||||||
|
+ if deleteCommands:
|
||||||
|
+ importHelper(deleteCommands)
|
||||||
|
+ trans.finish()
|
||||||
|
+ trans.start()
|
||||||
|
+
|
||||||
|
+ importHelper(commands)
|
||||||
|
+ trans.finish()
|
||||||
|
|
||||||
|
+
|
||||||
|
+def importHelper(commands):
|
||||||
|
+ for l in commands:
|
||||||
|
try:
|
||||||
|
commandParser = createCommandParser()
|
||||||
|
args = commandParser.parse_args(mkargv(l))
|
||||||
|
@@ -870,8 +889,6 @@ def handleImport(args):
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
- trans.finish()
|
||||||
|
-
|
||||||
|
|
||||||
|
def setupImportParser(subparsers):
|
||||||
|
importParser = subparsers.add_parser('import', help=_('Import local customizations'))
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
From f1acc9a3057e199d62c6b8ec6e77fc33ca3db1d1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
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 3515234e36de..7b75b3fd9bb4 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.32.0
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
|||||||
From 0e40b5541773c6daf58bba7048fae6918d74de74 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
Date: Tue, 28 Jul 2020 14:37:13 +0200
|
|
||||||
Subject: [PATCH] sepolicy: Fix flake8 warnings in Fedora-only code
|
|
||||||
|
|
||||||
Fixes:
|
|
||||||
$ PATH="$VIRTUAL_ENV/bin:$PATH" ./scripts/run-flake8
|
|
||||||
Analyzing 187 Python scripts
|
|
||||||
./installdir/usr/lib/python3.8/site-packages/sepolicy/manpage.py:720:20: E713 test for membership should be 'not in'
|
|
||||||
./installdir/usr/lib/python3.8/site-packages/sepolicy/manpage.py:774:17: E117 over-indented
|
|
||||||
./python/sepolicy/build/lib/sepolicy/manpage.py:720:20: E713 test for membership should be 'not in'
|
|
||||||
./python/sepolicy/build/lib/sepolicy/manpage.py:774:17: E117 over-indented
|
|
||||||
./python/sepolicy/sepolicy/manpage.py:720:20: E713 test for membership should be 'not in'
|
|
||||||
./python/sepolicy/sepolicy/manpage.py:774:17: E117 over-indented
|
|
||||||
The command "PATH="$VIRTUAL_ENV/bin:$PATH" ./scripts/run-flake8" exited with 1.
|
|
||||||
|
|
||||||
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
---
|
|
||||||
python/sepolicy/sepolicy/manpage.py | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/python/sepolicy/sepolicy/manpage.py b/python/sepolicy/sepolicy/manpage.py
|
|
||||||
index ffcedb547993..c013c0d48502 100755
|
|
||||||
--- a/python/sepolicy/sepolicy/manpage.py
|
|
||||||
+++ b/python/sepolicy/sepolicy/manpage.py
|
|
||||||
@@ -719,7 +719,7 @@ Default Defined Ports:""")
|
|
||||||
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:
|
|
||||||
+ if f not in self.exec_types or f not in self.entry_types:
|
|
||||||
flist_non_exec.append(f)
|
|
||||||
if f in self.fcdict:
|
|
||||||
mpaths = mpaths + self.fcdict[f]["regex"]
|
|
||||||
@@ -773,7 +773,7 @@ SELinux %(domainname)s policy is very flexible allowing users to setup their %(d
|
|
||||||
""" % {'domainname': self.domainname, 'equiv': e, 'alt': e.split('/')[-1]})
|
|
||||||
|
|
||||||
if flist_non_exec:
|
|
||||||
- self.fd.write(r"""
|
|
||||||
+ self.fd.write(r"""
|
|
||||||
.PP
|
|
||||||
.B STANDARD FILE CONTEXT
|
|
||||||
|
|
||||||
--
|
|
||||||
2.32.0
|
|
||||||
|
|
@ -1,253 +0,0 @@
|
|||||||
From fba88f42bf8490a23fa6dcd33de2ccd59170009b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
Date: Tue, 26 Oct 2021 13:52:39 +0200
|
|
||||||
Subject: [PATCH] setfiles/restorecon: support parallel relabeling
|
|
||||||
|
|
||||||
Use the newly introduced selinux_restorecon_parallel(3) in
|
|
||||||
setfiles/restorecon and a -T option to both to allow enabling parallel
|
|
||||||
relabeling. The default behavior without specifying the -T option is to
|
|
||||||
use 1 thread; parallel relabeling must be requested explicitly by
|
|
||||||
passing -T 0 (which will use as many threads as there are available CPU
|
|
||||||
cores) or -T <N>, which will use <N> threads.
|
|
||||||
|
|
||||||
=== Benchmarks ===
|
|
||||||
As measured on a 32-core cloud VM with Fedora 34. Not a fully
|
|
||||||
representative environment, but still the scaling is quite good.
|
|
||||||
|
|
||||||
WITHOUT PATCHES:
|
|
||||||
$ time restorecon -rn /usr
|
|
||||||
|
|
||||||
real 0m21.689s
|
|
||||||
user 0m21.070s
|
|
||||||
sys 0m0.494s
|
|
||||||
|
|
||||||
WITH PATCHES:
|
|
||||||
$ time restorecon -rn /usr
|
|
||||||
|
|
||||||
real 0m23.940s
|
|
||||||
user 0m23.127s
|
|
||||||
sys 0m0.653s
|
|
||||||
$ time restorecon -rn -T 2 /usr
|
|
||||||
|
|
||||||
real 0m13.145s
|
|
||||||
user 0m25.306s
|
|
||||||
sys 0m0.695s
|
|
||||||
$ time restorecon -rn -T 4 /usr
|
|
||||||
|
|
||||||
real 0m7.559s
|
|
||||||
user 0m28.470s
|
|
||||||
sys 0m1.099s
|
|
||||||
$ time restorecon -rn -T 8 /usr
|
|
||||||
|
|
||||||
real 0m5.186s
|
|
||||||
user 0m37.450s
|
|
||||||
sys 0m2.094s
|
|
||||||
$ time restorecon -rn -T 16 /usr
|
|
||||||
|
|
||||||
real 0m3.831s
|
|
||||||
user 0m51.220s
|
|
||||||
sys 0m4.895s
|
|
||||||
$ time restorecon -rn -T 32 /usr
|
|
||||||
|
|
||||||
real 0m2.650s
|
|
||||||
user 1m5.136s
|
|
||||||
sys 0m6.614s
|
|
||||||
|
|
||||||
Note that the benchmarks were performed in read-only mode (-n), so the
|
|
||||||
labels were only read and looked up in the database, not written. When
|
|
||||||
fixing labels on a heavily mislabeled system, the scaling would likely
|
|
||||||
be event better, since a larger % of work could be done in parallel.
|
|
||||||
|
|
||||||
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
---
|
|
||||||
policycoreutils/setfiles/Makefile | 2 +-
|
|
||||||
policycoreutils/setfiles/restore.c | 7 ++++---
|
|
||||||
policycoreutils/setfiles/restore.h | 2 +-
|
|
||||||
policycoreutils/setfiles/restorecon.8 | 9 +++++++++
|
|
||||||
policycoreutils/setfiles/setfiles.8 | 9 +++++++++
|
|
||||||
policycoreutils/setfiles/setfiles.c | 28 ++++++++++++++++-----------
|
|
||||||
6 files changed, 41 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/setfiles/Makefile b/policycoreutils/setfiles/Makefile
|
|
||||||
index 63d818509791..d7670a8ff54b 100644
|
|
||||||
--- a/policycoreutils/setfiles/Makefile
|
|
||||||
+++ b/policycoreutils/setfiles/Makefile
|
|
||||||
@@ -6,7 +6,7 @@ MANDIR = $(PREFIX)/share/man
|
|
||||||
AUDITH ?= $(shell test -f /usr/include/libaudit.h && echo y)
|
|
||||||
|
|
||||||
CFLAGS ?= -g -Werror -Wall -W
|
|
||||||
-override LDLIBS += -lselinux -lsepol
|
|
||||||
+override LDLIBS += -lselinux -lsepol -lpthread
|
|
||||||
|
|
||||||
ifeq ($(AUDITH), y)
|
|
||||||
override CFLAGS += -DUSE_AUDIT
|
|
||||||
diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c
|
|
||||||
index 9d688c609f79..74d48bb3752d 100644
|
|
||||||
--- a/policycoreutils/setfiles/restore.c
|
|
||||||
+++ b/policycoreutils/setfiles/restore.c
|
|
||||||
@@ -72,7 +72,7 @@ void restore_finish(void)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-int process_glob(char *name, struct restore_opts *opts)
|
|
||||||
+int process_glob(char *name, struct restore_opts *opts, size_t nthreads)
|
|
||||||
{
|
|
||||||
glob_t globbuf;
|
|
||||||
size_t i = 0;
|
|
||||||
@@ -91,8 +91,9 @@ int process_glob(char *name, struct restore_opts *opts)
|
|
||||||
continue;
|
|
||||||
if (len > 0 && strcmp(&globbuf.gl_pathv[i][len], "/..") == 0)
|
|
||||||
continue;
|
|
||||||
- rc = selinux_restorecon(globbuf.gl_pathv[i],
|
|
||||||
- opts->restorecon_flags);
|
|
||||||
+ rc = selinux_restorecon_parallel(globbuf.gl_pathv[i],
|
|
||||||
+ opts->restorecon_flags,
|
|
||||||
+ nthreads);
|
|
||||||
if (rc < 0)
|
|
||||||
errors = rc;
|
|
||||||
}
|
|
||||||
diff --git a/policycoreutils/setfiles/restore.h b/policycoreutils/setfiles/restore.h
|
|
||||||
index ac6ad6809f4f..bb35a1db9e34 100644
|
|
||||||
--- a/policycoreutils/setfiles/restore.h
|
|
||||||
+++ b/policycoreutils/setfiles/restore.h
|
|
||||||
@@ -49,7 +49,7 @@ struct restore_opts {
|
|
||||||
void restore_init(struct restore_opts *opts);
|
|
||||||
void restore_finish(void);
|
|
||||||
void add_exclude(const char *directory);
|
|
||||||
-int process_glob(char *name, struct restore_opts *opts);
|
|
||||||
+int process_glob(char *name, struct restore_opts *opts, size_t nthreads);
|
|
||||||
extern char **exclude_list;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
diff --git a/policycoreutils/setfiles/restorecon.8 b/policycoreutils/setfiles/restorecon.8
|
|
||||||
index a8900f02b3f3..dbd55ce7c512 100644
|
|
||||||
--- a/policycoreutils/setfiles/restorecon.8
|
|
||||||
+++ b/policycoreutils/setfiles/restorecon.8
|
|
||||||
@@ -33,6 +33,8 @@ restorecon \- restore file(s) default SELinux security contexts.
|
|
||||||
.RB [ \-W ]
|
|
||||||
.RB [ \-I | \-D ]
|
|
||||||
.RB [ \-x ]
|
|
||||||
+.RB [ \-T
|
|
||||||
+.IR nthreads ]
|
|
||||||
|
|
||||||
.SH "DESCRIPTION"
|
|
||||||
This manual page describes the
|
|
||||||
@@ -160,6 +162,13 @@ prevent
|
|
||||||
.B restorecon
|
|
||||||
from crossing file system boundaries.
|
|
||||||
.TP
|
|
||||||
+.BI \-T \ nthreads
|
|
||||||
+use up to
|
|
||||||
+.I nthreads
|
|
||||||
+threads. Specify 0 to create as many threads as there are available
|
|
||||||
+CPU cores; 1 to use only a single thread (default); or any positive
|
|
||||||
+number to use the given number of threads (if possible).
|
|
||||||
+.TP
|
|
||||||
.SH "ARGUMENTS"
|
|
||||||
.IR pathname \ ...
|
|
||||||
The pathname for the file(s) to be relabeled.
|
|
||||||
diff --git a/policycoreutils/setfiles/setfiles.8 b/policycoreutils/setfiles/setfiles.8
|
|
||||||
index 0692121f2f4d..8ef9f602e843 100644
|
|
||||||
--- a/policycoreutils/setfiles/setfiles.8
|
|
||||||
+++ b/policycoreutils/setfiles/setfiles.8
|
|
||||||
@@ -19,6 +19,8 @@ setfiles \- set SELinux file security contexts.
|
|
||||||
.RB [ \-W ]
|
|
||||||
.RB [ \-F ]
|
|
||||||
.RB [ \-I | \-D ]
|
|
||||||
+.RB [ \-T
|
|
||||||
+.IR nthreads ]
|
|
||||||
.I spec_file
|
|
||||||
.IR pathname \ ...
|
|
||||||
|
|
||||||
@@ -161,6 +163,13 @@ quote marks or backslashes. The
|
|
||||||
option of GNU
|
|
||||||
.B find
|
|
||||||
produces input suitable for this mode.
|
|
||||||
+.TP
|
|
||||||
+.BI \-T \ nthreads
|
|
||||||
+use up to
|
|
||||||
+.I nthreads
|
|
||||||
+threads. Specify 0 to create as many threads as there are available
|
|
||||||
+CPU cores; 1 to use only a single thread (default); or any positive
|
|
||||||
+number to use the given number of threads (if possible).
|
|
||||||
|
|
||||||
.SH "ARGUMENTS"
|
|
||||||
.TP
|
|
||||||
diff --git a/policycoreutils/setfiles/setfiles.c b/policycoreutils/setfiles/setfiles.c
|
|
||||||
index f018d161aa9e..2313a21fa0f3 100644
|
|
||||||
--- a/policycoreutils/setfiles/setfiles.c
|
|
||||||
+++ b/policycoreutils/setfiles/setfiles.c
|
|
||||||
@@ -1,4 +1,5 @@
|
|
||||||
#include "restore.h"
|
|
||||||
+#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio_ext.h>
|
|
||||||
@@ -34,14 +35,14 @@ static __attribute__((__noreturn__)) void usage(const char *const name)
|
|
||||||
{
|
|
||||||
if (iamrestorecon) {
|
|
||||||
fprintf(stderr,
|
|
||||||
- "usage: %s [-iIDFmnprRv0x] [-e excludedir] pathname...\n"
|
|
||||||
- "usage: %s [-iIDFmnprRv0x] [-e excludedir] -f filename\n",
|
|
||||||
+ "usage: %s [-iIDFmnprRv0xT] [-e excludedir] pathname...\n"
|
|
||||||
+ "usage: %s [-iIDFmnprRv0xT] [-e excludedir] -f filename\n",
|
|
||||||
name, name);
|
|
||||||
} else {
|
|
||||||
fprintf(stderr,
|
|
||||||
- "usage: %s [-diIDlmnpqvEFW] [-e excludedir] [-r alt_root_path] [-c policyfile] spec_file pathname...\n"
|
|
||||||
- "usage: %s [-diIDlmnpqvEFW] [-e excludedir] [-r alt_root_path] [-c policyfile] spec_file -f filename\n"
|
|
||||||
- "usage: %s -s [-diIDlmnpqvFW] spec_file\n",
|
|
||||||
+ "usage: %s [-diIDlmnpqvEFWT] [-e excludedir] [-r alt_root_path] [-c policyfile] spec_file pathname...\n"
|
|
||||||
+ "usage: %s [-diIDlmnpqvEFWT] [-e excludedir] [-r alt_root_path] [-c policyfile] spec_file -f filename\n"
|
|
||||||
+ "usage: %s -s [-diIDlmnpqvFWT] spec_file\n",
|
|
||||||
name, name, name);
|
|
||||||
}
|
|
||||||
exit(-1);
|
|
||||||
@@ -144,12 +145,12 @@ int main(int argc, char **argv)
|
|
||||||
int opt, i = 0;
|
|
||||||
const char *input_filename = NULL;
|
|
||||||
int use_input_file = 0;
|
|
||||||
- char *buf = NULL;
|
|
||||||
- size_t buf_len;
|
|
||||||
+ char *buf = NULL, *endptr;
|
|
||||||
+ size_t buf_len, nthreads = 1;
|
|
||||||
const char *base;
|
|
||||||
int errors = 0;
|
|
||||||
- const char *ropts = "e:f:hiIDlmno:pqrsvFRW0x";
|
|
||||||
- const char *sopts = "c:de:f:hiIDlmno:pqr:svEFR:W0";
|
|
||||||
+ const char *ropts = "e:f:hiIDlmno:pqrsvFRW0xT:";
|
|
||||||
+ const char *sopts = "c:de:f:hiIDlmno:pqr:svEFR:W0T:";
|
|
||||||
const char *opts;
|
|
||||||
union selinux_callback cb;
|
|
||||||
|
|
||||||
@@ -370,6 +371,11 @@ int main(int argc, char **argv)
|
|
||||||
usage(argv[0]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
+ case 'T':
|
|
||||||
+ nthreads = strtoull(optarg, &endptr, 10);
|
|
||||||
+ if (*optarg == '\0' || *endptr != '\0')
|
|
||||||
+ usage(argv[0]);
|
|
||||||
+ break;
|
|
||||||
case 'h':
|
|
||||||
case '?':
|
|
||||||
usage(argv[0]);
|
|
||||||
@@ -448,13 +454,13 @@ int main(int argc, char **argv)
|
|
||||||
buf[len - 1] = 0;
|
|
||||||
if (!strcmp(buf, "/"))
|
|
||||||
r_opts.mass_relabel = SELINUX_RESTORECON_MASS_RELABEL;
|
|
||||||
- errors |= process_glob(buf, &r_opts) < 0;
|
|
||||||
+ errors |= process_glob(buf, &r_opts, nthreads) < 0;
|
|
||||||
}
|
|
||||||
if (strcmp(input_filename, "-") != 0)
|
|
||||||
fclose(f);
|
|
||||||
} else {
|
|
||||||
for (i = optind; i < argc; i++)
|
|
||||||
- errors |= process_glob(argv[i], &r_opts) < 0;
|
|
||||||
+ errors |= process_glob(argv[i], &r_opts, nthreads) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
maybe_audit_mass_relabel(r_opts.mass_relabel, errors);
|
|
||||||
--
|
|
||||||
2.33.1
|
|
||||||
|
|
@ -1,674 +0,0 @@
|
|||||||
From 4e6165719d3315b6502f3d290a549f9fa14c3238 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Date: Tue, 16 Nov 2021 14:27:11 +0100
|
|
||||||
Subject: [PATCH] semodule: add -m | --checksum option
|
|
||||||
|
|
||||||
Since cil doesn't store module name and module version in module itself,
|
|
||||||
there's no simple way how to compare that installed module is the same
|
|
||||||
version as the module which is supposed to be installed. Even though the
|
|
||||||
version was not used by semodule itself, it was apparently used by some
|
|
||||||
team.
|
|
||||||
|
|
||||||
With `semodule -l --checksum` users get SHA256 hashes of modules and
|
|
||||||
could compare them with their files which is faster than installing
|
|
||||||
modules again and again.
|
|
||||||
|
|
||||||
E.g.
|
|
||||||
|
|
||||||
# time (
|
|
||||||
semodule -l --checksum | grep localmodule
|
|
||||||
/usr/libexec/selinux/hll/pp localmodule.pp | sha256sum
|
|
||||||
)
|
|
||||||
localmodule db002f64ddfa3983257b42b54da7b182c9b2e476f47880ae3494f9099e1a42bd
|
|
||||||
db002f64ddfa3983257b42b54da7b182c9b2e476f47880ae3494f9099e1a42bd -
|
|
||||||
|
|
||||||
real 0m0.876s
|
|
||||||
user 0m0.849s
|
|
||||||
sys 0m0.028s
|
|
||||||
|
|
||||||
vs
|
|
||||||
|
|
||||||
# time semodule -i localmodule.pp
|
|
||||||
|
|
||||||
real 0m6.147s
|
|
||||||
user 0m5.800s
|
|
||||||
sys 0m0.231s
|
|
||||||
|
|
||||||
Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Acked-by: James Carter <jwcart2@gmail.com>
|
|
||||||
---
|
|
||||||
policycoreutils/semodule/Makefile | 2 +-
|
|
||||||
policycoreutils/semodule/semodule.8 | 6 +
|
|
||||||
policycoreutils/semodule/semodule.c | 95 ++++++++-
|
|
||||||
policycoreutils/semodule/sha256.c | 294 ++++++++++++++++++++++++++++
|
|
||||||
policycoreutils/semodule/sha256.h | 89 +++++++++
|
|
||||||
5 files changed, 480 insertions(+), 6 deletions(-)
|
|
||||||
create mode 100644 policycoreutils/semodule/sha256.c
|
|
||||||
create mode 100644 policycoreutils/semodule/sha256.h
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/Makefile b/policycoreutils/semodule/Makefile
|
|
||||||
index 73801e487a76..9875ac383280 100644
|
|
||||||
--- a/policycoreutils/semodule/Makefile
|
|
||||||
+++ b/policycoreutils/semodule/Makefile
|
|
||||||
@@ -6,7 +6,7 @@ MANDIR = $(PREFIX)/share/man
|
|
||||||
|
|
||||||
CFLAGS ?= -Werror -Wall -W
|
|
||||||
override LDLIBS += -lsepol -lselinux -lsemanage
|
|
||||||
-SEMODULE_OBJS = semodule.o
|
|
||||||
+SEMODULE_OBJS = semodule.o sha256.o
|
|
||||||
|
|
||||||
all: semodule genhomedircon
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.8 b/policycoreutils/semodule/semodule.8
|
|
||||||
index 18d4f708661c..3a2fb21c2481 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.8
|
|
||||||
+++ b/policycoreutils/semodule/semodule.8
|
|
||||||
@@ -95,6 +95,9 @@ only modules listed in \-\-extract after this option.
|
|
||||||
.B \-H,\-\-hll
|
|
||||||
Extract module as an HLL file. This only affects the \-\-extract option and
|
|
||||||
only modules listed in \-\-extract after this option.
|
|
||||||
+.TP
|
|
||||||
+.B \-m,\-\-checksum
|
|
||||||
+Add SHA256 checksum of modules to the list output.
|
|
||||||
|
|
||||||
.SH EXAMPLE
|
|
||||||
.nf
|
|
||||||
@@ -130,6 +133,9 @@ $ semodule \-B \-S "/tmp/var/lib/selinux"
|
|
||||||
# Write the HLL version of puppet and the CIL version of wireshark
|
|
||||||
# modules at priority 400 to the current working directory
|
|
||||||
$ semodule \-X 400 \-\-hll \-E puppet \-\-cil \-E wireshark
|
|
||||||
+# Check whether a module in "localmodule.pp" file is same as installed module "localmodule"
|
|
||||||
+$ /usr/libexec/selinux/hll/pp localmodule.pp | sha256sum
|
|
||||||
+$ semodule -l -m | grep localmodule
|
|
||||||
.fi
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
|
|
||||||
index c815f01546b4..ddbf10455abf 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.c
|
|
||||||
+++ b/policycoreutils/semodule/semodule.c
|
|
||||||
@@ -25,6 +25,8 @@
|
|
||||||
#include <sepol/cil/cil.h>
|
|
||||||
#include <semanage/modules.h>
|
|
||||||
|
|
||||||
+#include "sha256.h"
|
|
||||||
+
|
|
||||||
enum client_modes {
|
|
||||||
NO_MODE, INSTALL_M, REMOVE_M, EXTRACT_M, CIL_M, HLL_M,
|
|
||||||
LIST_M, RELOAD, PRIORITY_M, ENABLE_M, DISABLE_M
|
|
||||||
@@ -57,6 +59,7 @@ static semanage_handle_t *sh = NULL;
|
|
||||||
static char *store;
|
|
||||||
static char *store_root;
|
|
||||||
int extract_cil = 0;
|
|
||||||
+static int checksum = 0;
|
|
||||||
|
|
||||||
extern char *optarg;
|
|
||||||
extern int optind;
|
|
||||||
@@ -147,6 +150,7 @@ static void usage(char *progname)
|
|
||||||
printf(" -S,--store-path use an alternate path for the policy store root\n");
|
|
||||||
printf(" -c, --cil extract module as cil. This only affects module extraction.\n");
|
|
||||||
printf(" -H, --hll extract module as hll. This only affects module extraction.\n");
|
|
||||||
+ printf(" -m, --checksum print module checksum (SHA256).\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sets the global mode variable to new_mode, but only if no other
|
|
||||||
@@ -200,6 +204,7 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
{"disable", required_argument, NULL, 'd'},
|
|
||||||
{"path", required_argument, NULL, 'p'},
|
|
||||||
{"store-path", required_argument, NULL, 'S'},
|
|
||||||
+ {"checksum", 0, NULL, 'm'},
|
|
||||||
{NULL, 0, NULL, 0}
|
|
||||||
};
|
|
||||||
int extract_selected = 0;
|
|
||||||
@@ -210,7 +215,7 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
no_reload = 0;
|
|
||||||
priority = 400;
|
|
||||||
while ((i =
|
|
||||||
- getopt_long(argc, argv, "s:b:hi:l::vr:u:RnNBDCPX:e:d:p:S:E:cH", opts,
|
|
||||||
+ getopt_long(argc, argv, "s:b:hi:l::vr:u:RnNBDCPX:e:d:p:S:E:cHm", opts,
|
|
||||||
NULL)) != -1) {
|
|
||||||
switch (i) {
|
|
||||||
case 'b':
|
|
||||||
@@ -287,6 +292,9 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
case 'd':
|
|
||||||
set_mode(DISABLE_M, optarg);
|
|
||||||
break;
|
|
||||||
+ case 'm':
|
|
||||||
+ checksum = 1;
|
|
||||||
+ break;
|
|
||||||
case '?':
|
|
||||||
default:{
|
|
||||||
usage(argv[0]);
|
|
||||||
@@ -338,6 +346,61 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Get module checksum */
|
|
||||||
+static char *hash_module_data(const char *module_name, const int prio) {
|
|
||||||
+ semanage_module_info_t *extract_info = NULL;
|
|
||||||
+ semanage_module_key_t *modkey = NULL;
|
|
||||||
+ Sha256Context context;
|
|
||||||
+ uint8_t sha256_hash[SHA256_HASH_SIZE];
|
|
||||||
+ char *sha256_buf = NULL;
|
|
||||||
+ void *data;
|
|
||||||
+ size_t data_len = 0, i;
|
|
||||||
+ int result;
|
|
||||||
+
|
|
||||||
+ result = semanage_module_key_create(sh, &modkey);
|
|
||||||
+ if (result != 0) {
|
|
||||||
+ goto cleanup_extract;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ result = semanage_module_key_set_name(sh, modkey, module_name);
|
|
||||||
+ if (result != 0) {
|
|
||||||
+ goto cleanup_extract;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ result = semanage_module_key_set_priority(sh, modkey, prio);
|
|
||||||
+ if (result != 0) {
|
|
||||||
+ goto cleanup_extract;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ result = semanage_module_extract(sh, modkey, 1, &data, &data_len,
|
|
||||||
+ &extract_info);
|
|
||||||
+ if (result != 0) {
|
|
||||||
+ goto cleanup_extract;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ Sha256Initialise(&context);
|
|
||||||
+ Sha256Update(&context, data, data_len);
|
|
||||||
+
|
|
||||||
+ Sha256Finalise(&context, (SHA256_HASH *)sha256_hash);
|
|
||||||
+
|
|
||||||
+ sha256_buf = calloc(1, SHA256_HASH_SIZE * 2 + 1);
|
|
||||||
+
|
|
||||||
+ if (sha256_buf == NULL)
|
|
||||||
+ goto cleanup_extract;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < SHA256_HASH_SIZE; i++) {
|
|
||||||
+ sprintf((&sha256_buf[i * 2]), "%02x", sha256_hash[i]);
|
|
||||||
+ }
|
|
||||||
+ sha256_buf[i * 2] = 0;
|
|
||||||
+
|
|
||||||
+cleanup_extract:
|
|
||||||
+ semanage_module_info_destroy(sh, extract_info);
|
|
||||||
+ free(extract_info);
|
|
||||||
+ semanage_module_key_destroy(sh, modkey);
|
|
||||||
+ free(modkey);
|
|
||||||
+ return sha256_buf;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int i, commit = 0;
|
|
||||||
@@ -546,6 +609,8 @@ cleanup_extract:
|
|
||||||
int modinfos_len = 0;
|
|
||||||
semanage_module_info_t *m = NULL;
|
|
||||||
int j = 0;
|
|
||||||
+ char *module_checksum = NULL;
|
|
||||||
+ uint16_t pri = 0;
|
|
||||||
|
|
||||||
if (verbose) {
|
|
||||||
printf
|
|
||||||
@@ -570,7 +635,18 @@ cleanup_extract:
|
|
||||||
result = semanage_module_info_get_name(sh, m, &name);
|
|
||||||
if (result != 0) goto cleanup_list;
|
|
||||||
|
|
||||||
- printf("%s\n", name);
|
|
||||||
+ result = semanage_module_info_get_priority(sh, m, &pri);
|
|
||||||
+ if (result != 0) goto cleanup_list;
|
|
||||||
+
|
|
||||||
+ printf("%s", name);
|
|
||||||
+ if (checksum) {
|
|
||||||
+ module_checksum = hash_module_data(name, pri);
|
|
||||||
+ if (module_checksum) {
|
|
||||||
+ printf(" %s", module_checksum);
|
|
||||||
+ free(module_checksum);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (strcmp(mode_arg, "full") == 0) {
|
|
||||||
@@ -585,11 +661,12 @@ cleanup_extract:
|
|
||||||
}
|
|
||||||
|
|
||||||
/* calculate column widths */
|
|
||||||
- size_t column[4] = { 0, 0, 0, 0 };
|
|
||||||
+ size_t column[5] = { 0, 0, 0, 0, 0 };
|
|
||||||
|
|
||||||
/* fixed width columns */
|
|
||||||
column[0] = sizeof("000") - 1;
|
|
||||||
column[3] = sizeof("disabled") - 1;
|
|
||||||
+ column[4] = 64; /* SHA256_HASH_SIZE * 2 */
|
|
||||||
|
|
||||||
/* variable width columns */
|
|
||||||
const char *tmp = NULL;
|
|
||||||
@@ -612,7 +689,6 @@ cleanup_extract:
|
|
||||||
|
|
||||||
/* print out each module */
|
|
||||||
for (j = 0; j < modinfos_len; j++) {
|
|
||||||
- uint16_t pri = 0;
|
|
||||||
const char *name = NULL;
|
|
||||||
int enabled = 0;
|
|
||||||
const char *lang_ext = NULL;
|
|
||||||
@@ -631,11 +707,20 @@ cleanup_extract:
|
|
||||||
result = semanage_module_info_get_lang_ext(sh, m, &lang_ext);
|
|
||||||
if (result != 0) goto cleanup_list;
|
|
||||||
|
|
||||||
- printf("%0*u %-*s %-*s %-*s\n",
|
|
||||||
+ printf("%0*u %-*s %-*s %-*s",
|
|
||||||
(int)column[0], pri,
|
|
||||||
(int)column[1], name,
|
|
||||||
(int)column[2], lang_ext,
|
|
||||||
(int)column[3], enabled ? "" : "disabled");
|
|
||||||
+ if (checksum) {
|
|
||||||
+ module_checksum = hash_module_data(name, pri);
|
|
||||||
+ if (module_checksum) {
|
|
||||||
+ printf(" %-*s", (int)column[4], module_checksum);
|
|
||||||
+ free(module_checksum);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ printf("\n");
|
|
||||||
+
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
diff --git a/policycoreutils/semodule/sha256.c b/policycoreutils/semodule/sha256.c
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..fe2aeef07f53
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/policycoreutils/semodule/sha256.c
|
|
||||||
@@ -0,0 +1,294 @@
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// WjCryptLib_Sha256
|
|
||||||
+//
|
|
||||||
+// Implementation of SHA256 hash function.
|
|
||||||
+// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org
|
|
||||||
+// Modified by WaterJuice retaining Public Domain license.
|
|
||||||
+//
|
|
||||||
+// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// IMPORTS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+#include "sha256.h"
|
|
||||||
+#include <memory.h>
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// MACROS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+#define ror(value, bits) (((value) >> (bits)) | ((value) << (32 - (bits))))
|
|
||||||
+
|
|
||||||
+#define MIN(x, y) ( ((x)<(y))?(x):(y) )
|
|
||||||
+
|
|
||||||
+#define STORE32H(x, y) \
|
|
||||||
+ { (y)[0] = (uint8_t)(((x)>>24)&255); (y)[1] = (uint8_t)(((x)>>16)&255); \
|
|
||||||
+ (y)[2] = (uint8_t)(((x)>>8)&255); (y)[3] = (uint8_t)((x)&255); }
|
|
||||||
+
|
|
||||||
+#define LOAD32H(x, y) \
|
|
||||||
+ { x = ((uint32_t)((y)[0] & 255)<<24) | \
|
|
||||||
+ ((uint32_t)((y)[1] & 255)<<16) | \
|
|
||||||
+ ((uint32_t)((y)[2] & 255)<<8) | \
|
|
||||||
+ ((uint32_t)((y)[3] & 255)); }
|
|
||||||
+
|
|
||||||
+#define STORE64H(x, y) \
|
|
||||||
+ { (y)[0] = (uint8_t)(((x)>>56)&255); (y)[1] = (uint8_t)(((x)>>48)&255); \
|
|
||||||
+ (y)[2] = (uint8_t)(((x)>>40)&255); (y)[3] = (uint8_t)(((x)>>32)&255); \
|
|
||||||
+ (y)[4] = (uint8_t)(((x)>>24)&255); (y)[5] = (uint8_t)(((x)>>16)&255); \
|
|
||||||
+ (y)[6] = (uint8_t)(((x)>>8)&255); (y)[7] = (uint8_t)((x)&255); }
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// CONSTANTS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+// The K array
|
|
||||||
+static const uint32_t K[64] = {
|
|
||||||
+ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
|
|
||||||
+ 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
|
|
||||||
+ 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
|
|
||||||
+ 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
|
|
||||||
+ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
|
|
||||||
+ 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
|
|
||||||
+ 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
|
|
||||||
+ 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
|
|
||||||
+ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
|
|
||||||
+ 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
|
|
||||||
+ 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
|
|
||||||
+ 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
|
|
||||||
+ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define BLOCK_SIZE 64
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// INTERNAL FUNCTIONS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+// Various logical functions
|
|
||||||
+#define Ch( x, y, z ) (z ^ (x & (y ^ z)))
|
|
||||||
+#define Maj( x, y, z ) (((x | y) & z) | (x & y))
|
|
||||||
+#define S( x, n ) ror((x),(n))
|
|
||||||
+#define R( x, n ) (((x)&0xFFFFFFFFUL)>>(n))
|
|
||||||
+#define Sigma0( x ) (S(x, 2) ^ S(x, 13) ^ S(x, 22))
|
|
||||||
+#define Sigma1( x ) (S(x, 6) ^ S(x, 11) ^ S(x, 25))
|
|
||||||
+#define Gamma0( x ) (S(x, 7) ^ S(x, 18) ^ R(x, 3))
|
|
||||||
+#define Gamma1( x ) (S(x, 17) ^ S(x, 19) ^ R(x, 10))
|
|
||||||
+
|
|
||||||
+#define Sha256Round( a, b, c, d, e, f, g, h, i ) \
|
|
||||||
+ t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
|
|
||||||
+ t1 = Sigma0(a) + Maj(a, b, c); \
|
|
||||||
+ d += t0; \
|
|
||||||
+ h = t0 + t1;
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// TransformFunction
|
|
||||||
+//
|
|
||||||
+// Compress 512-bits
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+static
|
|
||||||
+void
|
|
||||||
+ TransformFunction
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context,
|
|
||||||
+ uint8_t const* Buffer
|
|
||||||
+ )
|
|
||||||
+{
|
|
||||||
+ uint32_t S[8];
|
|
||||||
+ uint32_t W[64];
|
|
||||||
+ uint32_t t0;
|
|
||||||
+ uint32_t t1;
|
|
||||||
+ uint32_t t;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ // Copy state into S
|
|
||||||
+ for( i=0; i<8; i++ )
|
|
||||||
+ {
|
|
||||||
+ S[i] = Context->state[i];
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Copy the state into 512-bits into W[0..15]
|
|
||||||
+ for( i=0; i<16; i++ )
|
|
||||||
+ {
|
|
||||||
+ LOAD32H( W[i], Buffer + (4*i) );
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Fill W[16..63]
|
|
||||||
+ for( i=16; i<64; i++ )
|
|
||||||
+ {
|
|
||||||
+ W[i] = Gamma1( W[i-2]) + W[i-7] + Gamma0( W[i-15] ) + W[i-16];
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Compress
|
|
||||||
+ for( i=0; i<64; i++ )
|
|
||||||
+ {
|
|
||||||
+ Sha256Round( S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i );
|
|
||||||
+ t = S[7];
|
|
||||||
+ S[7] = S[6];
|
|
||||||
+ S[6] = S[5];
|
|
||||||
+ S[5] = S[4];
|
|
||||||
+ S[4] = S[3];
|
|
||||||
+ S[3] = S[2];
|
|
||||||
+ S[2] = S[1];
|
|
||||||
+ S[1] = S[0];
|
|
||||||
+ S[0] = t;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Feedback
|
|
||||||
+ for( i=0; i<8; i++ )
|
|
||||||
+ {
|
|
||||||
+ Context->state[i] = Context->state[i] + S[i];
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// PUBLIC FUNCTIONS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Initialise
|
|
||||||
+//
|
|
||||||
+// Initialises a SHA256 Context. Use this to initialise/reset a context.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Initialise
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context // [out]
|
|
||||||
+ )
|
|
||||||
+{
|
|
||||||
+ Context->curlen = 0;
|
|
||||||
+ Context->length = 0;
|
|
||||||
+ Context->state[0] = 0x6A09E667UL;
|
|
||||||
+ Context->state[1] = 0xBB67AE85UL;
|
|
||||||
+ Context->state[2] = 0x3C6EF372UL;
|
|
||||||
+ Context->state[3] = 0xA54FF53AUL;
|
|
||||||
+ Context->state[4] = 0x510E527FUL;
|
|
||||||
+ Context->state[5] = 0x9B05688CUL;
|
|
||||||
+ Context->state[6] = 0x1F83D9ABUL;
|
|
||||||
+ Context->state[7] = 0x5BE0CD19UL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Update
|
|
||||||
+//
|
|
||||||
+// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on
|
|
||||||
+// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Update
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context, // [in out]
|
|
||||||
+ void const* Buffer, // [in]
|
|
||||||
+ uint32_t BufferSize // [in]
|
|
||||||
+ )
|
|
||||||
+{
|
|
||||||
+ uint32_t n;
|
|
||||||
+
|
|
||||||
+ if( Context->curlen > sizeof(Context->buf) )
|
|
||||||
+ {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while( BufferSize > 0 )
|
|
||||||
+ {
|
|
||||||
+ if( Context->curlen == 0 && BufferSize >= BLOCK_SIZE )
|
|
||||||
+ {
|
|
||||||
+ TransformFunction( Context, (uint8_t*)Buffer );
|
|
||||||
+ Context->length += BLOCK_SIZE * 8;
|
|
||||||
+ Buffer = (uint8_t*)Buffer + BLOCK_SIZE;
|
|
||||||
+ BufferSize -= BLOCK_SIZE;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ n = MIN( BufferSize, (BLOCK_SIZE - Context->curlen) );
|
|
||||||
+ memcpy( Context->buf + Context->curlen, Buffer, (size_t)n );
|
|
||||||
+ Context->curlen += n;
|
|
||||||
+ Buffer = (uint8_t*)Buffer + n;
|
|
||||||
+ BufferSize -= n;
|
|
||||||
+ if( Context->curlen == BLOCK_SIZE )
|
|
||||||
+ {
|
|
||||||
+ TransformFunction( Context, Context->buf );
|
|
||||||
+ Context->length += 8*BLOCK_SIZE;
|
|
||||||
+ Context->curlen = 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Finalise
|
|
||||||
+//
|
|
||||||
+// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After
|
|
||||||
+// calling this, Sha256Initialised must be used to reuse the context.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Finalise
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context, // [in out]
|
|
||||||
+ SHA256_HASH* Digest // [out]
|
|
||||||
+ )
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ if( Context->curlen >= sizeof(Context->buf) )
|
|
||||||
+ {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Increase the length of the message
|
|
||||||
+ Context->length += Context->curlen * 8;
|
|
||||||
+
|
|
||||||
+ // Append the '1' bit
|
|
||||||
+ Context->buf[Context->curlen++] = (uint8_t)0x80;
|
|
||||||
+
|
|
||||||
+ // if the length is currently above 56 bytes we append zeros
|
|
||||||
+ // then compress. Then we can fall back to padding zeros and length
|
|
||||||
+ // encoding like normal.
|
|
||||||
+ if( Context->curlen > 56 )
|
|
||||||
+ {
|
|
||||||
+ while( Context->curlen < 64 )
|
|
||||||
+ {
|
|
||||||
+ Context->buf[Context->curlen++] = (uint8_t)0;
|
|
||||||
+ }
|
|
||||||
+ TransformFunction(Context, Context->buf);
|
|
||||||
+ Context->curlen = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Pad up to 56 bytes of zeroes
|
|
||||||
+ while( Context->curlen < 56 )
|
|
||||||
+ {
|
|
||||||
+ Context->buf[Context->curlen++] = (uint8_t)0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Store length
|
|
||||||
+ STORE64H( Context->length, Context->buf+56 );
|
|
||||||
+ TransformFunction( Context, Context->buf );
|
|
||||||
+
|
|
||||||
+ // Copy output
|
|
||||||
+ for( i=0; i<8; i++ )
|
|
||||||
+ {
|
|
||||||
+ STORE32H( Context->state[i], Digest->bytes+(4*i) );
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Calculate
|
|
||||||
+//
|
|
||||||
+// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the
|
|
||||||
+// buffer.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Calculate
|
|
||||||
+ (
|
|
||||||
+ void const* Buffer, // [in]
|
|
||||||
+ uint32_t BufferSize, // [in]
|
|
||||||
+ SHA256_HASH* Digest // [in]
|
|
||||||
+ )
|
|
||||||
+{
|
|
||||||
+ Sha256Context context;
|
|
||||||
+
|
|
||||||
+ Sha256Initialise( &context );
|
|
||||||
+ Sha256Update( &context, Buffer, BufferSize );
|
|
||||||
+ Sha256Finalise( &context, Digest );
|
|
||||||
+}
|
|
||||||
diff --git a/policycoreutils/semodule/sha256.h b/policycoreutils/semodule/sha256.h
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..406ed869cd82
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/policycoreutils/semodule/sha256.h
|
|
||||||
@@ -0,0 +1,89 @@
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// WjCryptLib_Sha256
|
|
||||||
+//
|
|
||||||
+// Implementation of SHA256 hash function.
|
|
||||||
+// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org
|
|
||||||
+// Modified by WaterJuice retaining Public Domain license.
|
|
||||||
+//
|
|
||||||
+// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+#pragma once
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// IMPORTS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+#include <stdint.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
+
|
|
||||||
+typedef struct
|
|
||||||
+{
|
|
||||||
+ uint64_t length;
|
|
||||||
+ uint32_t state[8];
|
|
||||||
+ uint32_t curlen;
|
|
||||||
+ uint8_t buf[64];
|
|
||||||
+} Sha256Context;
|
|
||||||
+
|
|
||||||
+#define SHA256_HASH_SIZE ( 256 / 8 )
|
|
||||||
+
|
|
||||||
+typedef struct
|
|
||||||
+{
|
|
||||||
+ uint8_t bytes [SHA256_HASH_SIZE];
|
|
||||||
+} SHA256_HASH;
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// PUBLIC FUNCTIONS
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Initialise
|
|
||||||
+//
|
|
||||||
+// Initialises a SHA256 Context. Use this to initialise/reset a context.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Initialise
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context // [out]
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Update
|
|
||||||
+//
|
|
||||||
+// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on
|
|
||||||
+// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Update
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context, // [in out]
|
|
||||||
+ void const* Buffer, // [in]
|
|
||||||
+ uint32_t BufferSize // [in]
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Finalise
|
|
||||||
+//
|
|
||||||
+// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After
|
|
||||||
+// calling this, Sha256Initialised must be used to reuse the context.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Finalise
|
|
||||||
+ (
|
|
||||||
+ Sha256Context* Context, // [in out]
|
|
||||||
+ SHA256_HASH* Digest // [out]
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// Sha256Calculate
|
|
||||||
+//
|
|
||||||
+// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the
|
|
||||||
+// buffer.
|
|
||||||
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+void
|
|
||||||
+ Sha256Calculate
|
|
||||||
+ (
|
|
||||||
+ void const* Buffer, // [in]
|
|
||||||
+ uint32_t BufferSize, // [in]
|
|
||||||
+ SHA256_HASH* Digest // [in]
|
|
||||||
+ );
|
|
||||||
--
|
|
||||||
2.33.1
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 7537374e7f5802852c0c64b4cb2a9646402e3cba Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Date: Tue, 16 Nov 2021 16:11:22 +0100
|
|
||||||
Subject: [PATCH] semodule: Fix lang_ext column index
|
|
||||||
|
|
||||||
lang_ext is 3. column - index number 2.
|
|
||||||
|
|
||||||
Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Acked-by: James Carter <jwcart2@gmail.com>
|
|
||||||
---
|
|
||||||
policycoreutils/semodule/semodule.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
|
|
||||||
index ddbf10455abf..57f005ce2c62 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.c
|
|
||||||
+++ b/policycoreutils/semodule/semodule.c
|
|
||||||
@@ -684,7 +684,7 @@ cleanup_extract:
|
|
||||||
if (result != 0) goto cleanup_list;
|
|
||||||
|
|
||||||
size = strlen(tmp);
|
|
||||||
- if (size > column[3]) column[3] = size;
|
|
||||||
+ if (size > column[2]) column[2] = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* print out each module */
|
|
||||||
--
|
|
||||||
2.33.1
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From 0c4e5d70fde006977e798d6cc7d80db2e8af7bb9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Date: Tue, 23 Nov 2021 17:38:51 +0100
|
|
||||||
Subject: [PATCH] semodule: Don't forget to munmap() data
|
|
||||||
|
|
||||||
semanage_module_extract() mmap()'s the module raw data but it leaves on
|
|
||||||
the caller to munmap() them.
|
|
||||||
|
|
||||||
Reported-by: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Acked-by: James Carter <jwcart2@gmail.com>
|
|
||||||
---
|
|
||||||
policycoreutils/semodule/semodule.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
|
|
||||||
index 57f005ce2c62..94a9d131bb79 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.c
|
|
||||||
+++ b/policycoreutils/semodule/semodule.c
|
|
||||||
@@ -394,6 +394,9 @@ static char *hash_module_data(const char *module_name, const int prio) {
|
|
||||||
sha256_buf[i * 2] = 0;
|
|
||||||
|
|
||||||
cleanup_extract:
|
|
||||||
+ if (data_len > 0) {
|
|
||||||
+ munmap(data, data_len);
|
|
||||||
+ }
|
|
||||||
semanage_module_info_destroy(sh, extract_info);
|
|
||||||
free(extract_info);
|
|
||||||
semanage_module_key_destroy(sh, modkey);
|
|
||||||
--
|
|
||||||
2.33.1
|
|
||||||
|
|
@ -1,539 +0,0 @@
|
|||||||
From 7809f29b68e17a455478990ae9b22728381a126b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
Date: Thu, 3 Feb 2022 17:53:23 +0100
|
|
||||||
Subject: [PATCH] semodule,libsemanage: move module hashing into libsemanage
|
|
||||||
|
|
||||||
The main goal of this move is to have the SHA-256 implementation under
|
|
||||||
libsemanage, since upcoming patches will make use of SHA-256 for a
|
|
||||||
different (but similar) purpose in libsemanage. Having the hashing code
|
|
||||||
in libsemanage will reduce code duplication and allow for easier hash
|
|
||||||
algorithm upgrade in the future.
|
|
||||||
|
|
||||||
Note that libselinux currently also contains a hash function
|
|
||||||
implementation (for yet another different purpose). This patch doesn't
|
|
||||||
make any effort to address that duplicity yet.
|
|
||||||
|
|
||||||
This patch also changes the format of the hash string printed by
|
|
||||||
semodule to include the name of the hash. The intent is to avoid
|
|
||||||
ambiguity and potential collisions when the algorithm is potentially
|
|
||||||
changed in the future.
|
|
||||||
|
|
||||||
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
---
|
|
||||||
policycoreutils/semodule/Makefile | 2 +-
|
|
||||||
policycoreutils/semodule/semodule.c | 53 ++---
|
|
||||||
policycoreutils/semodule/sha256.c | 294 ----------------------------
|
|
||||||
policycoreutils/semodule/sha256.h | 89 ---------
|
|
||||||
4 files changed, 17 insertions(+), 421 deletions(-)
|
|
||||||
delete mode 100644 policycoreutils/semodule/sha256.c
|
|
||||||
delete mode 100644 policycoreutils/semodule/sha256.h
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/Makefile b/policycoreutils/semodule/Makefile
|
|
||||||
index 9875ac383280..73801e487a76 100644
|
|
||||||
--- a/policycoreutils/semodule/Makefile
|
|
||||||
+++ b/policycoreutils/semodule/Makefile
|
|
||||||
@@ -6,7 +6,7 @@ MANDIR = $(PREFIX)/share/man
|
|
||||||
|
|
||||||
CFLAGS ?= -Werror -Wall -W
|
|
||||||
override LDLIBS += -lsepol -lselinux -lsemanage
|
|
||||||
-SEMODULE_OBJS = semodule.o sha256.o
|
|
||||||
+SEMODULE_OBJS = semodule.o
|
|
||||||
|
|
||||||
all: semodule genhomedircon
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
|
|
||||||
index 94a9d131bb79..f4a76289efa3 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.c
|
|
||||||
+++ b/policycoreutils/semodule/semodule.c
|
|
||||||
@@ -25,8 +25,6 @@
|
|
||||||
#include <sepol/cil/cil.h>
|
|
||||||
#include <semanage/modules.h>
|
|
||||||
|
|
||||||
-#include "sha256.h"
|
|
||||||
-
|
|
||||||
enum client_modes {
|
|
||||||
NO_MODE, INSTALL_M, REMOVE_M, EXTRACT_M, CIL_M, HLL_M,
|
|
||||||
LIST_M, RELOAD, PRIORITY_M, ENABLE_M, DISABLE_M
|
|
||||||
@@ -348,60 +346,38 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
|
|
||||||
/* Get module checksum */
|
|
||||||
static char *hash_module_data(const char *module_name, const int prio) {
|
|
||||||
- semanage_module_info_t *extract_info = NULL;
|
|
||||||
semanage_module_key_t *modkey = NULL;
|
|
||||||
- Sha256Context context;
|
|
||||||
- uint8_t sha256_hash[SHA256_HASH_SIZE];
|
|
||||||
- char *sha256_buf = NULL;
|
|
||||||
- void *data;
|
|
||||||
- size_t data_len = 0, i;
|
|
||||||
+ char *hash_str = NULL;
|
|
||||||
+ void *hash = NULL;
|
|
||||||
+ size_t hash_len = 0;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
result = semanage_module_key_create(sh, &modkey);
|
|
||||||
if (result != 0) {
|
|
||||||
- goto cleanup_extract;
|
|
||||||
+ goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = semanage_module_key_set_name(sh, modkey, module_name);
|
|
||||||
if (result != 0) {
|
|
||||||
- goto cleanup_extract;
|
|
||||||
+ goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = semanage_module_key_set_priority(sh, modkey, prio);
|
|
||||||
if (result != 0) {
|
|
||||||
- goto cleanup_extract;
|
|
||||||
+ goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
- result = semanage_module_extract(sh, modkey, 1, &data, &data_len,
|
|
||||||
- &extract_info);
|
|
||||||
+ result = semanage_module_compute_checksum(sh, modkey, 1, &hash_str,
|
|
||||||
+ &hash_len);
|
|
||||||
if (result != 0) {
|
|
||||||
- goto cleanup_extract;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- Sha256Initialise(&context);
|
|
||||||
- Sha256Update(&context, data, data_len);
|
|
||||||
-
|
|
||||||
- Sha256Finalise(&context, (SHA256_HASH *)sha256_hash);
|
|
||||||
-
|
|
||||||
- sha256_buf = calloc(1, SHA256_HASH_SIZE * 2 + 1);
|
|
||||||
-
|
|
||||||
- if (sha256_buf == NULL)
|
|
||||||
- goto cleanup_extract;
|
|
||||||
-
|
|
||||||
- for (i = 0; i < SHA256_HASH_SIZE; i++) {
|
|
||||||
- sprintf((&sha256_buf[i * 2]), "%02x", sha256_hash[i]);
|
|
||||||
+ goto cleanup;
|
|
||||||
}
|
|
||||||
- sha256_buf[i * 2] = 0;
|
|
||||||
|
|
||||||
-cleanup_extract:
|
|
||||||
- if (data_len > 0) {
|
|
||||||
- munmap(data, data_len);
|
|
||||||
- }
|
|
||||||
- semanage_module_info_destroy(sh, extract_info);
|
|
||||||
- free(extract_info);
|
|
||||||
+cleanup:
|
|
||||||
+ free(hash);
|
|
||||||
semanage_module_key_destroy(sh, modkey);
|
|
||||||
free(modkey);
|
|
||||||
- return sha256_buf;
|
|
||||||
+ return hash_str;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
@@ -669,7 +645,10 @@ cleanup_extract:
|
|
||||||
/* fixed width columns */
|
|
||||||
column[0] = sizeof("000") - 1;
|
|
||||||
column[3] = sizeof("disabled") - 1;
|
|
||||||
- column[4] = 64; /* SHA256_HASH_SIZE * 2 */
|
|
||||||
+
|
|
||||||
+ result = semanage_module_compute_checksum(sh, NULL, 0, NULL,
|
|
||||||
+ &column[4]);
|
|
||||||
+ if (result != 0) goto cleanup_list;
|
|
||||||
|
|
||||||
/* variable width columns */
|
|
||||||
const char *tmp = NULL;
|
|
||||||
diff --git a/policycoreutils/semodule/sha256.c b/policycoreutils/semodule/sha256.c
|
|
||||||
deleted file mode 100644
|
|
||||||
index fe2aeef07f53..000000000000
|
|
||||||
--- a/policycoreutils/semodule/sha256.c
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,294 +0,0 @@
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// WjCryptLib_Sha256
|
|
||||||
-//
|
|
||||||
-// Implementation of SHA256 hash function.
|
|
||||||
-// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org
|
|
||||||
-// Modified by WaterJuice retaining Public Domain license.
|
|
||||||
-//
|
|
||||||
-// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// IMPORTS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-#include "sha256.h"
|
|
||||||
-#include <memory.h>
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// MACROS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-#define ror(value, bits) (((value) >> (bits)) | ((value) << (32 - (bits))))
|
|
||||||
-
|
|
||||||
-#define MIN(x, y) ( ((x)<(y))?(x):(y) )
|
|
||||||
-
|
|
||||||
-#define STORE32H(x, y) \
|
|
||||||
- { (y)[0] = (uint8_t)(((x)>>24)&255); (y)[1] = (uint8_t)(((x)>>16)&255); \
|
|
||||||
- (y)[2] = (uint8_t)(((x)>>8)&255); (y)[3] = (uint8_t)((x)&255); }
|
|
||||||
-
|
|
||||||
-#define LOAD32H(x, y) \
|
|
||||||
- { x = ((uint32_t)((y)[0] & 255)<<24) | \
|
|
||||||
- ((uint32_t)((y)[1] & 255)<<16) | \
|
|
||||||
- ((uint32_t)((y)[2] & 255)<<8) | \
|
|
||||||
- ((uint32_t)((y)[3] & 255)); }
|
|
||||||
-
|
|
||||||
-#define STORE64H(x, y) \
|
|
||||||
- { (y)[0] = (uint8_t)(((x)>>56)&255); (y)[1] = (uint8_t)(((x)>>48)&255); \
|
|
||||||
- (y)[2] = (uint8_t)(((x)>>40)&255); (y)[3] = (uint8_t)(((x)>>32)&255); \
|
|
||||||
- (y)[4] = (uint8_t)(((x)>>24)&255); (y)[5] = (uint8_t)(((x)>>16)&255); \
|
|
||||||
- (y)[6] = (uint8_t)(((x)>>8)&255); (y)[7] = (uint8_t)((x)&255); }
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// CONSTANTS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-// The K array
|
|
||||||
-static const uint32_t K[64] = {
|
|
||||||
- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
|
|
||||||
- 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
|
|
||||||
- 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
|
|
||||||
- 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
|
|
||||||
- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
|
|
||||||
- 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
|
|
||||||
- 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
|
|
||||||
- 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
|
|
||||||
- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
|
|
||||||
- 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
|
|
||||||
- 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
|
|
||||||
- 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
|
|
||||||
- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-#define BLOCK_SIZE 64
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// INTERNAL FUNCTIONS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-// Various logical functions
|
|
||||||
-#define Ch( x, y, z ) (z ^ (x & (y ^ z)))
|
|
||||||
-#define Maj( x, y, z ) (((x | y) & z) | (x & y))
|
|
||||||
-#define S( x, n ) ror((x),(n))
|
|
||||||
-#define R( x, n ) (((x)&0xFFFFFFFFUL)>>(n))
|
|
||||||
-#define Sigma0( x ) (S(x, 2) ^ S(x, 13) ^ S(x, 22))
|
|
||||||
-#define Sigma1( x ) (S(x, 6) ^ S(x, 11) ^ S(x, 25))
|
|
||||||
-#define Gamma0( x ) (S(x, 7) ^ S(x, 18) ^ R(x, 3))
|
|
||||||
-#define Gamma1( x ) (S(x, 17) ^ S(x, 19) ^ R(x, 10))
|
|
||||||
-
|
|
||||||
-#define Sha256Round( a, b, c, d, e, f, g, h, i ) \
|
|
||||||
- t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
|
|
||||||
- t1 = Sigma0(a) + Maj(a, b, c); \
|
|
||||||
- d += t0; \
|
|
||||||
- h = t0 + t1;
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// TransformFunction
|
|
||||||
-//
|
|
||||||
-// Compress 512-bits
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-static
|
|
||||||
-void
|
|
||||||
- TransformFunction
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context,
|
|
||||||
- uint8_t const* Buffer
|
|
||||||
- )
|
|
||||||
-{
|
|
||||||
- uint32_t S[8];
|
|
||||||
- uint32_t W[64];
|
|
||||||
- uint32_t t0;
|
|
||||||
- uint32_t t1;
|
|
||||||
- uint32_t t;
|
|
||||||
- int i;
|
|
||||||
-
|
|
||||||
- // Copy state into S
|
|
||||||
- for( i=0; i<8; i++ )
|
|
||||||
- {
|
|
||||||
- S[i] = Context->state[i];
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Copy the state into 512-bits into W[0..15]
|
|
||||||
- for( i=0; i<16; i++ )
|
|
||||||
- {
|
|
||||||
- LOAD32H( W[i], Buffer + (4*i) );
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Fill W[16..63]
|
|
||||||
- for( i=16; i<64; i++ )
|
|
||||||
- {
|
|
||||||
- W[i] = Gamma1( W[i-2]) + W[i-7] + Gamma0( W[i-15] ) + W[i-16];
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Compress
|
|
||||||
- for( i=0; i<64; i++ )
|
|
||||||
- {
|
|
||||||
- Sha256Round( S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i );
|
|
||||||
- t = S[7];
|
|
||||||
- S[7] = S[6];
|
|
||||||
- S[6] = S[5];
|
|
||||||
- S[5] = S[4];
|
|
||||||
- S[4] = S[3];
|
|
||||||
- S[3] = S[2];
|
|
||||||
- S[2] = S[1];
|
|
||||||
- S[1] = S[0];
|
|
||||||
- S[0] = t;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Feedback
|
|
||||||
- for( i=0; i<8; i++ )
|
|
||||||
- {
|
|
||||||
- Context->state[i] = Context->state[i] + S[i];
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// PUBLIC FUNCTIONS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Initialise
|
|
||||||
-//
|
|
||||||
-// Initialises a SHA256 Context. Use this to initialise/reset a context.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Initialise
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context // [out]
|
|
||||||
- )
|
|
||||||
-{
|
|
||||||
- Context->curlen = 0;
|
|
||||||
- Context->length = 0;
|
|
||||||
- Context->state[0] = 0x6A09E667UL;
|
|
||||||
- Context->state[1] = 0xBB67AE85UL;
|
|
||||||
- Context->state[2] = 0x3C6EF372UL;
|
|
||||||
- Context->state[3] = 0xA54FF53AUL;
|
|
||||||
- Context->state[4] = 0x510E527FUL;
|
|
||||||
- Context->state[5] = 0x9B05688CUL;
|
|
||||||
- Context->state[6] = 0x1F83D9ABUL;
|
|
||||||
- Context->state[7] = 0x5BE0CD19UL;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Update
|
|
||||||
-//
|
|
||||||
-// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on
|
|
||||||
-// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Update
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context, // [in out]
|
|
||||||
- void const* Buffer, // [in]
|
|
||||||
- uint32_t BufferSize // [in]
|
|
||||||
- )
|
|
||||||
-{
|
|
||||||
- uint32_t n;
|
|
||||||
-
|
|
||||||
- if( Context->curlen > sizeof(Context->buf) )
|
|
||||||
- {
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- while( BufferSize > 0 )
|
|
||||||
- {
|
|
||||||
- if( Context->curlen == 0 && BufferSize >= BLOCK_SIZE )
|
|
||||||
- {
|
|
||||||
- TransformFunction( Context, (uint8_t*)Buffer );
|
|
||||||
- Context->length += BLOCK_SIZE * 8;
|
|
||||||
- Buffer = (uint8_t*)Buffer + BLOCK_SIZE;
|
|
||||||
- BufferSize -= BLOCK_SIZE;
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- n = MIN( BufferSize, (BLOCK_SIZE - Context->curlen) );
|
|
||||||
- memcpy( Context->buf + Context->curlen, Buffer, (size_t)n );
|
|
||||||
- Context->curlen += n;
|
|
||||||
- Buffer = (uint8_t*)Buffer + n;
|
|
||||||
- BufferSize -= n;
|
|
||||||
- if( Context->curlen == BLOCK_SIZE )
|
|
||||||
- {
|
|
||||||
- TransformFunction( Context, Context->buf );
|
|
||||||
- Context->length += 8*BLOCK_SIZE;
|
|
||||||
- Context->curlen = 0;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Finalise
|
|
||||||
-//
|
|
||||||
-// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After
|
|
||||||
-// calling this, Sha256Initialised must be used to reuse the context.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Finalise
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context, // [in out]
|
|
||||||
- SHA256_HASH* Digest // [out]
|
|
||||||
- )
|
|
||||||
-{
|
|
||||||
- int i;
|
|
||||||
-
|
|
||||||
- if( Context->curlen >= sizeof(Context->buf) )
|
|
||||||
- {
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Increase the length of the message
|
|
||||||
- Context->length += Context->curlen * 8;
|
|
||||||
-
|
|
||||||
- // Append the '1' bit
|
|
||||||
- Context->buf[Context->curlen++] = (uint8_t)0x80;
|
|
||||||
-
|
|
||||||
- // if the length is currently above 56 bytes we append zeros
|
|
||||||
- // then compress. Then we can fall back to padding zeros and length
|
|
||||||
- // encoding like normal.
|
|
||||||
- if( Context->curlen > 56 )
|
|
||||||
- {
|
|
||||||
- while( Context->curlen < 64 )
|
|
||||||
- {
|
|
||||||
- Context->buf[Context->curlen++] = (uint8_t)0;
|
|
||||||
- }
|
|
||||||
- TransformFunction(Context, Context->buf);
|
|
||||||
- Context->curlen = 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Pad up to 56 bytes of zeroes
|
|
||||||
- while( Context->curlen < 56 )
|
|
||||||
- {
|
|
||||||
- Context->buf[Context->curlen++] = (uint8_t)0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // Store length
|
|
||||||
- STORE64H( Context->length, Context->buf+56 );
|
|
||||||
- TransformFunction( Context, Context->buf );
|
|
||||||
-
|
|
||||||
- // Copy output
|
|
||||||
- for( i=0; i<8; i++ )
|
|
||||||
- {
|
|
||||||
- STORE32H( Context->state[i], Digest->bytes+(4*i) );
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Calculate
|
|
||||||
-//
|
|
||||||
-// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the
|
|
||||||
-// buffer.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Calculate
|
|
||||||
- (
|
|
||||||
- void const* Buffer, // [in]
|
|
||||||
- uint32_t BufferSize, // [in]
|
|
||||||
- SHA256_HASH* Digest // [in]
|
|
||||||
- )
|
|
||||||
-{
|
|
||||||
- Sha256Context context;
|
|
||||||
-
|
|
||||||
- Sha256Initialise( &context );
|
|
||||||
- Sha256Update( &context, Buffer, BufferSize );
|
|
||||||
- Sha256Finalise( &context, Digest );
|
|
||||||
-}
|
|
||||||
diff --git a/policycoreutils/semodule/sha256.h b/policycoreutils/semodule/sha256.h
|
|
||||||
deleted file mode 100644
|
|
||||||
index 406ed869cd82..000000000000
|
|
||||||
--- a/policycoreutils/semodule/sha256.h
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,89 +0,0 @@
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// WjCryptLib_Sha256
|
|
||||||
-//
|
|
||||||
-// Implementation of SHA256 hash function.
|
|
||||||
-// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org
|
|
||||||
-// Modified by WaterJuice retaining Public Domain license.
|
|
||||||
-//
|
|
||||||
-// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-#pragma once
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// IMPORTS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-#include <stdint.h>
|
|
||||||
-#include <stdio.h>
|
|
||||||
-
|
|
||||||
-typedef struct
|
|
||||||
-{
|
|
||||||
- uint64_t length;
|
|
||||||
- uint32_t state[8];
|
|
||||||
- uint32_t curlen;
|
|
||||||
- uint8_t buf[64];
|
|
||||||
-} Sha256Context;
|
|
||||||
-
|
|
||||||
-#define SHA256_HASH_SIZE ( 256 / 8 )
|
|
||||||
-
|
|
||||||
-typedef struct
|
|
||||||
-{
|
|
||||||
- uint8_t bytes [SHA256_HASH_SIZE];
|
|
||||||
-} SHA256_HASH;
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// PUBLIC FUNCTIONS
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Initialise
|
|
||||||
-//
|
|
||||||
-// Initialises a SHA256 Context. Use this to initialise/reset a context.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Initialise
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context // [out]
|
|
||||||
- );
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Update
|
|
||||||
-//
|
|
||||||
-// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on
|
|
||||||
-// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Update
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context, // [in out]
|
|
||||||
- void const* Buffer, // [in]
|
|
||||||
- uint32_t BufferSize // [in]
|
|
||||||
- );
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Finalise
|
|
||||||
-//
|
|
||||||
-// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After
|
|
||||||
-// calling this, Sha256Initialised must be used to reuse the context.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Finalise
|
|
||||||
- (
|
|
||||||
- Sha256Context* Context, // [in out]
|
|
||||||
- SHA256_HASH* Digest // [out]
|
|
||||||
- );
|
|
||||||
-
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Sha256Calculate
|
|
||||||
-//
|
|
||||||
-// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the
|
|
||||||
-// buffer.
|
|
||||||
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-void
|
|
||||||
- Sha256Calculate
|
|
||||||
- (
|
|
||||||
- void const* Buffer, // [in]
|
|
||||||
- uint32_t BufferSize, // [in]
|
|
||||||
- SHA256_HASH* Digest // [in]
|
|
||||||
- );
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
@ -1,144 +0,0 @@
|
|||||||
From 9341da3478625bb2ba2e7d4f3e227735cc9c8198 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
Date: Thu, 3 Feb 2022 17:53:27 +0100
|
|
||||||
Subject: [PATCH] semodule: add command-line option to detect module changes
|
|
||||||
|
|
||||||
Add a new command-line option "--rebuild-if-modules-changed" to control
|
|
||||||
the newly introduced check_ext_changes libsemanage flag.
|
|
||||||
|
|
||||||
For example, running `semodule --rebuild-if-modules-changed` will ensure
|
|
||||||
that any externally added/removed modules (e.g. by an RPM transaction)
|
|
||||||
are reflected in the compiled policy, while skipping the most expensive
|
|
||||||
part of the rebuild if no module change was deteceted since the last
|
|
||||||
libsemanage transaction.
|
|
||||||
|
|
||||||
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
|
|
||||||
---
|
|
||||||
policycoreutils/semodule/semodule.8 | 7 +++++++
|
|
||||||
policycoreutils/semodule/semodule.c | 32 ++++++++++++++++++++++-------
|
|
||||||
2 files changed, 32 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.8 b/policycoreutils/semodule/semodule.8
|
|
||||||
index 3a2fb21c2481..d1735d216276 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.8
|
|
||||||
+++ b/policycoreutils/semodule/semodule.8
|
|
||||||
@@ -23,6 +23,13 @@ force a reload of policy
|
|
||||||
.B \-B, \-\-build
|
|
||||||
force a rebuild of policy (also reloads unless \-n is used)
|
|
||||||
.TP
|
|
||||||
+.B \-\-rebuild-if-modules-changed
|
|
||||||
+Force a rebuild of the policy if any changes to module content are detected
|
|
||||||
+(by comparing with checksum from the last transaction). One can use this
|
|
||||||
+instead of \-B to ensure that any changes to the module store done by an
|
|
||||||
+external tool (e.g. a package manager) are applied, while automatically
|
|
||||||
+skipping the rebuild if there are no new changes.
|
|
||||||
+.TP
|
|
||||||
.B \-D, \-\-disable_dontaudit
|
|
||||||
Temporarily remove dontaudits from policy. Reverts whenever policy is rebuilt
|
|
||||||
.TP
|
|
||||||
diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
|
|
||||||
index f4a76289efa3..1ed8e69054e0 100644
|
|
||||||
--- a/policycoreutils/semodule/semodule.c
|
|
||||||
+++ b/policycoreutils/semodule/semodule.c
|
|
||||||
@@ -47,6 +47,7 @@ static int verbose;
|
|
||||||
static int reload;
|
|
||||||
static int no_reload;
|
|
||||||
static int build;
|
|
||||||
+static int check_ext_changes;
|
|
||||||
static int disable_dontaudit;
|
|
||||||
static int preserve_tunables;
|
|
||||||
static int ignore_module_cache;
|
|
||||||
@@ -149,6 +150,9 @@ static void usage(char *progname)
|
|
||||||
printf(" -c, --cil extract module as cil. This only affects module extraction.\n");
|
|
||||||
printf(" -H, --hll extract module as hll. This only affects module extraction.\n");
|
|
||||||
printf(" -m, --checksum print module checksum (SHA256).\n");
|
|
||||||
+ printf(" --rebuild-if-modules-changed\n"
|
|
||||||
+ " force policy rebuild if module content changed since\n"
|
|
||||||
+ " last rebuild (based on checksum)\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sets the global mode variable to new_mode, but only if no other
|
|
||||||
@@ -180,6 +184,7 @@ static void set_mode(enum client_modes new_mode, char *arg)
|
|
||||||
static void parse_command_line(int argc, char **argv)
|
|
||||||
{
|
|
||||||
static struct option opts[] = {
|
|
||||||
+ {"rebuild-if-modules-changed", 0, NULL, '\0'},
|
|
||||||
{"store", required_argument, NULL, 's'},
|
|
||||||
{"base", required_argument, NULL, 'b'},
|
|
||||||
{"help", 0, NULL, 'h'},
|
|
||||||
@@ -207,15 +212,26 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
};
|
|
||||||
int extract_selected = 0;
|
|
||||||
int cil_hll_set = 0;
|
|
||||||
- int i;
|
|
||||||
+ int i, longind;
|
|
||||||
verbose = 0;
|
|
||||||
reload = 0;
|
|
||||||
no_reload = 0;
|
|
||||||
+ check_ext_changes = 0;
|
|
||||||
priority = 400;
|
|
||||||
while ((i =
|
|
||||||
- getopt_long(argc, argv, "s:b:hi:l::vr:u:RnNBDCPX:e:d:p:S:E:cHm", opts,
|
|
||||||
- NULL)) != -1) {
|
|
||||||
+ getopt_long(argc, argv, "s:b:hi:l::vr:u:RnNBDCPX:e:d:p:S:E:cHm",
|
|
||||||
+ opts, &longind)) != -1) {
|
|
||||||
switch (i) {
|
|
||||||
+ case '\0':
|
|
||||||
+ switch(longind) {
|
|
||||||
+ case 0: /* --rebuild-if-modules-changed */
|
|
||||||
+ check_ext_changes = 1;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ usage(argv[0]);
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
case 'b':
|
|
||||||
fprintf(stderr, "The --base option is deprecated. Use --install instead.\n");
|
|
||||||
set_mode(INSTALL_M, optarg);
|
|
||||||
@@ -300,13 +316,13 @@ static void parse_command_line(int argc, char **argv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- if ((build || reload) && num_commands) {
|
|
||||||
+ if ((build || reload || check_ext_changes) && num_commands) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"build or reload should not be used with other commands\n");
|
|
||||||
usage(argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
- if (num_commands == 0 && reload == 0 && build == 0) {
|
|
||||||
+ if (num_commands == 0 && reload == 0 && build == 0 && check_ext_changes == 0) {
|
|
||||||
fprintf(stderr, "At least one mode must be specified.\n");
|
|
||||||
usage(argv[0]);
|
|
||||||
exit(1);
|
|
||||||
@@ -395,7 +411,7 @@ int main(int argc, char *argv[])
|
|
||||||
|
|
||||||
cil_set_log_level(CIL_ERR + verbose);
|
|
||||||
|
|
||||||
- if (build)
|
|
||||||
+ if (build || check_ext_changes)
|
|
||||||
commit = 1;
|
|
||||||
|
|
||||||
sh = semanage_handle_create();
|
|
||||||
@@ -434,7 +450,7 @@ int main(int argc, char *argv[])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (build) {
|
|
||||||
+ if (build || check_ext_changes) {
|
|
||||||
if ((result = semanage_begin_transaction(sh)) < 0) {
|
|
||||||
fprintf(stderr, "%s: Could not begin transaction: %s\n",
|
|
||||||
argv[0], errno ? strerror(errno) : "");
|
|
||||||
@@ -807,6 +823,8 @@ cleanup_disable:
|
|
||||||
semanage_set_reload(sh, 0);
|
|
||||||
if (build)
|
|
||||||
semanage_set_rebuild(sh, 1);
|
|
||||||
+ if (check_ext_changes)
|
|
||||||
+ semanage_set_check_ext_changes(sh, 1);
|
|
||||||
if (disable_dontaudit)
|
|
||||||
semanage_set_disable_dontaudit(sh, 1);
|
|
||||||
else if (build)
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
@ -1,180 +0,0 @@
|
|||||||
From 09f700e9f953769d1697c46179faba32e4b80c0f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
Date: Fri, 4 Feb 2022 13:41:12 +0100
|
|
||||||
Subject: [PATCH] policycoreutils/fixfiles: Use parallel relabeling
|
|
||||||
|
|
||||||
Commit 93902fc8340f ("setfiles/restorecon: support parallel relabeling")
|
|
||||||
implemented support for parallel relabeling in setfiles. This is
|
|
||||||
available for fixfiles now.
|
|
||||||
|
|
||||||
Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
|
|
||||||
---
|
|
||||||
policycoreutils/scripts/fixfiles | 35 +++++++++++++++++-------------
|
|
||||||
policycoreutils/scripts/fixfiles.8 | 17 ++++++++++-----
|
|
||||||
2 files changed, 31 insertions(+), 21 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/scripts/fixfiles b/policycoreutils/scripts/fixfiles
|
|
||||||
index cb20002ab613..a4a419ab62de 100755
|
|
||||||
--- a/policycoreutils/scripts/fixfiles
|
|
||||||
+++ b/policycoreutils/scripts/fixfiles
|
|
||||||
@@ -110,6 +110,7 @@ BOOTTIME=""
|
|
||||||
VERBOSE="-p"
|
|
||||||
[ -t 1 ] || VERBOSE=""
|
|
||||||
FORCEFLAG=""
|
|
||||||
+THREADS=""
|
|
||||||
RPMFILES=""
|
|
||||||
PREFC=""
|
|
||||||
RESTORE_MODE=""
|
|
||||||
@@ -153,7 +154,7 @@ newer() {
|
|
||||||
shift
|
|
||||||
LogReadOnly
|
|
||||||
for m in `echo $FILESYSTEMSRW`; do
|
|
||||||
- find $m -mount -newermt $DATE -print0 2>/dev/null | ${RESTORECON} ${FORCEFLAG} ${VERBOSE} $* -i -0 -f -
|
|
||||||
+ find $m -mount -newermt $DATE -print0 2>/dev/null | ${RESTORECON} ${FORCEFLAG} ${VERBOSE} ${THREADS} $* -i -0 -f -
|
|
||||||
done;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -197,7 +198,7 @@ if [ -f ${PREFC} -a -x /usr/bin/diff ]; then
|
|
||||||
esac; \
|
|
||||||
fi; \
|
|
||||||
done | \
|
|
||||||
- ${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -i -R -f -; \
|
|
||||||
+ ${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} ${THREADS} $* -i -R -f -; \
|
|
||||||
rm -f ${TEMPFILE} ${PREFCTEMPFILE}
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
@@ -235,11 +236,11 @@ LogExcluded
|
|
||||||
case "$RESTORE_MODE" in
|
|
||||||
RPMFILES)
|
|
||||||
for i in `echo "$RPMFILES" | sed 's/,/ /g'`; do
|
|
||||||
- rpmlist $i | ${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -i -R -f -
|
|
||||||
+ rpmlist $i | ${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} ${THREADS} $* -i -R -f -
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
FILEPATH)
|
|
||||||
- ${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -R -- "$FILEPATH"
|
|
||||||
+ ${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} ${THREADS} $* -R -- "$FILEPATH"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [ -n "${FILESYSTEMSRW}" ]; then
|
|
||||||
@@ -247,7 +248,7 @@ case "$RESTORE_MODE" in
|
|
||||||
echo "${OPTION}ing `echo ${FILESYSTEMSRW}`"
|
|
||||||
|
|
||||||
if [ -z "$BIND_MOUNT_FILESYSTEMS" ]; then
|
|
||||||
- ${SETFILES} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -q ${FC} ${FILESYSTEMSRW}
|
|
||||||
+ ${SETFILES} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -q ${THREADS} ${FC} ${FILESYSTEMSRW}
|
|
||||||
else
|
|
||||||
# we bind mount so we can fix the labels of files that have already been
|
|
||||||
# mounted over
|
|
||||||
@@ -257,7 +258,7 @@ case "$RESTORE_MODE" in
|
|
||||||
|
|
||||||
mkdir -p "${TMP_MOUNT}${m}" || exit 1
|
|
||||||
mount --bind "${m}" "${TMP_MOUNT}${m}" || exit 1
|
|
||||||
- ${SETFILES} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -q ${FC} -r "${TMP_MOUNT}" "${TMP_MOUNT}${m}"
|
|
||||||
+ ${SETFILES} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} ${THREADS} $* -q ${FC} -r "${TMP_MOUNT}" "${TMP_MOUNT}${m}"
|
|
||||||
umount "${TMP_MOUNT}${m}" || exit 1
|
|
||||||
rm -rf "${TMP_MOUNT}" || echo "Error cleaning up."
|
|
||||||
done;
|
|
||||||
@@ -330,8 +331,9 @@ case "$1" in
|
|
||||||
fi
|
|
||||||
> /.autorelabel || exit $?
|
|
||||||
[ -z "$FORCEFLAG" ] || echo -n "$FORCEFLAG " >> /.autorelabel
|
|
||||||
- [ -z "$BOOTTIME" ] || echo -N $BOOTTIME >> /.autorelabel
|
|
||||||
- [ -z "$BIND_MOUNT_FILESYSTEMS" ] || echo "-M" >> /.autorelabel
|
|
||||||
+ [ -z "$BOOTTIME" ] || echo -n "-N $BOOTTIME " >> /.autorelabel
|
|
||||||
+ [ -z "$BIND_MOUNT_FILESYSTEMS" ] || echo -n "-M " >> /.autorelabel
|
|
||||||
+ [ -z "$THREADS" ] || echo -n "$THREADS " >> /.autorelabel
|
|
||||||
# Force full relabel if SELinux is not enabled
|
|
||||||
selinuxenabled || echo -F > /.autorelabel
|
|
||||||
echo "System will relabel on next boot"
|
|
||||||
@@ -343,17 +345,17 @@ esac
|
|
||||||
}
|
|
||||||
usage() {
|
|
||||||
echo $"""
|
|
||||||
-Usage: $0 [-v] [-F] [-M] [-f] relabel
|
|
||||||
+Usage: $0 [-v] [-F] [-M] [-f] [-T nthreads] relabel
|
|
||||||
or
|
|
||||||
-Usage: $0 [-v] [-F] [-B | -N time ] { check | restore | verify }
|
|
||||||
+Usage: $0 [-v] [-F] [-B | -N time ] [-T nthreads] { check | restore | verify }
|
|
||||||
or
|
|
||||||
-Usage: $0 [-v] [-F] { check | restore | verify } dir/file ...
|
|
||||||
+Usage: $0 [-v] [-F] [-T nthreads] { check | restore | verify } dir/file ...
|
|
||||||
or
|
|
||||||
-Usage: $0 [-v] [-F] -R rpmpackage[,rpmpackage...] { check | restore | verify }
|
|
||||||
+Usage: $0 [-v] [-F] [-T nthreads] -R rpmpackage[,rpmpackage...] { check | restore | verify }
|
|
||||||
or
|
|
||||||
-Usage: $0 [-v] [-F] -C PREVIOUS_FILECONTEXT { check | restore | verify }
|
|
||||||
+Usage: $0 [-v] [-F] [-T nthreads] -C PREVIOUS_FILECONTEXT { check | restore | verify }
|
|
||||||
or
|
|
||||||
-Usage: $0 [-F] [-M] [-B] onboot
|
|
||||||
+Usage: $0 [-F] [-M] [-B] [-T nthreads] onboot
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -372,7 +374,7 @@ set_restore_mode() {
|
|
||||||
}
|
|
||||||
|
|
||||||
# See how we were called.
|
|
||||||
-while getopts "N:BC:FfR:l:vM" i; do
|
|
||||||
+while getopts "N:BC:FfR:l:vMT:" i; do
|
|
||||||
case "$i" in
|
|
||||||
B)
|
|
||||||
BOOTTIME=`/bin/who -b | awk '{print $3}'`
|
|
||||||
@@ -407,6 +409,9 @@ while getopts "N:BC:FfR:l:vM" i; do
|
|
||||||
f)
|
|
||||||
fullFlag=1
|
|
||||||
;;
|
|
||||||
+ T)
|
|
||||||
+ THREADS="-T $OPTARG"
|
|
||||||
+ ;;
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
diff --git a/policycoreutils/scripts/fixfiles.8 b/policycoreutils/scripts/fixfiles.8
|
|
||||||
index c4e894e56e8f..9a317d9181e2 100644
|
|
||||||
--- a/policycoreutils/scripts/fixfiles.8
|
|
||||||
+++ b/policycoreutils/scripts/fixfiles.8
|
|
||||||
@@ -6,22 +6,22 @@ fixfiles \- fix file SELinux security contexts.
|
|
||||||
.na
|
|
||||||
|
|
||||||
.B fixfiles
|
|
||||||
-.I [\-v] [\-F] [-M] [\-f] relabel
|
|
||||||
+.I [\-v] [\-F] [-M] [\-f] [\-T nthreads] relabel
|
|
||||||
|
|
||||||
.B fixfiles
|
|
||||||
-.I [\-v] [\-F] { check | restore | verify } dir/file ...
|
|
||||||
+.I [\-v] [\-F] [\-T nthreads] { check | restore | verify } dir/file ...
|
|
||||||
|
|
||||||
.B fixfiles
|
|
||||||
-.I [\-v] [\-F] [\-B | \-N time ] { check | restore | verify }
|
|
||||||
+.I [\-v] [\-F] [\-B | \-N time ] [\-T nthreads] { check | restore | verify }
|
|
||||||
|
|
||||||
.B fixfiles
|
|
||||||
-.I [\-v] [\-F] \-R rpmpackagename[,rpmpackagename...] { check | restore | verify }
|
|
||||||
+.I [\-v] [\-F] [\-T nthreads] \-R rpmpackagename[,rpmpackagename...] { check | restore | verify }
|
|
||||||
|
|
||||||
.B fixfiles
|
|
||||||
-.I [\-v] [\-F] \-C PREVIOUS_FILECONTEXT { check | restore | verify }
|
|
||||||
+.I [\-v] [\-F] [\-T nthreads] \-C PREVIOUS_FILECONTEXT { check | restore | verify }
|
|
||||||
|
|
||||||
.B fixfiles
|
|
||||||
-.I [-F] [-M] [-B] onboot
|
|
||||||
+.I [-F] [-M] [-B] [\-T nthreads] onboot
|
|
||||||
|
|
||||||
.ad
|
|
||||||
|
|
||||||
@@ -76,6 +76,11 @@ Bind mount filesystems before relabeling them, this allows fixing the context of
|
|
||||||
.B -v
|
|
||||||
Modify verbosity from progress to verbose. (Run restorecon with \-v instead of \-p)
|
|
||||||
|
|
||||||
+.TP
|
|
||||||
+.B \-T nthreads
|
|
||||||
+Use parallel relabeling, see
|
|
||||||
+.B setfiles(8)
|
|
||||||
+
|
|
||||||
.SH "ARGUMENTS"
|
|
||||||
One of:
|
|
||||||
.TP
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From d83caa39d7ff497bddabb54619a8985227ad1264 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vit Mojzis <vmojzis@redhat.com>
|
|
||||||
Date: Mon, 10 Jan 2022 18:35:27 +0100
|
|
||||||
Subject: [PATCH] policycoreutils: Improve error message when selabel_open
|
|
||||||
fails
|
|
||||||
|
|
||||||
When selabel_open fails to locate file_context files and
|
|
||||||
selabel_opt_path is not specified (e.g. when the policy type is
|
|
||||||
missconfigured in /etc/selinux/config), perror only prints
|
|
||||||
"No such file or directory".
|
|
||||||
This can be confusing in case of "restorecon" since it's
|
|
||||||
not apparent that the issue is in policy store.
|
|
||||||
|
|
||||||
Before:
|
|
||||||
\# restorecon -v /tmp/foo.txt
|
|
||||||
No such file or directory
|
|
||||||
After:
|
|
||||||
\# restorecon -v /tmp/foo.txt
|
|
||||||
/etc/selinux/yolo/contexts/files/file_contexts: No such file or directory
|
|
||||||
|
|
||||||
Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
|
|
||||||
---
|
|
||||||
policycoreutils/setfiles/restore.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c
|
|
||||||
index 74d48bb3752d..e9ae33ad039a 100644
|
|
||||||
--- a/policycoreutils/setfiles/restore.c
|
|
||||||
+++ b/policycoreutils/setfiles/restore.c
|
|
||||||
@@ -29,7 +29,7 @@ void restore_init(struct restore_opts *opts)
|
|
||||||
|
|
||||||
opts->hnd = selabel_open(SELABEL_CTX_FILE, selinux_opts, 3);
|
|
||||||
if (!opts->hnd) {
|
|
||||||
- perror(opts->selabel_opt_path);
|
|
||||||
+ perror(opts->selabel_opt_path ? opts->selabel_opt_path : selinux_file_context_path());
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
@ -51,9 +51,15 @@ relabel_selinux() {
|
|||||||
echo $"*** Relabeling could take a very long time, depending on file"
|
echo $"*** Relabeling could take a very long time, depending on file"
|
||||||
echo $"*** system size and speed of hard drives."
|
echo $"*** system size and speed of hard drives."
|
||||||
|
|
||||||
FORCE=`cat /.autorelabel`
|
OPTS=`cat /.autorelabel`
|
||||||
|
# by default, use as many threads as there are available
|
||||||
|
# another -T X in $OPTS will override the default value
|
||||||
|
OPTS="-T 0 $OPTS"
|
||||||
|
|
||||||
[ -x "/usr/sbin/quotaoff" ] && /usr/sbin/quotaoff -aug
|
[ -x "/usr/sbin/quotaoff" ] && /usr/sbin/quotaoff -aug
|
||||||
/sbin/fixfiles $FORCE restore
|
echo
|
||||||
|
echo $"Running: /sbin/fixfiles $OPTS restore"
|
||||||
|
/sbin/fixfiles $OPTS restore
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f /.autorelabel
|
rm -f /.autorelabel
|
||||||
@ -63,7 +69,7 @@ relabel_selinux() {
|
|||||||
grub2-editenv - incr boot_indeterminate >/dev/null 2>&1
|
grub2-editenv - incr boot_indeterminate >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
sync
|
sync
|
||||||
systemctl --force reboot
|
systemctl reboot
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check to see if a full relabel is needed
|
# Check to see if a full relabel is needed
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
%global libauditver 3.0
|
%global libauditver 3.0
|
||||||
%global libsepolver 3.3-1
|
%global libsepolver 3.4-1
|
||||||
%global libsemanagever 3.3-2
|
%global libsemanagever 3.4-1
|
||||||
%global libselinuxver 3.3-2
|
%global libselinuxver 3.4-1
|
||||||
|
|
||||||
%global generatorsdir %{_prefix}/lib/systemd/system-generators
|
%global generatorsdir %{_prefix}/lib/systemd/system-generators
|
||||||
|
|
||||||
@ -10,11 +10,11 @@
|
|||||||
|
|
||||||
Summary: SELinux policy core utilities
|
Summary: SELinux policy core utilities
|
||||||
Name: policycoreutils
|
Name: policycoreutils
|
||||||
Version: 3.3
|
Version: 3.4
|
||||||
Release: 6%{?dist}
|
Release: 3%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
# https://github.com/SELinuxProject/selinux/wiki/Releases
|
# https://github.com/SELinuxProject/selinux/wiki/Releases
|
||||||
Source0: https://github.com/SELinuxProject/selinux/releases/download/3.3/selinux-3.3.tar.gz
|
Source0: https://github.com/SELinuxProject/selinux/releases/download/3.4/selinux-3.4.tar.gz
|
||||||
URL: https://github.com/SELinuxProject/selinux
|
URL: https://github.com/SELinuxProject/selinux
|
||||||
Source13: system-config-selinux.png
|
Source13: system-config-selinux.png
|
||||||
Source14: sepolicy-icons.tgz
|
Source14: sepolicy-icons.tgz
|
||||||
@ -28,7 +28,7 @@ Source21: python-po.tgz
|
|||||||
Source22: gui-po.tgz
|
Source22: gui-po.tgz
|
||||||
Source23: sandbox-po.tgz
|
Source23: sandbox-po.tgz
|
||||||
# https://github.com/fedora-selinux/selinux
|
# https://github.com/fedora-selinux/selinux
|
||||||
# $ git format-patch -N 3.3 -- policycoreutils python gui sandbox dbus semodule-utils restorecond
|
# $ git format-patch -N 3.4 -- policycoreutils python gui sandbox dbus semodule-utils restorecond
|
||||||
# $ for j in [0-9]*.patch; do printf "Patch%s: %s\n" ${j/-*/} $j; done
|
# $ for j in [0-9]*.patch; do printf "Patch%s: %s\n" ${j/-*/} $j; done
|
||||||
# Patch list start
|
# Patch list start
|
||||||
Patch0001: 0001-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch
|
Patch0001: 0001-sandbox-add-reset-to-Xephyr-as-it-works-better-with-.patch
|
||||||
@ -38,27 +38,14 @@ Patch0004: 0004-Simplication-of-sepolicy-manpage-web-functionality.-.patch
|
|||||||
Patch0005: 0005-We-want-to-remove-the-trailing-newline-for-etc-syste.patch
|
Patch0005: 0005-We-want-to-remove-the-trailing-newline-for-etc-syste.patch
|
||||||
Patch0006: 0006-Fix-title-in-manpage.py-to-not-contain-online.patch
|
Patch0006: 0006-Fix-title-in-manpage.py-to-not-contain-online.patch
|
||||||
Patch0007: 0007-Don-t-be-verbose-if-you-are-not-on-a-tty.patch
|
Patch0007: 0007-Don-t-be-verbose-if-you-are-not-on-a-tty.patch
|
||||||
Patch0008: 0008-sepolicy-Drop-old-interface-file_type_is_executable-.patch
|
Patch0008: 0008-sepolicy-generate-Handle-more-reserved-port-types.patch
|
||||||
Patch0009: 0009-sepolicy-Another-small-optimization-for-mcs-types.patch
|
Patch0009: 0009-sandbox-Use-matchbox-window-manager-instead-of-openb.patch
|
||||||
Patch0010: 0010-Move-po-translation-files-into-the-right-sub-directo.patch
|
Patch0010: 0010-Use-SHA-2-instead-of-SHA-1.patch
|
||||||
Patch0011: 0011-Use-correct-gettext-domains-in-python-gui-sandbox.patch
|
Patch0011: 0011-sepolicy-Drop-old-interface-file_type_is_executable-.patch
|
||||||
Patch0012: 0012-Initial-.pot-files-for-gui-python-sandbox.patch
|
Patch0012: 0012-gettext-handle-unsupported-languages-properly.patch
|
||||||
Patch0013: 0013-policycoreutils-setfiles-Improve-description-of-d-sw.patch
|
Patch0013: 0013-semodule-rename-rebuild-if-modules-changed-to-refres.patch
|
||||||
Patch0014: 0014-sepolicy-generate-Handle-more-reserved-port-types.patch
|
Patch0014: 0014-python-Split-semanage-import-into-two-transactions.patch
|
||||||
Patch0015: 0015-semodule-utils-Fix-RESOURCE_LEAK-coverity-scan-defec.patch
|
|
||||||
Patch0016: 0016-sandbox-Use-matchbox-window-manager-instead-of-openb.patch
|
|
||||||
Patch0017: 0017-sepolicy-Fix-flake8-warnings-in-Fedora-only-code.patch
|
|
||||||
Patch0018: 0018-Use-SHA-2-instead-of-SHA-1.patch
|
|
||||||
Patch0019: 0019-setfiles-restorecon-support-parallel-relabeling.patch
|
|
||||||
Patch0020: 0020-semodule-add-m-checksum-option.patch
|
|
||||||
Patch0021: 0021-semodule-Fix-lang_ext-column-index.patch
|
|
||||||
Patch0022: 0022-semodule-Don-t-forget-to-munmap-data.patch
|
|
||||||
Patch0023: 0023-semodule-libsemanage-move-module-hashing-into-libsem.patch
|
|
||||||
Patch0024: 0024-semodule-add-command-line-option-to-detect-module-ch.patch
|
|
||||||
Patch0025: 0025-policycoreutils-fixfiles-Use-parallel-relabeling.patch
|
|
||||||
Patch0026: 0026-policycoreutils-Improve-error-message-when-selabel_o.patch
|
|
||||||
# Patch list end
|
# Patch list end
|
||||||
|
|
||||||
Obsoletes: policycoreutils < 2.0.61-2
|
Obsoletes: policycoreutils < 2.0.61-2
|
||||||
Conflicts: filesystem < 3, selinux-policy-base < 3.13.1-138
|
Conflicts: filesystem < 3, selinux-policy-base < 3.13.1-138
|
||||||
# initscripts < 9.66 shipped fedora-autorelabel services which are renamed to selinux-relabel
|
# initscripts < 9.66 shipped fedora-autorelabel services which are renamed to selinux-relabel
|
||||||
@ -483,8 +470,18 @@ The policycoreutils-restorecond package contains the restorecond service.
|
|||||||
%systemd_postun_with_restart restorecond.service
|
%systemd_postun_with_restart restorecond.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Fri Mar 04 2022 Vit Mojzis <vmojzis@redhat.com> - 3.3-6
|
* Mon Aug 8 2022 Petr Lautrbach <plautrba@redhat.com> - 3.4-3
|
||||||
- Update translations (#2017376)
|
- Run autorelabel in parallel by default
|
||||||
|
https://fedoraproject.org/wiki/Changes/SELinux_Parallel_Autorelabel
|
||||||
|
|
||||||
|
* Mon Jul 18 2022 Petr Lautrbach <plautrba@redhat.com> - 3.4-2
|
||||||
|
- gettext: handle unsupported languages properly (#2100378)
|
||||||
|
- semodule: rename --rebuild-if-modules-changed to --refresh
|
||||||
|
- python: Split "semanage import" into two transactions (#2063353)
|
||||||
|
- selinux-autorelabel: Do not force reboot (#2093133)
|
||||||
|
|
||||||
|
* Thu May 19 2022 Petr Lautrbach <plautrba@redhat.com> - 3.4-1
|
||||||
|
- SELinux userspace 3.4 release
|
||||||
|
|
||||||
* Tue Feb 15 2022 Petr Lautrbach <plautrba@redhat.com> - 3.3-4.2
|
* Tue Feb 15 2022 Petr Lautrbach <plautrba@redhat.com> - 3.3-4.2
|
||||||
- semodule: add command-line option to detect module changes
|
- semodule: add command-line option to detect module changes
|
||||||
|
Loading…
Reference in New Issue
Block a user