chantra / rpms / rpm

Forked from rpms/rpm 2 years ago
Clone
83a7c7
From 8cbe8baf9c3ff4754369bcd29441df14ecc6889d Mon Sep 17 00:00:00 2001
83a7c7
Message-Id: <8cbe8baf9c3ff4754369bcd29441df14ecc6889d.1554982512.git.pmatilai@redhat.com>
83a7c7
From: Panu Matilainen <pmatilai@redhat.com>
83a7c7
Date: Thu, 14 Feb 2019 13:12:49 +0200
83a7c7
Subject: [PATCH] Log RPMLOG_ERR level messages on actual errors in selinux
83a7c7
 plugin, doh.
83a7c7
83a7c7
When there's an actual error, people will want to know without having
83a7c7
to rerun in verbose mode. Such as in RhBug:1641631 where configured
83a7c7
selinux policy differs from what is installed - the former message
83a7c7
83a7c7
    error: Plugin selinux: hook tsm_pre failed
83a7c7
83a7c7
...is not particularly helpful to anybody, whereas this actually provides
83a7c7
some clues now:
83a7c7
83a7c7
    error: selabel_open: (/etc/selinux/ponies/contexts/files/file_contexts) No such file or directory
83a7c7
    error: Plugin selinux: hook tsm_pre failed
83a7c7
---
83a7c7
 plugins/selinux.c | 19 +++++++++----------
83a7c7
 1 file changed, 9 insertions(+), 10 deletions(-)
83a7c7
83a7c7
diff --git a/plugins/selinux.c b/plugins/selinux.c
83a7c7
index accd47416..f1caf257c 100644
83a7c7
--- a/plugins/selinux.c
83a7c7
+++ b/plugins/selinux.c
83a7c7
@@ -12,6 +12,11 @@
83a7c7
 
83a7c7
 static struct selabel_handle * sehandle = NULL;
83a7c7
 
83a7c7
+static inline rpmlogLvl loglvl(int iserror)
83a7c7
+{
83a7c7
+    return iserror ? RPMLOG_ERR : RPMLOG_DEBUG;
83a7c7
+}
83a7c7
+
83a7c7
 static void sehandle_fini(int close_status)
83a7c7
 {
83a7c7
     if (sehandle) {
83a7c7
@@ -47,7 +52,7 @@ static rpmRC sehandle_init(int open_status)
83a7c7
 
83a7c7
     sehandle = selabel_open(SELABEL_CTX_FILE, opts, 1);
83a7c7
 
83a7c7
-    rpmlog(RPMLOG_DEBUG, "selabel_open: (%s) %s\n",
83a7c7
+    rpmlog(loglvl(sehandle == NULL), "selabel_open: (%s) %s\n",
83a7c7
 	   path, (sehandle == NULL ? strerror(errno) : ""));
83a7c7
 
83a7c7
     return (sehandle != NULL) ? RPMRC_OK : RPMRC_FAIL;
83a7c7
@@ -125,10 +130,8 @@ static rpmRC selinux_scriptlet_fork_post(rpmPlugin plugin,
83a7c7
     if ((xx = setexeccon(newcon)) == 0)
83a7c7
 	rc = RPMRC_OK;
83a7c7
 
83a7c7
-    if (rpmIsDebug()) {
83a7c7
-	rpmlog(RPMLOG_DEBUG, "setexeccon: (%s, %s) %s\n",
83a7c7
+    rpmlog(loglvl(xx < 0), "setexeccon: (%s, %s) %s\n",
83a7c7
 	       path, newcon, (xx < 0 ? strerror(errno) : ""));
83a7c7
-    }
83a7c7
 
83a7c7
 exit:
83a7c7
     context_free(con);
83a7c7
@@ -143,10 +146,8 @@ exit:
83a7c7
     if ((xx = setexecfilecon(path, "rpm_script_t") == 0))
83a7c7
 	rc = RPMRC_OK;
83a7c7
 
83a7c7
-    if (rpmIsDebug()) {
83a7c7
-	rpmlog(RPMLOG_DEBUG, "setexecfilecon: (%s) %s\n",
83a7c7
+    rpmlog(loglvl(xx < 0), "setexecfilecon: (%s) %s\n",
83a7c7
 	       path, (xx < 0 ? strerror(errno) : ""));
83a7c7
-    }
83a7c7
 #endif
83a7c7
     /* If selinux is not enforcing, we don't care either */
83a7c7
     if (rc && security_getenforce() < 1)
83a7c7
@@ -167,10 +168,8 @@ static rpmRC selinux_fsm_file_prepare(rpmPlugin plugin, rpmfi fi,
83a7c7
 	if (selabel_lookup_raw(sehandle, &scon, dest, file_mode) == 0) {
83a7c7
 	    int conrc = lsetfilecon(path, scon);
83a7c7
 
83a7c7
-	    if (rpmIsDebug()) {
83a7c7
-		rpmlog(RPMLOG_DEBUG, "lsetfilecon: (%s, %s) %s\n",
83a7c7
+	    rpmlog(loglvl(conrc < 0), "lsetfilecon: (%s, %s) %s\n",
83a7c7
 		       path, scon, (conrc < 0 ? strerror(errno) : ""));
83a7c7
-	    }
83a7c7
 
83a7c7
 	    if (conrc == 0 || (conrc < 0 && errno == EOPNOTSUPP))
83a7c7
 		rc = RPMRC_OK;
83a7c7
-- 
83a7c7
2.20.1
83a7c7