| From 8610efc1610a4e9d4cbfa19ed4a519a6425aee70 Mon Sep 17 00:00:00 2001 |
| From: "Yann E. MORIN" <yann.morin.1998@free.fr> |
| Date: Tue, 9 May 2023 22:28:36 +0200 |
| Subject: [PATCH] python?sepolgen: fix ausearch path |
| |
| ausearch is not always isntalled in /sbin; some systems install it in |
| /usr/sbin, or it can also be locally installed in /usr/local/sbin. |
| |
| The python doc [0] suggests using shutil.which() to find the path where |
| a command is. which() returns None if the command is not found. If |
| ausearch is not found, that would result in an exception being raised by |
| Popen(): |
| TypeError: expected str, bytes or os.PathLike object, not NoneType |
| |
| This is not very informative of what actually failed... |
| |
| However, the doc suggests so for portability. In our case, the python |
| tools are only ever going to run on a Linux host (by their virtue of |
| dealing with SELinux), so the search will be reliably done by looking in |
| PATH, so we can let Popen() bubble the resolving of an unqualified |
| command, down to execvpe() (or the similar actual syscall of the exec*() |
| familly). If ausearch is then not found, Popen() raises an exception |
| that is wy more informative then: |
| FileNotFoundError: [Errno 2] No such file or directory: 'ausearch' |
| |
| [0] https://docs.python.org/3/library/subprocess.html#subprocess.Popen |
| |
| Signed-off-by: Adam Duskett <aduskett@gmail.com> |
| [yann.morin.1998@free.fr: |
| - let Popen() resolve from PATH |
| - rewrite commit log |
| ] |
| Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr> |
| Upstream: not submitted |
| --- |
| python/sepolgen/src/sepolgen/audit.py | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/python/sepolgen/src/sepolgen/audit.py b/python/sepolgen/src/sepolgen/audit.py |
| index 4adb851f..5eafa587 100644 |
| --- a/sepolgen/src/sepolgen/audit.py |
| +++ b/sepolgen/src/sepolgen/audit.py |
| @@ -41,7 +41,7 @@ def get_audit_boot_msgs(): |
| s = time.localtime(time.time() - off) |
| bootdate = time.strftime("%x", s) |
| boottime = time.strftime("%X", s) |
| - output = subprocess.Popen(["/sbin/ausearch", "-m", "AVC,USER_AVC,MAC_POLICY_LOAD,DAEMON_START,SELINUX_ERR", "-ts", bootdate, boottime], |
| + output = subprocess.Popen(["ausearch", "-m", "AVC,USER_AVC,MAC_POLICY_LOAD,DAEMON_START,SELINUX_ERR", "-ts", bootdate, boottime], |
| stdout=subprocess.PIPE).communicate()[0] |
| if util.PY3: |
| output = util.decode_input(output) |
| @@ -56,7 +56,7 @@ def get_audit_msgs(): |
| string contain all of the audit messages returned by ausearch. |
| """ |
| import subprocess |
| - output = subprocess.Popen(["/sbin/ausearch", "-m", "AVC,USER_AVC,MAC_POLICY_LOAD,DAEMON_START,SELINUX_ERR"], |
| + output = subprocess.Popen(["ausearch", "-m", "AVC,USER_AVC,MAC_POLICY_LOAD,DAEMON_START,SELINUX_ERR"], |
| stdout=subprocess.PIPE).communicate()[0] |
| if util.PY3: |
| output = util.decode_input(output) |
| -- |
| 2.25.1 |
| |